@frame-ui-ng/components 0.4.0-beta.0 → 0.4.1

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 (161) hide show
  1. package/confirm-popover/src/styles/confirm-popover.css +20 -0
  2. package/drag-drop/src/styles/_vars.css +28 -0
  3. package/drag-drop/src/styles/drag-drop.css +132 -0
  4. package/fesm2022/frame-ui-ng-components-accordion.mjs +26 -21
  5. package/fesm2022/frame-ui-ng-components-accordion.mjs.map +1 -1
  6. package/fesm2022/frame-ui-ng-components-alert.mjs +4 -0
  7. package/fesm2022/frame-ui-ng-components-alert.mjs.map +1 -1
  8. package/fesm2022/frame-ui-ng-components-avatar.mjs +7 -0
  9. package/fesm2022/frame-ui-ng-components-avatar.mjs.map +1 -1
  10. package/fesm2022/frame-ui-ng-components-badge.mjs +4 -0
  11. package/fesm2022/frame-ui-ng-components-badge.mjs.map +1 -1
  12. package/fesm2022/frame-ui-ng-components-breadcrumb.mjs +13 -6
  13. package/fesm2022/frame-ui-ng-components-breadcrumb.mjs.map +1 -1
  14. package/fesm2022/frame-ui-ng-components-button-group.mjs +1 -0
  15. package/fesm2022/frame-ui-ng-components-button-group.mjs.map +1 -1
  16. package/fesm2022/frame-ui-ng-components-button.mjs +5 -0
  17. package/fesm2022/frame-ui-ng-components-button.mjs.map +1 -1
  18. package/fesm2022/frame-ui-ng-components-calendar.mjs +4 -0
  19. package/fesm2022/frame-ui-ng-components-calendar.mjs.map +1 -1
  20. package/fesm2022/frame-ui-ng-components-card.mjs +15 -15
  21. package/fesm2022/frame-ui-ng-components-card.mjs.map +1 -1
  22. package/fesm2022/frame-ui-ng-components-carousel.mjs +33 -16
  23. package/fesm2022/frame-ui-ng-components-carousel.mjs.map +1 -1
  24. package/fesm2022/frame-ui-ng-components-checkbox.mjs +7 -9
  25. package/fesm2022/frame-ui-ng-components-checkbox.mjs.map +1 -1
  26. package/fesm2022/frame-ui-ng-components-collapsible.mjs +24 -23
  27. package/fesm2022/frame-ui-ng-components-collapsible.mjs.map +1 -1
  28. package/fesm2022/frame-ui-ng-components-combobox.mjs +66 -18
  29. package/fesm2022/frame-ui-ng-components-combobox.mjs.map +1 -1
  30. package/fesm2022/frame-ui-ng-components-command.mjs +47 -16
  31. package/fesm2022/frame-ui-ng-components-command.mjs.map +1 -1
  32. package/fesm2022/frame-ui-ng-components-confirm-modal.mjs +3 -0
  33. package/fesm2022/frame-ui-ng-components-confirm-modal.mjs.map +1 -1
  34. package/fesm2022/frame-ui-ng-components-confirm-popover.mjs +423 -0
  35. package/fesm2022/frame-ui-ng-components-confirm-popover.mjs.map +1 -0
  36. package/fesm2022/frame-ui-ng-components-context-menu.mjs +71 -45
  37. package/fesm2022/frame-ui-ng-components-context-menu.mjs.map +1 -1
  38. package/fesm2022/frame-ui-ng-components-date-picker.mjs +3 -0
  39. package/fesm2022/frame-ui-ng-components-date-picker.mjs.map +1 -1
  40. package/fesm2022/frame-ui-ng-components-drag-drop.mjs +293 -0
  41. package/fesm2022/frame-ui-ng-components-drag-drop.mjs.map +1 -0
  42. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs +73 -36
  43. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs.map +1 -1
  44. package/fesm2022/frame-ui-ng-components-empty.mjs +6 -0
  45. package/fesm2022/frame-ui-ng-components-empty.mjs.map +1 -1
  46. package/fesm2022/frame-ui-ng-components-field.mjs +21 -12
  47. package/fesm2022/frame-ui-ng-components-field.mjs.map +1 -1
  48. package/fesm2022/frame-ui-ng-components-forms.mjs +1 -0
  49. package/fesm2022/frame-ui-ng-components-forms.mjs.map +1 -1
  50. package/fesm2022/frame-ui-ng-components-hover-card.mjs +49 -43
  51. package/fesm2022/frame-ui-ng-components-hover-card.mjs.map +1 -1
  52. package/fesm2022/frame-ui-ng-components-input-otp.mjs +5 -0
  53. package/fesm2022/frame-ui-ng-components-input-otp.mjs.map +1 -1
  54. package/fesm2022/frame-ui-ng-components-input.mjs +13 -0
  55. package/fesm2022/frame-ui-ng-components-input.mjs.map +1 -1
  56. package/fesm2022/frame-ui-ng-components-item.mjs +10 -0
  57. package/fesm2022/frame-ui-ng-components-item.mjs.map +1 -1
  58. package/fesm2022/frame-ui-ng-components-menubar.mjs +15 -0
  59. package/fesm2022/frame-ui-ng-components-menubar.mjs.map +1 -1
  60. package/fesm2022/frame-ui-ng-components-modal.mjs +128 -114
  61. package/fesm2022/frame-ui-ng-components-modal.mjs.map +1 -1
  62. package/fesm2022/frame-ui-ng-components-navigation-menu.mjs +14 -0
  63. package/fesm2022/frame-ui-ng-components-navigation-menu.mjs.map +1 -1
  64. package/fesm2022/frame-ui-ng-components-pagination.mjs +8 -0
  65. package/fesm2022/frame-ui-ng-components-pagination.mjs.map +1 -1
  66. package/fesm2022/frame-ui-ng-components-popover.mjs +63 -51
  67. package/fesm2022/frame-ui-ng-components-popover.mjs.map +1 -1
  68. package/fesm2022/frame-ui-ng-components-progress.mjs +2 -0
  69. package/fesm2022/frame-ui-ng-components-progress.mjs.map +1 -1
  70. package/fesm2022/frame-ui-ng-components-radio-group.mjs +5 -0
  71. package/fesm2022/frame-ui-ng-components-radio-group.mjs.map +1 -1
  72. package/fesm2022/frame-ui-ng-components-resizable.mjs +6 -0
  73. package/fesm2022/frame-ui-ng-components-resizable.mjs.map +1 -1
  74. package/fesm2022/frame-ui-ng-components-select.mjs +62 -14
  75. package/fesm2022/frame-ui-ng-components-select.mjs.map +1 -1
  76. package/fesm2022/frame-ui-ng-components-separator.mjs +1 -0
  77. package/fesm2022/frame-ui-ng-components-separator.mjs.map +1 -1
  78. package/fesm2022/frame-ui-ng-components-sheet.mjs +99 -88
  79. package/fesm2022/frame-ui-ng-components-sheet.mjs.map +1 -1
  80. package/fesm2022/frame-ui-ng-components-sidebar.mjs +27 -12
  81. package/fesm2022/frame-ui-ng-components-sidebar.mjs.map +1 -1
  82. package/fesm2022/frame-ui-ng-components-skeleton.mjs +1 -0
  83. package/fesm2022/frame-ui-ng-components-skeleton.mjs.map +1 -1
  84. package/fesm2022/frame-ui-ng-components-slider.mjs +29 -16
  85. package/fesm2022/frame-ui-ng-components-slider.mjs.map +1 -1
  86. package/fesm2022/frame-ui-ng-components-spinner.mjs +1 -0
  87. package/fesm2022/frame-ui-ng-components-spinner.mjs.map +1 -1
  88. package/fesm2022/frame-ui-ng-components-switch.mjs +6 -0
  89. package/fesm2022/frame-ui-ng-components-switch.mjs.map +1 -1
  90. package/fesm2022/frame-ui-ng-components-table.mjs +76 -50
  91. package/fesm2022/frame-ui-ng-components-table.mjs.map +1 -1
  92. package/fesm2022/frame-ui-ng-components-tabs.mjs +4 -0
  93. package/fesm2022/frame-ui-ng-components-tabs.mjs.map +1 -1
  94. package/fesm2022/frame-ui-ng-components-textarea.mjs +1 -0
  95. package/fesm2022/frame-ui-ng-components-textarea.mjs.map +1 -1
  96. package/fesm2022/frame-ui-ng-components-toast.mjs +2 -0
  97. package/fesm2022/frame-ui-ng-components-toast.mjs.map +1 -1
  98. package/fesm2022/frame-ui-ng-components-toggle.mjs +23 -16
  99. package/fesm2022/frame-ui-ng-components-toggle.mjs.map +1 -1
  100. package/fesm2022/frame-ui-ng-components-tooltip.mjs +30 -25
  101. package/fesm2022/frame-ui-ng-components-tooltip.mjs.map +1 -1
  102. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs +26 -8
  103. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs.map +1 -1
  104. package/fesm2022/frame-ui-ng-components.mjs +1387 -552
  105. package/fesm2022/frame-ui-ng-components.mjs.map +1 -1
  106. package/package.json +10 -2
  107. package/popover/src/styles/popover.css +106 -101
  108. package/src/styles/components.css +6 -4
  109. package/styles/components.css +6 -4
  110. package/styles.css +6 -4
  111. package/types/frame-ui-ng-components-accordion.d.ts +11 -4
  112. package/types/frame-ui-ng-components-alert.d.ts +4 -0
  113. package/types/frame-ui-ng-components-avatar.d.ts +7 -0
  114. package/types/frame-ui-ng-components-badge.d.ts +4 -0
  115. package/types/frame-ui-ng-components-breadcrumb.d.ts +7 -0
  116. package/types/frame-ui-ng-components-button-group.d.ts +1 -0
  117. package/types/frame-ui-ng-components-button.d.ts +5 -0
  118. package/types/frame-ui-ng-components-calendar.d.ts +1 -0
  119. package/types/frame-ui-ng-components-card.d.ts +8 -3
  120. package/types/frame-ui-ng-components-carousel.d.ts +11 -2
  121. package/types/frame-ui-ng-components-checkbox.d.ts +3 -2
  122. package/types/frame-ui-ng-components-collapsible.d.ts +9 -4
  123. package/types/frame-ui-ng-components-combobox.d.ts +32 -3
  124. package/types/frame-ui-ng-components-command.d.ts +26 -4
  125. package/types/frame-ui-ng-components-confirm-modal.d.ts +2 -0
  126. package/types/frame-ui-ng-components-confirm-popover.d.ts +87 -0
  127. package/types/frame-ui-ng-components-context-menu.d.ts +29 -10
  128. package/types/frame-ui-ng-components-date-picker.d.ts +1 -0
  129. package/types/frame-ui-ng-components-drag-drop.d.ts +103 -0
  130. package/types/frame-ui-ng-components-dropdown-menu.d.ts +32 -9
  131. package/types/frame-ui-ng-components-empty.d.ts +6 -0
  132. package/types/frame-ui-ng-components-field.d.ts +9 -0
  133. package/types/frame-ui-ng-components-forms.d.ts +1 -0
  134. package/types/frame-ui-ng-components-hover-card.d.ts +8 -2
  135. package/types/frame-ui-ng-components-input-otp.d.ts +4 -0
  136. package/types/frame-ui-ng-components-input.d.ts +13 -0
  137. package/types/frame-ui-ng-components-item.d.ts +10 -0
  138. package/types/frame-ui-ng-components-menubar.d.ts +15 -0
  139. package/types/frame-ui-ng-components-modal.d.ts +12 -0
  140. package/types/frame-ui-ng-components-navigation-menu.d.ts +14 -0
  141. package/types/frame-ui-ng-components-pagination.d.ts +8 -0
  142. package/types/frame-ui-ng-components-popover.d.ts +14 -2
  143. package/types/frame-ui-ng-components-progress.d.ts +2 -0
  144. package/types/frame-ui-ng-components-radio-group.d.ts +5 -0
  145. package/types/frame-ui-ng-components-resizable.d.ts +3 -0
  146. package/types/frame-ui-ng-components-select.d.ts +23 -2
  147. package/types/frame-ui-ng-components-separator.d.ts +1 -0
  148. package/types/frame-ui-ng-components-sheet.d.ts +11 -0
  149. package/types/frame-ui-ng-components-sidebar.d.ts +21 -0
  150. package/types/frame-ui-ng-components-skeleton.d.ts +1 -0
  151. package/types/frame-ui-ng-components-slider.d.ts +5 -2
  152. package/types/frame-ui-ng-components-spinner.d.ts +1 -0
  153. package/types/frame-ui-ng-components-switch.d.ts +6 -0
  154. package/types/frame-ui-ng-components-table.d.ts +26 -0
  155. package/types/frame-ui-ng-components-tabs.d.ts +4 -0
  156. package/types/frame-ui-ng-components-textarea.d.ts +1 -0
  157. package/types/frame-ui-ng-components-toast.d.ts +2 -0
  158. package/types/frame-ui-ng-components-toggle.d.ts +8 -2
  159. package/types/frame-ui-ng-components-tooltip.d.ts +6 -2
  160. package/types/frame-ui-ng-components-virtual-scroll.d.ts +11 -2
  161. package/types/frame-ui-ng-components.d.ts +492 -76
