@frame-ui-ng/components 0.5.0-beta.0 → 0.6.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/accordion/src/styles/_vars.css +2 -5
  2. package/accordion/src/styles/accordion.css +44 -30
  3. package/breadcrumb/src/styles/breadcrumb.css +12 -2
  4. package/button/src/styles/button.css +20 -66
  5. package/button-group/src/styles/button-group.css +0 -38
  6. package/calendar/src/styles/_vars.css +4 -0
  7. package/calendar/src/styles/calendar.css +26 -18
  8. package/carousel/src/styles/carousel.css +103 -89
  9. package/checkbox/src/styles/checkbox.css +14 -5
  10. package/collapsible/src/styles/_vars.css +1 -0
  11. package/collapsible/src/styles/collapsible.css +15 -11
  12. package/combobox/src/styles/combobox.css +11 -2
  13. package/confirm-popover/src/styles/confirm-popover.css +0 -1
  14. package/date-picker/src/styles/date-picker.css +15 -10
  15. package/dropdown-menu/src/styles/dropdown-menu-item.css +6 -2
  16. package/fesm2022/frame-ui-ng-components-accordion.mjs +201 -147
  17. package/fesm2022/frame-ui-ng-components-accordion.mjs.map +1 -1
  18. package/fesm2022/frame-ui-ng-components-alert.mjs +2 -2
  19. package/fesm2022/frame-ui-ng-components-alert.mjs.map +1 -1
  20. package/fesm2022/frame-ui-ng-components-breadcrumb.mjs +10 -2
  21. package/fesm2022/frame-ui-ng-components-breadcrumb.mjs.map +1 -1
  22. package/fesm2022/frame-ui-ng-components-button-group.mjs +2 -2
  23. package/fesm2022/frame-ui-ng-components-button-group.mjs.map +1 -1
  24. package/fesm2022/frame-ui-ng-components-button.mjs +2 -2
  25. package/fesm2022/frame-ui-ng-components-button.mjs.map +1 -1
  26. package/fesm2022/frame-ui-ng-components-calendar.mjs +202 -50
  27. package/fesm2022/frame-ui-ng-components-calendar.mjs.map +1 -1
  28. package/fesm2022/frame-ui-ng-components-card.mjs +2 -2
  29. package/fesm2022/frame-ui-ng-components-card.mjs.map +1 -1
  30. package/fesm2022/frame-ui-ng-components-carousel.mjs +2 -2
  31. package/fesm2022/frame-ui-ng-components-carousel.mjs.map +1 -1
  32. package/fesm2022/frame-ui-ng-components-collapsible.mjs +80 -22
  33. package/fesm2022/frame-ui-ng-components-collapsible.mjs.map +1 -1
  34. package/fesm2022/frame-ui-ng-components-combobox.mjs +61 -6
  35. package/fesm2022/frame-ui-ng-components-combobox.mjs.map +1 -1
  36. package/fesm2022/frame-ui-ng-components-command.mjs +2 -2
  37. package/fesm2022/frame-ui-ng-components-command.mjs.map +1 -1
  38. package/fesm2022/frame-ui-ng-components-confirm-popover.mjs +6 -6
  39. package/fesm2022/frame-ui-ng-components-confirm-popover.mjs.map +1 -1
  40. package/fesm2022/frame-ui-ng-components-date-picker.mjs +75 -37
  41. package/fesm2022/frame-ui-ng-components-date-picker.mjs.map +1 -1
  42. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs +2 -2
  43. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs.map +1 -1
  44. package/fesm2022/frame-ui-ng-components-empty.mjs +2 -2
  45. package/fesm2022/frame-ui-ng-components-empty.mjs.map +1 -1
  46. package/fesm2022/frame-ui-ng-components-hover-card.mjs +2 -2
  47. package/fesm2022/frame-ui-ng-components-hover-card.mjs.map +1 -1
  48. package/fesm2022/frame-ui-ng-components-input-otp.mjs +2 -2
  49. package/fesm2022/frame-ui-ng-components-input-otp.mjs.map +1 -1
  50. package/fesm2022/frame-ui-ng-components-input.mjs +2 -2
  51. package/fesm2022/frame-ui-ng-components-input.mjs.map +1 -1
  52. package/fesm2022/frame-ui-ng-components-item.mjs +2 -2
  53. package/fesm2022/frame-ui-ng-components-item.mjs.map +1 -1
  54. package/fesm2022/frame-ui-ng-components-menubar.mjs +2 -2
  55. package/fesm2022/frame-ui-ng-components-menubar.mjs.map +1 -1
  56. package/fesm2022/frame-ui-ng-components-modal.mjs +10 -4
  57. package/fesm2022/frame-ui-ng-components-modal.mjs.map +1 -1
  58. package/fesm2022/frame-ui-ng-components-navigation-menu.mjs +4 -4
  59. package/fesm2022/frame-ui-ng-components-navigation-menu.mjs.map +1 -1
  60. package/fesm2022/frame-ui-ng-components-pagination.mjs +20 -4
  61. package/fesm2022/frame-ui-ng-components-pagination.mjs.map +1 -1
  62. package/fesm2022/frame-ui-ng-components-popover.mjs +2 -2
  63. package/fesm2022/frame-ui-ng-components-popover.mjs.map +1 -1
  64. package/fesm2022/frame-ui-ng-components-radio-group.mjs +2 -2
  65. package/fesm2022/frame-ui-ng-components-radio-group.mjs.map +1 -1
  66. package/fesm2022/frame-ui-ng-components-resizable.mjs +2 -2
  67. package/fesm2022/frame-ui-ng-components-resizable.mjs.map +1 -1
  68. package/fesm2022/frame-ui-ng-components-sheet.mjs +90 -65
  69. package/fesm2022/frame-ui-ng-components-sheet.mjs.map +1 -1
  70. package/fesm2022/frame-ui-ng-components-table.mjs +6 -5
  71. package/fesm2022/frame-ui-ng-components-table.mjs.map +1 -1
  72. package/fesm2022/frame-ui-ng-components-tabs.mjs +2 -2
  73. package/fesm2022/frame-ui-ng-components-tabs.mjs.map +1 -1
  74. package/fesm2022/frame-ui-ng-components-toast.mjs +6 -6
  75. package/fesm2022/frame-ui-ng-components-toast.mjs.map +1 -1
  76. package/fesm2022/frame-ui-ng-components-tooltip.mjs +6 -6
  77. package/fesm2022/frame-ui-ng-components-tooltip.mjs.map +1 -1
  78. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs +4 -4
  79. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs.map +1 -1
  80. package/fesm2022/frame-ui-ng-components.mjs +850 -420
  81. package/fesm2022/frame-ui-ng-components.mjs.map +1 -1
  82. package/input/src/styles/input-group.css +0 -7
  83. package/input/src/styles/input.css +0 -23
  84. package/modal/src/styles/modal.css +5 -19
  85. package/package.json +6 -6
  86. package/pagination/src/styles/pagination.css +6 -2
  87. package/popover/src/styles/popover.css +3 -3
  88. package/select/src/styles/select-item.css +67 -68
  89. package/sheet/src/styles/sheet.css +32 -19
  90. package/src/styles/components.css +2 -2
  91. package/src/styles/corner-handles.css +217 -0
  92. package/styles/components.css +2 -2
  93. package/styles/corner-handles.css +217 -0
  94. package/styles.css +2 -2
  95. package/toggle/src/styles/toggle.css +6 -1
  96. package/tooltip/src/styles/_vars.css +1 -1
  97. package/tooltip/src/styles/tooltip.css +13 -14
  98. package/types/frame-ui-ng-components-accordion.d.ts +69 -61
  99. package/types/frame-ui-ng-components-calendar.d.ts +7 -7
  100. package/types/frame-ui-ng-components-collapsible.d.ts +12 -4
  101. package/types/frame-ui-ng-components-combobox.d.ts +8 -0
  102. package/types/frame-ui-ng-components-date-picker.d.ts +2 -4
  103. package/types/frame-ui-ng-components-sheet.d.ts +6 -2
  104. package/types/frame-ui-ng-components.d.ts +172 -135
  105. package/src/styles/blueprint.css +0 -707
  106. package/styles/blueprint.css +0 -707
@@ -1,200 +1,253 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, ElementRef, Directive, input, booleanAttribute, computed, output, linkedSignal, signal, Component, contentChild, forwardRef, ChangeDetectionStrategy, DestroyRef, TemplateRef, viewChild, model, afterNextRender, Renderer2, ViewContainerRef, Injectable, PLATFORM_ID, numberAttribute, Injector } from '@angular/core';
3
- import * as i1 from '@frame-ui-ng/components/spinner';
4
- import { FrSpinner } from '@frame-ui-ng/components/spinner';
2
+ import { inject, TemplateRef, Directive, InjectionToken, DestroyRef, signal, contentChild, viewChild, input, booleanAttribute, computed, effect, Component, output, ElementRef, forwardRef, ChangeDetectionStrategy, linkedSignal, model, afterNextRender, Renderer2, ViewContainerRef, Injectable, PLATFORM_ID, numberAttribute, Injector } from '@angular/core';
5
3
  import { NgTemplateOutlet, isPlatformBrowser, NgClass, NgComponentOutlet, DOCUMENT } from '@angular/common';
4
+ import * as i1 from '@angular/cdk/accordion';
5
+ import { CdkAccordionItem, CdkAccordion } from '@angular/cdk/accordion';
6
+ import * as i1$1 from '@frame-ui-ng/components/spinner';
7
+ import { FrSpinner } from '@frame-ui-ng/components/spinner';
6
8
  import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
9
+ import * as i1$2 from '@frame-ui-ng/components/select';
10
+ import { FrSelectModule } from '@frame-ui-ng/components/select';
7
11
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
12
  import { fromEvent } from 'rxjs';
9
- import * as i1$1 from '@frame-ui-ng/components/button';
13
+ import * as i1$3 from '@frame-ui-ng/components/button';
10
14
  import { FrButton as FrButton$1, FrButtonLabel as FrButtonLabel$1 } from '@frame-ui-ng/components/button';
11
15
  import { CdkOverlayOrigin, CdkConnectedOverlay, Overlay } from '@angular/cdk/overlay';
12
16
  import { FrControlValueAccessor as FrControlValueAccessor$1, provideDsValueAccessor as provideDsValueAccessor$1 } from '@frame-ui-ng/components/forms';
13
17
  import { Dialog, DialogRef, DIALOG_DATA } from '@angular/cdk/dialog';
14
18
  import { ComponentPortal } from '@angular/cdk/portal';
15
- import * as i1$2 from '@angular/cdk/menu';
19
+ import * as i1$4 from '@angular/cdk/menu';
16
20
  import { CdkMenu, CdkTargetMenuAim, CdkMenuItem, CdkMenuItemCheckbox, CdkMenuGroup, CdkMenuItemRadio, CdkMenuTrigger, CdkContextMenuTrigger } from '@angular/cdk/menu';
17
- import * as i1$3 from '@frame-ui-ng/components/dropdown-menu';
21
+ import * as i1$5 from '@frame-ui-ng/components/dropdown-menu';
18
22
  import { buildConnectedPositions as buildConnectedPositions$1, FR_DROPDOWN_MENU_CONTENT as FR_DROPDOWN_MENU_CONTENT$1, FrDropdownMenuTree as FrDropdownMenuTree$1, FR_DROPDOWN_MENU_PARENT as FR_DROPDOWN_MENU_PARENT$1, defaultPositions as defaultPositions$1, FrDropdownMenuTrigger as FrDropdownMenuTrigger$1, FrDropdownMenuContent as FrDropdownMenuContent$1, FrDropdownMenuPanel as FrDropdownMenuPanel$1, FrDropdownMenuItem as FrDropdownMenuItem$1, FrDropdownMenuCheckboxItem as FrDropdownMenuCheckboxItem$1, FrDropdownMenuRadioGroup as FrDropdownMenuRadioGroup$1, FrDropdownMenuRadioItem as FrDropdownMenuRadioItem$1, FrDropdownMenuLabel as FrDropdownMenuLabel$1, FrDropdownMenuSeparator as FrDropdownMenuSeparator$1, FrDropdownMenuShortcut as FrDropdownMenuShortcut$1, FrDropdownMenuItemIndicator as FrDropdownMenuItemIndicator$1, FrDropdownMenuSub as FrDropdownMenuSub$1, FrDropdownMenuSubTrigger as FrDropdownMenuSubTrigger$1, FrDropdownMenu as FrDropdownMenu$1 } from '@frame-ui-ng/components/dropdown-menu';
19
23
  import { FrCalendar as FrCalendar$1 } from '@frame-ui-ng/components/calendar';
20
24
  import { FrInput as FrInput$1 } from '@frame-ui-ng/components/input';
21
25
  import { clampNumber, valueToCssSize, coerceNumber } from '@frame-ui-ng/components/utils';
22
26
 
27
+ /** Content template for accordion items. */
28
+ class FrAccordionContent {
29
+ templateRef = inject((TemplateRef));
30
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
31
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrAccordionContent, isStandalone: true, selector: "ng-template[frameAccordionContent]", ngImport: i0 });
32
+ }
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionContent, decorators: [{
34
+ type: Directive,
35
+ args: [{
36
+ selector: 'ng-template[frameAccordionContent]',
37
+ standalone: true,
38
+ }]
39
+ }] });
40
+
23
41
  const ACCORDION_ROOT = new InjectionToken('FrAccordion');
24
42
  const ACCORDION_ITEM = new InjectionToken('FrAccordionItem');
25
43
 
26
- /** Content slot for accordion. */
27
- class FrAccordionContent {
28
- host = inject(ElementRef);
29
- item = inject(ACCORDION_ITEM);
30
- initialized = false;
31
- lastOpen = false;
32
- rafIds = [];
33
- ngAfterViewInit() {
34
- this.lastOpen = this.item.open();
35
- this.applyStaticState(this.lastOpen);
36
- this.initialized = true;
44
+ /** Accordion item powered by Angular CDK accordion item state. */
45
+ class FrAccordionItem {
46
+ root = inject(ACCORDION_ROOT);
47
+ cdkItem = inject(CdkAccordionItem, { self: true });
48
+ destroyRef = inject(DestroyRef);
49
+ expanded = signal(false, ...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
50
+ frameId = null;
51
+ syncingDefaultState = false;
52
+ content = contentChild(FrAccordionContent, ...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
53
+ contentPanel = viewChild('contentPanel', ...(ngDevMode ? [{ debugName: "contentPanel" }] : /* istanbul ignore next */ []));
54
+ value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
55
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
56
+ open = computed(() => this.expanded(), ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
57
+ contentHeight = signal('0px', ...(ngDevMode ? [{ debugName: "contentHeight" }] : /* istanbul ignore next */ []));
58
+ triggerId = computed(() => `frame-accordion-trigger-${this.cdkItem.id}`, ...(ngDevMode ? [{ debugName: "triggerId" }] : /* istanbul ignore next */ []));
59
+ contentId = computed(() => `frame-accordion-content-${this.cdkItem.id}`, ...(ngDevMode ? [{ debugName: "contentId" }] : /* istanbul ignore next */ []));
60
+ constructor() {
61
+ const expandedSubscription = this.cdkItem.expandedChange.subscribe((expanded) => {
62
+ this.setExpanded(expanded, !this.syncingDefaultState);
63
+ if (!this.syncingDefaultState) {
64
+ this.root.itemExpansionChanged(this.value(), expanded);
65
+ }
66
+ });
67
+ this.destroyRef.onDestroy(() => {
68
+ expandedSubscription.unsubscribe();
69
+ this.cancelFrame();
70
+ });
71
+ effect(() => {
72
+ this.cdkItem.disabled = this.disabled();
73
+ });
74
+ effect(() => {
75
+ this.syncingDefaultState = true;
76
+ const shouldBeExpanded = this.root.isDefaultItemOpen(this.value());
77
+ if (this.cdkItem.expanded !== shouldBeExpanded) {
78
+ this.cdkItem.expanded = shouldBeExpanded;
79
+ this.setExpanded(shouldBeExpanded, false);
80
+ }
81
+ this.syncingDefaultState = false;
82
+ });
37
83
  }
38
- ngDoCheck() {
39
- const open = this.item.open();
40
- if (!this.initialized || open === this.lastOpen) {
84
+ toggle() {
85
+ if (this.disabled()) {
41
86
  return;
42
87
  }
43
- this.cancelAnimationFrame();
44
- this.lastOpen = open;
45
- this.animate(open);
46
- }
47
- ngOnDestroy() {
48
- this.cancelAnimationFrame();
88
+ if (this.open() && this.root.type() === 'single' && !this.root.collapsible()) {
89
+ return;
90
+ }
91
+ this.root.syncCdkMode();
92
+ this.cdkItem.toggle();
49
93
  }
50
- onTransitionEnd(event) {
51
- if (event.target !== this.host.nativeElement || event.propertyName !== 'height') {
94
+ onContentTransitionEnd(event) {
95
+ if (event.target !== this.contentPanel()?.nativeElement || event.propertyName !== 'height') {
52
96
  return;
53
97
  }
54
- if (!this.item.open()) {
55
- this.host.nativeElement.style.visibility = 'hidden';
98
+ if (this.open()) {
99
+ this.contentHeight.set('auto');
56
100
  return;
57
101
  }
58
- this.host.nativeElement.style.height = 'auto';
59
102
  }
60
- animate(open) {
61
- const element = this.host.nativeElement;
62
- const currentHeight = element.getBoundingClientRect().height;
63
- const contentHeight = this.measureContentHeight();
64
- if (open) {
65
- element.style.visibility = 'visible';
66
- element.style.height = `${currentHeight}px`;
67
- if (currentHeight === 0) {
68
- element.style.opacity = '0';
69
- }
70
- void element.offsetHeight;
71
- this.requestAnimationFrame(() => {
72
- element.style.height = `${contentHeight}px`;
73
- element.style.opacity = '1';
74
- });
103
+ setExpanded(expanded, animate) {
104
+ this.expanded.set(expanded);
105
+ if (expanded) {
106
+ this.openContent(animate);
75
107
  return;
76
108
  }
77
- element.style.height = `${currentHeight || contentHeight}px`;
78
- element.style.opacity = '1';
79
- void element.offsetHeight;
80
- this.requestAnimationFrame(() => {
81
- element.style.height = '0px';
82
- element.style.opacity = '0';
83
- });
84
- }
85
- applyStaticState(open) {
86
- const element = this.host.nativeElement;
87
- element.style.height = open ? 'auto' : '0px';
88
- element.style.opacity = open ? '1' : '0';
89
- element.style.visibility = open ? 'visible' : 'hidden';
90
- }
91
- measureContentHeight() {
92
- return this.host.nativeElement.scrollHeight;
109
+ this.closeContent(animate);
93
110
  }
94
- cancelAnimationFrame() {
95
- for (const rafId of this.rafIds) {
96
- cancelAnimationFrame(rafId);
111
+ openContent(animate) {
112
+ this.cancelFrame();
113
+ if (!animate) {
114
+ this.contentHeight.set('auto');
115
+ return;
97
116
  }
98
- this.rafIds = [];
117
+ this.contentHeight.set('0px');
118
+ this.scheduleFrame(() => {
119
+ const panel = this.contentPanel()?.nativeElement;
120
+ if (!panel || !this.open()) {
121
+ return;
122
+ }
123
+ this.contentHeight.set(`${panel.scrollHeight}px`);
124
+ });
99
125
  }
100
- requestAnimationFrame(callback) {
101
- const rafId = requestAnimationFrame((time) => {
102
- this.rafIds = this.rafIds.filter((id) => id !== rafId);
103
- callback(time);
126
+ closeContent(animate) {
127
+ this.cancelFrame();
128
+ const panel = this.contentPanel()?.nativeElement;
129
+ if (!animate || !panel) {
130
+ this.contentHeight.set('0px');
131
+ return;
132
+ }
133
+ this.contentHeight.set(`${panel.getBoundingClientRect().height}px`);
134
+ this.scheduleFrame(() => {
135
+ if (this.open()) {
136
+ return;
137
+ }
138
+ this.contentHeight.set('0px');
104
139
  });
105
- this.rafIds.push(rafId);
106
140
  }
107
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
108
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrAccordionContent, isStandalone: true, selector: "[frAccordionContent]", host: { attributes: { "role": "region" }, listeners: { "transitionend": "onTransitionEnd($event)" }, properties: { "attr.aria-hidden": "item.open() ? \"false\" : \"true\"", "attr.aria-labelledby": "item.triggerId()", "attr.data-state": "item.open() ? \"open\" : \"closed\"", "attr.id": "item.contentId()" }, classAttribute: "frame-accordion__content" }, ngImport: i0 });
109
- }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionContent, decorators: [{
111
- type: Directive,
112
- args: [{
113
- selector: '[frAccordionContent]',
114
- standalone: true,
115
- host: {
116
- class: 'frame-accordion__content',
117
- '[attr.aria-hidden]': 'item.open() ? "false" : "true"',
118
- '[attr.aria-labelledby]': 'item.triggerId()',
119
- '[attr.data-state]': 'item.open() ? "open" : "closed"',
120
- '[attr.id]': 'item.contentId()',
121
- '(transitionend)': 'onTransitionEnd($event)',
122
- 'role': 'region',
123
- },
124
- }]
125
- }] });
126
-
127
- let accordionItemId = 0;
128
- /** Item slot for accordion. */
129
- class FrAccordionItem {
130
- root = inject(ACCORDION_ROOT);
131
- itemId = ++accordionItemId;
132
- value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
133
- disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
134
- open = computed(() => this.root.isItemOpen(this.value()), ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
135
- triggerId = computed(() => `frame-accordion-trigger-${this.itemId}`, ...(ngDevMode ? [{ debugName: "triggerId" }] : /* istanbul ignore next */ []));
136
- contentId = computed(() => `frame-accordion-content-${this.itemId}`, ...(ngDevMode ? [{ debugName: "contentId" }] : /* istanbul ignore next */ []));
137
- toggle() {
138
- if (this.disabled()) {
141
+ scheduleFrame(callback) {
142
+ if (typeof globalThis.requestAnimationFrame === 'function') {
143
+ this.frameId = globalThis.requestAnimationFrame(callback);
144
+ return;
145
+ }
146
+ callback();
147
+ }
148
+ cancelFrame() {
149
+ if (this.frameId == null || typeof globalThis.cancelAnimationFrame !== 'function') {
150
+ this.frameId = null;
139
151
  return;
140
152
  }
141
- this.root.toggleItem(this.value());
153
+ globalThis.cancelAnimationFrame(this.frameId);
154
+ this.frameId = null;
142
155
  }
143
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
144
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrAccordionItem, isStandalone: true, selector: "[frAccordionItem]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-state": "open() ? \"open\" : \"closed\"" }, classAttribute: "frame-accordion__item" }, providers: [{ provide: ACCORDION_ITEM, useExisting: FrAccordionItem }], exportAs: ["frAccordionItem"], ngImport: i0 });
156
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
157
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.16", type: FrAccordionItem, isStandalone: true, selector: "frame-accordion-item", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-state": "open() ? \"open\" : \"closed\"" }, classAttribute: "frame-accordion__item" }, providers: [{ provide: ACCORDION_ITEM, useExisting: FrAccordionItem }], queries: [{ propertyName: "content", first: true, predicate: FrAccordionContent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "contentPanel", first: true, predicate: ["contentPanel"], descendants: true, isSignal: true }], exportAs: ["frameAccordionItem"], hostDirectives: [{ directive: i1.CdkAccordionItem }], ngImport: i0, template: `
158
+ <ng-content select="button[frameAccordionTrigger]" />
159
+
160
+ <div
161
+ #contentPanel
162
+ class="frame-accordion__content"
163
+ [attr.aria-hidden]="open() ? null : 'true'"
164
+ [attr.aria-labelledby]="triggerId()"
165
+ [attr.id]="contentId()"
166
+ [attr.data-state]="open() ? 'open' : 'closed'"
167
+ [style.height]="contentHeight()"
168
+ (transitionend)="onContentTransitionEnd($event)"
169
+ role="region"
170
+ >
171
+ <div class="frame-accordion__content-inner">
172
+ <ng-container [ngTemplateOutlet]="content()?.templateRef ?? null" />
173
+ </div>
174
+ </div>
175
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
145
176
  }
146
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionItem, decorators: [{
147
- type: Directive,
178
+ type: Component,
148
179
  args: [{
149
- selector: '[frAccordionItem]',
150
- exportAs: 'frAccordionItem',
180
+ selector: 'frame-accordion-item',
181
+ exportAs: 'frameAccordionItem',
151
182
  standalone: true,
183
+ imports: [NgTemplateOutlet],
184
+ hostDirectives: [CdkAccordionItem],
152
185
  providers: [{ provide: ACCORDION_ITEM, useExisting: FrAccordionItem }],
153
186
  host: {
154
187
  class: 'frame-accordion__item',
155
188
  '[attr.data-disabled]': 'disabled() ? "" : null',
156
189
  '[attr.data-state]': 'open() ? "open" : "closed"',
157
190
  },
191
+ template: `
192
+ <ng-content select="button[frameAccordionTrigger]" />
193
+
194
+ <div
195
+ #contentPanel
196
+ class="frame-accordion__content"
197
+ [attr.aria-hidden]="open() ? null : 'true'"
198
+ [attr.aria-labelledby]="triggerId()"
199
+ [attr.id]="contentId()"
200
+ [attr.data-state]="open() ? 'open' : 'closed'"
201
+ [style.height]="contentHeight()"
202
+ (transitionend)="onContentTransitionEnd($event)"
203
+ role="region"
204
+ >
205
+ <div class="frame-accordion__content-inner">
206
+ <ng-container [ngTemplateOutlet]="content()?.templateRef ?? null" />
207
+ </div>
208
+ </div>
209
+ `,
158
210
  }]
159
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
211
+ }], ctorParameters: () => [], propDecorators: { content: [{ type: i0.ContentChild, args: [i0.forwardRef(() => FrAccordionContent), { isSignal: true }] }], contentPanel: [{ type: i0.ViewChild, args: ['contentPanel', { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
160
212
 
161
- /** Accordion component primitive. */
213
+ /** Accordion root powered by Angular CDK accordion state management. */
162
214
  class FrAccordion {
215
+ cdkAccordion = inject(CdkAccordion, { self: true });
163
216
  type = input('single', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
164
- border = input(true, { ...(ngDevMode ? { debugName: "border" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
217
+ border = input(false, { ...(ngDevMode ? { debugName: "border" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
165
218
  collapsible = input(false, { ...(ngDevMode ? { debugName: "collapsible" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
166
219
  defaultValue = input(null, ...(ngDevMode ? [{ debugName: "defaultValue" }] : /* istanbul ignore next */ []));
167
220
  valueChange = output();
168
- openItems = linkedSignal(() => this.normalizeValues(this.defaultValue(), this.type()), ...(ngDevMode ? [{ debugName: "openItems" }] : /* istanbul ignore next */ []));
169
- isItemOpen(value) {
170
- return this.openItems().includes(value);
171
- }
172
- toggleItem(value) {
173
- const current = this.openItems();
174
- const isOpen = current.includes(value);
175
- if (this.type() === 'multiple') {
176
- const next = isOpen
177
- ? current.filter((item) => item !== value)
178
- : [...current, value];
179
- this.commit(next);
180
- return;
181
- }
182
- if (isOpen) {
183
- if (!this.collapsible()) {
184
- return;
185
- }
186
- this.commit([]);
187
- return;
188
- }
189
- this.commit([value]);
221
+ defaultOpenValues = computed(() => this.normalizeValues(this.defaultValue(), this.type()), ...(ngDevMode ? [{ debugName: "defaultOpenValues" }] : /* istanbul ignore next */ []));
222
+ currentOpenValues = signal([], ...(ngDevMode ? [{ debugName: "currentOpenValues" }] : /* istanbul ignore next */ []));
223
+ openValues = computed(() => new Set(this.currentOpenValues()), ...(ngDevMode ? [{ debugName: "openValues" }] : /* istanbul ignore next */ []));
224
+ constructor() {
225
+ effect(() => {
226
+ this.cdkAccordion.multi = this.type() === 'multiple';
227
+ this.currentOpenValues.set(this.defaultOpenValues());
228
+ });
190
229
  }
191
- commit(next) {
192
- this.openItems.set(next);
193
- if (this.type() === 'multiple') {
194
- this.valueChange.emit(next);
195
- return;
196
- }
197
- this.valueChange.emit(next[0] ?? null);
230
+ isDefaultItemOpen(value) {
231
+ return this.currentOpenValues().includes(value);
232
+ }
233
+ itemExpansionChanged(value, expanded) {
234
+ const current = this.openValues();
235
+ const next = expanded
236
+ ? this.type() === 'multiple'
237
+ ? [...new Set([...current, value])]
238
+ : [value]
239
+ : [...current].filter((item) => item !== value);
240
+ this.currentOpenValues.set(next);
241
+ this.valueChange.emit(this.type() === 'multiple' ? next : (next[0] ?? null));
242
+ }
243
+ openAll() {
244
+ this.cdkAccordion.openAll();
245
+ }
246
+ closeAll() {
247
+ this.cdkAccordion.closeAll();
248
+ }
249
+ syncCdkMode() {
250
+ this.cdkAccordion.multi = this.type() === 'multiple';
198
251
  }
199
252
  normalizeValues(value, type) {
200
253
  if (Array.isArray(value)) {
@@ -205,34 +258,36 @@ class FrAccordion {
205
258
  }
206
259
  return [value];
207
260
  }
208
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordion, deps: [], target: i0.ɵɵFactoryTarget.Directive });
209
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrAccordion, isStandalone: true, selector: "[frAccordion]", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.data-border": "border() ? \"true\" : \"false\"", "attr.data-type": "type()" }, classAttribute: "frame-accordion" }, providers: [{ provide: ACCORDION_ROOT, useExisting: FrAccordion }], exportAs: ["frAccordion"], ngImport: i0 });
261
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordion, deps: [], target: i0.ɵɵFactoryTarget.Component });
262
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.16", type: FrAccordion, isStandalone: true, selector: "frame-accordion", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.data-border": "border() ? \"true\" : \"false\"", "attr.data-type": "type()" }, classAttribute: "frame-accordion" }, providers: [{ provide: ACCORDION_ROOT, useExisting: FrAccordion }], exportAs: ["frameAccordion"], hostDirectives: [{ directive: i1.CdkAccordion }], ngImport: i0, template: `<ng-content />`, isInline: true });
210
263
  }
211
264
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordion, decorators: [{
212
- type: Directive,
265
+ type: Component,
213
266
  args: [{
214
- selector: '[frAccordion]',
215
- exportAs: 'frAccordion',
267
+ selector: 'frame-accordion',
268
+ exportAs: 'frameAccordion',
216
269
  standalone: true,
270
+ hostDirectives: [CdkAccordion],
217
271
  providers: [{ provide: ACCORDION_ROOT, useExisting: FrAccordion }],
218
272
  host: {
219
273
  class: 'frame-accordion',
220
274
  '[attr.data-border]': 'border() ? "true" : "false"',
221
275
  '[attr.data-type]': 'type()',
222
276
  },
277
+ template: `<ng-content />`,
223
278
  }]
224
- }], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], border: [{ type: i0.Input, args: [{ isSignal: true, alias: "border", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
279
+ }], ctorParameters: () => [], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], border: [{ type: i0.Input, args: [{ isSignal: true, alias: "border", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }] } });
225
280
 
226
- /** Trigger control for accordion. */
281
+ /** Trigger control for accordion items. */
227
282
  class FrAccordionTrigger {
228
283
  item = inject(ACCORDION_ITEM);
229
284
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
230
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrAccordionTrigger, isStandalone: true, selector: "button[frAccordionTrigger]", host: { attributes: { "type": "button" }, listeners: { "click": "item.toggle()" }, properties: { "attr.aria-controls": "item.contentId()", "attr.aria-expanded": "item.open() ? \"true\" : \"false\"", "attr.data-disabled": "item.disabled() ? \"\" : null", "attr.data-state": "item.open() ? \"open\" : \"closed\"", "attr.disabled": "item.disabled() ? \"\" : null", "attr.id": "item.triggerId()" }, classAttribute: "frame-accordion__trigger" }, ngImport: i0 });
285
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrAccordionTrigger, isStandalone: true, selector: "button[frameAccordionTrigger]", host: { attributes: { "type": "button" }, listeners: { "click": "item.toggle()" }, properties: { "attr.aria-controls": "item.contentId()", "attr.aria-expanded": "item.open() ? \"true\" : \"false\"", "attr.data-disabled": "item.disabled() ? \"\" : null", "attr.data-state": "item.open() ? \"open\" : \"closed\"", "attr.disabled": "item.disabled() ? \"\" : null", "attr.id": "item.triggerId()" }, classAttribute: "frame-accordion__trigger" }, ngImport: i0 });
231
286
  }
232
287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionTrigger, decorators: [{
233
288
  type: Directive,
234
289
  args: [{
235
- selector: 'button[frAccordionTrigger]',
290
+ selector: 'button[frameAccordionTrigger]',
236
291
  standalone: true,
237
292
  host: {
238
293
  class: 'frame-accordion__trigger',
@@ -247,15 +302,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
247
302
  },
248
303
  }]
249
304
  }] });
250
- /** Icon slot for accordion. */
305
+ /** Optional icon slot for accordion triggers. */
251
306
  class FrAccordionIcon {
252
307
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
253
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrAccordionIcon, isStandalone: true, selector: "[frAccordionIcon]", host: { attributes: { "aria-hidden": "true" }, classAttribute: "frame-accordion__icon" }, ngImport: i0 });
308
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrAccordionIcon, isStandalone: true, selector: "[frameAccordionIcon]", host: { attributes: { "aria-hidden": "true" }, classAttribute: "frame-accordion__icon" }, ngImport: i0 });
254
309
  }
255
310
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAccordionIcon, decorators: [{
256
311
  type: Directive,
257
312
  args: [{
258
- selector: '[frAccordionIcon]',
313
+ selector: '[frameAccordionIcon]',
259
314
  standalone: true,
260
315
  host: {
261
316
  class: 'frame-accordion__icon',
@@ -277,14 +332,14 @@ const FR_ALERT_VARIANTS = [
277
332
  class FrAlert {
278
333
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
279
334
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAlert, deps: [], target: i0.ɵɵFactoryTarget.Directive });
280
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrAlert, isStandalone: true, selector: "[frAlert]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "alert" }, properties: { "attr.data-variant": "variant()" }, classAttribute: "frame-alert" }, ngImport: i0 });
335
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrAlert, isStandalone: true, selector: "[frAlert]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "alert" }, properties: { "attr.data-variant": "variant()" }, classAttribute: "frame-alert frame-corner-handles" }, ngImport: i0 });
281
336
  }
282
337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrAlert, decorators: [{
283
338
  type: Directive,
284
339
  args: [{
285
340
  selector: '[frAlert]',
286
341
  host: {
287
- class: 'frame-alert',
342
+ class: 'frame-alert frame-corner-handles',
288
343
  '[attr.data-variant]': 'variant()',
289
344
  'role': 'alert',
290
345
  },
@@ -549,7 +604,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
549
604
  class FrBadgeSpinner {
550
605
  position = input('inline-start', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
551
606
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBadgeSpinner, deps: [], target: i0.ɵɵFactoryTarget.Directive });
552
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrBadgeSpinner, isStandalone: true, selector: "[frBadgeSpinner]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-hidden": "true" }, properties: { "attr.data-icon": "position()", "attr.role": "null", "attr.aria-label": "null" }, classAttribute: "frame-badge__spinner" }, hostDirectives: [{ directive: i1.FrSpinner, inputs: ["sizeValue", "sizeValue", "decorative", "decorative", "duration", "duration", "label", "label", "size", "size", "stroke", "stroke"] }], ngImport: i0 });
607
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrBadgeSpinner, isStandalone: true, selector: "[frBadgeSpinner]", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "aria-hidden": "true" }, properties: { "attr.data-icon": "position()", "attr.role": "null", "attr.aria-label": "null" }, classAttribute: "frame-badge__spinner" }, hostDirectives: [{ directive: i1$1.FrSpinner, inputs: ["sizeValue", "sizeValue", "decorative", "decorative", "duration", "duration", "label", "label", "size", "size", "stroke", "stroke"] }], ngImport: i0 });
553
608
  }
554
609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBadgeSpinner, decorators: [{
555
610
  type: Directive,
@@ -665,7 +720,11 @@ class FrBreadcrumbEllipsis {
665
720
  label = input('More pages', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
666
721
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrBreadcrumbEllipsis, deps: [], target: i0.ɵɵFactoryTarget.Component });
667
722
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.16", type: FrBreadcrumbEllipsis, isStandalone: true, selector: "[frBreadcrumbEllipsis], frame-breadcrumb-ellipsis", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, classAttribute: "frame-breadcrumb__ellipsis" }, ngImport: i0, template: `
668
- <span aria-hidden="true">...</span>
723
+ <svg aria-hidden="true" viewBox="0 0 24 24" fill="currentColor">
724
+ <circle cx="5" cy="12" r="1.75"></circle>
725
+ <circle cx="12" cy="12" r="1.75"></circle>
726
+ <circle cx="19" cy="12" r="1.75"></circle>
727
+ </svg>
669
728
  <span class="frame-breadcrumb__sr-only">{{ label() }}</span>
670
729
  `, isInline: true });
671
730
  }
@@ -678,7 +737,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
678
737
  'role': 'presentation',
679
738
  },
680
739
  template: `
681
- <span aria-hidden="true">...</span>
740
+ <svg aria-hidden="true" viewBox="0 0 24 24" fill="currentColor">
741
+ <circle cx="5" cy="12" r="1.75"></circle>
742
+ <circle cx="12" cy="12" r="1.75"></circle>
743
+ <circle cx="19" cy="12" r="1.75"></circle>
744
+ </svg>
682
745
  <span class="frame-breadcrumb__sr-only">{{ label() }}</span>
683
746
  `,
684
747
  }]
@@ -703,14 +766,14 @@ class FrButton {
703
766
  hasCustomLoadingIndicator = computed(() => !!this.loadingIndicator() || !!this.spinnerIndicator(), ...(ngDevMode ? [{ debugName: "hasCustomLoadingIndicator" }] : /* istanbul ignore next */ []));
704
767
  isUnavailable = computed(() => this.disabled() || this.loading(), ...(ngDevMode ? [{ debugName: "isUnavailable" }] : /* istanbul ignore next */ []));
705
768
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrButton, deps: [], target: i0.ɵɵFactoryTarget.Directive });
706
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: FrButton, isStandalone: true, selector: "a[frButton], button[frButton]", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingDisplay: { classPropertyName: "loadingDisplay", publicName: "loadingDisplay", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-appearance": "appearance()", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-has-custom-loading": "hasCustomLoadingIndicator() ? \"\" : null", "attr.data-loading": "loading() ? \"\" : null", "attr.data-loading-display": "loadingDisplay()", "attr.data-size": "size()", "attr.aria-busy": "loading() ? \"true\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.disabled": "isUnavailable() ? \"\" : null", "class.frame-button-disabled": "isUnavailable()", "class.frame-button-loading": "loading()" }, classAttribute: "frame-button" }, queries: [{ propertyName: "loadingIndicator", first: true, predicate: FrButtonLoading, descendants: true, isSignal: true }, { propertyName: "spinnerIndicator", first: true, predicate: FrSpinner, descendants: true, isSignal: true }], ngImport: i0 });
769
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: FrButton, isStandalone: true, selector: "a[frButton], button[frButton]", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingDisplay: { classPropertyName: "loadingDisplay", publicName: "loadingDisplay", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-appearance": "appearance()", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-has-custom-loading": "hasCustomLoadingIndicator() ? \"\" : null", "attr.data-loading": "loading() ? \"\" : null", "attr.data-loading-display": "loadingDisplay()", "attr.data-size": "size()", "attr.aria-busy": "loading() ? \"true\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.disabled": "isUnavailable() ? \"\" : null", "class.frame-button-disabled": "isUnavailable()", "class.frame-button-loading": "loading()" }, classAttribute: "frame-button frame-corner-handles" }, queries: [{ propertyName: "loadingIndicator", first: true, predicate: FrButtonLoading, descendants: true, isSignal: true }, { propertyName: "spinnerIndicator", first: true, predicate: FrSpinner, descendants: true, isSignal: true }], ngImport: i0 });
707
770
  }
708
771
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrButton, decorators: [{
709
772
  type: Directive,
710
773
  args: [{
711
774
  selector: 'a[frButton], button[frButton]',
712
775
  host: {
713
- class: 'frame-button',
776
+ class: 'frame-button frame-corner-handles',
714
777
  '[attr.data-appearance]': 'appearance()',
715
778
  '[attr.data-disabled]': 'disabled() ? "" : null',
716
779
  '[attr.data-has-custom-loading]': 'hasCustomLoadingIndicator() ? "" : null',
@@ -798,14 +861,14 @@ const FR_BUTTON_GROUP_ORIENTATIONS = ['horizontal', 'vertical'];
798
861
  class FrButtonGroup {
799
862
  orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
800
863
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrButtonGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
801
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrButtonGroup, isStandalone: true, selector: "[frButtonGroup], frame-button-group", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.data-orientation": "orientation()" }, classAttribute: "frame-button-group" }, ngImport: i0 });
864
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrButtonGroup, isStandalone: true, selector: "[frButtonGroup], frame-button-group", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group" }, properties: { "attr.data-orientation": "orientation()" }, classAttribute: "frame-button-group frame-corner-handles" }, ngImport: i0 });
802
865
  }
803
866
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrButtonGroup, decorators: [{
804
867
  type: Directive,
805
868
  args: [{
806
869
  selector: '[frButtonGroup], frame-button-group',
807
870
  host: {
808
- class: 'frame-button-group',
871
+ class: 'frame-button-group frame-corner-handles',
809
872
  '[attr.data-orientation]': 'orientation()',
810
873
  role: 'group',
811
874
  },
@@ -837,8 +900,6 @@ class FrCalendar {
837
900
  cellTemplate = input(null, ...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
838
901
  previousMonthTemplate = input(null, ...(ngDevMode ? [{ debugName: "previousMonthTemplate" }] : /* istanbul ignore next */ []));
839
902
  nextMonthTemplate = input(null, ...(ngDevMode ? [{ debugName: "nextMonthTemplate" }] : /* istanbul ignore next */ []));
840
- previousMonthIcon = input('‹', ...(ngDevMode ? [{ debugName: "previousMonthIcon" }] : /* istanbul ignore next */ []));
841
- nextMonthIcon = input('›', ...(ngDevMode ? [{ debugName: "nextMonthIcon" }] : /* istanbul ignore next */ []));
842
903
  previousMonthLabel = input('Previous month', ...(ngDevMode ? [{ debugName: "previousMonthLabel" }] : /* istanbul ignore next */ []));
843
904
  nextMonthLabel = input('Next month', ...(ngDevMode ? [{ debugName: "nextMonthLabel" }] : /* istanbul ignore next */ []));
844
905
  month = input(undefined, ...(ngDevMode ? [{ debugName: "month" }] : /* istanbul ignore next */ []));
@@ -851,6 +912,8 @@ class FrCalendar {
851
912
  cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []));
852
913
  host = inject((ElementRef));
853
914
  currentMonth = computed(() => startOfMonth(this.navigatedMonth() ?? this.month() ?? new Date()), ...(ngDevMode ? [{ debugName: "currentMonth" }] : /* istanbul ignore next */ []));
915
+ currentMonthValue = computed(() => String(this.currentMonth().getMonth()), ...(ngDevMode ? [{ debugName: "currentMonthValue" }] : /* istanbul ignore next */ []));
916
+ currentYearValue = computed(() => String(this.currentMonth().getFullYear()), ...(ngDevMode ? [{ debugName: "currentYearValue" }] : /* istanbul ignore next */ []));
854
917
  isDisabled = computed(() => this.disabled() || this.cvaDisabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
855
918
  value = computed(() => {
856
919
  const selected = this.selected();
@@ -858,13 +921,13 @@ class FrCalendar {
858
921
  }, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
859
922
  weekdayLabels = computed(() => buildWeekdayLabels(this.locale(), this.firstDayOfWeek(), this.timeZone()), ...(ngDevMode ? [{ debugName: "weekdayLabels" }] : /* istanbul ignore next */ []));
860
923
  monthOptions = computed(() => Array.from({ length: 12 }, (_, value) => ({
861
- value,
924
+ value: String(value),
862
925
  label: new Intl.DateTimeFormat(this.locale(), {
863
926
  month: 'short',
864
927
  timeZone: this.timeZone(),
865
928
  }).format(new Date(2026, value, 1)),
866
929
  })), ...(ngDevMode ? [{ debugName: "monthOptions" }] : /* istanbul ignore next */ []));
867
- yearOptions = computed(() => Array.from({ length: Math.max(0, this.toYear() - this.fromYear() + 1) }, (_, index) => this.fromYear() + index), ...(ngDevMode ? [{ debugName: "yearOptions" }] : /* istanbul ignore next */ []));
930
+ yearOptions = computed(() => Array.from({ length: Math.max(0, this.toYear() - this.fromYear() + 1) }, (_, index) => String(this.fromYear() + index)), ...(ngDevMode ? [{ debugName: "yearOptions" }] : /* istanbul ignore next */ []));
868
931
  months = computed(() => Array.from({ length: Math.max(1, this.numberOfMonths()) }, (_, index) => this.buildMonth(addMonths(this.currentMonth(), index))), ...(ngDevMode ? [{ debugName: "months" }] : /* istanbul ignore next */ []));
869
932
  activeDate = computed(() => this.resolveActiveDate(), ...(ngDevMode ? [{ debugName: "activeDate" }] : /* istanbul ignore next */ []));
870
933
  hasDateLabels = computed(() => Object.keys(this.dateLabels()).length > 0, ...(ngDevMode ? [{ debugName: "hasDateLabels" }] : /* istanbul ignore next */ []));
@@ -895,10 +958,16 @@ class FrCalendar {
895
958
  this.updateMonth(addMonths(this.currentMonth(), 1));
896
959
  }
897
960
  setMonth(value) {
961
+ if (value === null) {
962
+ return;
963
+ }
898
964
  const month = new Date(this.currentMonth().getFullYear(), Number(value), 1);
899
965
  this.updateMonth(month);
900
966
  }
901
967
  setYear(value) {
968
+ if (value === null) {
969
+ return;
970
+ }
902
971
  const month = new Date(Number(value), this.currentMonth().getMonth(), 1);
903
972
  this.updateMonth(month);
904
973
  }
@@ -1064,7 +1133,7 @@ class FrCalendar {
1064
1133
  };
1065
1134
  }
1066
1135
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component });
1067
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrCalendar, isStandalone: true, selector: "frame-calendar", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, captionLayout: { classPropertyName: "captionLayout", publicName: "captionLayout", isSignal: true, isRequired: false, transformFunction: null }, numberOfMonths: { classPropertyName: "numberOfMonths", publicName: "numberOfMonths", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, timeZone: { classPropertyName: "timeZone", publicName: "timeZone", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, fromYear: { classPropertyName: "fromYear", publicName: "fromYear", isSignal: true, isRequired: false, transformFunction: null }, toYear: { classPropertyName: "toYear", publicName: "toYear", isSignal: true, isRequired: false, transformFunction: null }, showOutsideDays: { classPropertyName: "showOutsideDays", publicName: "showOutsideDays", isSignal: true, isRequired: false, transformFunction: null }, showWeekNumber: { classPropertyName: "showWeekNumber", publicName: "showWeekNumber", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, dateLabels: { classPropertyName: "dateLabels", publicName: "dateLabels", isSignal: true, isRequired: false, transformFunction: null }, disabledMatcher: { classPropertyName: "disabledMatcher", publicName: "disabledMatcher", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null }, previousMonthTemplate: { classPropertyName: "previousMonthTemplate", publicName: "previousMonthTemplate", isSignal: true, isRequired: false, transformFunction: null }, nextMonthTemplate: { classPropertyName: "nextMonthTemplate", publicName: "nextMonthTemplate", isSignal: true, isRequired: false, transformFunction: null }, previousMonthIcon: { classPropertyName: "previousMonthIcon", publicName: "previousMonthIcon", isSignal: true, isRequired: false, transformFunction: null }, nextMonthIcon: { classPropertyName: "nextMonthIcon", publicName: "nextMonthIcon", isSignal: true, isRequired: false, transformFunction: null }, previousMonthLabel: { classPropertyName: "previousMonthLabel", publicName: "previousMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, nextMonthLabel: { classPropertyName: "nextMonthLabel", publicName: "nextMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, month: { classPropertyName: "month", publicName: "month", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange", monthChange: "monthChange" }, host: { properties: { "attr.data-mode": "mode()", "attr.data-caption-layout": "captionLayout()", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.data-week-number": "showWeekNumber() ? \"\" : null", "attr.data-date-labels": "hasDateLabels() ? \"\" : null", "attr.dir": "dir()" }, classAttribute: "frame-calendar" }, providers: [VALUE_ACCESSOR], ngImport: i0, template: `
1136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrCalendar, isStandalone: true, selector: "frame-calendar", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, captionLayout: { classPropertyName: "captionLayout", publicName: "captionLayout", isSignal: true, isRequired: false, transformFunction: null }, numberOfMonths: { classPropertyName: "numberOfMonths", publicName: "numberOfMonths", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, timeZone: { classPropertyName: "timeZone", publicName: "timeZone", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, fromYear: { classPropertyName: "fromYear", publicName: "fromYear", isSignal: true, isRequired: false, transformFunction: null }, toYear: { classPropertyName: "toYear", publicName: "toYear", isSignal: true, isRequired: false, transformFunction: null }, showOutsideDays: { classPropertyName: "showOutsideDays", publicName: "showOutsideDays", isSignal: true, isRequired: false, transformFunction: null }, showWeekNumber: { classPropertyName: "showWeekNumber", publicName: "showWeekNumber", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, dateLabels: { classPropertyName: "dateLabels", publicName: "dateLabels", isSignal: true, isRequired: false, transformFunction: null }, disabledMatcher: { classPropertyName: "disabledMatcher", publicName: "disabledMatcher", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null }, previousMonthTemplate: { classPropertyName: "previousMonthTemplate", publicName: "previousMonthTemplate", isSignal: true, isRequired: false, transformFunction: null }, nextMonthTemplate: { classPropertyName: "nextMonthTemplate", publicName: "nextMonthTemplate", isSignal: true, isRequired: false, transformFunction: null }, previousMonthLabel: { classPropertyName: "previousMonthLabel", publicName: "previousMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, nextMonthLabel: { classPropertyName: "nextMonthLabel", publicName: "nextMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, month: { classPropertyName: "month", publicName: "month", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange", monthChange: "monthChange" }, host: { properties: { "attr.data-mode": "mode()", "attr.data-caption-layout": "captionLayout()", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.data-week-number": "showWeekNumber() ? \"\" : null", "attr.data-date-labels": "hasDateLabels() ? \"\" : null", "attr.dir": "dir()" }, classAttribute: "frame-calendar frame-corner-handles" }, providers: [VALUE_ACCESSOR], ngImport: i0, template: `
1068
1137
  <div class="frame-calendar__header">
1069
1138
  <button
1070
1139
  class="frame-calendar__nav-button"
@@ -1076,39 +1145,100 @@ class FrCalendar {
1076
1145
  @if (previousMonthTemplate(); as template) {
1077
1146
  <ng-container [ngTemplateOutlet]="template" />
1078
1147
  } @else {
1079
- {{ previousMonthIcon() }}
1148
+ <svg
1149
+ class="frame-calendar__nav-icon"
1150
+ aria-hidden="true"
1151
+ viewBox="0 0 24 24"
1152
+ fill="none"
1153
+ stroke="currentColor"
1154
+ stroke-width="2"
1155
+ stroke-linecap="round"
1156
+ stroke-linejoin="round"
1157
+ >
1158
+ <path d="m15 18-6-6 6-6"></path>
1159
+ </svg>
1080
1160
  }
1081
1161
  </button>
1082
1162
 
1083
1163
  @if (captionLayout() === 'dropdown') {
1084
1164
  <div class="frame-calendar__caption-controls">
1085
- <select
1165
+ <button
1086
1166
  class="frame-calendar__select"
1167
+ [frSelect]="monthMenu"
1087
1168
  [disabled]="isDisabled()"
1088
- [value]="currentMonth().getMonth()"
1169
+ [value]="currentMonthValue()"
1170
+ (valueChange)="setMonth($event)"
1171
+ indicatorPosition="end"
1089
1172
  aria-label="Month"
1090
- (change)="setMonth($any($event.target).value)"
1173
+ type="button"
1091
1174
  >
1092
- @for (month of monthOptions(); track month.value) {
1093
- <option [value]="month.value" [selected]="month.value === currentMonth().getMonth()">
1094
- {{ month.label }}
1095
- </option>
1096
- }
1097
- </select>
1175
+ <frame-select-value></frame-select-value>
1176
+ <span frSelectIcon>
1177
+ <svg
1178
+ class="frame-calendar__select-icon"
1179
+ aria-hidden="true"
1180
+ viewBox="0 0 24 24"
1181
+ fill="none"
1182
+ stroke="currentColor"
1183
+ stroke-width="2"
1184
+ stroke-linecap="round"
1185
+ stroke-linejoin="round"
1186
+ >
1187
+ <path d="m6 9 6 6 6-6"></path>
1188
+ </svg>
1189
+ </span>
1190
+ </button>
1191
+
1192
+ <ng-template #monthMenu="frSelectContent" frSelectContent>
1193
+ <frame-select-panel>
1194
+ <frame-select-group>
1195
+ @for (month of monthOptions(); track month.value) {
1196
+ <button frSelectItem [value]="month.value" [label]="month.label" type="button">
1197
+ {{ month.label }}
1198
+ </button>
1199
+ }
1200
+ </frame-select-group>
1201
+ </frame-select-panel>
1202
+ </ng-template>
1098
1203
 
1099
- <select
1204
+ <button
1100
1205
  class="frame-calendar__select"
1206
+ [frSelect]="yearMenu"
1101
1207
  [disabled]="isDisabled()"
1102
- [value]="currentMonth().getFullYear()"
1208
+ [value]="currentYearValue()"
1209
+ (valueChange)="setYear($event)"
1210
+ indicatorPosition="end"
1103
1211
  aria-label="Year"
1104
- (change)="setYear($any($event.target).value)"
1212
+ type="button"
1105
1213
  >
1106
- @for (year of yearOptions(); track year) {
1107
- <option [value]="year" [selected]="year === currentMonth().getFullYear()">
1108
- {{ year }}
1109
- </option>
1110
- }
1111
- </select>
1214
+ <frame-select-value></frame-select-value>
1215
+ <span frSelectIcon>
1216
+ <svg
1217
+ class="frame-calendar__select-icon"
1218
+ aria-hidden="true"
1219
+ viewBox="0 0 24 24"
1220
+ fill="none"
1221
+ stroke="currentColor"
1222
+ stroke-width="2"
1223
+ stroke-linecap="round"
1224
+ stroke-linejoin="round"
1225
+ >
1226
+ <path d="m6 9 6 6 6-6"></path>
1227
+ </svg>
1228
+ </span>
1229
+ </button>
1230
+
1231
+ <ng-template #yearMenu="frSelectContent" frSelectContent>
1232
+ <frame-select-panel>
1233
+ <frame-select-group>
1234
+ @for (year of yearOptions(); track year) {
1235
+ <button frSelectItem [value]="year" [label]="year" type="button">
1236
+ {{ year }}
1237
+ </button>
1238
+ }
1239
+ </frame-select-group>
1240
+ </frame-select-panel>
1241
+ </ng-template>
1112
1242
  </div>
1113
1243
  } @else {
1114
1244
  <div class="frame-calendar__caption" aria-live="polite">
@@ -1126,7 +1256,18 @@ class FrCalendar {
1126
1256
  @if (nextMonthTemplate(); as template) {
1127
1257
  <ng-container [ngTemplateOutlet]="template" />
1128
1258
  } @else {
1129
- {{ nextMonthIcon() }}
1259
+ <svg
1260
+ class="frame-calendar__nav-icon"
1261
+ aria-hidden="true"
1262
+ viewBox="0 0 24 24"
1263
+ fill="none"
1264
+ stroke="currentColor"
1265
+ stroke-width="2"
1266
+ stroke-linecap="round"
1267
+ stroke-linejoin="round"
1268
+ >
1269
+ <path d="m9 18 6-6-6-6"></path>
1270
+ </svg>
1130
1271
  }
1131
1272
  </button>
1132
1273
  </div>
@@ -1209,17 +1350,17 @@ class FrCalendar {
1209
1350
  </section>
1210
1351
  }
1211
1352
  </div>
1212
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1353
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FrSelectModule }, { kind: "directive", type: i1$2.FrSelect, selector: "button[frSelect]", inputs: ["value", "frSelect", "debugVisible", "disabled", "indicatorPosition", "invalid"], outputs: ["valueChange"] }, { kind: "directive", type: i1$2.FrSelectContent, selector: "ng-template[frSelectContent]", inputs: ["position"], exportAs: ["frSelectContent"] }, { kind: "directive", type: i1$2.FrSelectGroup, selector: "[frSelectGroup], frame-select-group" }, { kind: "directive", type: i1$2.FrSelectIcon, selector: "[frSelectIcon], frame-select-icon", inputs: ["position"] }, { kind: "directive", type: i1$2.FrSelectItem, selector: "button[frSelectItem]", inputs: ["label", "value"] }, { kind: "directive", type: i1$2.FrSelectPanel, selector: "[frSelectPanel], frame-select-panel" }, { kind: "directive", type: i1$2.FrSelectValue, selector: "[frSelectValue], frame-select-value", inputs: ["placeholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1213
1354
  }
1214
1355
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCalendar, decorators: [{
1215
1356
  type: Component,
1216
1357
  args: [{
1217
1358
  selector: 'frame-calendar',
1218
- imports: [NgTemplateOutlet],
1359
+ imports: [NgTemplateOutlet, FrSelectModule],
1219
1360
  providers: [VALUE_ACCESSOR],
1220
1361
  changeDetection: ChangeDetectionStrategy.OnPush,
1221
1362
  host: {
1222
- class: 'frame-calendar',
1363
+ class: 'frame-calendar frame-corner-handles',
1223
1364
  '[attr.data-mode]': 'mode()',
1224
1365
  '[attr.data-caption-layout]': 'captionLayout()',
1225
1366
  '[attr.data-disabled]': 'isDisabled() ? "" : null',
@@ -1239,39 +1380,100 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
1239
1380
  @if (previousMonthTemplate(); as template) {
1240
1381
  <ng-container [ngTemplateOutlet]="template" />
1241
1382
  } @else {
1242
- {{ previousMonthIcon() }}
1383
+ <svg
1384
+ class="frame-calendar__nav-icon"
1385
+ aria-hidden="true"
1386
+ viewBox="0 0 24 24"
1387
+ fill="none"
1388
+ stroke="currentColor"
1389
+ stroke-width="2"
1390
+ stroke-linecap="round"
1391
+ stroke-linejoin="round"
1392
+ >
1393
+ <path d="m15 18-6-6 6-6"></path>
1394
+ </svg>
1243
1395
  }
1244
1396
  </button>
1245
1397
 
1246
1398
  @if (captionLayout() === 'dropdown') {
1247
1399
  <div class="frame-calendar__caption-controls">
1248
- <select
1400
+ <button
1249
1401
  class="frame-calendar__select"
1402
+ [frSelect]="monthMenu"
1250
1403
  [disabled]="isDisabled()"
1251
- [value]="currentMonth().getMonth()"
1404
+ [value]="currentMonthValue()"
1405
+ (valueChange)="setMonth($event)"
1406
+ indicatorPosition="end"
1252
1407
  aria-label="Month"
1253
- (change)="setMonth($any($event.target).value)"
1408
+ type="button"
1254
1409
  >
1255
- @for (month of monthOptions(); track month.value) {
1256
- <option [value]="month.value" [selected]="month.value === currentMonth().getMonth()">
1257
- {{ month.label }}
1258
- </option>
1259
- }
1260
- </select>
1410
+ <frame-select-value></frame-select-value>
1411
+ <span frSelectIcon>
1412
+ <svg
1413
+ class="frame-calendar__select-icon"
1414
+ aria-hidden="true"
1415
+ viewBox="0 0 24 24"
1416
+ fill="none"
1417
+ stroke="currentColor"
1418
+ stroke-width="2"
1419
+ stroke-linecap="round"
1420
+ stroke-linejoin="round"
1421
+ >
1422
+ <path d="m6 9 6 6 6-6"></path>
1423
+ </svg>
1424
+ </span>
1425
+ </button>
1426
+
1427
+ <ng-template #monthMenu="frSelectContent" frSelectContent>
1428
+ <frame-select-panel>
1429
+ <frame-select-group>
1430
+ @for (month of monthOptions(); track month.value) {
1431
+ <button frSelectItem [value]="month.value" [label]="month.label" type="button">
1432
+ {{ month.label }}
1433
+ </button>
1434
+ }
1435
+ </frame-select-group>
1436
+ </frame-select-panel>
1437
+ </ng-template>
1261
1438
 
1262
- <select
1439
+ <button
1263
1440
  class="frame-calendar__select"
1441
+ [frSelect]="yearMenu"
1264
1442
  [disabled]="isDisabled()"
1265
- [value]="currentMonth().getFullYear()"
1443
+ [value]="currentYearValue()"
1444
+ (valueChange)="setYear($event)"
1445
+ indicatorPosition="end"
1266
1446
  aria-label="Year"
1267
- (change)="setYear($any($event.target).value)"
1447
+ type="button"
1268
1448
  >
1269
- @for (year of yearOptions(); track year) {
1270
- <option [value]="year" [selected]="year === currentMonth().getFullYear()">
1271
- {{ year }}
1272
- </option>
1273
- }
1274
- </select>
1449
+ <frame-select-value></frame-select-value>
1450
+ <span frSelectIcon>
1451
+ <svg
1452
+ class="frame-calendar__select-icon"
1453
+ aria-hidden="true"
1454
+ viewBox="0 0 24 24"
1455
+ fill="none"
1456
+ stroke="currentColor"
1457
+ stroke-width="2"
1458
+ stroke-linecap="round"
1459
+ stroke-linejoin="round"
1460
+ >
1461
+ <path d="m6 9 6 6 6-6"></path>
1462
+ </svg>
1463
+ </span>
1464
+ </button>
1465
+
1466
+ <ng-template #yearMenu="frSelectContent" frSelectContent>
1467
+ <frame-select-panel>
1468
+ <frame-select-group>
1469
+ @for (year of yearOptions(); track year) {
1470
+ <button frSelectItem [value]="year" [label]="year" type="button">
1471
+ {{ year }}
1472
+ </button>
1473
+ }
1474
+ </frame-select-group>
1475
+ </frame-select-panel>
1476
+ </ng-template>
1275
1477
  </div>
1276
1478
  } @else {
1277
1479
  <div class="frame-calendar__caption" aria-live="polite">
@@ -1289,7 +1491,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
1289
1491
  @if (nextMonthTemplate(); as template) {
1290
1492
  <ng-container [ngTemplateOutlet]="template" />
1291
1493
  } @else {
1292
- {{ nextMonthIcon() }}
1494
+ <svg
1495
+ class="frame-calendar__nav-icon"
1496
+ aria-hidden="true"
1497
+ viewBox="0 0 24 24"
1498
+ fill="none"
1499
+ stroke="currentColor"
1500
+ stroke-width="2"
1501
+ stroke-linecap="round"
1502
+ stroke-linejoin="round"
1503
+ >
1504
+ <path d="m9 18 6-6-6-6"></path>
1505
+ </svg>
1293
1506
  }
1294
1507
  </button>
1295
1508
  </div>
@@ -1374,7 +1587,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
1374
1587
  </div>
1375
1588
  `,
1376
1589
  }]
1377
- }], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], captionLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionLayout", required: false }] }], numberOfMonths: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberOfMonths", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], timeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeZone", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], fromYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "fromYear", required: false }] }], toYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "toYear", required: false }] }], showOutsideDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "showOutsideDays", required: false }] }], showWeekNumber: [{ type: i0.Input, args: [{ isSignal: true, alias: "showWeekNumber", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], dateLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateLabels", required: false }] }], disabledMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledMatcher", required: false }] }], cellTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellTemplate", required: false }] }], previousMonthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthTemplate", required: false }] }], nextMonthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthTemplate", required: false }] }], previousMonthIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthIcon", required: false }] }], nextMonthIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthIcon", required: false }] }], previousMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthLabel", required: false }] }], nextMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthLabel", required: false }] }], month: [{ type: i0.Input, args: [{ isSignal: true, alias: "month", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }], monthChange: [{ type: i0.Output, args: ["monthChange"] }] } });
1590
+ }], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], captionLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionLayout", required: false }] }], numberOfMonths: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberOfMonths", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], timeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeZone", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], fromYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "fromYear", required: false }] }], toYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "toYear", required: false }] }], showOutsideDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "showOutsideDays", required: false }] }], showWeekNumber: [{ type: i0.Input, args: [{ isSignal: true, alias: "showWeekNumber", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], dateLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateLabels", required: false }] }], disabledMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledMatcher", required: false }] }], cellTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellTemplate", required: false }] }], previousMonthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthTemplate", required: false }] }], nextMonthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthTemplate", required: false }] }], previousMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthLabel", required: false }] }], nextMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthLabel", required: false }] }], month: [{ type: i0.Input, args: [{ isSignal: true, alias: "month", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }], monthChange: [{ type: i0.Output, args: ["monthChange"] }] } });
1378
1591
  function buildWeekdayLabels(locale, firstDayOfWeek, timeZone) {
1379
1592
  const baseSunday = new Date(2026, 5, 7);
1380
1593
  return Array.from({ length: 7 }, (_, index) => {
@@ -1490,14 +1703,14 @@ class FrCard {
1490
1703
  return spacing ? FR_CARD_SPACING_VALUES[spacing] : null;
1491
1704
  }, ...(ngDevMode ? [{ debugName: "spacingValue" }] : /* istanbul ignore next */ []));
1492
1705
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCard, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1493
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCard, isStandalone: true, selector: "[frCard], frame-card", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-spacing": "spacing()", "style.--frame-card-spacing": "spacingValue()" }, classAttribute: "frame-card" }, ngImport: i0 });
1706
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCard, isStandalone: true, selector: "[frCard], frame-card", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-size": "size()", "attr.data-spacing": "spacing()", "style.--frame-card-spacing": "spacingValue()" }, classAttribute: "frame-card frame-corner-handles" }, ngImport: i0 });
1494
1707
  }
1495
1708
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCard, decorators: [{
1496
1709
  type: Directive,
1497
1710
  args: [{
1498
1711
  selector: '[frCard], frame-card',
1499
1712
  host: {
1500
- class: 'frame-card',
1713
+ class: 'frame-card frame-corner-handles',
1501
1714
  '[attr.data-size]': 'size()',
1502
1715
  '[attr.data-spacing]': 'spacing()',
1503
1716
  '[style.--frame-card-spacing]': 'spacingValue()',
@@ -1900,7 +2113,7 @@ class FrCarousel {
1900
2113
  this.emit('select');
1901
2114
  }
1902
2115
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCarousel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1903
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCarousel, isStandalone: true, selector: "[frCarousel], frame-carousel", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, opts: { classPropertyName: "opts", publicName: "opts", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { apiReady: "apiReady", selectedChange: "selectedChange" }, host: { attributes: { "role": "region", "tabindex": "0" }, listeners: { "keydown": "handleKeydown($event)" }, properties: { "attr.aria-roledescription": "\"carousel\"", "attr.data-align": "effectiveAlign()", "attr.data-orientation": "orientation()", "attr.dir": "effectiveDirection()" }, classAttribute: "frame-carousel" }, providers: [{ provide: FR_CAROUSEL, useExisting: FrCarousel }], exportAs: ["frCarousel"], ngImport: i0 });
2116
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCarousel, isStandalone: true, selector: "[frCarousel], frame-carousel", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, opts: { classPropertyName: "opts", publicName: "opts", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { apiReady: "apiReady", selectedChange: "selectedChange" }, host: { attributes: { "role": "region", "tabindex": "0" }, listeners: { "keydown": "handleKeydown($event)" }, properties: { "attr.aria-roledescription": "\"carousel\"", "attr.data-align": "effectiveAlign()", "attr.data-orientation": "orientation()", "attr.dir": "effectiveDirection()" }, classAttribute: "frame-carousel frame-corner-handles" }, providers: [{ provide: FR_CAROUSEL, useExisting: FrCarousel }], exportAs: ["frCarousel"], ngImport: i0 });
1904
2117
  }
1905
2118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCarousel, decorators: [{
1906
2119
  type: Directive,
@@ -1908,7 +2121,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
1908
2121
  selector: '[frCarousel], frame-carousel',
1909
2122
  exportAs: 'frCarousel',
1910
2123
  host: {
1911
- class: 'frame-carousel',
2124
+ class: 'frame-carousel frame-corner-handles',
1912
2125
  role: 'region',
1913
2126
  tabindex: '0',
1914
2127
  '[attr.aria-roledescription]': '"carousel"',
@@ -1968,7 +2181,7 @@ class FrCarouselPrevious {
1968
2181
  carousel = inject(FR_CAROUSEL);
1969
2182
  label = input('Previous slide', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1970
2183
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCarouselPrevious, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1971
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCarouselPrevious, isStandalone: true, selector: "button[frCarouselPrevious]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "carousel.scrollPrev()" }, properties: { "attr.type": "\"button\"", "attr.aria-label": "label()", "attr.disabled": "carousel.canScrollPrev() ? null : \"\"" }, classAttribute: "frame-carousel__control frame-carousel__control--previous" }, hostDirectives: [{ directive: i1$1.FrButton, inputs: ["appearance", "appearance", "disabled", "disabled", "size", "size"] }], ngImport: i0 });
2184
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCarouselPrevious, isStandalone: true, selector: "button[frCarouselPrevious]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "carousel.scrollPrev()" }, properties: { "attr.type": "\"button\"", "attr.aria-label": "label()", "attr.disabled": "carousel.canScrollPrev() ? null : \"\"" }, classAttribute: "frame-carousel__control frame-carousel__control--previous" }, hostDirectives: [{ directive: i1$3.FrButton, inputs: ["appearance", "appearance", "disabled", "disabled", "size", "size"] }], ngImport: i0 });
1972
2185
  }