@@ -1,11 +1,12 @@
1
1
  import * as i1 from '@angular/cdk/menu';
2
2
  import { CdkMenu, CdkTargetMenuAim, CdkMenuItem, CdkMenuItemCheckbox, CdkMenuGroup, CdkMenuItemRadio, CdkMenuTrigger, CdkContextMenuTrigger } from '@angular/cdk/menu';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, inject, TemplateRef, input, booleanAttribute, Directive, effect, signal, DestroyRef, ElementRef, output, NgModule } from '@angular/core';
4
+ import { InjectionToken, inject, TemplateRef, input, booleanAttribute, Directive, computed, DestroyRef, signal, ElementRef, output, NgModule } from '@angular/core';
5
5
  import { buildConnectedPositions, FR_DROPDOWN_MENU_CONTENT, FrDropdownMenuTree, FR_DROPDOWN_MENU_PARENT, defaultPositions } from '@frame-ui-ng/components/dropdown-menu';
6
6
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
 
8
8
  const FR_CONTEXT_MENU_CONTENT = new InjectionToken('FrContextMenuContent');
9
+ /** Content slot for context menu. */
9
10
  class FrContextMenuContent {
10
11
  templateRef = inject((TemplateRef));
11
12
  align = input('start', ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
@@ -54,6 +55,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
54
55
  ],
55
56
  }]
56
57
  }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], alignOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignOffset", required: false }] }], debugVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "debugVisible", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }] } });
58
+ /** Panel slot for context menu. */
57
59
  class FrContextMenuPanel {
58
60
  side = inject(FR_CONTEXT_MENU_CONTENT).side;
59
61
  tree = inject(FrDropdownMenuTree);
@@ -82,6 +84,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
82
84
  }]
83
85
  }] });
84
86
 
87
+ /** Item slot for context menu. */
85
88
  class FrContextMenuItem {
86
89
  inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
87
90
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
@@ -100,16 +103,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
100
103
  },
101
104
  }]
102
105
  }], propDecorators: { inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
106
+ /** Item slot for context menu checkbox. */
103
107
  class FrContextMenuCheckboxItem {
104
108
  checkboxItem = inject(CdkMenuItemCheckbox);
109
+ lastChecked = false;
105
110
  checked = input(false, { ...(ngDevMode ? { debugName: "checked" } : /* istanbul ignore next */ {}), alias: 'checked',
106
111
  transform: booleanAttribute });
107
112
  inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
108
113
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
109
- constructor() {
110
- effect(() => {
111
- this.checkboxItem.checked = this.checked();
112
- });
114
+ ngDoCheck() {
115
+ const checked = this.checked();
116
+ if (checked === this.lastChecked) {
117
+ return;
118
+ }
119
+ this.lastChecked = checked;
120
+ this.checkboxItem.checked = checked;
113
121
  }
114
122
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuCheckboxItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
115
123
  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.CdkMenuItemCheckbox }], ngImport: i0 });
@@ -126,7 +134,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
126
134
  '[attr.data-variant]': 'variant()',
127
135
  },
128
136
  }]
129
- }], ctorParameters: () => [], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
137
+ }], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
138
+ /** Group slot for context menu radio. */
130
139
  class FrContextMenuRadioGroup {
131
140
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
132
141
  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.CdkMenuGroup }], ngImport: i0 });
@@ -141,16 +150,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
141
150
  },
142
151
  }]
143
152
  }] });
153
+ /** Item slot for context menu radio. */
144
154
  class FrContextMenuRadioItem {
145
155
  radioItem = inject(CdkMenuItemRadio);
156
+ lastChecked = false;
146
157
  checked = input(false, { ...(ngDevMode ? { debugName: "checked" } : /* istanbul ignore next */ {}), alias: 'checked',
147
158
  transform: booleanAttribute });
148
159
  inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
149
160
  variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
150
- constructor() {
151
- effect(() => {
152
- this.radioItem.checked = this.checked();
153
- });
161
+ ngDoCheck() {
162
+ const checked = this.checked();
163
+ if (checked === this.lastChecked) {
164
+ return;
165
+ }
166
+ this.lastChecked = checked;
167
+ this.radioItem.checked = checked;
154
168
  }
155
169
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuRadioItem, deps: [], target: i0.ɵɵFactoryTarget.Directive });
156
170
  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.CdkMenuItemRadio }], ngImport: i0 });
@@ -167,7 +181,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
167
181
  '[attr.data-variant]': 'variant()',
168
182
  },
169
183
  }]
170
- }], ctorParameters: () => [], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
184
+ }], propDecorators: { checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
185
+ /** Label slot for context menu. */
171
186
  class FrContextMenuLabel {
172
187
  inset = input(false, { ...(ngDevMode ? { debugName: "inset" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
173
188
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
@@ -183,6 +198,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
183
198
  },
184
199
  }]
185
200
  }], propDecorators: { inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }] } });