1973
2186
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCarouselPrevious, decorators: [{
1974
2187
  type: Directive,
@@ -1994,7 +2207,7 @@ class FrCarouselNext {
1994
2207
  carousel = inject(FR_CAROUSEL);
1995
2208
  label = input('Next slide', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1996
2209
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCarouselNext, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1997
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCarouselNext, isStandalone: true, selector: "button[frCarouselNext]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "carousel.scrollNext()" }, properties: { "attr.type": "\"button\"", "attr.aria-label": "label()", "attr.disabled": "carousel.canScrollNext() ? null : \"\"" }, classAttribute: "frame-carousel__control frame-carousel__control--next" }, hostDirectives: [{ directive: i1$1.FrButton, inputs: ["appearance", "appearance", "disabled", "disabled", "size", "size"] }], ngImport: i0 });
2210
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCarouselNext, isStandalone: true, selector: "button[frCarouselNext]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "carousel.scrollNext()" }, properties: { "attr.type": "\"button\"", "attr.aria-label": "label()", "attr.disabled": "carousel.canScrollNext() ? null : \"\"" }, classAttribute: "frame-carousel__control frame-carousel__control--next" }, hostDirectives: [{ directive: i1$3.FrButton, inputs: ["appearance", "appearance", "disabled", "disabled", "size", "size"] }], ngImport: i0 });
1998
2211
  }
1999
2212
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCarouselNext, decorators: [{
2000
2213
  type: Directive,
@@ -2069,25 +2282,34 @@ const FR_COLLAPSIBLE = new InjectionToken('FrCollapsible');
2069
2282
  class FrCollapsibleContent {
2070
2283
  host = inject(ElementRef);
2071
2284
  collapsible = inject(FR_COLLAPSIBLE);
2285
+ animationFrameId = -1;
2072
2286
  initialized = false;
2073
2287
  lastOpen = false;
2074
- rafId = -1;
2288
+ mutationObserver;
2289
+ resizeFrameId = -1;
2290
+ resizeObserver;
2291
+ constructor() {
2292
+ effect(() => {
2293
+ const open = this.collapsible.open();
2294
+ if (!this.initialized || open === this.lastOpen) {
2295
+ this.lastOpen = open;
2296
+ return;
2297
+ }
2298
+ this.lastOpen = open;
2299
+ this.animate(open);
2300
+ });
2301
+ }
2075
2302
  ngAfterViewInit() {
2076
2303
  this.lastOpen = this.collapsible.open();
2077
2304
  this.applyStaticState(this.lastOpen);
2305
+ this.observeContentSize();
2078
2306
  this.initialized = true;
2079
2307
  }
2080
- ngDoCheck() {
2081
- const open = this.collapsible.open();
2082
- if (!this.initialized || open === this.lastOpen) {
2083
- return;
2084
- }
2085
- this.cancelAnimationFrame();
2086
- this.lastOpen = open;
2087
- this.animate(open);
2088
- }
2089
2308
  ngOnDestroy() {
2090
2309
  this.cancelAnimationFrame();
2310
+ this.cancelResizeFrame();
2311
+ this.mutationObserver?.disconnect();
2312
+ this.resizeObserver?.disconnect();
2091
2313
  }
2092
2314
  onTransitionEnd(event) {
2093
2315
  if (event.target !== this.host.nativeElement || event.propertyName !== 'height') {
@@ -2097,26 +2319,27 @@ class FrCollapsibleContent {
2097
2319
  this.host.nativeElement.style.visibility = 'hidden';
2098
2320
  return;
2099
2321
  }
2100
- this.host.nativeElement.style.height = 'auto';
2322
+ this.setOpenHeight();
2101
2323
  }
2102
2324
  animate(open) {
2103
2325
  const element = this.host.nativeElement;
2326
+ this.cancelAnimationFrame();
2327
+ this.cancelResizeFrame();
2104
2328
  if (open) {
2105
2329
  element.style.visibility = 'visible';
2106
2330
  element.style.height = '0px';
2107
2331
  element.style.opacity = '0';
2108
- this.rafId = requestAnimationFrame(() => {
2332
+ this.animationFrameId = requestAnimationFrame(() => {
2109
2333
  element.style.height = `${element.scrollHeight}px`;
2110
2334
  element.style.opacity = '1';
2111
2335
  });
2112
2336
  return;
2113
2337
  }
2114
- element.style.height = `${element.scrollHeight}px`;
2338
+ element.style.height = `${element.getBoundingClientRect().height || element.scrollHeight}px`;
2115
2339
  element.style.opacity = '1';
2116
- this.rafId = requestAnimationFrame(() => {
2117
- element.style.height = '0px';
2118
- element.style.opacity = '0';
2119
- });
2340
+ void element.offsetHeight;
2341
+ element.style.height = '0px';
2342
+ element.style.opacity = '0';
2120
2343
  }
2121
2344
  applyStaticState(open) {
2122
2345
  const element = this.host.nativeElement;
@@ -2125,11 +2348,59 @@ class FrCollapsibleContent {
2125
2348
  element.style.visibility = open ? 'visible' : 'hidden';
2126
2349
  }
2127
2350
  cancelAnimationFrame() {
2128
- if (this.rafId === -1) {
2351
+ if (this.animationFrameId === -1) {
2352
+ return;
2353
+ }
2354
+ cancelAnimationFrame(this.animationFrameId);
2355
+ this.animationFrameId = -1;
2356
+ }
2357
+ cancelResizeFrame() {
2358
+ if (this.resizeFrameId === -1) {
2359
+ return;
2360
+ }
2361
+ cancelAnimationFrame(this.resizeFrameId);
2362
+ this.resizeFrameId = -1;
2363
+ }
2364
+ observeContentSize() {
2365
+ if (typeof ResizeObserver === 'undefined') {
2366
+ return;
2367
+ }
2368
+ this.resizeObserver = new ResizeObserver(() => this.scheduleOpenHeightSync());
2369
+ this.observeResizeTargets();
2370
+ if (typeof MutationObserver === 'undefined') {
2371
+ return;
2372
+ }
2373
+ this.mutationObserver = new MutationObserver(() => {
2374
+ this.observeResizeTargets();
2375
+ this.scheduleOpenHeightSync();
2376
+ });
2377
+ this.mutationObserver.observe(this.host.nativeElement, { childList: true });
2378
+ }
2379
+ observeResizeTargets() {
2380
+ if (!this.resizeObserver) {
2381
+ return;
2382
+ }
2383
+ const element = this.host.nativeElement;
2384
+ const targets = Array.from(element.children);
2385
+ this.resizeObserver.disconnect();
2386
+ if (targets.length === 0) {
2387
+ this.resizeObserver.observe(element);
2388
+ return;
2389
+ }
2390
+ targets.forEach((target) => this.resizeObserver?.observe(target));
2391
+ }
2392
+ scheduleOpenHeightSync() {
2393
+ if (!this.initialized || !this.collapsible.open()) {
2394
+ return;
2395
+ }
2396
+ this.cancelResizeFrame();
2397
+ this.resizeFrameId = requestAnimationFrame(() => this.setOpenHeight());
2398
+ }
2399
+ setOpenHeight() {
2400
+ if (!this.collapsible.open()) {
2129
2401
  return;
2130
2402
  }
2131
- cancelAnimationFrame(this.rafId);
2132
- this.rafId = -1;
2403
+ this.host.nativeElement.style.height = `${this.host.nativeElement.scrollHeight}px`;
2133
2404
  }
2134
2405
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCollapsibleContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2135
2406
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrCollapsibleContent, isStandalone: true, selector: "[frCollapsibleContent]", host: { attributes: { "role": "region" }, listeners: { "transitionend": "onTransitionEnd($event)" }, properties: { "attr.aria-hidden": "collapsible.open() ? \"false\" : \"true\"", "attr.aria-labelledby": "collapsible.triggerId()", "attr.data-state": "collapsible.open() ? \"open\" : \"closed\"", "attr.id": "collapsible.contentId()" }, classAttribute: "frame-collapsible__content" }, ngImport: i0 });
@@ -2149,7 +2420,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
2149
2420
  role: 'region',
2150
2421
  },
2151
2422
  }]
2152
- }] });
2423
+ }], ctorParameters: () => [] });
2153
2424
 