201
+ /** Separator slot for context menu. */
186
202
  class FrContextMenuSeparator {
187
203
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
188
204
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrContextMenuSeparator, isStandalone: true, selector: "[frContextMenuSeparator]", host: { attributes: { "role": "separator" }, classAttribute: "frame-context-menu__separator frame-dropdown-menu__separator" }, ngImport: i0 });
@@ -197,6 +213,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
197
213
  },
198
214
  }]
199
215
  }] });
216
+ /** Shortcut slot for context menu. */
200
217
  class FrContextMenuShortcut {
201
218
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuShortcut, deps: [], target: i0.ɵɵFactoryTarget.Directive });
202
219
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrContextMenuShortcut, isStandalone: true, selector: "[frContextMenuShortcut]", host: { classAttribute: "frame-context-menu__shortcut frame-dropdown-menu__shortcut" }, ngImport: i0 });
@@ -210,6 +227,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
210
227
  },
211
228
  }]
212
229
  }] });
230
+ /** Indicator slot for context menu item. */
213
231
  class FrContextMenuItemIndicator {
214
232
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuItemIndicator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
215
233
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrContextMenuItemIndicator, isStandalone: true, selector: "[frContextMenuItemIndicator]", host: { attributes: { "aria-hidden": "true" }, classAttribute: "frame-context-menu__indicator frame-dropdown-menu__indicator" }, ngImport: i0 });
@@ -225,6 +243,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
225
243
  }]
226
244
  }] });
227
245
 
246
+ /** Root controller for context menu interactions. */
228
247
  class FrContextMenu {
229
248
  closeDelay = input(140, ...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
230
249
  triggerMode = input('both', ...(ngDevMode ? [{ debugName: "triggerMode" }] : /* istanbul ignore next */ []));
@@ -253,18 +272,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
253
272
  },
254
273
  }]
255
274
  }], propDecorators: { closeDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeDelay", required: false }] }], triggerMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerMode", required: false }] }] } });
275
+ /** Nested submenu controller for context menu. */
256
276
  class FrContextMenuSub {
257
277
  parent = inject(FR_DROPDOWN_MENU_PARENT, { skipSelf: true });
258
278
  closeDelayInput = input(null, { ...(ngDevMode ? { debugName: "closeDelayInput" } : /* istanbul ignore next */ {}), alias: 'closeDelay' });
259
279
  triggerModeInput = input(null, { ...(ngDevMode ? { debugName: "triggerModeInput" } : /* istanbul ignore next */ {}), alias: 'triggerMode' });
260
- closeDelay = signal(this.parent.closeDelay(), ...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
261
- triggerMode = signal(this.parent.triggerMode(), ...(ngDevMode ? [{ debugName: "triggerMode" }] : /* istanbul ignore next */ []));
262
- constructor() {
263
- effect(() => {
264
- this.closeDelay.set(this.closeDelayInput() ?? this.parent.closeDelay());
265
- this.triggerMode.set(this.triggerModeInput() ?? this.parent.triggerMode());
266
- });
267
- }
280
+ closeDelay = computed(() => this.closeDelayInput() ?? this.parent.closeDelay(), ...(ngDevMode ? [{ debugName: "closeDelay" }] : /* istanbul ignore next */ []));
281
+ triggerMode = computed(() => this.triggerModeInput() ?? this.parent.triggerMode(), ...(ngDevMode ? [{ debugName: "triggerMode" }] : /* istanbul ignore next */ []));
268
282
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrContextMenuSub, deps: [], target: i0.ɵɵFactoryTarget.Directive });
269
283
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrContextMenuSub, isStandalone: true, selector: "[frContextMenuSub]", inputs: { closeDelayInput: { classPropertyName: "closeDelayInput", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null }, triggerModeInput: { classPropertyName: "triggerModeInput", publicName: "triggerMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "frame-context-menu-sub frame-dropdown-menu-sub" }, providers: [
270
284
  {
@@ -287,8 +301,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
287
301
  class: 'frame-context-menu-sub frame-dropdown-menu-sub',
288
302
  },
289
303
  }]
290
- }], ctorParameters: () => [], propDecorators: { closeDelayInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeDelay", required: false }] }], triggerModeInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerMode", required: false }] }] } });
304
+ }], propDecorators: { closeDelayInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeDelay", required: false }] }], triggerModeInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerMode", required: false }] }] } });
291
305
 
306
+ /** Trigger control for context menu sub. */
292
307
  class FrContextMenuSubTrigger {
293
308
  cdkMenuTrigger = inject(CdkMenuTrigger);
294
309
  destroyRef = inject(DestroyRef);
@@ -301,18 +316,7 @@ class FrContextMenuSubTrigger {
301
316
  isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
302
317
  constructor() {
303
318
  this.tree.register(this);
304
- effect(() => {
305
- const content = this.menuContent();
306
- this.cdkMenuTrigger.menuTemplateRef = content?.templateRef ?? null;
307
- this.cdkMenuTrigger.menuPosition = this.resolvePositions();
308
- if (content?.isDebugVisible() && !this.cdkMenuTrigger.isOpen()) {
309
- queueMicrotask(() => {
310
- if (!this.cdkMenuTrigger.isOpen()) {
311
- this.cdkMenuTrigger.open();
312
- }
313
- });
314
- }
315
- });
319
+ queueMicrotask(() => this.syncCdkTrigger());
316
320
  this.cdkMenuTrigger.opened.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
317
321
  this.tree.cancelClose();
318
322
  this.isOpen.set(true);
@@ -329,6 +333,21 @@ class FrContextMenuSubTrigger {
329
333
  this.isOpen.set(false);
330
334
  });
331
335
  }
336
+ ngDoCheck() {
337
+ this.syncCdkTrigger();
338
+ }
339
+ syncCdkTrigger() {
340
+ const content = this.menuContent();
341
+ this.cdkMenuTrigger.menuTemplateRef = content?.templateRef ?? null;
342
+ this.cdkMenuTrigger.menuPosition = this.resolvePositions();
343
+ if (content?.isDebugVisible() && !this.cdkMenuTrigger.isOpen()) {
344
+ queueMicrotask(() => {
345
+ if (!this.cdkMenuTrigger.isOpen()) {
346
+ this.cdkMenuTrigger.open();
347
+ }
348
+ });
349
+ }
350
+ }
332
351
  close() {
333
352
  if (this.menuContent()?.isDebugVisible()) {
334
353
  return;
@@ -382,6 +401,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
382
401
  }]
383
402
  }], ctorParameters: () => [], propDecorators: { menuContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "frContextMenuSubTrigger", required: false }] }], inset: [{ type: i0.Input, args: [{ isSignal: true, alias: "inset", required: false }] }], triggerModeInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerMode", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
384
403
 