2154
2425
  let collapsibleId = 0;
2155
2426
  /** Root controller for expandable collapsible content. */
@@ -2284,8 +2555,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
2284
2555
  }] });
2285
2556
  /** Group slot for combobox. */
2286
2557
  class FrComboboxGroup {
2558
+ elementRef = inject(ElementRef);
2559
+ root = inject(FrComboboxRootLookup);
2560
+ hidden() {
2561
+ this.root.visibleCount();
2562
+ const items = Array.from(this.elementRef.nativeElement.querySelectorAll('.frame-combobox__item'));
2563
+ return items.length > 0 && items.every((item) => item.hasAttribute('data-hidden'));
2564
+ }
2287
2565
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrComboboxGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2288
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrComboboxGroup, isStandalone: true, selector: "[frComboboxGroup], frame-combobox-group", host: { classAttribute: "frame-combobox__group" }, ngImport: i0 });
2566
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrComboboxGroup, isStandalone: true, selector: "[frComboboxGroup], frame-combobox-group", host: { properties: { "attr.hidden": "hidden() ? \"\" : null" }, classAttribute: "frame-combobox__group" }, ngImport: i0 });
2289
2567
  }
2290
2568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrComboboxGroup, decorators: [{
2291
2569
  type: Directive,
@@ -2293,6 +2571,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
2293
2571
  selector: '[frComboboxGroup], frame-combobox-group',
2294
2572
  host: {
2295
2573
  class: 'frame-combobox__group',
2574
+ '[attr.hidden]': 'hidden() ? "" : null',
2296
2575
  },
2297
2576
  }]
2298
2577
  }] });
@@ -2367,6 +2646,7 @@ class FrCombobox extends FrControlValueAccessor$1 {
2367
2646
  items = new Set();
2368
2647
  itemsVersion = signal(0, ...(ngDevMode ? [{ debugName: "itemsVersion" }] : /* istanbul ignore next */ []));
2369
2648
  selectedLabels = new Map();
2649
+ selectedLabelsVersion = signal(0, ...(ngDevMode ? [{ debugName: "selectedLabelsVersion" }] : /* istanbul ignore next */ []));
2370
2650
  lastAutoHighlight = false;
2371
2651
  lastItemsVersion = -1;
2372
2652
  lastQuery = '';
@@ -2385,6 +2665,7 @@ class FrCombobox extends FrControlValueAccessor$1 {
2385
2665
  invalid = computed(() => this.invalidInput() || this.formInvalid(), ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
2386
2666
  isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
2387
2667
  query = signal('', ...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
2668
+ queryActive = signal(false, ...(ngDevMode ? [{ debugName: "queryActive" }] : /* istanbul ignore next */ []));
2388
2669
  anchorWidth = signal(null, ...(ngDevMode ? [{ debugName: "anchorWidth" }] : /* istanbul ignore next */ []));
2389
2670
  highlightedIndex = signal(0, ...(ngDevMode ? [{ debugName: "highlightedIndex" }] : /* istanbul ignore next */ []));
2390
2671
  overlaySide = signal('bottom', ...(ngDevMode ? [{ debugName: "overlaySide" }] : /* istanbul ignore next */ []));
@@ -2398,7 +2679,8 @@ class FrCombobox extends FrControlValueAccessor$1 {
2398
2679
  return this.query();
2399
2680
  }
2400
2681
  const value = this.value();
2401
- if (value === null || Array.isArray(value)) {
2682
+ this.selectedLabelsVersion();
2683
+ if (this.queryActive() || value === null || Array.isArray(value)) {
2402
2684
  return this.query();
2403
2685
  }
2404
2686
  return this.query() || this.selectedLabels.get(value) || this.itemToStringValue()(value);
@@ -2468,7 +2750,11 @@ class FrCombobox extends FrControlValueAccessor$1 {
2468
2750
  return this.visibleItems()[this.highlightedIndex()] === item;
2469
2751
  }
2470
2752
  rememberItemLabel(value, label) {
2753
+ if (this.selectedLabels.get(value) === label) {
2754
+ return;
2755
+ }
2471
2756
  this.selectedLabels.set(value, label);
2757
+ this.selectedLabelsVersion.update((version) => version + 1);
2472
2758
  }
2473
2759
  itemVisible(label) {
2474
2760
  const query = this.query().trim().toLowerCase();
@@ -2486,6 +2772,9 @@ class FrCombobox extends FrControlValueAccessor$1 {
2486
2772
  return;
2487
2773
  }
2488
2774
  this.isOpen.set(false);
2775
+ if (!this.query()) {
2776
+ this.queryActive.set(false);
2777
+ }
2489
2778
  this.markAsTouched();
2490
2779
  }
2491
2780
  touch() {
@@ -2493,12 +2782,13 @@ class FrCombobox extends FrControlValueAccessor$1 {
2493
2782
  }
2494
2783
  clear() {
2495
2784
  this.query.set('');
2785
+ this.queryActive.set(false);
2496
2786
  this.value.set(this.multiple() ? [] : null);
2497
2787
  this.notifyValueChange(this.value());
2498
2788
  this.markAsTouched();
2499
2789
  }
2500
2790
  selectItem(value, label) {
2501
- this.selectedLabels.set(value, label);
2791
+ this.rememberItemLabel(value, label);
2502
2792
  if (this.multiple()) {
2503
2793
  const current = this.selectedValues();
2504
2794
  const exists = current.some((item) => Object.is(item, value));
@@ -2506,12 +2796,14 @@ class FrCombobox extends FrControlValueAccessor$1 {
2506
2796
  this.value.set(next);
2507
2797
  this.notifyValueChange(next);
2508
2798
  this.query.set('');
2799
+ this.queryActive.set(false);
2509
2800
  this.open();
2510
2801
  return;
2511
2802
  }
2512
2803
  this.value.set(value);
2513
2804
  this.notifyValueChange(value);
2514
2805
  this.query.set('');
2806
+ this.queryActive.set(false);
2515
2807
  this.close();
2516
2808
  }
2517
2809
  removeItem(value) {
@@ -2526,6 +2818,7 @@ class FrCombobox extends FrControlValueAccessor$1 {
2526
2818
  }
2527
2819
  updateQuery(value) {
2528
2820
  this.query.set(value);
2821
+ this.queryActive.set(true);
2529
2822
  this.highlightedIndex.set(0);
2530
2823
  this.open();
2531
2824
  }
@@ -2536,6 +2829,7 @@ class FrCombobox extends FrControlValueAccessor$1 {
2536
2829
  return;
2537
2830
  }
2538
2831
  this.highlightedIndex.set((this.highlightedIndex() + delta + count) % count);
2832
+ this.scrollHighlightedItemIntoView();
2539
2833
  }
2540
2834
  selectHighlighted() {
2541
2835
  const item = this.visibleItems()[this.highlightedIndex()];
@@ -2547,10 +2841,16 @@ class FrCombobox extends FrControlValueAccessor$1 {
2547
2841
  setViewValue(value) {
2548
2842
  this.value.set(value);
2549
2843
  this.query.set('');
2844
+ this.queryActive.set(false);
2550
2845
  }
2551
2846
  bumpItems() {
2552
2847
  this.itemsVersion.update((value) => value + 1);
2553
2848
  }
2849
+ scrollHighlightedItemIntoView() {
2850
+ queueMicrotask(() => {
2851
+ this.visibleItems()[this.highlightedIndex()]?.scrollIntoView();
2852
+ });
2853
+ }
2554
2854
  measureAnchor() {
2555
2855
  const element = this.origin()?.elementRef.nativeElement ?? this.elementRef.nativeElement;
2556
2856
  if (typeof element?.getBoundingClientRect !== 'function') {
@@ -2793,6 +3093,9 @@ class FrComboboxItem {
2793
3093
  this.root.selectItem(this.value(), this.label());
2794
3094
  }
2795
3095
  }
3096
+ scrollIntoView() {
3097
+ this.elementRef.nativeElement.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });
3098
+ }
2796
3099
  highlightSelf() {
2797
3100
  const index = this.root.visibleItems().indexOf(this);
2798
3101
  if (index >= 0) {
@@ -2913,12 +3216,12 @@ class FrComboboxChip {
2913
3216
  return;
2914
3217
  }
2915
3218
  const button = this.renderer.createElement('button');
2916
- const label = this.renderer.createText('×');
3219
+ const icon = this.createRemoveIcon();
2917
3220
  this.renderer.setAttribute(button, 'type', 'button');
2918
3221
  this.renderer.setAttribute(button, 'aria-label', 'Remove selected item');
2919
3222
  this.renderer.setAttribute(button, 'data-default-remove', '');
2920
3223
  this.renderer.addClass(button, 'frame-combobox__chip-remove');
2921
- this.renderer.appendChild(button, label);
3224
+ this.renderer.appendChild(button, icon);
2922
3225
  this.renderer.listen(button, 'click', (event) => {
2923
3226
  event.preventDefault();
2924
3227
  event.stopPropagation();
@@ -2926,6 +3229,24 @@ class FrComboboxChip {
2926
3229
  });
2927
3230
  this.renderer.appendChild(element, button);
2928
3231
  }
3232
+ createRemoveIcon() {
3233
+ const svg = this.renderer.createElement('svg', 'svg');
3234
+ const firstPath = this.renderer.createElement('path', 'svg');
3235
+ const secondPath = this.renderer.createElement('path', 'svg');
3236
+ this.renderer.setAttribute(svg, 'aria-hidden', 'true');
3237
+ this.renderer.setAttribute(svg, 'viewBox', '0 0 24 24');
3238
+ this.renderer.setAttribute(svg, 'fill', 'none');
3239
+ this.renderer.setAttribute(svg, 'stroke', 'currentColor');
3240
+ this.renderer.setAttribute(svg, 'stroke-width', '2');
3241
+ this.renderer.setAttribute(svg, 'stroke-linecap', 'round');
3242
+ this.renderer.setAttribute(svg, 'stroke-linejoin', 'round');
3243
+ this.renderer.addClass(svg, 'frame-combobox__chip-remove-icon');
3244
+ this.renderer.setAttribute(firstPath, 'd', 'M18 6 6 18');
3245
+ this.renderer.setAttribute(secondPath, 'd', 'm6 6 12 12');
3246
+ this.renderer.appendChild(svg, firstPath);
3247
+ this.renderer.appendChild(svg, secondPath);
3248
+ return svg;
3249
+ }
2929
3250
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrComboboxChip, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2930
3251
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrComboboxChip, isStandalone: true, selector: "[frComboboxChip], frame-combobox-chip", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "frame-combobox__chip" }, exportAs: ["frComboboxChip"], ngImport: i0 });
2931
3252
  }
@@ -2980,6 +3301,11 @@ class FrComboboxChipsInput {
2980
3301
  this.root.open();
2981
3302
  this.root.moveHighlight(1);
2982
3303
  }
3304
+ if (event.key === 'ArrowUp') {
3305
+ event.preventDefault();
3306
+ this.root.open();
3307
+ this.root.moveHighlight(-1);
3308
+ }
2983
3309
  if (event.key === 'Enter') {
2984
3310
  event.preventDefault();
2985
3311
  this.root.selectHighlighted();
@@ -3616,7 +3942,7 @@ class FrCommand {
3616
3942
  this.visibleItems()[this.highlightedIndex()]?.scrollIntoView();
3617
3943
  }
3618
3944
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCommand, deps: [], target: i0.ɵɵFactoryTarget.Directive });
3619
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCommand, isStandalone: true, selector: "[frCommand], frame-command", inputs: { closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", itemSelected: "itemSelected", queryChange: "queryChange" }, host: { listeners: { "keydown": "handleKeydown($event)" }, properties: { "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-state": "visibleCount() > 0 ? \"results\" : \"empty\"" }, classAttribute: "frame-command" }, providers: [{ provide: FR_COMMAND, useExisting: FrCommand }], exportAs: ["frCommand"], ngImport: i0 });
3945
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrCommand, isStandalone: true, selector: "[frCommand], frame-command", inputs: { closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", itemSelected: "itemSelected", queryChange: "queryChange" }, host: { listeners: { "keydown": "handleKeydown($event)" }, properties: { "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-state": "visibleCount() > 0 ? \"results\" : \"empty\"" }, classAttribute: "frame-command frame-corner-handles" }, providers: [{ provide: FR_COMMAND, useExisting: FrCommand }], exportAs: ["frCommand"], ngImport: i0 });
3620
3946
  }
3621
3947
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCommand, decorators: [{
3622
3948
  type: Directive,
@@ -3626,7 +3952,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
3626
3952
  standalone: true,
3627
3953
  providers: [{ provide: FR_COMMAND, useExisting: FrCommand }],
3628
3954
  host: {
3629
- class: 'frame-command',
3955
+ class: 'frame-command frame-corner-handles',
3630
3956
  '[attr.data-disabled]': 'disabled() ? "" : null',
3631
3957
  '[attr.data-state]': 'visibleCount() > 0 ? "results" : "empty"',
3632
3958
  '(keydown)': 'handleKeydown($event)',
@@ -3904,9 +4230,9 @@ class FrConfirmPopoverPanel {
3904
4230
  confirmed = output();
3905
4231
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrConfirmPopoverPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
3906
4232
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrConfirmPopoverPanel, isStandalone: true, selector: "frame-confirm-popover-panel", inputs: { buttonSize: { classPropertyName: "buttonSize", publicName: "buttonSize", isSignal: true, isRequired: false, transformFunction: null }, cancelAppearance: { classPropertyName: "cancelAppearance", publicName: "cancelAppearance", isSignal: true, isRequired: false, transformFunction: null }, cancelLabel: { classPropertyName: "cancelLabel", publicName: "cancelLabel", isSignal: true, isRequired: false, transformFunction: null }, confirmAppearance: { classPropertyName: "confirmAppearance", publicName: "confirmAppearance", isSignal: true, isRequired: false, transformFunction: null }, confirmLabel: { classPropertyName: "confirmLabel", publicName: "confirmLabel", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, descriptionId: { classPropertyName: "descriptionId", publicName: "descriptionId", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, titleId: { classPropertyName: "titleId", publicName: "titleId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { cancelled: "cancelled", confirmed: "confirmed" }, ngImport: i0, template: `
3907
- <div
3908
- class="frame-popover__content frame-confirm-popover__content"
3909
- role="alertdialog"
4233
+ <div
4234
+ class="frame-popover__content frame-confirm-popover__content frame-corner-handles"
4235
+ role="alertdialog"
3910
4236
  [attr.aria-describedby]="descriptionId()"
3911
4237
  [attr.aria-labelledby]="titleId()"
3912
4238
  [attr.data-side]="side()"
@@ -3953,9 +4279,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
3953
4279
  imports: [FrButton$1, FrButtonLabel$1],
3954
4280
  changeDetection: ChangeDetectionStrategy.OnPush,
3955
4281
  template: `
3956
- <div
3957
- class="frame-popover__content frame-confirm-popover__content"
3958
- role="alertdialog"
4282
+ <div
4283
+ class="frame-popover__content frame-confirm-popover__content frame-corner-handles"
4284
+ role="alertdialog"
3959
4285
  [attr.aria-describedby]="descriptionId()"
3960
4286
  [attr.aria-labelledby]="titleId()"
3961
4287
  [attr.data-side]="side()"
@@ -4110,7 +4436,7 @@ class FrContextMenuPanel {
4110
4436
  this.tree.leaveInteractiveArea(this.parent.closeDelay());
4111
4437
  }
4112
4438
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4113
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrContextMenuPanel, isStandalone: true, selector: "[frContextMenuPanel]", host: { attributes: { "tabindex": "-1" }, listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.data-side": "side()" }, classAttribute: "frame-context-menu__content frame-dropdown-menu__content" }, hostDirectives: [{ directive: i1$2.CdkMenu }, { directive: i1$2.CdkTargetMenuAim }], ngImport: i0 });
4439
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrContextMenuPanel, isStandalone: true, selector: "[frContextMenuPanel]", host: { attributes: { "tabindex": "-1" }, listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.data-side": "side()" }, classAttribute: "frame-context-menu__content frame-dropdown-menu__content" }, hostDirectives: [{ directive: i1$4.CdkMenu }, { directive: i1$4.CdkTargetMenuAim }], ngImport: i0 });
4114
4440
  }
4115
4441
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuPanel, decorators: [{
4116
4442
  type: Directive,
@@ -4132,7 +4458,7 @@ class FrContextMenuItem {
4132
4458
  inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
4133
4459
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
4134
4460
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4135
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuItem, isStandalone: true, selector: "[frContextMenuItem]", inputs: { inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-context-menu__item frame-dropdown-menu__item" }, hostDirectives: [{ directive: i1$2.CdkMenuItem }], ngImport: i0 });
4461
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuItem, isStandalone: true, selector: "[frContextMenuItem]", inputs: { inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-context-menu__item frame-dropdown-menu__item" }, hostDirectives: [{ directive: i1$4.CdkMenuItem }], ngImport: i0 });
4136
4462
  }
4137
4463
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuItem, decorators: [{
4138
4464
  type: Directive,
@@ -4163,7 +4489,7 @@ class FrContextMenuCheckboxItem {
4163
4489
  this.checkboxItem.checked = checked;
4164
4490
  }
4165
4491
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuCheckboxItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4166
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuCheckboxItem, isStandalone: true, selector: "button[frContextMenuCheckboxItem]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "checkboxItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-context-menu__item frame-context-menu__checkbox-item frame-dropdown-menu__item frame-dropdown-menu__checkbox-item" }, hostDirectives: [{ directive: i1$2.CdkMenuItemCheckbox }], ngImport: i0 });
4492
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuCheckboxItem, isStandalone: true, selector: "button[frContextMenuCheckboxItem]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "checkboxItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-context-menu__item frame-context-menu__checkbox-item frame-dropdown-menu__item frame-dropdown-menu__checkbox-item" }, hostDirectives: [{ directive: i1$4.CdkMenuItemCheckbox }], ngImport: i0 });
4167
4493
  }
4168
4494
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuCheckboxItem, decorators: [{
4169
4495
  type: Directive,
@@ -4181,7 +4507,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
4181
4507
  /** Group slot for context menu radio. */
4182
4508
  class FrContextMenuRadioGroup {
4183
4509
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4184
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrContextMenuRadioGroup, isStandalone: true, selector: "[frContextMenuRadioGroup]", host: { classAttribute: "frame-context-menu__radio-group frame-dropdown-menu__radio-group" }, hostDirectives: [{ directive: i1$2.CdkMenuGroup }], ngImport: i0 });
4510
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrContextMenuRadioGroup, isStandalone: true, selector: "[frContextMenuRadioGroup]", host: { classAttribute: "frame-context-menu__radio-group frame-dropdown-menu__radio-group" }, hostDirectives: [{ directive: i1$4.CdkMenuGroup }], ngImport: i0 });
4185
4511
  }
4186
4512
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuRadioGroup, decorators: [{
4187
4513
  type: Directive,
@@ -4210,7 +4536,7 @@ class FrContextMenuRadioItem {
4210
4536
  this.radioItem.checked = checked;
4211
4537
  }
4212
4538
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuRadioItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4213
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuRadioItem, isStandalone: true, selector: "button[frContextMenuRadioItem]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "radioItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-context-menu__item frame-context-menu__radio-item frame-dropdown-menu__item frame-dropdown-menu__radio-item" }, hostDirectives: [{ directive: i1$2.CdkMenuItemRadio }], ngImport: i0 });
4539
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuRadioItem, isStandalone: true, selector: "button[frContextMenuRadioItem]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "radioItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-context-menu__item frame-context-menu__radio-item frame-dropdown-menu__item frame-dropdown-menu__radio-item" }, hostDirectives: [{ directive: i1$4.CdkMenuItemRadio }], ngImport: i0 });
4214
4540
  }
4215
4541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuRadioItem, decorators: [{
4216
4542
  type: Directive,
@@ -4426,7 +4752,7 @@ class FrContextMenuSubTrigger {
4426
4752
  return this.menuContent()?.getPositions(true) ?? defaultPositions$1(true);
4427
4753
  }
4428
4754
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuSubTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4429
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuSubTrigger, isStandalone: true, selector: "[frContextMenuSubTrigger]", inputs: { menuContent: { classPropertyName: "menuContent", publicName: "frContextMenuSubTrigger", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, triggerModeInput: { classPropertyName: "triggerModeInput", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.data-inset": "inset() ? \"\" : null", "attr.data-state": "isOpen() ? \"open\" : \"closed\"", "attr.data-variant": "variant()" }, classAttribute: "frame-context-menu__item frame-context-menu__sub-trigger frame-dropdown-menu__item frame-dropdown-menu__sub-trigger" }, hostDirectives: [{ directive: i1$2.CdkMenuItem }, { directive: i1$2.CdkMenuTrigger }], ngImport: i0 });
4755
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuSubTrigger, isStandalone: true, selector: "[frContextMenuSubTrigger]", inputs: { menuContent: { classPropertyName: "menuContent", publicName: "frContextMenuSubTrigger", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, triggerModeInput: { classPropertyName: "triggerModeInput", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.data-inset": "inset() ? \"\" : null", "attr.data-state": "isOpen() ? \"open\" : \"closed\"", "attr.data-variant": "variant()" }, classAttribute: "frame-context-menu__item frame-context-menu__sub-trigger frame-dropdown-menu__item frame-dropdown-menu__sub-trigger" }, hostDirectives: [{ directive: i1$4.CdkMenuItem }, { directive: i1$4.CdkMenuTrigger }], ngImport: i0 });
4430
4756
  }
4431
4757
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuSubTrigger, decorators: [{
4432
4758
  type: Directive,
@@ -4552,7 +4878,7 @@ class FrContextMenuTrigger {
4552
4878
  }
4553
4879
  }
4554
4880
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4555
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuTrigger, isStandalone: true, selector: "[frContextMenuTrigger]", inputs: { menuContent: { classPropertyName: "menuContent", publicName: "frContextMenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, longPressDelay: { classPropertyName: "longPressDelay", publicName: "longPressDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "pointerdown": "handlePointerDown($event)", "pointerup": "clearLongPress()", "pointercancel": "clearLongPress()", "pointerleave": "clearLongPress()" }, properties: { "attr.data-state": "isOpen() ? \"open\" : \"closed\"", "attr.data-disabled": "disabled() ? \"\" : null" }, classAttribute: "frame-context-menu__trigger" }, hostDirectives: [{ directive: i1$2.CdkContextMenuTrigger }], ngImport: i0 });
4881
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuTrigger, isStandalone: true, selector: "[frContextMenuTrigger]", inputs: { menuContent: { classPropertyName: "menuContent", publicName: "frContextMenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, longPressDelay: { classPropertyName: "longPressDelay", publicName: "longPressDelay", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "pointerdown": "handlePointerDown($event)", "pointerup": "clearLongPress()", "pointercancel": "clearLongPress()", "pointerleave": "clearLongPress()" }, properties: { "attr.data-state": "isOpen() ? \"open\" : \"closed\"", "attr.data-disabled": "disabled() ? \"\" : null" }, classAttribute: "frame-context-menu__trigger" }, hostDirectives: [{ directive: i1$4.CdkContextMenuTrigger }], ngImport: i0 });
4556
4882
  }
4557
4883
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuTrigger, decorators: [{
4558
4884
  type: Directive,
@@ -4571,6 +4897,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
4571
4897
  }]
4572
4898
  }], ctorParameters: () => [], propDecorators: { menuContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "frContextMenuTrigger", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], longPressDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "longPressDelay", required: false }] }], opened: [{ type: i0.Output, args: ["opened"] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
4573
4899
 
4900
+ /**
4901
+ * Enables Frame UI corner handles on any normal box element.
4902
+ *
4903
+ * The directive only marks the host. Rendering is handled by the shared
4904
+ * blueprint CSS so it stays cheap and works outside Angular components too.
4905
+ */
4906
+ class FrCornerHandles {
4907
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCornerHandles, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4908
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrCornerHandles, isStandalone: true, selector: "[frCornerHandles]", host: { classAttribute: "frame-corner-handles" }, ngImport: i0 });
4909
+ }
4910
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrCornerHandles, decorators: [{
4911
+ type: Directive,
4912
+ args: [{
4913
+ selector: '[frCornerHandles]',
4914
+ host: {
4915
+ class: 'frame-corner-handles',
4916
+ },
4917
+ }]
4918
+ }] });
4919
+
4574
4920
  const POSITIONS = [
4575
4921
  {
4576
4922
  originX: 'start',
@@ -4590,7 +4936,7 @@ const POSITIONS = [
4590
4936
  /** Date picker control backed by the calendar primitive. */
4591
4937
  class FrDatePicker extends FrControlValueAccessor$1 {
4592
4938
  mode = input('single', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
4593
- captionLayout = input('label', ...(ngDevMode ? [{ debugName: "captionLayout" }] : /* istanbul ignore next */ []));
4939
+ captionLayout = input('dropdown', ...(ngDevMode ? [{ debugName: "captionLayout" }] : /* istanbul ignore next */ []));
4594
4940
  numberOfMonths = input(1, ...(ngDevMode ? [{ debugName: "numberOfMonths" }] : /* istanbul ignore next */ []));
4595
4941
  firstDayOfWeek = input(0, ...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
4596
4942
  locale = input('en-US', ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
@@ -4609,15 +4955,13 @@ class FrDatePicker extends FrControlValueAccessor$1 {
4609
4955
  showTime = input(false, { ...(ngDevMode ? { debugName: "showTime" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
4610
4956
  placeholder = input('Pick a date', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
4611
4957
  dialogLabel = input('Choose date', ...(ngDevMode ? [{ debugName: "dialogLabel" }] : /* istanbul ignore next */ []));
4612
- icon = input('◷', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
4958
+ icon = input(null, ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
4613
4959
  disabledDates = input([], ...(ngDevMode ? [{ debugName: "disabledDates" }] : /* istanbul ignore next */ []));
4614
4960
  dateLabels = input({}, ...(ngDevMode ? [{ debugName: "dateLabels" }] : /* istanbul ignore next */ []));
4615
4961
  disabledMatcher = input(null, ...(ngDevMode ? [{ debugName: "disabledMatcher" }] : /* istanbul ignore next */ []));
4616
4962
  cellTemplate = input(null, ...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
4617
4963
  previousMonthTemplate = input(null, ...(ngDevMode ? [{ debugName: "previousMonthTemplate" }] : /* istanbul ignore next */ []));
4618
4964
  nextMonthTemplate = input(null, ...(ngDevMode ? [{ debugName: "nextMonthTemplate" }] : /* istanbul ignore next */ []));
4619
- previousMonthIcon = input('‹', ...(ngDevMode ? [{ debugName: "previousMonthIcon" }] : /* istanbul ignore next */ []));
4620
- nextMonthIcon = input('›', ...(ngDevMode ? [{ debugName: "nextMonthIcon" }] : /* istanbul ignore next */ []));
4621
4965
  previousMonthLabel = input('Previous month', ...(ngDevMode ? [{ debugName: "previousMonthLabel" }] : /* istanbul ignore next */ []));
4622
4966
  nextMonthLabel = input('Next month', ...(ngDevMode ? [{ debugName: "nextMonthLabel" }] : /* istanbul ignore next */ []));
4623
4967
  headerTemplate = input(null, ...(ngDevMode ? [{ debugName: "headerTemplate" }] : /* istanbul ignore next */ []));
@@ -4750,11 +5094,22 @@ class FrDatePicker extends FrControlValueAccessor$1 {
4750
5094
  this.markAsTouched();
4751
5095
  }
4752
5096
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDatePicker, deps: [], target: i0.ɵɵFactoryTarget.Component });
4753
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrDatePicker, isStandalone: true, selector: "frame-date-picker", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, captionLayout: { classPropertyName: "captionLayout", publicName: "captionLayout", isSignal: true, isRequired: false, transformFunction: null }, numberOfMonths: { classPropertyName: "numberOfMonths", publicName: "numberOfMonths", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, timeZone: { classPropertyName: "timeZone", publicName: "timeZone", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, fromYear: { classPropertyName: "fromYear", publicName: "fromYear", isSignal: true, isRequired: false, transformFunction: null }, toYear: { classPropertyName: "toYear", publicName: "toYear", isSignal: true, isRequired: false, transformFunction: null }, showOutsideDays: { classPropertyName: "showOutsideDays", publicName: "showOutsideDays", isSignal: true, isRequired: false, transformFunction: null }, showWeekNumber: { classPropertyName: "showWeekNumber", publicName: "showWeekNumber", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalidInput: { classPropertyName: "invalidInput", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, readonlyInput: { classPropertyName: "readonlyInput", publicName: "readonlyInput", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, debugVisible: { classPropertyName: "debugVisible", publicName: "debugVisible", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, dialogLabel: { classPropertyName: "dialogLabel", publicName: "dialogLabel", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, dateLabels: { classPropertyName: "dateLabels", publicName: "dateLabels", isSignal: true, isRequired: false, transformFunction: null }, disabledMatcher: { classPropertyName: "disabledMatcher", publicName: "disabledMatcher", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null }, previousMonthTemplate: { classPropertyName: "previousMonthTemplate", publicName: "previousMonthTemplate", isSignal: true, isRequired: false, transformFunction: null }, nextMonthTemplate: { classPropertyName: "nextMonthTemplate", publicName: "nextMonthTemplate", isSignal: true, isRequired: false, transformFunction: null }, previousMonthIcon: { classPropertyName: "previousMonthIcon", publicName: "previousMonthIcon", isSignal: true, isRequired: false, transformFunction: null }, nextMonthIcon: { classPropertyName: "nextMonthIcon", publicName: "nextMonthIcon", isSignal: true, isRequired: false, transformFunction: null }, previousMonthLabel: { classPropertyName: "previousMonthLabel", publicName: "previousMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, nextMonthLabel: { classPropertyName: "nextMonthLabel", publicName: "nextMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, footerTemplate: { classPropertyName: "footerTemplate", publicName: "footerTemplate", isSignal: true, isRequired: false, transformFunction: null }, month: { classPropertyName: "month", publicName: "month", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null }, formatter: { classPropertyName: "formatter", publicName: "formatter", isSignal: true, isRequired: false, transformFunction: null }, parser: { classPropertyName: "parser", publicName: "parser", isSignal: true, isRequired: false, transformFunction: null }, timeLabel: { classPropertyName: "timeLabel", publicName: "timeLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", openChange: "openChange", monthChange: "monthChange" }, host: { properties: { "attr.data-open": "isOpen() ? \"\" : null", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-invalid": "invalid() ? \"\" : null", "attr.data-mode": "mode()", "attr.dir": "dir()" }, classAttribute: "frame-date-picker" }, providers: [provideDsValueAccessor$1(FrDatePicker)], viewQueries: [{ propertyName: "calendar", first: true, predicate: FrCalendar$1, descendants: true, isSignal: true }], exportAs: ["frDatePicker"], usesInheritance: true, ngImport: i0, template: `
5097
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrDatePicker, isStandalone: true, selector: "frame-date-picker", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, captionLayout: { classPropertyName: "captionLayout", publicName: "captionLayout", isSignal: true, isRequired: false, transformFunction: null }, numberOfMonths: { classPropertyName: "numberOfMonths", publicName: "numberOfMonths", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, timeZone: { classPropertyName: "timeZone", publicName: "timeZone", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, fromYear: { classPropertyName: "fromYear", publicName: "fromYear", isSignal: true, isRequired: false, transformFunction: null }, toYear: { classPropertyName: "toYear", publicName: "toYear", isSignal: true, isRequired: false, transformFunction: null }, showOutsideDays: { classPropertyName: "showOutsideDays", publicName: "showOutsideDays", isSignal: true, isRequired: false, transformFunction: null }, showWeekNumber: { classPropertyName: "showWeekNumber", publicName: "showWeekNumber", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalidInput: { classPropertyName: "invalidInput", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, readonlyInput: { classPropertyName: "readonlyInput", publicName: "readonlyInput", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, debugVisible: { classPropertyName: "debugVisible", publicName: "debugVisible", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, dialogLabel: { classPropertyName: "dialogLabel", publicName: "dialogLabel", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, dateLabels: { classPropertyName: "dateLabels", publicName: "dateLabels", isSignal: true, isRequired: false, transformFunction: null }, disabledMatcher: { classPropertyName: "disabledMatcher", publicName: "disabledMatcher", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null }, previousMonthTemplate: { classPropertyName: "previousMonthTemplate", publicName: "previousMonthTemplate", isSignal: true, isRequired: false, transformFunction: null }, nextMonthTemplate: { classPropertyName: "nextMonthTemplate", publicName: "nextMonthTemplate", isSignal: true, isRequired: false, transformFunction: null }, previousMonthLabel: { classPropertyName: "previousMonthLabel", publicName: "previousMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, nextMonthLabel: { classPropertyName: "nextMonthLabel", publicName: "nextMonthLabel", isSignal: true, isRequired: false, transformFunction: null }, headerTemplate: { classPropertyName: "headerTemplate", publicName: "headerTemplate", isSignal: true, isRequired: false, transformFunction: null }, footerTemplate: { classPropertyName: "footerTemplate", publicName: "footerTemplate", isSignal: true, isRequired: false, transformFunction: null }, month: { classPropertyName: "month", publicName: "month", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null }, formatter: { classPropertyName: "formatter", publicName: "formatter", isSignal: true, isRequired: false, transformFunction: null }, parser: { classPropertyName: "parser", publicName: "parser", isSignal: true, isRequired: false, transformFunction: null }, timeLabel: { classPropertyName: "timeLabel", publicName: "timeLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", openChange: "openChange", monthChange: "monthChange" }, host: { properties: { "attr.data-open": "isOpen() ? \"\" : null", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-invalid": "invalid() ? \"\" : null", "attr.data-mode": "mode()", "attr.dir": "dir()" }, classAttribute: "frame-date-picker" }, providers: [provideDsValueAccessor$1(FrDatePicker)], viewQueries: [{ propertyName: "calendar", first: true, predicate: FrCalendar$1, descendants: true, isSignal: true }], exportAs: ["frDatePicker"], usesInheritance: true, ngImport: i0, template: `
4754
5098
  <span cdkOverlayOrigin #origin="cdkOverlayOrigin" class="frame-date-picker__anchor">
4755
5099
  @if (editable()) {
4756
5100
  <span class="frame-date-picker__input-wrap">
4757
- <span class="frame-date-picker__icon" aria-hidden="true">{{ icon() }}</span>
5101
+ <span class="frame-date-picker__icon" aria-hidden="true">
5102
+ @if (icon(); as customIcon) {
5103
+ {{ customIcon }}
5104
+ } @else {
5105
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
5106
+ <path d="M8 2v4"></path>
5107
+ <path d="M16 2v4"></path>
5108
+ <rect width="18" height="18" x="3" y="4" rx="2"></rect>
5109
+ <path d="M3 10h18"></path>
5110
+ </svg>
5111
+ }
5112
+ </span>
4758
5113
  <input
4759
5114
  class="frame-date-picker__input"
4760
5115
  type="text"
@@ -4784,7 +5139,18 @@ class FrDatePicker extends FrControlValueAccessor$1 {
4784
5139
  (click)="toggle()"
4785
5140
  (keydown)="handleTriggerKeydown($event)"
4786
5141
  >
4787
- <span class="frame-date-picker__icon" aria-hidden="true">{{ icon() }}</span>
5142
+ <span class="frame-date-picker__icon" aria-hidden="true">
5143
+ @if (icon(); as customIcon) {
5144
+ {{ customIcon }}
5145
+ } @else {
5146
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
5147
+ <path d="M8 2v4"></path>
5148
+ <path d="M16 2v4"></path>
5149
+ <rect width="18" height="18" x="3" y="4" rx="2"></rect>
5150
+ <path d="M3 10h18"></path>
5151
+ </svg>
5152
+ }
5153
+ </span>
4788
5154
  <span class="frame-date-picker__trigger-label" [attr.data-placeholder]="hasValue() ? null : ''">
4789
5155
  {{ displayValue() || placeholder() }}
4790
5156
  </span>
@@ -4805,17 +5171,7 @@ class FrDatePicker extends FrControlValueAccessor$1 {
4805
5171
  (detach)="close()"
4806
5172
  (positionChange)="handlePositionChange($event)"
4807
5173
  >
4808
- <div class="frame-date-picker__content" role="dialog" [attr.aria-label]="dialogLabel()">
4809
- @if (presets().length) {
4810
- <div class="frame-date-picker__presets" aria-label="Date presets">
4811
- @for (preset of presets(); track preset.label) {
4812
- <button class="frame-date-picker__preset" type="button" (click)="selectPreset(preset)">
4813
- {{ preset.label }}
4814
- </button>
4815
- }
4816
- </div>
4817
- }
4818
-
5174
+ <div class="frame-date-picker__content frame-corner-handles" role="dialog" [attr.aria-label]="dialogLabel()">
4819
5175
  <ng-container [ngTemplateOutlet]="headerTemplate() ?? null" />
4820
5176
 
4821
5177
  <frame-calendar
@@ -4837,8 +5193,6 @@ class FrDatePicker extends FrControlValueAccessor$1 {
4837
5193
  [cellTemplate]="cellTemplate()"
4838
5194
  [previousMonthTemplate]="previousMonthTemplate()"
4839
5195
  [nextMonthTemplate]="nextMonthTemplate()"
4840
- [previousMonthIcon]="previousMonthIcon()"
4841
- [nextMonthIcon]="nextMonthIcon()"
4842
5196
  [previousMonthLabel]="previousMonthLabel()"
4843
5197
  [nextMonthLabel]="nextMonthLabel()"
4844
5198
  [month]="month()"
@@ -4860,10 +5214,20 @@ class FrDatePicker extends FrControlValueAccessor$1 {
4860
5214
  </label>
4861
5215
  }
4862
5216
 
5217
+ @if (presets().length) {
5218
+ <div class="frame-date-picker__presets" aria-label="Date presets">
5219
+ @for (preset of presets(); track preset.label) {
5220
+ <button class="frame-date-picker__preset" type="button" (click)="selectPreset(preset)">
5221
+ {{ preset.label }}
5222
+ </button>
5223
+ }
5224
+ </div>
5225
+ }
5226
+
4863
5227
  <ng-container [ngTemplateOutlet]="footerTemplate() ?? null" />
4864
5228
  </div>
4865
5229
  </ng-template>
4866
- `, isInline: true, dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: FrCalendar$1, selector: "frame-calendar", inputs: ["mode", "captionLayout", "numberOfMonths", "firstDayOfWeek", "locale", "timeZone", "dir", "fromYear", "toYear", "showOutsideDays", "showWeekNumber", "disabled", "disabledDates", "dateLabels", "disabledMatcher", "cellTemplate", "previousMonthTemplate", "nextMonthTemplate", "previousMonthIcon", "nextMonthIcon", "previousMonthLabel", "nextMonthLabel", "month", "selected"], outputs: ["selectedChange", "monthChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
5230
+ `, isInline: true, dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: FrCalendar$1, selector: "frame-calendar", inputs: ["mode", "captionLayout", "numberOfMonths", "firstDayOfWeek", "locale", "timeZone", "dir", "fromYear", "toYear", "showOutsideDays", "showWeekNumber", "disabled", "disabledDates", "dateLabels", "disabledMatcher", "cellTemplate", "previousMonthTemplate", "nextMonthTemplate", "previousMonthLabel", "nextMonthLabel", "month", "selected"], outputs: ["selectedChange", "monthChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4867
5231
  }
4868
5232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDatePicker, decorators: [{
4869
5233
  type: Component,
@@ -4885,7 +5249,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
4885
5249
  <span cdkOverlayOrigin #origin="cdkOverlayOrigin" class="frame-date-picker__anchor">
4886
5250
  @if (editable()) {
4887
5251
  <span class="frame-date-picker__input-wrap">
4888
- <span class="frame-date-picker__icon" aria-hidden="true">{{ icon() }}</span>
5252
+ <span class="frame-date-picker__icon" aria-hidden="true">
5253
+ @if (icon(); as customIcon) {
5254
+ {{ customIcon }}
5255
+ } @else {
5256
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
5257
+ <path d="M8 2v4"></path>
5258
+ <path d="M16 2v4"></path>
5259
+ <rect width="18" height="18" x="3" y="4" rx="2"></rect>
5260
+ <path d="M3 10h18"></path>
5261
+ </svg>
5262
+ }
5263
+ </span>
4889
5264
  <input
4890
5265
  class="frame-date-picker__input"
4891
5266
  type="text"
@@ -4915,7 +5290,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
4915
5290
  (click)="toggle()"
4916
5291
  (keydown)="handleTriggerKeydown($event)"
4917
5292
  >
4918
- <span class="frame-date-picker__icon" aria-hidden="true">{{ icon() }}</span>
5293
+ <span class="frame-date-picker__icon" aria-hidden="true">
5294
+ @if (icon(); as customIcon) {
5295
+ {{ customIcon }}
5296
+ } @else {
5297
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
5298
+ <path d="M8 2v4"></path>
5299
+ <path d="M16 2v4"></path>
5300
+ <rect width="18" height="18" x="3" y="4" rx="2"></rect>
5301
+ <path d="M3 10h18"></path>
5302
+ </svg>
5303
+ }
5304
+ </span>
4919
5305
  <span class="frame-date-picker__trigger-label" [attr.data-placeholder]="hasValue() ? null : ''">
4920
5306
  {{ displayValue() || placeholder() }}
4921
5307
  </span>
@@ -4936,17 +5322,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
4936
5322
  (detach)="close()"
4937
5323
  (positionChange)="handlePositionChange($event)"
4938
5324
  >
4939
- <div class="frame-date-picker__content" role="dialog" [attr.aria-label]="dialogLabel()">
4940
- @if (presets().length) {
4941
- <div class="frame-date-picker__presets" aria-label="Date presets">
4942
- @for (preset of presets(); track preset.label) {
4943
- <button class="frame-date-picker__preset" type="button" (click)="selectPreset(preset)">
4944
- {{ preset.label }}
4945
- </button>
4946
- }
4947
- </div>
4948
- }
4949
-
5325
+ <div class="frame-date-picker__content frame-corner-handles" role="dialog" [attr.aria-label]="dialogLabel()">
4950
5326
  <ng-container [ngTemplateOutlet]="headerTemplate() ?? null" />
4951
5327
 
4952
5328
  <frame-calendar
@@ -4968,8 +5344,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
4968
5344
  [cellTemplate]="cellTemplate()"
4969
5345
  [previousMonthTemplate]="previousMonthTemplate()"
4970
5346
  [nextMonthTemplate]="nextMonthTemplate()"
4971
- [previousMonthIcon]="previousMonthIcon()"
4972
- [nextMonthIcon]="nextMonthIcon()"
4973
5347
  [previousMonthLabel]="previousMonthLabel()"
4974
5348
  [nextMonthLabel]="nextMonthLabel()"
4975
5349
  [month]="month()"
@@ -4991,12 +5365,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
4991
5365
  </label>
4992
5366
  }
4993
5367
 
5368
+ @if (presets().length) {
5369
+ <div class="frame-date-picker__presets" aria-label="Date presets">
5370
+ @for (preset of presets(); track preset.label) {
5371
+ <button class="frame-date-picker__preset" type="button" (click)="selectPreset(preset)">
5372
+ {{ preset.label }}
5373
+ </button>
5374
+ }
5375
+ </div>
5376
+ }
5377
+
4994
5378
  <ng-container [ngTemplateOutlet]="footerTemplate() ?? null" />
4995
5379
  </div>
4996
5380
  </ng-template>
4997
5381
  `,
4998
5382
  }]
4999
- }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], captionLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionLayout", required: false }] }], numberOfMonths: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberOfMonths", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], timeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeZone", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], fromYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "fromYear", required: false }] }], toYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "toYear", required: false }] }], showOutsideDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "showOutsideDays", required: false }] }], showWeekNumber: [{ type: i0.Input, args: [{ isSignal: true, alias: "showWeekNumber", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalidInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], editable: [{ type: i0.Input, args: [{ isSignal: true, alias: "editable", required: false }] }], readonlyInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyInput", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], debugVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "debugVisible", required: false }] }], showTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTime", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], dialogLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "dialogLabel", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], dateLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateLabels", required: false }] }], disabledMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledMatcher", required: false }] }], cellTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellTemplate", required: false }] }], previousMonthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthTemplate", required: false }] }], nextMonthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthTemplate", required: false }] }], previousMonthIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthIcon", required: false }] }], nextMonthIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthIcon", required: false }] }], previousMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthLabel", required: false }] }], nextMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthLabel", required: false }] }], headerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTemplate", required: false }] }], footerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerTemplate", required: false }] }], month: [{ type: i0.Input, args: [{ isSignal: true, alias: "month", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }], formatter: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatter", required: false }] }], parser: [{ type: i0.Input, args: [{ isSignal: true, alias: "parser", required: false }] }], timeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeLabel", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], openChange: [{ type: i0.Output, args: ["openChange"] }], monthChange: [{ type: i0.Output, args: ["monthChange"] }], calendar: [{ type: i0.ViewChild, args: [i0.forwardRef(() => FrCalendar$1), { isSignal: true }] }] } });
5383
+ }], ctorParameters: () => [], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], captionLayout: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionLayout", required: false }] }], numberOfMonths: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberOfMonths", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], timeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeZone", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], fromYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "fromYear", required: false }] }], toYear: [{ type: i0.Input, args: [{ isSignal: true, alias: "toYear", required: false }] }], showOutsideDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "showOutsideDays", required: false }] }], showWeekNumber: [{ type: i0.Input, args: [{ isSignal: true, alias: "showWeekNumber", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalidInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], editable: [{ type: i0.Input, args: [{ isSignal: true, alias: "editable", required: false }] }], readonlyInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyInput", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], debugVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "debugVisible", required: false }] }], showTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTime", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], dialogLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "dialogLabel", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabledDates: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledDates", required: false }] }], dateLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateLabels", required: false }] }], disabledMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabledMatcher", required: false }] }], cellTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellTemplate", required: false }] }], previousMonthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthTemplate", required: false }] }], nextMonthTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthTemplate", required: false }] }], previousMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "previousMonthLabel", required: false }] }], nextMonthLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextMonthLabel", required: false }] }], headerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTemplate", required: false }] }], footerTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerTemplate", required: false }] }], month: [{ type: i0.Input, args: [{ isSignal: true, alias: "month", required: false }] }], presets: [{ type: i0.Input, args: [{ isSignal: true, alias: "presets", required: false }] }], formatter: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatter", required: false }] }], parser: [{ type: i0.Input, args: [{ isSignal: true, alias: "parser", required: false }] }], timeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeLabel", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], openChange: [{ type: i0.Output, args: ["openChange"] }], monthChange: [{ type: i0.Output, args: ["monthChange"] }], calendar: [{ type: i0.ViewChild, args: [i0.forwardRef(() => FrCalendar$1), { isSignal: true }] }] } });
5000
5384
  function normalizeValue(value, mode) {
5001
5385
  if (!value) {
5002
5386
  return mode === 'range' ? { from: null, to: null } : null;
@@ -5331,7 +5715,7 @@ class FrDropdownMenuPanel {
5331
5715
  this.tree.leaveInteractiveArea(this.parent.closeDelay());
5332
5716
  }
5333
5717
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5334
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrDropdownMenuPanel, isStandalone: true, selector: "[frDropdownMenuPanel]", host: { attributes: { "tabindex": "-1" }, listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.data-side": "side()" }, classAttribute: "frame-dropdown-menu__content" }, hostDirectives: [{ directive: i1$2.CdkMenu }, { directive: i1$2.CdkTargetMenuAim }], ngImport: i0 });
5718
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrDropdownMenuPanel, isStandalone: true, selector: "[frDropdownMenuPanel]", host: { attributes: { "tabindex": "-1" }, listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.data-side": "side()" }, classAttribute: "frame-dropdown-menu__content frame-corner-handles" }, hostDirectives: [{ directive: i1$4.CdkMenu }, { directive: i1$4.CdkTargetMenuAim }], ngImport: i0 });
5335
5719
  }
5336
5720
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuPanel, decorators: [{
5337
5721
  type: Directive,
@@ -5339,7 +5723,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
5339
5723
  selector: '[frDropdownMenuPanel]',
5340
5724
  hostDirectives: [CdkMenu, CdkTargetMenuAim],
5341
5725
  host: {
5342
- class: 'frame-dropdown-menu__content',
5726
+ class: 'frame-dropdown-menu__content frame-corner-handles',
5343
5727
  '[attr.data-side]': 'side()',
5344
5728
  tabindex: '-1',
5345
5729
  '(mouseenter)': 'handleMouseEnter()',
@@ -5353,7 +5737,7 @@ class FrDropdownMenuItem {
5353
5737
  inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
5354
5738
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
5355
5739
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5356
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuItem, isStandalone: true, selector: "[frDropdownMenuItem]", inputs: { inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-dropdown-menu__item" }, hostDirectives: [{ directive: i1$2.CdkMenuItem }], ngImport: i0 });
5740
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuItem, isStandalone: true, selector: "[frDropdownMenuItem]", inputs: { inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-dropdown-menu__item" }, hostDirectives: [{ directive: i1$4.CdkMenuItem }], ngImport: i0 });
5357
5741
  }
5358
5742
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuItem, decorators: [{
5359
5743
  type: Directive,
@@ -5384,7 +5768,7 @@ class FrDropdownMenuCheckboxItem {
5384
5768
  this.checkboxItem.checked = checked;
5385
5769
  }
5386
5770
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuCheckboxItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5387
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuCheckboxItem, isStandalone: true, selector: "button[frDropdownMenuCheckboxItem]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "checkboxItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-dropdown-menu__item frame-dropdown-menu__checkbox-item" }, hostDirectives: [{ directive: i1$2.CdkMenuItemCheckbox }], ngImport: i0 });
5771
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuCheckboxItem, isStandalone: true, selector: "button[frDropdownMenuCheckboxItem]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "checkboxItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-dropdown-menu__item frame-dropdown-menu__checkbox-item" }, hostDirectives: [{ directive: i1$4.CdkMenuItemCheckbox }], ngImport: i0 });
5388
5772
  }
5389
5773
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuCheckboxItem, decorators: [{
5390
5774
  type: Directive,
@@ -5402,7 +5786,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
5402
5786
  /** Group slot for dropdown menu radio. */
5403
5787
  class FrDropdownMenuRadioGroup {
5404
5788
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5405
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrDropdownMenuRadioGroup, isStandalone: true, selector: "[frDropdownMenuRadioGroup]", host: { classAttribute: "frame-dropdown-menu__radio-group" }, hostDirectives: [{ directive: i1$2.CdkMenuGroup }], ngImport: i0 });
5789
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrDropdownMenuRadioGroup, isStandalone: true, selector: "[frDropdownMenuRadioGroup]", host: { classAttribute: "frame-dropdown-menu__radio-group" }, hostDirectives: [{ directive: i1$4.CdkMenuGroup }], ngImport: i0 });
5406
5790
  }
5407
5791
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuRadioGroup, decorators: [{
5408
5792
  type: Directive,
@@ -5431,7 +5815,7 @@ class FrDropdownMenuRadioItem {
5431
5815
  this.radioItem.checked = checked;
5432
5816
  }
5433
5817
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuRadioItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5434
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuRadioItem, isStandalone: true, selector: "button[frDropdownMenuRadioItem]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "radioItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-dropdown-menu__item frame-dropdown-menu__radio-item" }, hostDirectives: [{ directive: i1$2.CdkMenuItemRadio }], ngImport: i0 });
5818
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuRadioItem, isStandalone: true, selector: "button[frDropdownMenuRadioItem]", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "radioItem.checked ? \"\" : null", "attr.data-inset": "inset() ? \"\" : null", "attr.data-variant": "variant()" }, classAttribute: "frame-dropdown-menu__item frame-dropdown-menu__radio-item" }, hostDirectives: [{ directive: i1$4.CdkMenuItemRadio }], ngImport: i0 });
5435
5819
  }
5436
5820
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuRadioItem, decorators: [{
5437
5821
  type: Directive,
@@ -5646,7 +6030,7 @@ class FrDropdownMenuTrigger extends FrDropdownMenuTriggerBase {
5646
6030
  triggerModeInput = input(null, { ...(ngDevMode ? { debugName: "triggerModeInput" } : /* istanbul ignore next */ {}), alias: 'triggerMode' });
5647
6031
  isSubmenuTrigger = false;
5648
6032
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5649
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuTrigger, isStandalone: true, selector: "[frDropdownMenuTrigger]", inputs: { menuContent: { classPropertyName: "menuContent", publicName: "frDropdownMenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, triggerModeInput: { classPropertyName: "triggerModeInput", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-state": "isOpen() ? \"open\" : \"closed\"" }, classAttribute: "frame-dropdown-menu__trigger" }, usesInheritance: true, hostDirectives: [{ directive: i1$2.CdkMenuTrigger }], ngImport: i0 });
6033
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuTrigger, isStandalone: true, selector: "[frDropdownMenuTrigger]", inputs: { menuContent: { classPropertyName: "menuContent", publicName: "frDropdownMenuTrigger", isSignal: true, isRequired: false, transformFunction: null }, triggerModeInput: { classPropertyName: "triggerModeInput", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-state": "isOpen() ? \"open\" : \"closed\"" }, classAttribute: "frame-dropdown-menu__trigger" }, usesInheritance: true, hostDirectives: [{ directive: i1$4.CdkMenuTrigger }], ngImport: i0 });
5650
6034
  }
5651
6035
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuTrigger, decorators: [{
5652
6036
  type: Directive,
@@ -5667,7 +6051,7 @@ class FrDropdownMenuSubTrigger extends FrDropdownMenuTriggerBase {
5667
6051
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
5668
6052
  isSubmenuTrigger = true;
5669
6053
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuSubTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5670
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuSubTrigger, isStandalone: true, selector: "[frDropdownMenuSubTrigger]", inputs: { menuContent: { classPropertyName: "menuContent", publicName: "frDropdownMenuSubTrigger", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, triggerModeInput: { classPropertyName: "triggerModeInput", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-inset": "inset() ? \"\" : null", "attr.data-state": "isOpen() ? \"open\" : \"closed\"", "attr.data-variant": "variant()" }, classAttribute: "frame-dropdown-menu__item frame-dropdown-menu__sub-trigger" }, usesInheritance: true, hostDirectives: [{ directive: i1$2.CdkMenuItem }, { directive: i1$2.CdkMenuTrigger }], ngImport: i0 });
6054
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrDropdownMenuSubTrigger, isStandalone: true, selector: "[frDropdownMenuSubTrigger]", inputs: { menuContent: { classPropertyName: "menuContent", publicName: "frDropdownMenuSubTrigger", isSignal: true, isRequired: false, transformFunction: null }, inset: { classPropertyName: "inset", publicName: "inset", isSignal: true, isRequired: false, transformFunction: null }, triggerModeInput: { classPropertyName: "triggerModeInput", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-inset": "inset() ? \"\" : null", "attr.data-state": "isOpen() ? \"open\" : \"closed\"", "attr.data-variant": "variant()" }, classAttribute: "frame-dropdown-menu__item frame-dropdown-menu__sub-trigger" }, usesInheritance: true, hostDirectives: [{ directive: i1$4.CdkMenuItem }, { directive: i1$4.CdkMenuTrigger }], ngImport: i0 });
5671
6055
  }
5672
6056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrDropdownMenuSubTrigger, decorators: [{
5673
6057
  type: Directive,
@@ -5696,14 +6080,14 @@ class FrEmpty {
5696
6080
  orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
5697
6081
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
5698
6082
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrEmpty, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5699
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrEmpty, isStandalone: true, selector: "[frEmpty], frame-empty", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-orientation": "orientation()", "attr.data-variant": "variant()" }, classAttribute: "frame-empty" }, ngImport: i0 });
6083
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrEmpty, isStandalone: true, selector: "[frEmpty], frame-empty", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-orientation": "orientation()", "attr.data-variant": "variant()" }, classAttribute: "frame-empty frame-corner-handles" }, ngImport: i0 });
5700
6084
  }
5701
6085
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrEmpty, decorators: [{
5702
6086
  type: Directive,
5703
6087
  args: [{
5704
6088
  selector: '[frEmpty], frame-empty',
5705
6089
  host: {
5706
- class: 'frame-empty',
6090
+ class: 'frame-empty frame-corner-handles',
5707
6091
  '[attr.data-orientation]': 'orientation()',
5708
6092
  '[attr.data-variant]': 'variant()',
5709
6093
  },
@@ -6113,14 +6497,14 @@ class FrHoverCardPanel {
6113
6497
  this.root.leaveInteractiveArea();
6114
6498
  }
6115
6499
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrHoverCardPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6116
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrHoverCardPanel, isStandalone: true, selector: "[frHoverCardPanel]", host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.data-side": "content.side()" }, classAttribute: "frame-hover-card__content" }, ngImport: i0 });
6500
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrHoverCardPanel, isStandalone: true, selector: "[frHoverCardPanel]", host: { listeners: { "mouseenter": "handleMouseEnter()", "mouseleave": "handleMouseLeave()" }, properties: { "attr.data-side": "content.side()" }, classAttribute: "frame-hover-card__content frame-corner-handles" }, ngImport: i0 });
6117
6501
  }
6118
6502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrHoverCardPanel, decorators: [{
6119
6503
  type: Directive,
6120
6504
  args: [{
6121
6505
  selector: '[frHoverCardPanel]',
6122
6506
  host: {
6123
- class: 'frame-hover-card__content',
6507
+ class: 'frame-hover-card__content frame-corner-handles',
6124
6508
  '[attr.data-side]': 'content.side()',
6125
6509
  '(mouseenter)': 'handleMouseEnter()',
6126
6510
  '(mouseleave)': 'handleMouseLeave()',
@@ -6432,14 +6816,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
6432
6816
  /** Control slot for input. */
6433
6817
  class FrInputControl {
6434
6818
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrInputControl, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6435
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrInputControl, isStandalone: true, selector: "[frInputControl], frame-input-control", host: { classAttribute: "frame-input-control" }, ngImport: i0 });
6819
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrInputControl, isStandalone: true, selector: "[frInputControl], frame-input-control", host: { classAttribute: "frame-input-control frame-corner-handles" }, ngImport: i0 });
6436
6820
  }
6437
6821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrInputControl, decorators: [{
6438
6822
  type: Directive,
6439
6823
  args: [{
6440
6824
  selector: '[frInputControl], frame-input-control',
6441
6825
  host: {
6442
- class: 'frame-input-control',
6826
+ class: 'frame-input-control frame-corner-handles',
6443
6827
  },
6444
6828
  }]
6445
6829
  }] });
@@ -6704,7 +7088,7 @@ class FrInputOtp extends FrControlValueAccessor$1 {
6704
7088
  return characters.slice(0, this.maxLength()).join('');
6705
7089
  }
6706
7090
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrInputOtp, deps: null, target: i0.ɵɵFactoryTarget.Component });
6707
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.16", type: FrInputOtp, isStandalone: true, selector: "frame-input-otp", inputs: { maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalidInput: { classPropertyName: "invalidInput", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", complete: "complete" }, host: { attributes: { "role": "group" }, listeners: { "click": "focus(activeIndex())" }, properties: { "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-invalid": "invalid() ? \"\" : null", "attr.data-complete": "isComplete() ? \"\" : null" }, classAttribute: "frame-input-otp" }, providers: [
7091
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.16", type: FrInputOtp, isStandalone: true, selector: "frame-input-otp", inputs: { maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, pattern: { classPropertyName: "pattern", publicName: "pattern", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalidInput: { classPropertyName: "invalidInput", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", complete: "complete" }, host: { attributes: { "role": "group" }, listeners: { "click": "focus(activeIndex())" }, properties: { "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-invalid": "invalid() ? \"\" : null", "attr.data-complete": "isComplete() ? \"\" : null" }, classAttribute: "frame-input-otp frame-corner-handles" }, providers: [
6708
7092
  provideDsValueAccessor$1(FrInputOtp),
6709
7093
  {
6710
7094
  provide: FR_INPUT_OTP_CONTROLLER,
@@ -6750,7 +7134,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
6750
7134
  ],
6751
7135
  changeDetection: ChangeDetectionStrategy.OnPush,
6752
7136
  host: {
6753
- class: 'frame-input-otp',
7137
+ class: 'frame-input-otp frame-corner-handles',
6754
7138
  role: 'group',
6755
7139
  '[attr.data-disabled]': 'disabled() ? "" : null',
6756
7140
  '[attr.data-invalid]': 'invalid() ? "" : null',
@@ -6874,14 +7258,14 @@ class FrItem {
6874
7258
  size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
6875
7259
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
6876
7260
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6877
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrItem, isStandalone: true, selector: "[frItem], frame-item", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-interactive": "interactive() ? \"\" : null", "attr.data-size": "size()", "attr.data-variant": "variant()" }, classAttribute: "frame-item" }, ngImport: i0 });
7261
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrItem, isStandalone: true, selector: "[frItem], frame-item", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-interactive": "interactive() ? \"\" : null", "attr.data-size": "size()", "attr.data-variant": "variant()" }, classAttribute: "frame-item frame-corner-handles" }, ngImport: i0 });
6878
7262
  }