404
+ /** Trigger control for context menu. */
385
405
  class FrContextMenuTrigger {
386
406
  static CUSTOM_PROPERTY_PREFIX = '--frame-dropdown-menu-';
387
407
  cdkContextMenuTrigger = inject(CdkContextMenuTrigger);
@@ -395,19 +415,7 @@ class FrContextMenuTrigger {
395
415
  closed = output();
396
416
  isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
397
417
  constructor() {
398
- effect(() => {
399
- const content = this.menuContent();
400
- this.cdkContextMenuTrigger.menuTemplateRef = content?.templateRef ?? null;
401
- this.cdkContextMenuTrigger.menuPosition = this.resolvePositions();
402
- this.cdkContextMenuTrigger.disabled = this.disabled();
403
- if (content?.isDebugVisible() && !this.cdkContextMenuTrigger.isOpen()) {
404
- queueMicrotask(() => {
405
- if (!this.cdkContextMenuTrigger.isOpen()) {
406
- this.openAtCenter();
407
- }
408
- });
409
- }
410
- });
418
+ queueMicrotask(() => this.syncCdkTrigger());
411
419
  this.cdkContextMenuTrigger.opened.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
412
420
  this.isOpen.set(true);
413
421
  this.opened.emit();
@@ -428,6 +436,22 @@ class FrContextMenuTrigger {
428
436
  this.closed.emit();
429
437
  });
430
438
  }
439
+ ngDoCheck() {
440
+ this.syncCdkTrigger();
441
+ }
442
+ syncCdkTrigger() {
443
+ const content = this.menuContent();
444
+ this.cdkContextMenuTrigger.menuTemplateRef = content?.templateRef ?? null;
445
+ this.cdkContextMenuTrigger.menuPosition = this.resolvePositions();
446
+ this.cdkContextMenuTrigger.disabled = this.disabled();
447
+ if (content?.isDebugVisible() && !this.cdkContextMenuTrigger.isOpen()) {
448
+ queueMicrotask(() => {
449
+ if (!this.cdkContextMenuTrigger.isOpen()) {
450
+ this.openAtCenter();
451
+ }
452
+ });
453
+ }
454
+ }
431
455
  openAt(coordinates) {
432
456
  if (this.disabled() || !this.menuContent()) {
433
457
  return;
@@ -442,6 +466,7 @@ class FrContextMenuTrigger {
442
466
  return;
443
467
  }
444
468
  this.clearLongPress();
469
+ // Touch and pen users need a delayed open because they do not have a native contextmenu gesture.
445
470
  this.longPressTimeoutId = setTimeout(() => {
446
471
  event.preventDefault();
447
472
  this.openAt({ x: event.clientX, y: event.clientY });
@@ -472,6 +497,7 @@ class FrContextMenuTrigger {
472
497
  }
473
498
  const menuPanel = overlayElement.querySelector('.frame-dropdown-menu__content') ?? overlayElement;
474
499
  const sourceStyles = getComputedStyle(this.elementRef.nativeElement);
500
+ // CDK portals the menu, so trigger-scoped CSS variables must be mirrored manually.
475
501
  for (let index = 0; index < sourceStyles.length; index += 1) {
476
502
  const propertyName = sourceStyles.item(index);
477
503
  if (!propertyName.startsWith(FrContextMenuTrigger.CUSTOM_PROPERTY_PREFIX)) {
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-context-menu.mjs","sources":["../../../projects/components/context-menu/src/context-menu.content.ts","../../../projects/components/context-menu/src/context-menu.items.ts","../../../projects/components/context-menu/src/context-menu.root.ts","../../../projects/components/context-menu/src/context-menu.sub-trigger.ts","../../../projects/components/context-menu/src/context-menu.trigger.ts","../../../projects/components/context-menu/context-menu.module.ts","../../../projects/components/context-menu/frame-ui-ng-components-context-menu.ts"],"sourcesContent":["import { CdkMenu, CdkTargetMenuAim } from '@angular/cdk/menu';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n Directive,\n InjectionToken,\n TemplateRef,\n booleanAttribute,\n inject,\n input,\n} from '@angular/core';\n\nimport { buildConnectedPositions } from '@frame-ui-ng/components/dropdown-menu';\nimport {\n FR_DROPDOWN_MENU_CONTENT,\n FrDropdownMenuContent,\n} from '@frame-ui-ng/components/dropdown-menu';\nimport {\n FR_DROPDOWN_MENU_PARENT,\n FrDropdownMenuTree,\n} from '@frame-ui-ng/components/dropdown-menu';\nimport {\n FrDropdownMenuAlignment,\n FrDropdownMenuSide,\n} from '@frame-ui-ng/components/dropdown-menu';\n\nexport const FR_CONTEXT_MENU_CONTENT = new InjectionToken<FrContextMenuContent>(\n 'FrContextMenuContent',\n);\n\n@Directive({\n selector: 'ng-template[frContextMenuContent], ng-template[frContextMenuSubContent]',\n exportAs: 'frContextMenuContent',\n providers: [\n {\n provide: FR_CONTEXT_MENU_CONTENT,\n useExisting: FrContextMenuContent,\n },\n {\n provide: FR_DROPDOWN_MENU_CONTENT,\n useExisting: FrContextMenuContent,\n },\n ],\n})\nexport class FrContextMenuContent implements Partial<FrDropdownMenuContent> {\n readonly templateRef = inject(TemplateRef<unknown>);\n\n readonly align = input<FrDropdownMenuAlignment>('start');\n readonly alignOffset = input(0);\n readonly debugVisible = input(false, { transform: booleanAttribute });\n readonly side = input<FrDropdownMenuSide>('right');\n readonly sideOffset = input(4);\n\n isDebugVisible(): boolean {\n return this.debugVisible();\n }\n\n getPositions(isSubmenu: boolean): ConnectedPosition[] {\n return buildConnectedPositions({\n align: this.align(),\n alignOffset: this.alignOffset(),\n isSubmenu,\n side: this.side(),\n sideOffset: this.sideOffset(),\n });\n }\n}\n\n@Directive({\n selector: '[frContextMenuPanel]',\n hostDirectives: [CdkMenu, CdkTargetMenuAim],\n host: {\n class: 'frame-context-menu__content frame-dropdown-menu__content',\n '[attr.data-side]': 'side()',\n tabindex: '-1',\n '(mouseenter)': 'handleMouseEnter()',\n '(mouseleave)': 'handleMouseLeave()',\n },\n})\nexport class FrContextMenuPanel {\n protected readonly side = inject(FR_CONTEXT_MENU_CONTENT).side;\n private readonly tree = inject(FrDropdownMenuTree);\n private readonly parent = inject(FR_DROPDOWN_MENU_PARENT);\n\n protected handleMouseEnter(): void {\n this.tree.enterInteractiveArea();\n }\n\n protected handleMouseLeave(): void {\n this.tree.leaveInteractiveArea(this.parent.closeDelay());\n }\n}\n\r\n","import { CdkMenuGroup, CdkMenuItem, CdkMenuItemCheckbox, CdkMenuItemRadio } from '@angular/cdk/menu';\nimport { Directive, booleanAttribute, effect, inject, input } from '@angular/core';\n\nimport { FrDropdownMenuItemVariant } from '@frame-ui-ng/components/dropdown-menu';\n\n@Directive({\n selector: '[frContextMenuItem]',\n hostDirectives: [CdkMenuItem],\n host: {\n class: 'frame-context-menu__item frame-dropdown-menu__item',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n '[attr.data-variant]': 'variant()',\n },\n})\nexport class FrContextMenuItem {\n readonly inset = input(false, { transform: booleanAttribute });\n readonly variant = input<FrDropdownMenuItemVariant>('default');\n}\n\n@Directive({\n selector: 'button[frContextMenuCheckboxItem]',\n hostDirectives: [CdkMenuItemCheckbox],\n host: {\n class: 'frame-context-menu__item frame-context-menu__checkbox-item frame-dropdown-menu__item frame-dropdown-menu__checkbox-item',\n '[attr.data-checked]': 'checkboxItem.checked ? \"\" : null',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n '[attr.data-variant]': 'variant()',\n },\n})\nexport class FrContextMenuCheckboxItem {\n protected readonly checkboxItem = inject(CdkMenuItemCheckbox);\n\n readonly checked = input(false, {\n alias: 'checked',\n transform: booleanAttribute,\n });\n readonly inset = input(false, { transform: booleanAttribute });\n readonly variant = input<FrDropdownMenuItemVariant>('default');\n\n constructor() {\n effect(() => {\n this.checkboxItem.checked = this.checked();\n });\n }\n}\n\n@Directive({\n selector: '[frContextMenuRadioGroup]',\n hostDirectives: [CdkMenuGroup],\n host: {\n class: 'frame-context-menu__radio-group frame-dropdown-menu__radio-group',\n },\n})\nexport class FrContextMenuRadioGroup {}\n\n@Directive({\n selector: 'button[frContextMenuRadioItem]',\n hostDirectives: [CdkMenuItemRadio],\n host: {\n class: 'frame-context-menu__item frame-context-menu__radio-item frame-dropdown-menu__item frame-dropdown-menu__radio-item',\n '[attr.data-checked]': 'radioItem.checked ? \"\" : null',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n '[attr.data-variant]': 'variant()',\n },\n})\nexport class FrContextMenuRadioItem {\n protected readonly radioItem = inject(CdkMenuItemRadio);\n\n readonly checked = input(false, {\n alias: 'checked',\n transform: booleanAttribute,\n });\n readonly inset = input(false, { transform: booleanAttribute });\n readonly variant = input<FrDropdownMenuItemVariant>('default');\n\n constructor() {\n effect(() => {\n this.radioItem.checked = this.checked();\n });\n }\n}\n\n@Directive({\n selector: '[frContextMenuLabel]',\n host: {\n class: 'frame-context-menu__label frame-dropdown-menu__label',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n },\n})\nexport class FrContextMenuLabel {\n readonly inset = input(false, { transform: booleanAttribute });\n}\n\n@Directive({\n selector: '[frContextMenuSeparator]',\n host: {\n class: 'frame-context-menu__separator frame-dropdown-menu__separator',\n role: 'separator',\n },\n})\nexport class FrContextMenuSeparator {}\n\n@Directive({\n selector: '[frContextMenuShortcut]',\n host: {\n class: 'frame-context-menu__shortcut frame-dropdown-menu__shortcut',\n },\n})\nexport class FrContextMenuShortcut {}\n\n@Directive({\n selector: '[frContextMenuItemIndicator]',\n host: {\n class: 'frame-context-menu__indicator frame-dropdown-menu__indicator',\n 'aria-hidden': 'true',\n },\n})\nexport class FrContextMenuItemIndicator {}\n\r\n","import { Directive, effect, inject, input, signal } from '@angular/core';\n\nimport { FrDropdownMenuTriggerMode } from '@frame-ui-ng/components/dropdown-menu';\nimport {\n FR_DROPDOWN_MENU_PARENT,\n FrDropdownMenuParent,\n FrDropdownMenuTree,\n} from '@frame-ui-ng/components/dropdown-menu';\n\n@Directive({\n selector: '[frContextMenu]',\n providers: [\n FrDropdownMenuTree,\n {\n provide: FR_DROPDOWN_MENU_PARENT,\n useExisting: FrContextMenu,\n },\n ],\n host: {\n class: 'frame-context-menu-root',\n },\n})\nexport class FrContextMenu implements FrDropdownMenuParent {\n readonly closeDelay = input(140);\n readonly triggerMode = input<FrDropdownMenuTriggerMode>('both');\n}\n\n@Directive({\n selector: '[frContextMenuSub]',\n providers: [\n {\n provide: FR_DROPDOWN_MENU_PARENT,\n useExisting: FrContextMenuSub,\n },\n ],\n host: {\n class: 'frame-context-menu-sub frame-dropdown-menu-sub',\n },\n})\nexport class FrContextMenuSub implements FrDropdownMenuParent {\n private readonly parent = inject(FR_DROPDOWN_MENU_PARENT, { skipSelf: true });\n\n readonly closeDelayInput = input<number | null>(null, { alias: 'closeDelay' });\n readonly triggerModeInput = input<FrDropdownMenuTriggerMode | null>(null, {\n alias: 'triggerMode',\n });\n\n readonly closeDelay = signal(this.parent.closeDelay());\n readonly triggerMode = signal(this.parent.triggerMode());\n\n constructor() {\n effect(() => {\n this.closeDelay.set(this.closeDelayInput() ?? this.parent.closeDelay());\n this.triggerMode.set(this.triggerModeInput() ?? this.parent.triggerMode());\n });\n }\n}\n\r\n","import { CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n DestroyRef,\n Directive,\n InputSignal,\n OnDestroy,\n booleanAttribute,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { FrContextMenuContent } from './context-menu.content';\nimport { defaultPositions } from '@frame-ui-ng/components/dropdown-menu';\nimport {\n FR_DROPDOWN_MENU_PARENT,\n FrDropdownMenuTree,\n} from '@frame-ui-ng/components/dropdown-menu';\nimport {\n FrDropdownMenuItemVariant,\n FrDropdownMenuTriggerMode,\n} from '@frame-ui-ng/components/dropdown-menu';\n\n@Directive({\n selector: '[frContextMenuSubTrigger]',\n hostDirectives: [CdkMenuItem, CdkMenuTrigger],\n host: {\n class: 'frame-context-menu__item frame-context-menu__sub-trigger frame-dropdown-menu__item frame-dropdown-menu__sub-trigger',\n '[attr.data-inset]': 'inset() ? \"\" : null',\n '[attr.data-state]': 'isOpen() ? \"open\" : \"closed\"',\n '[attr.data-variant]': 'variant()',\n '(mouseenter)': 'handleMouseEnter()',\n '(mouseleave)': 'handleMouseLeave()',\n },\n})\nexport class FrContextMenuSubTrigger implements OnDestroy {\n private readonly cdkMenuTrigger = inject(CdkMenuTrigger);\n private readonly destroyRef = inject(DestroyRef);\n private readonly tree = inject(FrDropdownMenuTree);\n private readonly parent = inject(FR_DROPDOWN_MENU_PARENT);\n\n readonly menuContent: InputSignal<FrContextMenuContent | null> = input<FrContextMenuContent | null>(null, {\n alias: 'frContextMenuSubTrigger',\n });\n readonly inset = input(false, { transform: booleanAttribute });\n readonly triggerModeInput = input<FrDropdownMenuTriggerMode | null>(null, {\n alias: 'triggerMode',\n });\n readonly variant = input<FrDropdownMenuItemVariant>('default');\n readonly isOpen = signal(false);\n\n constructor() {\n this.tree.register(this);\n\n effect(() => {\n const content = this.menuContent();\n\n this.cdkMenuTrigger.menuTemplateRef = content?.templateRef ?? null;\n this.cdkMenuTrigger.menuPosition = this.resolvePositions();\n\n if (content?.isDebugVisible() && !this.cdkMenuTrigger.isOpen()) {\n queueMicrotask(() => {\n if (!this.cdkMenuTrigger.isOpen()) {\n this.cdkMenuTrigger.open();\n }\n });\n }\n });\n\n this.cdkMenuTrigger.opened.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.tree.cancelClose();\n this.isOpen.set(true);\n });\n\n this.cdkMenuTrigger.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.menuContent()?.isDebugVisible()) {\n queueMicrotask(() => {\n if (!this.cdkMenuTrigger.isOpen()) {\n this.cdkMenuTrigger.open();\n }\n });\n return;\n }\n\n this.isOpen.set(false);\n });\n }\n\n close(): void {\n if (this.menuContent()?.isDebugVisible()) {\n return;\n }\n\n if (this.cdkMenuTrigger.isOpen()) {\n this.cdkMenuTrigger.close();\n }\n }\n\n ngOnDestroy(): void {\n this.tree.unregister(this);\n }\n\n protected handleMouseEnter(): void {\n this.tree.enterInteractiveArea();\n\n if (this.triggerMode === 'hover' || this.triggerMode === 'both') {\n this.tree.cancelClose();\n\n if (!this.cdkMenuTrigger.isOpen()) {\n this.cdkMenuTrigger.open();\n }\n }\n }\n\n protected handleMouseLeave(): void {\n if (this.menuContent()?.isDebugVisible()) {\n return;\n }\n\n if (this.triggerMode === 'hover' || this.triggerMode === 'both') {\n this.tree.leaveInteractiveArea(this.parent.closeDelay());\n }\n }\n\n private get triggerMode(): FrDropdownMenuTriggerMode {\n return this.triggerModeInput() ?? this.parent.triggerMode();\n }\n\n private resolvePositions(): ConnectedPosition[] {\n return this.menuContent()?.getPositions(true) ?? defaultPositions(true);\n }\n}\n\r\n","import { CdkContextMenuTrigger } from '@angular/cdk/menu';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n booleanAttribute,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { FrContextMenuContent } from './context-menu.content';\nimport { defaultPositions } from '@frame-ui-ng/components/dropdown-menu';\n\ntype ContextMenuCoordinates = {\n readonly x: number;\n readonly y: number;\n};\n\n@Directive({\n selector: '[frContextMenuTrigger]',\n hostDirectives: [CdkContextMenuTrigger],\n host: {\n class: 'frame-context-menu__trigger',\n '[attr.data-state]': 'isOpen() ? \"open\" : \"closed\"',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '(pointerdown)': 'handlePointerDown($event)',\n '(pointerup)': 'clearLongPress()',\n '(pointercancel)': 'clearLongPress()',\n '(pointerleave)': 'clearLongPress()',\n },\n})\nexport class FrContextMenuTrigger {\n private static readonly CUSTOM_PROPERTY_PREFIX = '--frame-dropdown-menu-';\n\n private readonly cdkContextMenuTrigger = inject(CdkContextMenuTrigger);\n private readonly destroyRef = inject(DestroyRef);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private longPressTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n readonly menuContent = input<FrContextMenuContent | null>(null, {\n alias: 'frContextMenuTrigger',\n });\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly longPressDelay = input(520);\n readonly opened = output<void>();\n readonly closed = output<void>();\n readonly isOpen = signal(false);\n\n constructor() {\n effect(() => {\n const content = this.menuContent();\n\n this.cdkContextMenuTrigger.menuTemplateRef = content?.templateRef ?? null;\n this.cdkContextMenuTrigger.menuPosition = this.resolvePositions();\n this.cdkContextMenuTrigger.disabled = this.disabled();\n\n if (content?.isDebugVisible() && !this.cdkContextMenuTrigger.isOpen()) {\n queueMicrotask(() => {\n if (!this.cdkContextMenuTrigger.isOpen()) {\n this.openAtCenter();\n }\n });\n }\n });\n\n this.cdkContextMenuTrigger.opened.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.isOpen.set(true);\n this.opened.emit();\n queueMicrotask(() => {\n this.syncCustomPropertiesToOverlay();\n });\n });\n\n this.cdkContextMenuTrigger.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n if (this.menuContent()?.isDebugVisible()) {\n queueMicrotask(() => {\n if (!this.cdkContextMenuTrigger.isOpen()) {\n this.openAtCenter();\n }\n });\n return;\n }\n\n this.isOpen.set(false);\n this.closed.emit();\n });\n }\n\n openAt(coordinates: ContextMenuCoordinates): void {\n if (this.disabled() || !this.menuContent()) {\n return;\n }\n\n this.cdkContextMenuTrigger.open(coordinates);\n }\n\n close(): void {\n this.cdkContextMenuTrigger.close();\n }\n\n protected handlePointerDown(event: PointerEvent): void {\n if (this.disabled() || (event.pointerType !== 'touch' && event.pointerType !== 'pen')) {\n return;\n }\n\n this.clearLongPress();\n this.longPressTimeoutId = setTimeout(() => {\n event.preventDefault();\n this.openAt({ x: event.clientX, y: event.clientY });\n }, this.longPressDelay());\n }\n\n protected clearLongPress(): void {\n if (this.longPressTimeoutId === null) {\n return;\n }\n\n clearTimeout(this.longPressTimeoutId);\n this.longPressTimeoutId = null;\n }\n\n private resolvePositions(): ConnectedPosition[] {\n return this.menuContent()?.getPositions(false) ?? defaultPositions(false);\n }\n\n private openAtCenter(): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n\n this.openAt({\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n });\n }\n\n private syncCustomPropertiesToOverlay(): void {\n const overlayRef = (this.cdkContextMenuTrigger as unknown as {\n overlayRef?: { overlayElement?: HTMLElement | null };\n }).overlayRef;\n const overlayElement = overlayRef?.overlayElement ?? null;\n\n if (!overlayElement) {\n return;\n }\n\n const menuPanel =\n overlayElement.querySelector<HTMLElement>('.frame-dropdown-menu__content') ?? overlayElement;\n const sourceStyles = getComputedStyle(this.elementRef.nativeElement);\n\n for (let index = 0; index < sourceStyles.length; index += 1) {\n const propertyName = sourceStyles.item(index);\n\n if (!propertyName.startsWith(FrContextMenuTrigger.CUSTOM_PROPERTY_PREFIX)) {\n continue;\n }\n\n const propertyValue = sourceStyles.getPropertyValue(propertyName);\n\n overlayElement.style.setProperty(propertyName, propertyValue);\n menuPanel.style.setProperty(propertyName, propertyValue);\n }\n }\n}\n\r\n","import { NgModule } from '@angular/core';\nimport {\n FrContextMenu,\n FrContextMenuCheckboxItem,\n FrContextMenuContent,\n FrContextMenuItem,\n FrContextMenuItemIndicator,\n FrContextMenuLabel,\n FrContextMenuPanel,\n FrContextMenuRadioGroup,\n FrContextMenuRadioItem,\n FrContextMenuSeparator,\n FrContextMenuShortcut,\n FrContextMenuSub,\n FrContextMenuSubTrigger,\n FrContextMenuTrigger,\n} from './src/context-menu';\n\n@NgModule({\n imports: [\n FrContextMenu,\n FrContextMenuCheckboxItem,\n FrContextMenuContent,\n FrContextMenuItem,\n FrContextMenuItemIndicator,\n FrContextMenuLabel,\n FrContextMenuPanel,\n FrContextMenuRadioGroup,\n FrContextMenuRadioItem,\n FrContextMenuSeparator,\n FrContextMenuShortcut,\n FrContextMenuSub,\n FrContextMenuSubTrigger,\n FrContextMenuTrigger,\n ],\n exports: [\n FrContextMenu,\n FrContextMenuCheckboxItem,\n FrContextMenuContent,\n FrContextMenuItem,\n FrContextMenuItemIndicator,\n FrContextMenuLabel,\n FrContextMenuPanel,\n FrContextMenuRadioGroup,\n FrContextMenuRadioItem,\n FrContextMenuSeparator,\n FrContextMenuShortcut,\n FrContextMenuSub,\n FrContextMenuSubTrigger,\n FrContextMenuTrigger,\n ],\n})\nexport class FrContextMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame-ui-ng-components-context-menu.mjs","sources":["../../../projects/components/context-menu/src/context-menu.content.ts","../../../projects/components/context-menu/src/context-menu.items.ts","../../../projects/components/context-menu/src/context-menu.root.ts","../../../projects/components/context-menu/src/context-menu.sub-trigger.ts","../../../projects/components/context-menu/src/context-menu.trigger.ts","../../../projects/components/context-menu/context-menu.module.ts","../../../projects/components/context-menu/frame-ui-ng-components-context-menu.ts"],"sourcesContent":["import { CdkMenu, CdkTargetMenuAim } from '@angular/cdk/menu';\r\nimport { ConnectedPosition } from '@angular/cdk/overlay';\r\nimport {\r\n Directive,\r\n InjectionToken,\r\n TemplateRef,\r\n booleanAttribute,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nimport { buildConnectedPositions } from '@frame-ui-ng/components/dropdown-menu';\r\nimport {\r\n FR_DROPDOWN_MENU_CONTENT,\r\n FrDropdownMenuContent,\r\n} from '@frame-ui-ng/components/dropdown-menu';\r\nimport {\r\n FR_DROPDOWN_MENU_PARENT,\r\n FrDropdownMenuTree,\r\n} from '@frame-ui-ng/components/dropdown-menu';\r\nimport {\r\n FrDropdownMenuAlignment,\r\n FrDropdownMenuSide,\r\n} from '@frame-ui-ng/components/dropdown-menu';\r\n\r\nexport const FR_CONTEXT_MENU_CONTENT = new InjectionToken<FrContextMenuContent>(\r\n 'FrContextMenuContent',\r\n);\r\n\r\n/** Content slot for context menu. */\r\n@Directive({\r\n selector: 'ng-template[frContextMenuContent], ng-template[frContextMenuSubContent]',\r\n exportAs: 'frContextMenuContent',\r\n providers: [\r\n {\r\n provide: FR_CONTEXT_MENU_CONTENT,\r\n useExisting: FrContextMenuContent,\r\n },\r\n {\r\n provide: FR_DROPDOWN_MENU_CONTENT,\r\n useExisting: FrContextMenuContent,\r\n },\r\n ],\r\n})\r\nexport class FrContextMenuContent implements Partial<FrDropdownMenuContent> {\r\n readonly templateRef = inject(TemplateRef<unknown>);\r\n\r\n readonly align = input<FrDropdownMenuAlignment>('start');\r\n readonly alignOffset = input(0);\r\n readonly debugVisible = input(false, { transform: booleanAttribute });\r\n readonly side = input<FrDropdownMenuSide>('right');\r\n readonly sideOffset = input(4);\r\n\r\n isDebugVisible(): boolean {\r\n return this.debugVisible();\r\n }\r\n\r\n getPositions(isSubmenu: boolean): ConnectedPosition[] {\r\n return buildConnectedPositions({\r\n align: this.align(),\r\n alignOffset: this.alignOffset(),\r\n isSubmenu,\r\n side: this.side(),\r\n sideOffset: this.sideOffset(),\r\n });\r\n }\r\n}\r\n\r\n/** Panel slot for context menu. */\r\n@Directive({\r\n selector: '[frContextMenuPanel]',\r\n hostDirectives: [CdkMenu, CdkTargetMenuAim],\r\n host: {\r\n class: 'frame-context-menu__content frame-dropdown-menu__content',\r\n '[attr.data-side]': 'side()',\r\n tabindex: '-1',\r\n '(mouseenter)': 'handleMouseEnter()',\r\n '(mouseleave)': 'handleMouseLeave()',\r\n },\r\n})\r\nexport class FrContextMenuPanel {\r\n protected readonly side = inject(FR_CONTEXT_MENU_CONTENT).side;\r\n private readonly tree = inject(FrDropdownMenuTree);\r\n private readonly parent = inject(FR_DROPDOWN_MENU_PARENT);\r\n\r\n protected handleMouseEnter(): void {\r\n this.tree.enterInteractiveArea();\r\n }\r\n\r\n protected handleMouseLeave(): void {\r\n this.tree.leaveInteractiveArea(this.parent.closeDelay());\r\n }\r\n}\r\n\r\n","import { CdkMenuGroup, CdkMenuItem, CdkMenuItemCheckbox, CdkMenuItemRadio } from '@angular/cdk/menu';\r\nimport { Directive, DoCheck, booleanAttribute, inject, input } from '@angular/core';\r\n\r\nimport { FrDropdownMenuItemVariant } from '@frame-ui-ng/components/dropdown-menu';\r\n\r\n/** Item slot for context menu. */\r\n@Directive({\r\n selector: '[frContextMenuItem]',\r\n hostDirectives: [CdkMenuItem],\r\n host: {\r\n class: 'frame-context-menu__item frame-dropdown-menu__item',\r\n '[attr.data-inset]': 'inset() ? \"\" : null',\r\n '[attr.data-variant]': 'variant()',\r\n },\r\n})\r\nexport class FrContextMenuItem {\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n readonly variant = input<FrDropdownMenuItemVariant>('default');\r\n}\r\n\r\n/** Item slot for context menu checkbox. */\r\n@Directive({\r\n selector: 'button[frContextMenuCheckboxItem]',\r\n hostDirectives: [CdkMenuItemCheckbox],\r\n host: {\r\n class: 'frame-context-menu__item frame-context-menu__checkbox-item frame-dropdown-menu__item frame-dropdown-menu__checkbox-item',\r\n '[attr.data-checked]': 'checkboxItem.checked ? \"\" : null',\r\n '[attr.data-inset]': 'inset() ? \"\" : null',\r\n '[attr.data-variant]': 'variant()',\r\n },\r\n})\r\nexport class FrContextMenuCheckboxItem implements DoCheck {\r\n protected readonly checkboxItem = inject(CdkMenuItemCheckbox);\r\n private lastChecked = false;\r\n\r\n readonly checked = input(false, {\r\n alias: 'checked',\r\n transform: booleanAttribute,\r\n });\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n readonly variant = input<FrDropdownMenuItemVariant>('default');\r\n\r\n ngDoCheck(): void {\r\n const checked = this.checked();\r\n\r\n if (checked === this.lastChecked) {\r\n return;\r\n }\r\n\r\n this.lastChecked = checked;\r\n this.checkboxItem.checked = checked;\r\n }\r\n}\r\n\r\n/** Group slot for context menu radio. */\r\n@Directive({\r\n selector: '[frContextMenuRadioGroup]',\r\n hostDirectives: [CdkMenuGroup],\r\n host: {\r\n class: 'frame-context-menu__radio-group frame-dropdown-menu__radio-group',\r\n },\r\n})\r\nexport class FrContextMenuRadioGroup {}\r\n\r\n/** Item slot for context menu radio. */\r\n@Directive({\r\n selector: 'button[frContextMenuRadioItem]',\r\n hostDirectives: [CdkMenuItemRadio],\r\n host: {\r\n class: 'frame-context-menu__item frame-context-menu__radio-item frame-dropdown-menu__item frame-dropdown-menu__radio-item',\r\n '[attr.data-checked]': 'radioItem.checked ? \"\" : null',\r\n '[attr.data-inset]': 'inset() ? \"\" : null',\r\n '[attr.data-variant]': 'variant()',\r\n },\r\n})\r\nexport class FrContextMenuRadioItem implements DoCheck {\r\n protected readonly radioItem = inject(CdkMenuItemRadio);\r\n private lastChecked = false;\r\n\r\n readonly checked = input(false, {\r\n alias: 'checked',\r\n transform: booleanAttribute,\r\n });\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n readonly variant = input<FrDropdownMenuItemVariant>('default');\r\n\r\n ngDoCheck(): void {\r\n const checked = this.checked();\r\n\r\n if (checked === this.lastChecked) {\r\n return;\r\n }\r\n\r\n this.lastChecked = checked;\r\n this.radioItem.checked = checked;\r\n }\r\n}\r\n\r\n/** Label slot for context menu. */\r\n@Directive({\r\n selector: '[frContextMenuLabel]',\r\n host: {\r\n class: 'frame-context-menu__label frame-dropdown-menu__label',\r\n '[attr.data-inset]': 'inset() ? \"\" : null',\r\n },\r\n})\r\nexport class FrContextMenuLabel {\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n}\r\n\r\n/** Separator slot for context menu. */\r\n@Directive({\r\n selector: '[frContextMenuSeparator]',\r\n host: {\r\n class: 'frame-context-menu__separator frame-dropdown-menu__separator',\r\n role: 'separator',\r\n },\r\n})\r\nexport class FrContextMenuSeparator {}\r\n\r\n/** Shortcut slot for context menu. */\r\n@Directive({\r\n selector: '[frContextMenuShortcut]',\r\n host: {\r\n class: 'frame-context-menu__shortcut frame-dropdown-menu__shortcut',\r\n },\r\n})\r\nexport class FrContextMenuShortcut {}\r\n\r\n/** Indicator slot for context menu item. */\r\n@Directive({\r\n selector: '[frContextMenuItemIndicator]',\r\n host: {\r\n class: 'frame-context-menu__indicator frame-dropdown-menu__indicator',\r\n 'aria-hidden': 'true',\r\n },\r\n})\r\nexport class FrContextMenuItemIndicator {}\r\n\r\n","import { Directive, computed, inject, input } from '@angular/core';\r\n\r\nimport { FrDropdownMenuTriggerMode } from '@frame-ui-ng/components/dropdown-menu';\r\nimport {\r\n FR_DROPDOWN_MENU_PARENT,\r\n FrDropdownMenuParent,\r\n FrDropdownMenuTree,\r\n} from '@frame-ui-ng/components/dropdown-menu';\r\n\r\n/** Root controller for context menu interactions. */\r\n@Directive({\r\n selector: '[frContextMenu]',\r\n providers: [\r\n FrDropdownMenuTree,\r\n {\r\n provide: FR_DROPDOWN_MENU_PARENT,\r\n useExisting: FrContextMenu,\r\n },\r\n ],\r\n host: {\r\n class: 'frame-context-menu-root',\r\n },\r\n})\r\nexport class FrContextMenu implements FrDropdownMenuParent {\r\n readonly closeDelay = input(140);\r\n readonly triggerMode = input<FrDropdownMenuTriggerMode>('both');\r\n}\r\n\r\n/** Nested submenu controller for context menu. */\r\n@Directive({\r\n selector: '[frContextMenuSub]',\r\n providers: [\r\n {\r\n provide: FR_DROPDOWN_MENU_PARENT,\r\n useExisting: FrContextMenuSub,\r\n },\r\n ],\r\n host: {\r\n class: 'frame-context-menu-sub frame-dropdown-menu-sub',\r\n },\r\n})\r\nexport class FrContextMenuSub implements FrDropdownMenuParent {\r\n private readonly parent = inject(FR_DROPDOWN_MENU_PARENT, { skipSelf: true });\r\n\r\n readonly closeDelayInput = input<number | null>(null, { alias: 'closeDelay' });\r\n readonly triggerModeInput = input<FrDropdownMenuTriggerMode | null>(null, {\r\n alias: 'triggerMode',\r\n });\r\n\r\n readonly closeDelay = computed(() => this.closeDelayInput() ?? this.parent.closeDelay());\r\n readonly triggerMode = computed(() => this.triggerModeInput() ?? this.parent.triggerMode());\r\n}\r\n\r\n\r\n","import { CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\r\nimport { ConnectedPosition } from '@angular/cdk/overlay';\r\nimport {\r\n DestroyRef,\r\n Directive,\r\n DoCheck,\r\n InputSignal,\r\n OnDestroy,\r\n booleanAttribute,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { FrContextMenuContent } from './context-menu.content';\r\nimport { defaultPositions } from '@frame-ui-ng/components/dropdown-menu';\r\nimport {\r\n FR_DROPDOWN_MENU_PARENT,\r\n FrDropdownMenuTree,\r\n} from '@frame-ui-ng/components/dropdown-menu';\r\nimport {\r\n FrDropdownMenuItemVariant,\r\n FrDropdownMenuTriggerMode,\r\n} from '@frame-ui-ng/components/dropdown-menu';\r\n\r\n/** Trigger control for context menu sub. */\r\n@Directive({\r\n selector: '[frContextMenuSubTrigger]',\r\n hostDirectives: [CdkMenuItem, CdkMenuTrigger],\r\n host: {\r\n class: 'frame-context-menu__item frame-context-menu__sub-trigger frame-dropdown-menu__item frame-dropdown-menu__sub-trigger',\r\n '[attr.data-inset]': 'inset() ? \"\" : null',\r\n '[attr.data-state]': 'isOpen() ? \"open\" : \"closed\"',\r\n '[attr.data-variant]': 'variant()',\r\n '(mouseenter)': 'handleMouseEnter()',\r\n '(mouseleave)': 'handleMouseLeave()',\r\n },\r\n})\r\nexport class FrContextMenuSubTrigger implements DoCheck, OnDestroy {\r\n private readonly cdkMenuTrigger = inject(CdkMenuTrigger);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly tree = inject(FrDropdownMenuTree);\r\n private readonly parent = inject(FR_DROPDOWN_MENU_PARENT);\r\n\r\n readonly menuContent: InputSignal<FrContextMenuContent | null> = input<FrContextMenuContent | null>(null, {\r\n alias: 'frContextMenuSubTrigger',\r\n });\r\n readonly inset = input(false, { transform: booleanAttribute });\r\n readonly triggerModeInput = input<FrDropdownMenuTriggerMode | null>(null, {\r\n alias: 'triggerMode',\r\n });\r\n readonly variant = input<FrDropdownMenuItemVariant>('default');\r\n readonly isOpen = signal(false);\r\n\r\n constructor() {\r\n this.tree.register(this);\r\n queueMicrotask(() => this.syncCdkTrigger());\r\n\r\n this.cdkMenuTrigger.opened.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n this.tree.cancelClose();\r\n this.isOpen.set(true);\r\n });\r\n\r\n this.cdkMenuTrigger.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n if (this.menuContent()?.isDebugVisible()) {\r\n queueMicrotask(() => {\r\n if (!this.cdkMenuTrigger.isOpen()) {\r\n this.cdkMenuTrigger.open();\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.isOpen.set(false);\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.syncCdkTrigger();\r\n }\r\n\r\n private syncCdkTrigger(): void {\r\n const content = this.menuContent();\r\n\r\n this.cdkMenuTrigger.menuTemplateRef = content?.templateRef ?? null;\r\n this.cdkMenuTrigger.menuPosition = this.resolvePositions();\r\n\r\n if (content?.isDebugVisible() && !this.cdkMenuTrigger.isOpen()) {\r\n queueMicrotask(() => {\r\n if (!this.cdkMenuTrigger.isOpen()) {\r\n this.cdkMenuTrigger.open();\r\n }\r\n });\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this.menuContent()?.isDebugVisible()) {\r\n return;\r\n }\r\n\r\n if (this.cdkMenuTrigger.isOpen()) {\r\n this.cdkMenuTrigger.close();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.tree.unregister(this);\r\n }\r\n\r\n protected handleMouseEnter(): void {\r\n this.tree.enterInteractiveArea();\r\n\r\n if (this.triggerMode === 'hover' || this.triggerMode === 'both') {\r\n this.tree.cancelClose();\r\n\r\n if (!this.cdkMenuTrigger.isOpen()) {\r\n this.cdkMenuTrigger.open();\r\n }\r\n }\r\n }\r\n\r\n protected handleMouseLeave(): void {\r\n if (this.menuContent()?.isDebugVisible()) {\r\n return;\r\n }\r\n\r\n if (this.triggerMode === 'hover' || this.triggerMode === 'both') {\r\n this.tree.leaveInteractiveArea(this.parent.closeDelay());\r\n }\r\n }\r\n\r\n private get triggerMode(): FrDropdownMenuTriggerMode {\r\n return this.triggerModeInput() ?? this.parent.triggerMode();\r\n }\r\n\r\n private resolvePositions(): ConnectedPosition[] {\r\n return this.menuContent()?.getPositions(true) ?? defaultPositions(true);\r\n }\r\n}\r\n\r\n","import { CdkContextMenuTrigger } from '@angular/cdk/menu';\r\nimport { ConnectedPosition } from '@angular/cdk/overlay';\r\nimport {\r\n DestroyRef,\r\n Directive,\r\n DoCheck,\r\n ElementRef,\r\n booleanAttribute,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nimport { FrContextMenuContent } from './context-menu.content';\r\nimport { defaultPositions } from '@frame-ui-ng/components/dropdown-menu';\r\n\r\ntype ContextMenuCoordinates = {\r\n readonly x: number;\r\n readonly y: number;\r\n};\r\n\r\n/** Trigger control for context menu. */\r\n@Directive({\r\n selector: '[frContextMenuTrigger]',\r\n hostDirectives: [CdkContextMenuTrigger],\r\n host: {\r\n class: 'frame-context-menu__trigger',\r\n '[attr.data-state]': 'isOpen() ? \"open\" : \"closed\"',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '(pointerdown)': 'handlePointerDown($event)',\r\n '(pointerup)': 'clearLongPress()',\r\n '(pointercancel)': 'clearLongPress()',\r\n '(pointerleave)': 'clearLongPress()',\r\n },\r\n})\r\nexport class FrContextMenuTrigger implements DoCheck {\r\n private static readonly CUSTOM_PROPERTY_PREFIX = '--frame-dropdown-menu-';\r\n\r\n private readonly cdkContextMenuTrigger = inject(CdkContextMenuTrigger);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private longPressTimeoutId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n readonly menuContent = input<FrContextMenuContent | null>(null, {\r\n alias: 'frContextMenuTrigger',\r\n });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly longPressDelay = input(520);\r\n readonly opened = output<void>();\r\n readonly closed = output<void>();\r\n readonly isOpen = signal(false);\r\n\r\n constructor() {\r\n queueMicrotask(() => this.syncCdkTrigger());\r\n\r\n this.cdkContextMenuTrigger.opened.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n this.isOpen.set(true);\r\n this.opened.emit();\r\n queueMicrotask(() => {\r\n this.syncCustomPropertiesToOverlay();\r\n });\r\n });\r\n\r\n this.cdkContextMenuTrigger.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\r\n if (this.menuContent()?.isDebugVisible()) {\r\n queueMicrotask(() => {\r\n if (!this.cdkContextMenuTrigger.isOpen()) {\r\n this.openAtCenter();\r\n }\r\n });\r\n return;\r\n }\r\n\r\n this.isOpen.set(false);\r\n this.closed.emit();\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.syncCdkTrigger();\r\n }\r\n\r\n private syncCdkTrigger(): void {\r\n const content = this.menuContent();\r\n\r\n this.cdkContextMenuTrigger.menuTemplateRef = content?.templateRef ?? null;\r\n this.cdkContextMenuTrigger.menuPosition = this.resolvePositions();\r\n this.cdkContextMenuTrigger.disabled = this.disabled();\r\n\r\n if (content?.isDebugVisible() && !this.cdkContextMenuTrigger.isOpen()) {\r\n queueMicrotask(() => {\r\n if (!this.cdkContextMenuTrigger.isOpen()) {\r\n this.openAtCenter();\r\n }\r\n });\r\n }\r\n }\r\n\r\n openAt(coordinates: ContextMenuCoordinates): void {\r\n if (this.disabled() || !this.menuContent()) {\r\n return;\r\n }\r\n\r\n this.cdkContextMenuTrigger.open(coordinates);\r\n }\r\n\r\n close(): void {\r\n this.cdkContextMenuTrigger.close();\r\n }\r\n\r\n protected handlePointerDown(event: PointerEvent): void {\r\n if (this.disabled() || (event.pointerType !== 'touch' && event.pointerType !== 'pen')) {\r\n return;\r\n }\r\n\r\n this.clearLongPress();\r\n // Touch and pen users need a delayed open because they do not have a native contextmenu gesture.\r\n this.longPressTimeoutId = setTimeout(() => {\r\n event.preventDefault();\r\n this.openAt({ x: event.clientX, y: event.clientY });\r\n }, this.longPressDelay());\r\n }\r\n\r\n protected clearLongPress(): void {\r\n if (this.longPressTimeoutId === null) {\r\n return;\r\n }\r\n\r\n clearTimeout(this.longPressTimeoutId);\r\n this.longPressTimeoutId = null;\r\n }\r\n\r\n private resolvePositions(): ConnectedPosition[] {\r\n return this.menuContent()?.getPositions(false) ?? defaultPositions(false);\r\n }\r\n\r\n private openAtCenter(): void {\r\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n\r\n this.openAt({\r\n x: rect.left + rect.width / 2,\r\n y: rect.top + rect.height / 2,\r\n });\r\n }\r\n\r\n private syncCustomPropertiesToOverlay(): void {\r\n const overlayRef = (this.cdkContextMenuTrigger as unknown as {\r\n overlayRef?: { overlayElement?: HTMLElement | null };\r\n }).overlayRef;\r\n const overlayElement = overlayRef?.overlayElement ?? null;\r\n\r\n if (!overlayElement) {\r\n return;\r\n }\r\n\r\n const menuPanel =\r\n overlayElement.querySelector<HTMLElement>('.frame-dropdown-menu__content') ?? overlayElement;\r\n const sourceStyles = getComputedStyle(this.elementRef.nativeElement);\r\n\r\n // CDK portals the menu, so trigger-scoped CSS variables must be mirrored manually.\r\n for (let index = 0; index < sourceStyles.length; index += 1) {\r\n const propertyName = sourceStyles.item(index);\r\n\r\n if (!propertyName.startsWith(FrContextMenuTrigger.CUSTOM_PROPERTY_PREFIX)) {\r\n continue;\r\n }\r\n\r\n const propertyValue = sourceStyles.getPropertyValue(propertyName);\r\n\r\n overlayElement.style.setProperty(propertyName, propertyValue);\r\n menuPanel.style.setProperty(propertyName, propertyValue);\r\n }\r\n }\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\nimport {\n FrContextMenu,\n FrContextMenuCheckboxItem,\n FrContextMenuContent,\n FrContextMenuItem,\n FrContextMenuItemIndicator,\n FrContextMenuLabel,\n FrContextMenuPanel,\n FrContextMenuRadioGroup,\n FrContextMenuRadioItem,\n FrContextMenuSeparator,\n FrContextMenuShortcut,\n FrContextMenuSub,\n FrContextMenuSubTrigger,\n FrContextMenuTrigger,\n} from './src/context-menu';\n\n@NgModule({\n imports: [\n FrContextMenu,\n FrContextMenuCheckboxItem,\n FrContextMenuContent,\n FrContextMenuItem,\n FrContextMenuItemIndicator,\n FrContextMenuLabel,\n FrContextMenuPanel,\n FrContextMenuRadioGroup,\n FrContextMenuRadioItem,\n FrContextMenuSeparator,\n FrContextMenuShortcut,\n FrContextMenuSub,\n FrContextMenuSubTrigger,\n FrContextMenuTrigger,\n ],\n exports: [\n FrContextMenu,\n FrContextMenuCheckboxItem,\n FrContextMenuContent,\n FrContextMenuItem,\n FrContextMenuItemIndicator,\n FrContextMenuLabel,\n FrContextMenuPanel,\n FrContextMenuRadioGroup,\n FrContextMenuRadioItem,\n FrContextMenuSeparator,\n FrContextMenuShortcut,\n FrContextMenuSub,\n FrContextMenuSubTrigger,\n FrContextMenuTrigger,\n ],\n})\nexport class FrContextMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ const POSITIONS = [
21
21
  offsetY: -8,
22
22
  },
23
23
  ];
24
+ /** Date picker control backed by the calendar primitive. */
24
25
  class FrDatePicker extends FrControlValueAccessor {
25
26
  mode = input('single', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
26
27
  captionLayout = input('label', ...(ngDevMode ? [{ debugName: "captionLayout" }] : /* istanbul ignore next */ []));
@@ -122,6 +123,7 @@ class FrDatePicker extends FrControlValueAccessor {
122
123
  }
123
124
  selectCalendarValue(value) {
124
125
  const previous = this.singleDate();
126
+ // Preserve the existing time when a calendar click only changes the date portion.
125
127
  const next = this.showTime() && value instanceof Date && previous ? mergeTime(value, previous) : value;
126
128
  this.commitValue(normalizeValue(next, this.mode()));
127
129
  if (this.closeOnSelect() && isCompleteValue(this.value(), this.mode())) {
@@ -433,6 +435,7 @@ function normalizeValue(value, mode) {
433
435
  if (!value) {
434
436
  return mode === 'range' ? { from: null, to: null } : null;
435
437
  }
438
+ // Normalize across modes so form writes, presets, and calendar selections share one shape.
436
439
  if (mode === 'range') {
437
440
  if (isRange(value)) {
438
441
  return {