6879
7263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrItem, decorators: [{
6880
7264
  type: Directive,
6881
7265
  args: [{
6882
7266
  selector: '[frItem], frame-item',
6883
7267
  host: {
6884
- class: 'frame-item',
7268
+ class: 'frame-item frame-corner-handles',
6885
7269
  '[attr.data-disabled]': 'disabled() ? "" : null',
6886
7270
  '[attr.data-interactive]': 'interactive() ? "" : null',
6887
7271
  '[attr.data-size]': 'size()',
@@ -7025,7 +7409,7 @@ class FrMenuBar {
7025
7409
  closeDelay = input(140, ...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
7026
7410
  triggerMode = input('both', ...(ngDevMode ? [{ debugName: "triggerMode" }] : /* istanbul ignore next */ []));
7027
7411
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBar, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7028
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrMenuBar, isStandalone: true, selector: "[frMenuBar], frame-menubar", inputs: { closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null }, triggerMode: { classPropertyName: "triggerMode", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "menubar" }, classAttribute: "frame-menubar" }, providers: [
7412
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrMenuBar, isStandalone: true, selector: "[frMenuBar], frame-menubar", inputs: { closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null }, triggerMode: { classPropertyName: "triggerMode", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "menubar" }, classAttribute: "frame-menubar frame-corner-handles" }, providers: [
7029
7413
  FrDropdownMenuTree$1,
7030
7414
  {
7031
7415
  provide: FR_DROPDOWN_MENU_PARENT$1,
@@ -7053,7 +7437,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7053
7437
  },
7054
7438
  ],
7055
7439
  host: {
7056
- class: 'frame-menubar',
7440
+ class: 'frame-menubar frame-corner-handles',
7057
7441
  role: 'menubar',
7058
7442
  },
7059
7443
  }]
@@ -7076,7 +7460,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7076
7460
  /** Trigger control for menu bar. */
7077
7461
  class FrMenuBarTrigger {
7078
7462
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7079
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarTrigger, isStandalone: true, selector: "[frMenuBarTrigger]", host: { attributes: { "role": "menuitem" }, classAttribute: "frame-menubar__trigger" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuTrigger, inputs: ["frDropdownMenuTrigger", "frMenuBarTrigger", "triggerMode", "triggerMode"] }], ngImport: i0 });
7463
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarTrigger, isStandalone: true, selector: "[frMenuBarTrigger]", host: { attributes: { "role": "menuitem" }, classAttribute: "frame-menubar__trigger" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuTrigger, inputs: ["frDropdownMenuTrigger", "frMenuBarTrigger", "triggerMode", "triggerMode"] }], ngImport: i0 });
7080
7464
  }
7081
7465
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarTrigger, decorators: [{
7082
7466
  type: Directive,
@@ -7128,7 +7512,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7128
7512
  /** Panel slot for menu bar. */
7129
7513
  class FrMenuBarPanel {
7130
7514
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7131
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarPanel, isStandalone: true, selector: "[frMenuBarPanel]", host: { classAttribute: "frame-menubar__content" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuPanel }], ngImport: i0 });
7515
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarPanel, isStandalone: true, selector: "[frMenuBarPanel]", host: { classAttribute: "frame-menubar__content" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuPanel }], ngImport: i0 });
7132
7516
  }
7133
7517
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarPanel, decorators: [{
7134
7518
  type: Directive,
@@ -7143,7 +7527,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7143
7527
  /** Item slot for menu bar. */
7144
7528
  class FrMenuBarItem {
7145
7529
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7146
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarItem, isStandalone: true, selector: "[frMenuBarItem]", host: { classAttribute: "frame-menubar__item" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuItem, inputs: ["inset", "inset", "variant", "variant"] }], ngImport: i0 });
7530
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarItem, isStandalone: true, selector: "[frMenuBarItem]", host: { classAttribute: "frame-menubar__item" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuItem, inputs: ["inset", "inset", "variant", "variant"] }], ngImport: i0 });
7147
7531
  }
7148
7532
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarItem, decorators: [{
7149
7533
  type: Directive,
@@ -7163,7 +7547,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7163
7547
  /** Item slot for menu bar checkbox. */
7164
7548
  class FrMenuBarCheckboxItem {
7165
7549
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarCheckboxItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7166
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarCheckboxItem, isStandalone: true, selector: "button[frMenuBarCheckboxItem]", host: { classAttribute: "frame-menubar__checkbox-item" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuCheckboxItem, inputs: ["checked", "checked", "inset", "inset", "variant", "variant"] }], ngImport: i0 });
7550
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarCheckboxItem, isStandalone: true, selector: "button[frMenuBarCheckboxItem]", host: { classAttribute: "frame-menubar__checkbox-item" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuCheckboxItem, inputs: ["checked", "checked", "inset", "inset", "variant", "variant"] }], ngImport: i0 });
7167
7551
  }
7168
7552
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarCheckboxItem, decorators: [{
7169
7553
  type: Directive,
@@ -7183,7 +7567,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7183
7567
  /** Group slot for menu bar radio. */
7184
7568
  class FrMenuBarRadioGroup {
7185
7569
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7186
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarRadioGroup, isStandalone: true, selector: "[frMenuBarRadioGroup]", host: { classAttribute: "frame-menubar__radio-group" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuRadioGroup }], ngImport: i0 });
7570
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarRadioGroup, isStandalone: true, selector: "[frMenuBarRadioGroup]", host: { classAttribute: "frame-menubar__radio-group" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuRadioGroup }], ngImport: i0 });
7187
7571
  }
7188
7572
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarRadioGroup, decorators: [{
7189
7573
  type: Directive,
@@ -7198,7 +7582,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7198
7582
  /** Item slot for menu bar radio. */
7199
7583
  class FrMenuBarRadioItem {
7200
7584
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarRadioItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7201
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarRadioItem, isStandalone: true, selector: "button[frMenuBarRadioItem]", host: { classAttribute: "frame-menubar__radio-item" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuRadioItem, inputs: ["checked", "checked", "inset", "inset", "variant", "variant"] }], ngImport: i0 });
7585
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarRadioItem, isStandalone: true, selector: "button[frMenuBarRadioItem]", host: { classAttribute: "frame-menubar__radio-item" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuRadioItem, inputs: ["checked", "checked", "inset", "inset", "variant", "variant"] }], ngImport: i0 });
7202
7586
  }
7203
7587
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarRadioItem, decorators: [{
7204
7588
  type: Directive,
@@ -7218,7 +7602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7218
7602
  /** Label slot for menu bar. */
7219
7603
  class FrMenuBarLabel {
7220
7604
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7221
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarLabel, isStandalone: true, selector: "[frMenuBarLabel]", host: { classAttribute: "frame-menubar__label" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuLabel, inputs: ["inset", "inset"] }], ngImport: i0 });
7605
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarLabel, isStandalone: true, selector: "[frMenuBarLabel]", host: { classAttribute: "frame-menubar__label" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuLabel, inputs: ["inset", "inset"] }], ngImport: i0 });
7222
7606
  }
7223
7607
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarLabel, decorators: [{
7224
7608
  type: Directive,
@@ -7238,7 +7622,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7238
7622
  /** Separator slot for menu bar. */
7239
7623
  class FrMenuBarSeparator {
7240
7624
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7241
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarSeparator, isStandalone: true, selector: "[frMenuBarSeparator]", host: { classAttribute: "frame-menubar__separator" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuSeparator }], ngImport: i0 });
7625
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarSeparator, isStandalone: true, selector: "[frMenuBarSeparator]", host: { classAttribute: "frame-menubar__separator" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuSeparator }], ngImport: i0 });
7242
7626
  }
7243
7627
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarSeparator, decorators: [{
7244
7628
  type: Directive,
@@ -7253,7 +7637,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7253
7637
  /** Shortcut slot for menu bar. */
7254
7638
  class FrMenuBarShortcut {
7255
7639
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarShortcut, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7256
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarShortcut, isStandalone: true, selector: "[frMenuBarShortcut]", host: { classAttribute: "frame-menubar__shortcut" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuShortcut }], ngImport: i0 });
7640
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarShortcut, isStandalone: true, selector: "[frMenuBarShortcut]", host: { classAttribute: "frame-menubar__shortcut" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuShortcut }], ngImport: i0 });
7257
7641
  }
7258
7642
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarShortcut, decorators: [{
7259
7643
  type: Directive,
@@ -7268,7 +7652,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7268
7652
  /** Indicator slot for menu bar item. */
7269
7653
  class FrMenuBarItemIndicator {
7270
7654
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarItemIndicator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7271
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarItemIndicator, isStandalone: true, selector: "[frMenuBarItemIndicator]", host: { classAttribute: "frame-menubar__indicator" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuItemIndicator }], ngImport: i0 });
7655
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarItemIndicator, isStandalone: true, selector: "[frMenuBarItemIndicator]", host: { classAttribute: "frame-menubar__indicator" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuItemIndicator }], ngImport: i0 });
7272
7656
  }
7273
7657
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarItemIndicator, decorators: [{
7274
7658
  type: Directive,
@@ -7283,7 +7667,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7283
7667
  /** Nested submenu scope inside a menubar. */
7284
7668
  class FrMenuBarSub {
7285
7669
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarSub, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7286
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarSub, isStandalone: true, selector: "[frMenuBarSub]", host: { classAttribute: "frame-menubar__sub" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuSub, inputs: ["closeDelay", "closeDelay", "triggerMode", "triggerMode"] }], ngImport: i0 });
7670
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarSub, isStandalone: true, selector: "[frMenuBarSub]", host: { classAttribute: "frame-menubar__sub" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuSub, inputs: ["closeDelay", "closeDelay", "triggerMode", "triggerMode"] }], ngImport: i0 });
7287
7671
  }
7288
7672
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarSub, decorators: [{
7289
7673
  type: Directive,
@@ -7303,7 +7687,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7303
7687
  /** Trigger control for menu bar sub. */
7304
7688
  class FrMenuBarSubTrigger {
7305
7689
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarSubTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7306
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarSubTrigger, isStandalone: true, selector: "[frMenuBarSubTrigger]", host: { classAttribute: "frame-menubar__sub-trigger" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuSubTrigger, inputs: ["frDropdownMenuSubTrigger", "frMenuBarSubTrigger", "inset", "inset", "triggerMode", "triggerMode", "variant", "variant"] }], ngImport: i0 });
7690
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrMenuBarSubTrigger, isStandalone: true, selector: "[frMenuBarSubTrigger]", host: { classAttribute: "frame-menubar__sub-trigger" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuSubTrigger, inputs: ["frDropdownMenuSubTrigger", "frMenuBarSubTrigger", "inset", "inset", "triggerMode", "triggerMode", "variant", "variant"] }], ngImport: i0 });
7307
7691
  }
7308
7692
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrMenuBarSubTrigger, decorators: [{
7309
7693
  type: Directive,
@@ -7410,7 +7794,7 @@ class FrModalPanel {
7410
7794
  size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
7411
7795
  stickyFooter = input(false, { ...(ngDevMode ? { debugName: "stickyFooter" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
7412
7796
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrModalPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
7413
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrModalPanel, isStandalone: true, selector: "[frModalPanel], frame-modal-panel", inputs: { scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, stickyFooter: { classPropertyName: "stickyFooter", publicName: "stickyFooter", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-scrollable": "scrollable() ? \"\" : null", "attr.data-sticky-footer": "stickyFooter() ? \"\" : null", "attr.data-size": "size()", "style.height": "panelLayout?.height ?? null", "style.max-height": "panelLayout?.maxHeight ?? null", "style.max-width": "panelLayout?.maxWidth ?? null", "style.min-height": "panelLayout?.minHeight ?? null", "style.min-width": "panelLayout?.minWidth ?? null", "style.width": "panelLayout?.width ?? null" }, classAttribute: "frame-modal__panel" }, ngImport: i0, template: `
7797
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrModalPanel, isStandalone: true, selector: "[frModalPanel], frame-modal-panel", inputs: { scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, stickyFooter: { classPropertyName: "stickyFooter", publicName: "stickyFooter", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-scrollable": "scrollable() ? \"\" : null", "attr.data-sticky-footer": "stickyFooter() ? \"\" : null", "attr.data-size": "size()", "style.height": "panelLayout?.height ?? null", "style.max-height": "panelLayout?.maxHeight ?? null", "style.max-width": "panelLayout?.maxWidth ?? null", "style.min-height": "panelLayout?.minHeight ?? null", "style.min-width": "panelLayout?.minWidth ?? null", "style.width": "panelLayout?.width ?? null" }, classAttribute: "frame-modal__panel frame-corner-handles" }, ngImport: i0, template: `
7414
7798
  <ng-content />
7415
7799
  @if (showCloseButton()) {
7416
7800
  <button
@@ -7419,7 +7803,10 @@ class FrModalPanel {
7419
7803
  type="button"
7420
7804
  aria-label="Close dialog"
7421
7805
  >
7422
- <span aria-hidden="true">×</span>
7806
+ <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7807
+ <path d="M18 6 6 18"></path>
7808
+ <path d="m6 6 12 12"></path>
7809
+ </svg>
7423
7810
  </button>
7424
7811
  }
7425
7812
  `, isInline: true, dependencies: [{ kind: "directive", type: FrModalClose, selector: "[frModalClose]", inputs: ["frModalClose"] }] });
@@ -7429,7 +7816,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7429
7816
  args: [{
7430
7817
  selector: '[frModalPanel], frame-modal-panel',
7431
7818
  host: {
7432
- class: 'frame-modal__panel',
7819
+ class: 'frame-modal__panel frame-corner-handles',
7433
7820
  '[attr.data-scrollable]': 'scrollable() ? "" : null',
7434
7821
  '[attr.data-sticky-footer]': 'stickyFooter() ? "" : null',
7435
7822
  '[attr.data-size]': 'size()',
@@ -7449,7 +7836,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7449
7836
  type="button"
7450
7837
  aria-label="Close dialog"
7451
7838
  >
7452
- <span aria-hidden="true">×</span>
7839
+ <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
7840
+ <path d="M18 6 6 18"></path>
7841
+ <path d="m6 6 12 12"></path>
7842
+ </svg>
7453
7843
  </button>
7454
7844
  }
7455
7845
  `,
@@ -7902,7 +8292,7 @@ class FrNavigationMenu {
7902
8292
  closeDelay = input(140, ...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
7903
8293
  triggerMode = input('both', ...(ngDevMode ? [{ debugName: "triggerMode" }] : /* istanbul ignore next */ []));
7904
8294
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrNavigationMenu, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7905
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrNavigationMenu, isStandalone: true, selector: "[frNavigationMenu], frame-navigation-menu", inputs: { closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null }, triggerMode: { classPropertyName: "triggerMode", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation" }, classAttribute: "frame-navigation-menu" }, providers: [
8295
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrNavigationMenu, isStandalone: true, selector: "[frNavigationMenu], frame-navigation-menu", inputs: { closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null }, triggerMode: { classPropertyName: "triggerMode", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "navigation" }, classAttribute: "frame-navigation-menu frame-corner-handles" }, providers: [
7906
8296
  FrDropdownMenuTree$1,
7907
8297
  {
7908
8298
  provide: FR_DROPDOWN_MENU_PARENT$1,
@@ -7930,7 +8320,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7930
8320
  },
7931
8321
  ],
7932
8322
  host: {
7933
- class: 'frame-navigation-menu',
8323
+ class: 'frame-navigation-menu frame-corner-handles',
7934
8324
  role: 'navigation',
7935
8325
  },
7936
8326
  }]
@@ -7968,7 +8358,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
7968
8358
  /** Trigger control for navigation menu. */
7969
8359
  class FrNavigationMenuTrigger {
7970
8360
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrNavigationMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
7971
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrNavigationMenuTrigger, isStandalone: true, selector: "[frNavigationMenuTrigger]", host: { attributes: { "type": "button" }, classAttribute: "frame-navigation-menu__trigger" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuTrigger, inputs: ["frDropdownMenuTrigger", "frNavigationMenuTrigger", "triggerMode", "triggerMode"] }], ngImport: i0 });
8361
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrNavigationMenuTrigger, isStandalone: true, selector: "[frNavigationMenuTrigger]", host: { attributes: { "type": "button" }, classAttribute: "frame-navigation-menu__trigger" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuTrigger, inputs: ["frDropdownMenuTrigger", "frNavigationMenuTrigger", "triggerMode", "triggerMode"] }], ngImport: i0 });
7972
8362
  }
7973
8363
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrNavigationMenuTrigger, decorators: [{
7974
8364
  type: Directive,
@@ -8020,7 +8410,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8020
8410
  /** Panel slot for navigation menu. */
8021
8411
  class FrNavigationMenuPanel {
8022
8412
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrNavigationMenuPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8023
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrNavigationMenuPanel, isStandalone: true, selector: "[frNavigationMenuPanel]", host: { classAttribute: "frame-navigation-menu__content" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuPanel }], ngImport: i0 });
8413
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrNavigationMenuPanel, isStandalone: true, selector: "[frNavigationMenuPanel]", host: { classAttribute: "frame-navigation-menu__content" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuPanel }], ngImport: i0 });
8024
8414
  }
8025
8415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrNavigationMenuPanel, decorators: [{
8026
8416
  type: Directive,
@@ -8140,14 +8530,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8140
8530
  /** Viewport slot for navigation menu. */
8141
8531
  class FrNavigationMenuViewport {
8142
8532
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrNavigationMenuViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8143
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrNavigationMenuViewport, isStandalone: true, selector: "[frNavigationMenuViewport], frame-navigation-menu-viewport", host: { classAttribute: "frame-navigation-menu__viewport" }, ngImport: i0 });
8533
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrNavigationMenuViewport, isStandalone: true, selector: "[frNavigationMenuViewport], frame-navigation-menu-viewport", host: { classAttribute: "frame-navigation-menu__viewport frame-corner-handles" }, ngImport: i0 });
8144
8534
  }
8145
8535
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrNavigationMenuViewport, decorators: [{
8146
8536
  type: Directive,
8147
8537
  args: [{
8148
8538
  selector: '[frNavigationMenuViewport], frame-navigation-menu-viewport',
8149
8539
  host: {
8150
- class: 'frame-navigation-menu__viewport',
8540
+ class: 'frame-navigation-menu__viewport frame-corner-handles',
8151
8541
  },
8152
8542
  }]
8153
8543
  }] });
@@ -8325,7 +8715,11 @@ class FrPaginationPrevious {
8325
8715
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrPaginationPrevious, deps: [], target: i0.ɵɵFactoryTarget.Component });
8326
8716
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrPaginationPrevious, isStandalone: true, selector: "a[frPaginationPrevious], button[frPaginationPrevious]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "handleClick($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-disabled": "isDisabled() ? \"true\" : null", "attr.data-disabled": "isDisabled() ? \"\" : null", "attr.data-icon-only": "iconOnly() ? \"\" : null", "attr.disabled": "isDisabled() ? \"\" : null", "attr.tabindex": "isDisabled() ? \"-1\" : null" }, classAttribute: "frame-pagination__link frame-pagination__previous" }, ngImport: i0, template: `
8327
8717
  <span class="frame-pagination__control-icon" aria-hidden="true">
8328
- <ng-content select="[frPaginationIcon]">‹</ng-content>
8718
+ <ng-content select="[frPaginationIcon]">
8719
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
8720
+ <path d="m15 18-6-6 6-6"></path>
8721
+ </svg>
8722
+ </ng-content>
8329
8723
  </span>
8330
8724
  @if (!iconOnly()) {
8331
8725
  <span class="frame-pagination__control-text">{{ text() }}</span>
@@ -8348,7 +8742,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8348
8742
  },
8349
8743
  template: `
8350
8744
  <span class="frame-pagination__control-icon" aria-hidden="true">
8351
- <ng-content select="[frPaginationIcon]">‹</ng-content>
8745
+ <ng-content select="[frPaginationIcon]">
8746
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
8747
+ <path d="m15 18-6-6 6-6"></path>
8748
+ </svg>
8749
+ </ng-content>
8352
8750
  </span>
8353
8751
  @if (!iconOnly()) {
8354
8752
  <span class="frame-pagination__control-text">{{ text() }}</span>
@@ -8381,7 +8779,11 @@ class FrPaginationNext {
8381
8779
  <span class="frame-pagination__control-text">{{ text() }}</span>
8382
8780
  }
8383
8781
  <span class="frame-pagination__control-icon" aria-hidden="true">
8384
- <ng-content select="[frPaginationIcon]">›</ng-content>
8782
+ <ng-content select="[frPaginationIcon]">
8783
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
8784
+ <path d="m9 18 6-6-6-6"></path>
8785
+ </svg>
8786
+ </ng-content>
8385
8787
  </span>
8386
8788
  `, isInline: true });
8387
8789
  }
@@ -8404,7 +8806,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8404
8806
  <span class="frame-pagination__control-text">{{ text() }}</span>
8405
8807
  }
8406
8808
  <span class="frame-pagination__control-icon" aria-hidden="true">
8407
- <ng-content select="[frPaginationIcon]">›</ng-content>
8809
+ <ng-content select="[frPaginationIcon]">
8810
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
8811
+ <path d="m9 18 6-6-6-6"></path>
8812
+ </svg>
8813
+ </ng-content>
8408
8814
  </span>
8409
8815
  `,
8410
8816
  }]
@@ -8513,14 +8919,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8513
8919
  class FrPopoverPanel {
8514
8920
  content = inject(FrPopoverContent);
8515
8921
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrPopoverPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8516
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrPopoverPanel, isStandalone: true, selector: "[frPopoverPanel]", host: { attributes: { "role": "dialog", "tabindex": "-1" }, properties: { "attr.data-side": "content.side()" }, classAttribute: "frame-popover__content" }, ngImport: i0 });
8922
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrPopoverPanel, isStandalone: true, selector: "[frPopoverPanel]", host: { attributes: { "role": "dialog", "tabindex": "-1" }, properties: { "attr.data-side": "content.side()" }, classAttribute: "frame-popover__content frame-corner-handles" }, ngImport: i0 });
8517
8923
  }
8518
8924
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrPopoverPanel, decorators: [{
8519
8925
  type: Directive,
8520
8926
  args: [{
8521
8927
  selector: '[frPopoverPanel]',
8522
8928
  host: {
8523
- class: 'frame-popover__content',
8929
+ class: 'frame-popover__content frame-corner-handles',
8524
8930
  '[attr.data-side]': 'content.side()',
8525
8931
  role: 'dialog',
8526
8932
  tabindex: '-1',
@@ -8964,14 +9370,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8964
9370
  /** Card layout option for radio group choices. */
8965
9371
  class FrRadioGroupCard {
8966
9372
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrRadioGroupCard, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8967
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrRadioGroupCard, isStandalone: true, selector: "label[frRadioGroupCard]", host: { classAttribute: "frame-radio-group__card" }, ngImport: i0 });
9373
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrRadioGroupCard, isStandalone: true, selector: "label[frRadioGroupCard]", host: { classAttribute: "frame-radio-group__card frame-corner-handles" }, ngImport: i0 });
8968
9374
  }
8969
9375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrRadioGroupCard, decorators: [{
8970
9376
  type: Directive,
8971
9377
  args: [{
8972
9378
  selector: 'label[frRadioGroupCard]',
8973
9379
  host: {
8974
- class: 'frame-radio-group__card',
9380
+ class: 'frame-radio-group__card frame-corner-handles',
8975
9381
  },
8976
9382
  }]
8977
9383
  }] });
@@ -9200,7 +9606,7 @@ class FrResizablePanelGroup {
9200
9606
  return panel.hasAttribute('data-collapsible');
9201
9607
  }
9202
9608
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrResizablePanelGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9203
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrResizablePanelGroup, isStandalone: true, selector: "[frResizablePanelGroup], frame-resizable-panel-group", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutChange: "layoutChange" }, host: { properties: { "attr.data-orientation": "orientation()", "attr.data-disabled": "disabled() ? \"\" : null" }, classAttribute: "frame-resizable" }, exportAs: ["frResizablePanelGroup"], ngImport: i0 });
9609
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrResizablePanelGroup, isStandalone: true, selector: "[frResizablePanelGroup], frame-resizable-panel-group", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutChange: "layoutChange" }, host: { properties: { "attr.data-orientation": "orientation()", "attr.data-disabled": "disabled() ? \"\" : null" }, classAttribute: "frame-resizable frame-corner-handles" }, exportAs: ["frResizablePanelGroup"], ngImport: i0 });
9204
9610
  }
9205
9611
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrResizablePanelGroup, decorators: [{
9206
9612
  type: Directive,
@@ -9208,7 +9614,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
9208
9614
  selector: '[frResizablePanelGroup], frame-resizable-panel-group',
9209
9615
  exportAs: 'frResizablePanelGroup',
9210
9616
  host: {
9211
- class: 'frame-resizable',
9617
+ class: 'frame-resizable frame-corner-handles',
9212
9618
  '[attr.data-orientation]': 'orientation()',
9213
9619
  '[attr.data-disabled]': 'disabled() ? "" : null',
9214
9620
  },
@@ -9373,7 +9779,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
9373
9779
  class FrSelectPanel {
9374
9780
  content = inject(FrSelectContent);
9375
9781
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelectPanel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9376
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrSelectPanel, isStandalone: true, selector: "[frSelectPanel], frame-select-panel", host: { properties: { "attr.data-position": "content.position()", "style.min-width.px": "content.panelMinWidth()" }, classAttribute: "frame-select__content" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuPanel }], ngImport: i0 });
9782
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrSelectPanel, isStandalone: true, selector: "[frSelectPanel], frame-select-panel", host: { properties: { "attr.data-position": "content.position()", "style.min-width.px": "content.panelMinWidth()" }, classAttribute: "frame-select__content" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuPanel }], ngImport: i0 });
9377
9783
  }
9378
9784
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelectPanel, decorators: [{
9379
9785
  type: Directive,
@@ -9498,7 +9904,7 @@ class FrSelect extends FrControlValueAccessor$1 {
9498
9904
  return this.menuContent() ?? this.dropdownTrigger.menuContent();
9499
9905
  }
9500
9906
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelect, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9501
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrSelect, isStandalone: true, selector: "button[frSelect]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, menuContent: { classPropertyName: "menuContent", publicName: "frSelect", isSignal: true, isRequired: false, transformFunction: null }, debugVisible: { classPropertyName: "debugVisible", publicName: "debugVisible", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, indicatorPosition: { classPropertyName: "indicatorPosition", publicName: "indicatorPosition", isSignal: true, isRequired: false, transformFunction: null }, invalidInput: { classPropertyName: "invalidInput", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "aria-autocomplete": "none", "aria-haspopup": "listbox", "type": "button", "role": "combobox" }, properties: { "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.aria-invalid": "invalid() ? \"true\" : null", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-invalid": "invalid() ? \"\" : null", "attr.disabled": "disabled() ? \"\" : null" }, classAttribute: "frame-select__trigger" }, providers: [provideDsValueAccessor$1(FrSelect)], usesInheritance: true, hostDirectives: [{ directive: i1$3.FrDropdownMenu, inputs: ["closeDelay", "closeDelay", "triggerMode", "triggerMode"] }, { directive: i1$3.FrDropdownMenuTrigger }], ngImport: i0 });
9907
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrSelect, isStandalone: true, selector: "button[frSelect]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, menuContent: { classPropertyName: "menuContent", publicName: "frSelect", isSignal: true, isRequired: false, transformFunction: null }, debugVisible: { classPropertyName: "debugVisible", publicName: "debugVisible", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, indicatorPosition: { classPropertyName: "indicatorPosition", publicName: "indicatorPosition", isSignal: true, isRequired: false, transformFunction: null }, invalidInput: { classPropertyName: "invalidInput", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "aria-autocomplete": "none", "aria-haspopup": "listbox", "type": "button", "role": "combobox" }, properties: { "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.aria-invalid": "invalid() ? \"true\" : null", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-invalid": "invalid() ? \"\" : null", "attr.disabled": "disabled() ? \"\" : null" }, classAttribute: "frame-select__trigger" }, providers: [provideDsValueAccessor$1(FrSelect)], usesInheritance: true, hostDirectives: [{ directive: i1$5.FrDropdownMenu, inputs: ["closeDelay", "closeDelay", "triggerMode", "triggerMode"] }, { directive: i1$5.FrDropdownMenuTrigger }], ngImport: i0 });
9502
9908
  }
9503
9909
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelect, decorators: [{
9504
9910
  type: Directive,
@@ -9615,7 +10021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
9615
10021
  /** Label slot for select. */
9616
10022
  class FrSelectLabel {
9617
10023
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelectLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9618
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrSelectLabel, isStandalone: true, selector: "[frSelectLabel], frame-select-label", host: { classAttribute: "frame-select__label" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuLabel }], ngImport: i0 });
10024
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrSelectLabel, isStandalone: true, selector: "[frSelectLabel], frame-select-label", host: { classAttribute: "frame-select__label" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuLabel }], ngImport: i0 });
9619
10025
  }
9620
10026
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelectLabel, decorators: [{
9621
10027
  type: Directive,
@@ -9630,7 +10036,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
9630
10036
  /** Separator slot for select. */
9631
10037
  class FrSelectSeparator {
9632
10038
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelectSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9633
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrSelectSeparator, isStandalone: true, selector: "[frSelectSeparator], frame-select-separator", host: { classAttribute: "frame-select__separator" }, hostDirectives: [{ directive: i1$3.FrDropdownMenuSeparator }], ngImport: i0 });
10039
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrSelectSeparator, isStandalone: true, selector: "[frSelectSeparator], frame-select-separator", host: { classAttribute: "frame-select__separator" }, hostDirectives: [{ directive: i1$5.FrDropdownMenuSeparator }], ngImport: i0 });
9634
10040
  }
9635
10041
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelectSeparator, decorators: [{
9636
10042
  type: Directive,
@@ -9675,7 +10081,7 @@ class FrSelectItem {
9675
10081
  return this.elementRef.nativeElement.textContent?.trim() ?? this.value();
9676
10082
  }
9677
10083
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelectItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
9678
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: FrSelectItem, isStandalone: true, selector: "button[frSelectItem]", inputs: { itemLabel: { classPropertyName: "itemLabel", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "handleClick()" }, properties: { "attr.data-has-custom-indicator": "customIndicator() ? \"\" : null", "attr.data-indicator-position": "indicatorPosition()", "attr.data-state": "isSelected() ? \"checked\" : \"unchecked\"" }, classAttribute: "frame-select__item" }, queries: [{ propertyName: "customIndicator", first: true, predicate: FrSelectItemIndicator, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$3.FrDropdownMenuItem }], ngImport: i0 });
10084
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.16", type: FrSelectItem, isStandalone: true, selector: "button[frSelectItem]", inputs: { itemLabel: { classPropertyName: "itemLabel", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "handleClick()" }, properties: { "attr.data-has-custom-indicator": "customIndicator() ? \"\" : null", "attr.data-indicator-position": "indicatorPosition()", "attr.data-state": "isSelected() ? \"checked\" : \"unchecked\"" }, classAttribute: "frame-select__item" }, queries: [{ propertyName: "customIndicator", first: true, predicate: FrSelectItemIndicator, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1$5.FrDropdownMenuItem }], ngImport: i0 });
9679
10085
  }
9680
10086
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSelectItem, decorators: [{
9681
10087
  type: Directive,
@@ -9979,59 +10385,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
9979
10385
  }]
9980
10386
  }], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], decorative: [{ type: i0.Input, args: [{ isSignal: true, alias: "decorative", required: false }] }] } });
9981
10387
 
9982
- /** Content slot for sheet. */
9983
- class FrSheetContent {
9984
- templateRef = inject((TemplateRef));
9985
- ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
9986
- ariaLabelledBy = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledBy" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
9987
- ariaDescribedBy = input(null, { ...(ngDevMode ? { debugName: "ariaDescribedBy" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
9988
- backdropClass = input(null, ...(ngDevMode ? [{ debugName: "backdropClass" }] : /* istanbul ignore next */ []));
9989
- closeOnDestroy = input(true, { ...(ngDevMode ? { debugName: "closeOnDestroy" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
9990
- closeOnNavigation = input(true, { ...(ngDevMode ? { debugName: "closeOnNavigation" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
9991
- direction = input(null, ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
9992
- disableClose = input(false, { ...(ngDevMode ? { debugName: "disableClose" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
9993
- height = input(null, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
9994
- id = input(null, ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
9995
- maxHeight = input(null, ...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
9996
- maxWidth = input(null, ...(ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []));
9997
- minHeight = input(null, ...(ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []));
9998
- minWidth = input(null, ...(ngDevMode ? [{ debugName: "minWidth" }] : /* istanbul ignore next */ []));
9999
- panelClass = input(null, ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
10000
- role = input('dialog', ...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
10001
- width = input(null, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
10002
- buildConfig(viewContainerRef) {
10003
- return {
10004
- ariaLabel: this.ariaLabel() ?? undefined,
10005
- ariaLabelledBy: this.ariaLabelledBy() ?? undefined,
10006
- ariaDescribedBy: this.ariaDescribedBy() ?? undefined,
10007
- backdropClass: this.backdropClass() ?? undefined,
10008
- closeOnDestroy: this.closeOnDestroy(),
10009
- closeOnNavigation: this.closeOnNavigation(),
10010
- direction: this.direction() ?? undefined,
10011
- disableClose: this.disableClose(),
10012
- height: this.height() ?? undefined,
10013
- id: this.id() ?? undefined,
10014
- maxHeight: this.maxHeight() ?? undefined,
10015
- maxWidth: this.maxWidth() ?? undefined,
10016
- minHeight: this.minHeight() ?? undefined,
10017
- minWidth: this.minWidth() ?? undefined,
10018
- panelClass: this.panelClass() ?? undefined,
10019
- role: this.role(),
10020
- viewContainerRef,
10021
- width: this.width() ?? undefined,
10022
- };
10023
- }
10024
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSheetContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
10025
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrSheetContent, isStandalone: true, selector: "ng-template[frSheetContent]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, backdropClass: { classPropertyName: "backdropClass", publicName: "backdropClass", isSignal: true, isRequired: false, transformFunction: null }, closeOnDestroy: { classPropertyName: "closeOnDestroy", publicName: "closeOnDestroy", isSignal: true, isRequired: false, transformFunction: null }, closeOnNavigation: { classPropertyName: "closeOnNavigation", publicName: "closeOnNavigation", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, disableClose: { classPropertyName: "disableClose", publicName: "disableClose", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["frSheetContent"], ngImport: i0 });
10026
- }
10027
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSheetContent, decorators: [{
10028
- type: Directive,
10029
- args: [{
10030
- selector: 'ng-template[frSheetContent]',
10031
- exportAs: 'frSheetContent',
10032
- }]
10033
- }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], backdropClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "backdropClass", required: false }] }], closeOnDestroy: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnDestroy", required: false }] }], closeOnNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnNavigation", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], disableClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableClose", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }] } });
10034
-
10035
10388
  const FR_SHEET_SIDES = ['top', 'right', 'bottom', 'left'];
10036
10389
  function coerceSheetSide(value) {
10037
10390
  return value === 'top' || value === 'bottom' || value === 'left' ? value : 'right';
@@ -10066,11 +10419,14 @@ class FrSheetPanel {
10066
10419
  this.dialogRef?.close();
10067
10420
  }
10068
10421
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSheetPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
10069
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrSheetPanel, isStandalone: true, selector: "[frSheetPanel], frame-sheet-panel", inputs: { scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-scrollable": "scrollable() ? \"\" : null", "attr.data-side": "side()" }, classAttribute: "frame-sheet__panel" }, ngImport: i0, template: `
10422
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: FrSheetPanel, isStandalone: true, selector: "[frSheetPanel], frame-sheet-panel", inputs: { scrollable: { classPropertyName: "scrollable", publicName: "scrollable", isSignal: true, isRequired: false, transformFunction: null }, showCloseButton: { classPropertyName: "showCloseButton", publicName: "showCloseButton", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-scrollable": "scrollable() ? \"\" : null", "attr.data-side": "side()" }, classAttribute: "frame-sheet__panel frame-corner-handles" }, ngImport: i0, template: `
10070
10423
  <ng-content />
10071
10424
  @if (showCloseButton()) {
10072
10425
  <button class="frame-sheet__close" type="button" aria-label="Close sheet" (click)="close()">
10073
- <span aria-hidden="true">×</span>
10426
+ <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
10427
+ <path d="M18 6 6 18"></path>
10428
+ <path d="m6 6 12 12"></path>
10429
+ </svg>
10074
10430
  </button>
10075
10431
  }
10076
10432
  `, isInline: true });
@@ -10080,7 +10436,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
10080
10436
  args: [{
10081
10437
  selector: '[frSheetPanel], frame-sheet-panel',
10082
10438
  host: {
10083
- class: 'frame-sheet__panel',
10439
+ class: 'frame-sheet__panel frame-corner-handles',
10084
10440
  '[attr.data-scrollable]': 'scrollable() ? "" : null',
10085
10441
  '[attr.data-side]': 'side()',
10086
10442
  },
@@ -10088,7 +10444,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
10088
10444
  <ng-content />
10089
10445
  @if (showCloseButton()) {
10090
10446
  <button class="frame-sheet__close" type="button" aria-label="Close sheet" (click)="close()">
10091
- <span aria-hidden="true">×</span>
10447
+ <svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
10448
+ <path d="M18 6 6 18"></path>
10449
+ <path d="m6 6 12 12"></path>
10450
+ </svg>
10092
10451
  </button>
10093
10452
  }
10094
10453
  `,
@@ -10165,6 +10524,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
10165
10524
  }]
10166
10525
  }] });
10167
10526
 
10527
+ /** Content slot for sheet. */
10528
+ class FrSheetContent {
10529
+ templateRef = inject((TemplateRef));
10530
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
10531
+ ariaLabelledBy = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledBy" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
10532
+ ariaDescribedBy = input(null, { ...(ngDevMode ? { debugName: "ariaDescribedBy" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
10533
+ backdropClass = input(null, ...(ngDevMode ? [{ debugName: "backdropClass" }] : /* istanbul ignore next */ []));
10534
+ closeOnDestroy = input(true, { ...(ngDevMode ? { debugName: "closeOnDestroy" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
10535
+ closeOnNavigation = input(true, { ...(ngDevMode ? { debugName: "closeOnNavigation" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
10536
+ direction = input(null, ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
10537
+ disableClose = input(false, { ...(ngDevMode ? { debugName: "disableClose" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
10538
+ height = input(null, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
10539
+ id = input(null, ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
10540
+ maxHeight = input(null, ...(ngDevMode ? [{ debugName: "maxHeight" }] : /* istanbul ignore next */ []));
10541
+ maxWidth = input(null, ...(ngDevMode ? [{ debugName: "maxWidth" }] : /* istanbul ignore next */ []));
10542
+ minHeight = input(null, ...(ngDevMode ? [{ debugName: "minHeight" }] : /* istanbul ignore next */ []));
10543
+ minWidth = input(null, ...(ngDevMode ? [{ debugName: "minWidth" }] : /* istanbul ignore next */ []));
10544
+ panelClass = input(null, ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
10545
+ role = input('dialog', ...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
10546
+ side = input('right', { ...(ngDevMode ? { debugName: "side" } : /* istanbul ignore next */ {}), transform: coerceSheetSide });
10547
+ width = input(null, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
10548
+ buildConfig(viewContainerRef) {
10549
+ return {
10550
+ ariaLabel: this.ariaLabel() ?? undefined,
10551
+ ariaLabelledBy: this.ariaLabelledBy() ?? undefined,
10552
+ ariaDescribedBy: this.ariaDescribedBy() ?? undefined,
10553
+ backdropClass: this.backdropClass() ?? undefined,
10554
+ closeOnDestroy: this.closeOnDestroy(),
10555
+ closeOnNavigation: this.closeOnNavigation(),
10556
+ direction: this.direction() ?? undefined,
10557
+ disableClose: this.disableClose(),
10558
+ height: this.height() ?? undefined,
10559
+ id: this.id() ?? undefined,
10560
+ maxHeight: this.maxHeight() ?? undefined,
10561
+ maxWidth: this.maxWidth() ?? undefined,
10562
+ minHeight: this.minHeight() ?? undefined,
10563
+ minWidth: this.minWidth() ?? undefined,
10564
+ panelClass: this.panelClass() ?? undefined,
10565
+ role: this.role(),
10566
+ side: this.side(),
10567
+ viewContainerRef,
10568
+ width: this.width() ?? undefined,
10569
+ };
10570
+ }
10571
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSheetContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
10572
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrSheetContent, isStandalone: true, selector: "ng-template[frSheetContent]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, backdropClass: { classPropertyName: "backdropClass", publicName: "backdropClass", isSignal: true, isRequired: false, transformFunction: null }, closeOnDestroy: { classPropertyName: "closeOnDestroy", publicName: "closeOnDestroy", isSignal: true, isRequired: false, transformFunction: null }, closeOnNavigation: { classPropertyName: "closeOnNavigation", publicName: "closeOnNavigation", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, disableClose: { classPropertyName: "disableClose", publicName: "disableClose", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, maxWidth: { classPropertyName: "maxWidth", publicName: "maxWidth", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, minWidth: { classPropertyName: "minWidth", publicName: "minWidth", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["frSheetContent"], ngImport: i0 });
10573
+ }
10574
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSheetContent, decorators: [{
10575
+ type: Directive,
10576
+ args: [{
10577
+ selector: 'ng-template[frSheetContent]',
10578
+ exportAs: 'frSheetContent',
10579
+ }]
10580
+ }], propDecorators: { ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], backdropClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "backdropClass", required: false }] }], closeOnDestroy: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnDestroy", required: false }] }], closeOnNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnNavigation", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], disableClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableClose", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], maxWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxWidth", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], minWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "minWidth", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }] } });
10581
+
10168
10582
  const FR_SHEET_DATA = DIALOG_DATA;
10169
10583
 
10170
10584
  /** Default shell for sheet content, title, and footer actions. */
@@ -10301,6 +10715,7 @@ const DEFAULT_BACKDROP_CLASS = 'frame-sheet__backdrop';
10301
10715
  /** Service for opening sheet dialogs. */
10302
10716
  class FrSheetService {
10303
10717
  dialog = inject(Dialog);
10718
+ overlay = inject(Overlay);
10304
10719
  open(content, config = {}) {
10305
10720
  if (isComponentType(content) && hasShellOptions(config)) {
10306
10721
  const shellConfig = {
@@ -10317,14 +10732,14 @@ class FrSheetService {
10317
10732
  title: config.title,
10318
10733
  },
10319
10734
  };
10320
- return this.dialog.open(FrSheetShell, this.withDefaultClasses(shellConfig));
10735
+ return this.dialog.open(FrSheetShell, this.withDefaultClasses(shellConfig, config.side));
10321
10736
  }
10322
- return this.dialog.open(content, this.withDefaultClasses(config));
10737
+ return this.dialog.open(content, this.withDefaultClasses(config, config.side));
10323
10738
  }
10324
10739
  closeAll() {
10325
10740
  this.dialog.closeAll();
10326
10741
  }
10327
- withDefaultClasses(config) {
10742
+ withDefaultClasses(config, side = 'right') {
10328
10743
  return {
10329
10744
  ariaModal: true,
10330
10745
  autoFocus: 'first-tabbable',
@@ -10332,10 +10747,25 @@ class FrSheetService {
10332
10747
  ...config,
10333
10748
  maxHeight: config.maxHeight ?? '100dvh',
10334
10749
  maxWidth: config.maxWidth ?? '100vw',
10335
- panelClass: mergeClassList(config.panelClass, DEFAULT_PANEL_CLASS),
10750
+ positionStrategy: config.positionStrategy ?? this.getSheetPositionStrategy(side),
10751
+ panelClass: mergeClassList(config.panelClass, DEFAULT_PANEL_CLASS, `${DEFAULT_PANEL_CLASS}--${side}`),
10336
10752
  backdropClass: mergeClassList(config.backdropClass, DEFAULT_BACKDROP_CLASS),
10337
10753
  };
10338
10754
  }
10755
+ getSheetPositionStrategy(side) {
10756
+ const strategy = this.overlay.position().global();
10757
+ switch (side) {
10758
+ case 'bottom':
10759
+ return strategy.bottom('0').left('0');
10760
+ case 'left':
10761
+ return strategy.left('0').top('0');
10762
+ case 'top':
10763
+ return strategy.left('0').top('0');
10764
+ case 'right':
10765
+ default:
10766
+ return strategy.right('0').top('0');
10767
+ }
10768
+ }
10339
10769
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSheetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10340
10770
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrSheetService, providedIn: 'root' });
10341
10771
  }
@@ -10362,13 +10792,13 @@ function withoutShellOptions(config) {
10362
10792
  const { bodyData: _bodyData, bodyInputs: _bodyInputs, description: _description, footerActions: _footerActions, scrollable: _scrollable, showCloseButton: _showCloseButton, side: _side, title: _title, ...dialogConfig } = config;
10363
10793
  return dialogConfig;
10364
10794
  }
10365
- function mergeClassList(classList, defaultClass) {
10795
+ function mergeClassList(classList, ...defaultClasses) {
10366
10796
  const classes = Array.isArray(classList)
10367
10797
  ? classList
10368
10798
  : classList
10369
10799
  ? classList.split(/\s+/)
10370
10800
  : [];
10371
- return Array.from(new Set([defaultClass, ...classes].filter(Boolean)));
10801
+ return Array.from(new Set([...defaultClasses, ...classes].filter((className) => !!className)));
10372
10802
  }
10373
10803
 
10374
10804
  /** Trigger control for sheet. */
@@ -11236,7 +11666,7 @@ class FrVirtualViewport {
11236
11666
  this.resizeObserver.observe(element);
11237
11667
  }
11238
11668
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrVirtualViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive });
11239
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrVirtualViewport, isStandalone: true, selector: "[frVirtualViewport], frame-virtual-viewport", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: true, transformFunction: null }, overscan: { classPropertyName: "overscan", publicName: "overscan", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "scroll": "handleScroll()" }, properties: { "style.block-size": "height()" }, classAttribute: "frame-virtual-scroll__viewport" }, exportAs: ["frVirtualViewport"], ngImport: i0 });
11669
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrVirtualViewport, isStandalone: true, selector: "[frVirtualViewport], frame-virtual-viewport", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: true, transformFunction: null }, overscan: { classPropertyName: "overscan", publicName: "overscan", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "scroll": "handleScroll()" }, properties: { "style.block-size": "height()" }, classAttribute: "frame-virtual-scroll__viewport frame-corner-handles" }, exportAs: ["frVirtualViewport"], ngImport: i0 });
11240
11670
  }
11241
11671
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrVirtualViewport, decorators: [{
11242
11672
  type: Directive,
@@ -11244,7 +11674,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
11244
11674
  selector: '[frVirtualViewport], frame-virtual-viewport',
11245
11675
  exportAs: 'frVirtualViewport',
11246
11676
  host: {
11247
- class: 'frame-virtual-scroll__viewport',
11677
+ class: 'frame-virtual-scroll__viewport frame-corner-handles',
11248
11678
  '(scroll)': 'handleScroll()',
11249
11679
  '[style.block-size]': 'height()',
11250
11680
  },
@@ -11362,14 +11792,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
11362
11792
  /** List wrapper for virtualized items. */
11363
11793
  class FrVirtualList {
11364
11794
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrVirtualList, deps: [], target: i0.ɵɵFactoryTarget.Directive });
11365
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrVirtualList, isStandalone: true, selector: "[frVirtualList], frame-virtual-list", host: { classAttribute: "frame-virtual-scroll__list" }, ngImport: i0 });
11795
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrVirtualList, isStandalone: true, selector: "[frVirtualList], frame-virtual-list", host: { classAttribute: "frame-virtual-scroll__list frame-corner-handles" }, ngImport: i0 });
11366
11796
  }
11367
11797
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrVirtualList, decorators: [{
11368
11798
  type: Directive,
11369
11799
  args: [{
11370
11800
  selector: '[frVirtualList], frame-virtual-list',
11371
11801
  host: {
11372
- class: 'frame-virtual-scroll__list',
11802
+ class: 'frame-virtual-scroll__list frame-corner-handles',
11373
11803
  },
11374
11804
  }]
11375
11805
  }] });
@@ -11420,5 +11850,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
11420
11850
  * Generated bundle index. Do not edit.
11421
11851
  */
11422
11852
 
11423
- export { FR_ACCORDION_TYPES, FR_ALERT_VARIANTS, FR_AVATAR_SIZES, FR_BADGE_ICON_POSITIONS, FR_BADGE_VARIANTS, FR_BUTTON_APPEARANCES, FR_BUTTON_GROUP_ORIENTATIONS, FR_BUTTON_LOADING_DISPLAYS, FR_BUTTON_SIZES, FR_CARD_FOOTER_ALIGNS, FR_CARD_SIZES, FR_CARD_SPACINGS, FR_CAROUSEL_ALIGNS, FR_CAROUSEL_DIRECTIONS, FR_CAROUSEL_ORIENTATIONS, FR_CONTEXT_MENU_CONTENT, FR_DROPDOWN_MENU_ALIGNMENTS, FR_DROPDOWN_MENU_CONTENT, FR_DROPDOWN_MENU_ITEM_VARIANTS, FR_DROPDOWN_MENU_PARENT, FR_DROPDOWN_MENU_SIDES, FR_DROPDOWN_MENU_TRIGGER_MODES, FR_EMPTY_MEDIA_VARIANTS, FR_EMPTY_ORIENTATIONS, FR_EMPTY_VARIANTS, FR_FIELD_LEGEND_VARIANTS, FR_FIELD_ORIENTATIONS, FR_HOVER_CARD_ALIGNMENTS, FR_HOVER_CARD_SIDES, FR_INPUT_GROUP_ADDON_ALIGNS, FR_INPUT_GROUP_ADDON_VARIANTS, FR_INPUT_OTP_PATTERN_DIGITS, FR_INPUT_OTP_PATTERN_DIGITS_AND_CHARS, FR_ITEM_MEDIA_VARIANTS, FR_ITEM_SIZES, FR_ITEM_VARIANTS, FR_MENUBAR_PARENT, FR_MODAL_DATA, FR_MODAL_PANEL_LAYOUT, FR_MODAL_REF, FR_NAVIGATION_MENU_PARENT, FR_POPOVER_ALIGNMENTS, FR_POPOVER_SIDES, FR_RADIO_GROUP_ORIENTATIONS, FR_RADIO_GROUP_VARIANTS, FR_RESIZABLE_ORIENTATIONS, FR_SELECT_ICON_POSITIONS, FR_SELECT_INDICATOR_POSITIONS, FR_SELECT_POSITIONS, FR_SEPARATOR_ORIENTATIONS, FR_SHEET_DATA, FR_SHEET_SIDES, FR_SIDEBAR_COLLAPSIBLES, FR_SIDEBAR_MENU_BUTTON_SIZES, FR_SIDEBAR_MENU_BUTTON_VARIANTS, FR_SIDEBAR_PROVIDER, FR_SIDEBAR_SIDES, FR_SIDEBAR_VARIANTS, FR_SLIDER_ORIENTATIONS, FR_SWITCH_SIZES, FrAccordion, FrAccordionContent, FrAccordionIcon, FrAccordionItem, FrAccordionTrigger, FrAlert, FrAlertDescription, FrAlertIcon, FrAlertTitle, FrAvatar, FrAvatarBadge, FrAvatarFallback, FrAvatarGroup, FrAvatarGroupCount, FrAvatarIcon, FrAvatarImage, FrBadge, FrBadgeIcon, FrBadgeLabel, FrBadgeSpinner, FrBreadcrumb, FrBreadcrumbEllipsis, FrBreadcrumbItem, FrBreadcrumbLink, FrBreadcrumbList, FrBreadcrumbPage, FrBreadcrumbSeparator, FrButton, FrButtonGroup, FrButtonIcon, FrButtonLabel, FrButtonLoading, FrCalendar, FrCard, FrCardAction, FrCardContent, FrCardDescription, FrCardFooter, FrCardHeader, FrCardTitle, FrCarousel, FrCarouselContent, FrCarouselItem, FrCarouselNext, FrCarouselPrevious, FrCheckbox, FrCheckboxField, FrCheckboxLabel, FrCollapsible, FrCollapsibleContent, FrCollapsibleTrigger, FrCombobox, FrComboboxChip, FrComboboxChipRemove, FrComboboxChips, FrComboboxChipsInput, FrComboboxClear, FrComboboxCollection, FrComboboxContent, FrComboboxEmpty, FrComboboxError, FrComboboxGroup, FrComboboxInput, FrComboboxItem, FrComboboxItemIndicator, FrComboboxLabel, FrComboboxList, FrComboboxPanel, FrComboboxRootLookup, FrComboboxSeparator, FrComboboxTrigger, FrComboboxValueList, FrCommand, FrCommandDialog, FrCommandDialogTrigger, FrCommandEmpty, FrCommandFooter, FrCommandGroup, FrCommandGroupHeading, FrCommandInput, FrCommandItem, FrCommandItemIcon, FrCommandList, FrCommandSeparator, FrCommandService, FrCommandShortcut, FrConfirmPopover, FrConfirmPopoverPanel, FrContextMenu, FrContextMenuCheckboxItem, FrContextMenuContent, FrContextMenuItem, FrContextMenuItemIndicator, FrContextMenuLabel, FrContextMenuPanel, FrContextMenuRadioGroup, FrContextMenuRadioItem, FrContextMenuSeparator, FrContextMenuShortcut, FrContextMenuSub, FrContextMenuSubTrigger, FrContextMenuTrigger, FrControlValueAccessor, FrDatePicker, FrDropdownMenu, FrDropdownMenuCheckboxItem, FrDropdownMenuContent, FrDropdownMenuItem, FrDropdownMenuItemIndicator, FrDropdownMenuLabel, FrDropdownMenuPanel, FrDropdownMenuRadioGroup, FrDropdownMenuRadioItem, FrDropdownMenuSeparator, FrDropdownMenuShortcut, FrDropdownMenuSub, FrDropdownMenuSubTrigger, FrDropdownMenuTree, FrDropdownMenuTrigger, FrEmpty, FrEmptyContent, FrEmptyDescription, FrEmptyHeader, FrEmptyMedia, FrEmptyTitle, FrField, FrFieldContent, FrFieldDescription, FrFieldError, FrFieldGroup, FrFieldLabel, FrFieldLegend, FrFieldSeparator, FrFieldSet, FrHoverCardRoot as FrHoverCard, FrHoverCardContent, FrHoverCardPanel, FrHoverCardTrigger, FrIconButton, FrInput, FrInputBadge, FrInputControl, FrInputDescription, FrInputError, FrInputField, FrInputFieldGroup, FrInputGroup, FrInputGroupAddon, FrInputGroupInput, FrInputGroupText, FrInputHeader, FrInputLabel, FrInputOtp, FrInputOtpGroup, FrInputOtpSeparator, FrInputOtpSlot, FrItem, FrItemActions, FrItemContent, FrItemDescription, FrItemFooter, FrItemGroup, FrItemHeader, FrItemMedia, FrItemSeparator, FrItemTitle, FrMenuBar, FrMenuBarCheckboxItem, FrMenuBarContent, FrMenuBarItem, FrMenuBarItemIndicator, FrMenuBarLabel, FrMenuBarMenu, FrMenuBarPanel, FrMenuBarRadioGroup, FrMenuBarRadioItem, FrMenuBarSeparator, FrMenuBarShortcut, FrMenuBarSub, FrMenuBarSubTrigger, FrMenuBarTrigger, FrModalBody, FrModalClose, FrModalContent, FrModalDescription, FrModalFooter, FrModalHeader, FrModalPanel, FrModalRef, FrModalService, FrModalShell, FrModalTitle, FrModalTrigger, FrNavigationLinkSeparator, FrNavigationMenu, FrNavigationMenuContent, FrNavigationMenuFeature, FrNavigationMenuGrid, FrNavigationMenuIndicator, FrNavigationMenuItem, FrNavigationMenuLink, FrNavigationMenuLinkDescription, FrNavigationMenuLinkTitle, FrNavigationMenuList, FrNavigationMenuPanel, FrNavigationMenuTrigger, FrNavigationMenuViewport, FrPagination, FrPaginationContent, FrPaginationEllipsis, FrPaginationIcon, FrPaginationItem, FrPaginationLink, FrPaginationNext, FrPaginationPrevious, FrPopoverRoot as FrPopover, FrPopoverBody, FrPopoverClose, FrPopoverContent, FrPopoverDescription, FrPopoverFooter, FrPopoverHeader, FrPopoverPanel, FrPopoverTitle, FrPopoverTrigger, FrProgress, FrProgressIndicator, FrRadioGroup, FrRadioGroupCard, FrRadioGroupCardMeta, FrRadioGroupField, FrRadioGroupItem, FrResizableHandle, FrResizablePanel, FrResizablePanelGroup, FrSelect, FrSelectContent, FrSelectError, FrSelectGroup, FrSelectIcon, FrSelectItem, FrSelectItemIndicator, FrSelectLabel, FrSelectPanel, FrSelectSeparator, FrSelectValue, FrSeparator, FrSheetBody, FrSheetClose, FrSheetContent, FrSheetDescription, FrSheetFooter, FrSheetHeader, FrSheetPanel, FrSheetService, FrSheetShell, FrSheetTitle, FrSheetTrigger, FrSidebar, FrSidebarContent, FrSidebarFooter, FrSidebarGroup, FrSidebarGroupAction, FrSidebarGroupContent, FrSidebarGroupLabel, FrSidebarHeader, FrSidebarInset, FrSidebarMenu, FrSidebarMenuAction, FrSidebarMenuBadge, FrSidebarMenuButton, FrSidebarMenuItem, FrSidebarMenuSkeleton, FrSidebarMenuSub, FrSidebarMenuSubButton, FrSidebarMenuSubItem, FrSidebarProvider, FrSidebarRail, FrSidebarTrigger, FrSlider, FrSwitch, FrSwitchContent, FrSwitchDescription, FrSwitchError, FrSwitchField, FrSwitchLabel, FrTextarea, FrVirtualContent, FrVirtualFor, FrVirtualItem, FrVirtualItemMeta, FrVirtualList, FrVirtualPanel, FrVirtualViewport, buildConnectedPositions, calculateScrollOffsetForIndex, calculateVirtualRange, defaultPositions, provideDsValueAccessor };
11853
+ export { FR_ACCORDION_TYPES, FR_ALERT_VARIANTS, FR_AVATAR_SIZES, FR_BADGE_ICON_POSITIONS, FR_BADGE_VARIANTS, FR_BUTTON_APPEARANCES, FR_BUTTON_GROUP_ORIENTATIONS, FR_BUTTON_LOADING_DISPLAYS, FR_BUTTON_SIZES, FR_CARD_FOOTER_ALIGNS, FR_CARD_SIZES, FR_CARD_SPACINGS, FR_CAROUSEL_ALIGNS, FR_CAROUSEL_DIRECTIONS, FR_CAROUSEL_ORIENTATIONS, FR_CONTEXT_MENU_CONTENT, FR_DROPDOWN_MENU_ALIGNMENTS, FR_DROPDOWN_MENU_CONTENT, FR_DROPDOWN_MENU_ITEM_VARIANTS, FR_DROPDOWN_MENU_PARENT, FR_DROPDOWN_MENU_SIDES, FR_DROPDOWN_MENU_TRIGGER_MODES, FR_EMPTY_MEDIA_VARIANTS, FR_EMPTY_ORIENTATIONS, FR_EMPTY_VARIANTS, FR_FIELD_LEGEND_VARIANTS, FR_FIELD_ORIENTATIONS, FR_HOVER_CARD_ALIGNMENTS, FR_HOVER_CARD_SIDES, FR_INPUT_GROUP_ADDON_ALIGNS, FR_INPUT_GROUP_ADDON_VARIANTS, FR_INPUT_OTP_PATTERN_DIGITS, FR_INPUT_OTP_PATTERN_DIGITS_AND_CHARS, FR_ITEM_MEDIA_VARIANTS, FR_ITEM_SIZES, FR_ITEM_VARIANTS, FR_MENUBAR_PARENT, FR_MODAL_DATA, FR_MODAL_PANEL_LAYOUT, FR_MODAL_REF, FR_NAVIGATION_MENU_PARENT, FR_POPOVER_ALIGNMENTS, FR_POPOVER_SIDES, FR_RADIO_GROUP_ORIENTATIONS, FR_RADIO_GROUP_VARIANTS, FR_RESIZABLE_ORIENTATIONS, FR_SELECT_ICON_POSITIONS, FR_SELECT_INDICATOR_POSITIONS, FR_SELECT_POSITIONS, FR_SEPARATOR_ORIENTATIONS, FR_SHEET_DATA, FR_SHEET_SIDES, FR_SIDEBAR_COLLAPSIBLES, FR_SIDEBAR_MENU_BUTTON_SIZES, FR_SIDEBAR_MENU_BUTTON_VARIANTS, FR_SIDEBAR_PROVIDER, FR_SIDEBAR_SIDES, FR_SIDEBAR_VARIANTS, FR_SLIDER_ORIENTATIONS, FR_SWITCH_SIZES, FrAccordion, FrAccordionContent, FrAccordionIcon, FrAccordionItem, FrAccordionTrigger, FrAlert, FrAlertDescription, FrAlertIcon, FrAlertTitle, FrAvatar, FrAvatarBadge, FrAvatarFallback, FrAvatarGroup, FrAvatarGroupCount, FrAvatarIcon, FrAvatarImage, FrBadge, FrBadgeIcon, FrBadgeLabel, FrBadgeSpinner, FrBreadcrumb, FrBreadcrumbEllipsis, FrBreadcrumbItem, FrBreadcrumbLink, FrBreadcrumbList, FrBreadcrumbPage, FrBreadcrumbSeparator, FrButton, FrButtonGroup, FrButtonIcon, FrButtonLabel, FrButtonLoading, FrCalendar, FrCard, FrCardAction, FrCardContent, FrCardDescription, FrCardFooter, FrCardHeader, FrCardTitle, FrCarousel, FrCarouselContent, FrCarouselItem, FrCarouselNext, FrCarouselPrevious, FrCheckbox, FrCheckboxField, FrCheckboxLabel, FrCollapsible, FrCollapsibleContent, FrCollapsibleTrigger, FrCombobox, FrComboboxChip, FrComboboxChipRemove, FrComboboxChips, FrComboboxChipsInput, FrComboboxClear, FrComboboxCollection, FrComboboxContent, FrComboboxEmpty, FrComboboxError, FrComboboxGroup, FrComboboxInput, FrComboboxItem, FrComboboxItemIndicator, FrComboboxLabel, FrComboboxList, FrComboboxPanel, FrComboboxRootLookup, FrComboboxSeparator, FrComboboxTrigger, FrComboboxValueList, FrCommand, FrCommandDialog, FrCommandDialogTrigger, FrCommandEmpty, FrCommandFooter, FrCommandGroup, FrCommandGroupHeading, FrCommandInput, FrCommandItem, FrCommandItemIcon, FrCommandList, FrCommandSeparator, FrCommandService, FrCommandShortcut, FrConfirmPopover, FrConfirmPopoverPanel, FrContextMenu, FrContextMenuCheckboxItem, FrContextMenuContent, FrContextMenuItem, FrContextMenuItemIndicator, FrContextMenuLabel, FrContextMenuPanel, FrContextMenuRadioGroup, FrContextMenuRadioItem, FrContextMenuSeparator, FrContextMenuShortcut, FrContextMenuSub, FrContextMenuSubTrigger, FrContextMenuTrigger, FrControlValueAccessor, FrCornerHandles, FrDatePicker, FrDropdownMenu, FrDropdownMenuCheckboxItem, FrDropdownMenuContent, FrDropdownMenuItem, FrDropdownMenuItemIndicator, FrDropdownMenuLabel, FrDropdownMenuPanel, FrDropdownMenuRadioGroup, FrDropdownMenuRadioItem, FrDropdownMenuSeparator, FrDropdownMenuShortcut, FrDropdownMenuSub, FrDropdownMenuSubTrigger, FrDropdownMenuTree, FrDropdownMenuTrigger, FrEmpty, FrEmptyContent, FrEmptyDescription, FrEmptyHeader, FrEmptyMedia, FrEmptyTitle, FrField, FrFieldContent, FrFieldDescription, FrFieldError, FrFieldGroup, FrFieldLabel, FrFieldLegend, FrFieldSeparator, FrFieldSet, FrHoverCardRoot as FrHoverCard, FrHoverCardContent, FrHoverCardPanel, FrHoverCardTrigger, FrIconButton, FrInput, FrInputBadge, FrInputControl, FrInputDescription, FrInputError, FrInputField, FrInputFieldGroup, FrInputGroup, FrInputGroupAddon, FrInputGroupInput, FrInputGroupText, FrInputHeader, FrInputLabel, FrInputOtp, FrInputOtpGroup, FrInputOtpSeparator, FrInputOtpSlot, FrItem, FrItemActions, FrItemContent, FrItemDescription, FrItemFooter, FrItemGroup, FrItemHeader, FrItemMedia, FrItemSeparator, FrItemTitle, FrMenuBar, FrMenuBarCheckboxItem, FrMenuBarContent, FrMenuBarItem, FrMenuBarItemIndicator, FrMenuBarLabel, FrMenuBarMenu, FrMenuBarPanel, FrMenuBarRadioGroup, FrMenuBarRadioItem, FrMenuBarSeparator, FrMenuBarShortcut, FrMenuBarSub, FrMenuBarSubTrigger, FrMenuBarTrigger, FrModalBody, FrModalClose, FrModalContent, FrModalDescription, FrModalFooter, FrModalHeader, FrModalPanel, FrModalRef, FrModalService, FrModalShell, FrModalTitle, FrModalTrigger, FrNavigationLinkSeparator, FrNavigationMenu, FrNavigationMenuContent, FrNavigationMenuFeature, FrNavigationMenuGrid, FrNavigationMenuIndicator, FrNavigationMenuItem, FrNavigationMenuLink, FrNavigationMenuLinkDescription, FrNavigationMenuLinkTitle, FrNavigationMenuList, FrNavigationMenuPanel, FrNavigationMenuTrigger, FrNavigationMenuViewport, FrPagination, FrPaginationContent, FrPaginationEllipsis, FrPaginationIcon, FrPaginationItem, FrPaginationLink, FrPaginationNext, FrPaginationPrevious, FrPopoverRoot as FrPopover, FrPopoverBody, FrPopoverClose, FrPopoverContent, FrPopoverDescription, FrPopoverFooter, FrPopoverHeader, FrPopoverPanel, FrPopoverTitle, FrPopoverTrigger, FrProgress, FrProgressIndicator, FrRadioGroup, FrRadioGroupCard, FrRadioGroupCardMeta, FrRadioGroupField, FrRadioGroupItem, FrResizableHandle, FrResizablePanel, FrResizablePanelGroup, FrSelect, FrSelectContent, FrSelectError, FrSelectGroup, FrSelectIcon, FrSelectItem, FrSelectItemIndicator, FrSelectLabel, FrSelectPanel, FrSelectSeparator, FrSelectValue, FrSeparator, FrSheetBody, FrSheetClose, FrSheetContent, FrSheetDescription, FrSheetFooter, FrSheetHeader, FrSheetPanel, FrSheetService, FrSheetShell, FrSheetTitle, FrSheetTrigger, FrSidebar, FrSidebarContent, FrSidebarFooter, FrSidebarGroup, FrSidebarGroupAction, FrSidebarGroupContent, FrSidebarGroupLabel, FrSidebarHeader, FrSidebarInset, FrSidebarMenu, FrSidebarMenuAction, FrSidebarMenuBadge, FrSidebarMenuButton, FrSidebarMenuItem, FrSidebarMenuSkeleton, FrSidebarMenuSub, FrSidebarMenuSubButton, FrSidebarMenuSubItem, FrSidebarProvider, FrSidebarRail, FrSidebarTrigger, FrSlider, FrSwitch, FrSwitchContent, FrSwitchDescription, FrSwitchError, FrSwitchField, FrSwitchLabel, FrTextarea, FrVirtualContent, FrVirtualFor, FrVirtualItem, FrVirtualItemMeta, FrVirtualList, FrVirtualPanel, FrVirtualViewport, buildConnectedPositions, calculateScrollOffsetForIndex, calculateVirtualRange, coerceSheetSide, defaultPositions, provideDsValueAccessor };
11424
11854
  //# sourceMappingURL=frame-ui-ng-components.mjs.map