forty-cdk 0.2.0 → 0.3.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 (220) hide show
  1. package/accordion/README.md +122 -0
  2. package/aspect-ratio/README.md +76 -0
  3. package/avatar/README.md +100 -0
  4. package/breadcrumbs/README.md +49 -0
  5. package/breakpoints/README.md +81 -0
  6. package/button/README.md +49 -0
  7. package/calendar/README.md +458 -0
  8. package/carousel/README.md +358 -0
  9. package/checkbox/README.md +146 -0
  10. package/combobox/README.md +535 -0
  11. package/context-menu/README.md +139 -0
  12. package/date-field/README.md +184 -0
  13. package/date-picker/README.md +338 -0
  14. package/dialog/README.md +388 -0
  15. package/disclosure/README.md +114 -0
  16. package/drag-drop/README.md +359 -0
  17. package/drawer/README.md +560 -0
  18. package/dropdown-menu/README.md +176 -0
  19. package/fesm2022/forty-cdk-accordion.mjs +348 -0
  20. package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
  21. package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
  22. package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
  23. package/fesm2022/forty-cdk-avatar.mjs +308 -0
  24. package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
  25. package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
  26. package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
  27. package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
  28. package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
  29. package/fesm2022/forty-cdk-button.mjs +134 -0
  30. package/fesm2022/forty-cdk-button.mjs.map +1 -0
  31. package/fesm2022/forty-cdk-calendar.mjs +2034 -0
  32. package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
  33. package/fesm2022/forty-cdk-carousel.mjs +968 -0
  34. package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
  35. package/fesm2022/forty-cdk-checkbox.mjs +226 -0
  36. package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
  37. package/fesm2022/forty-cdk-combobox.mjs +2596 -0
  38. package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
  39. package/fesm2022/forty-cdk-context-menu.mjs +413 -0
  40. package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
  41. package/fesm2022/forty-cdk-core.mjs +9022 -0
  42. package/fesm2022/forty-cdk-core.mjs.map +1 -0
  43. package/fesm2022/forty-cdk-date-field.mjs +744 -0
  44. package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
  45. package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
  46. package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
  47. package/fesm2022/forty-cdk-dialog.mjs +707 -0
  48. package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
  49. package/fesm2022/forty-cdk-disclosure.mjs +190 -0
  50. package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
  51. package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
  52. package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
  53. package/fesm2022/forty-cdk-drawer.mjs +1641 -0
  54. package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
  55. package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
  56. package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
  57. package/fesm2022/forty-cdk-field.mjs +425 -0
  58. package/fesm2022/forty-cdk-field.mjs.map +1 -0
  59. package/fesm2022/forty-cdk-fieldset.mjs +164 -0
  60. package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
  61. package/fesm2022/forty-cdk-file-upload.mjs +221 -0
  62. package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
  63. package/fesm2022/forty-cdk-hover-card.mjs +496 -0
  64. package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
  65. package/fesm2022/forty-cdk-input.mjs +274 -0
  66. package/fesm2022/forty-cdk-input.mjs.map +1 -0
  67. package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
  68. package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
  69. package/fesm2022/forty-cdk-listbox.mjs +1279 -0
  70. package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
  71. package/fesm2022/forty-cdk-menu.mjs +1439 -0
  72. package/fesm2022/forty-cdk-menu.mjs.map +1 -0
  73. package/fesm2022/forty-cdk-menubar.mjs +787 -0
  74. package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
  75. package/fesm2022/forty-cdk-meter.mjs +211 -0
  76. package/fesm2022/forty-cdk-meter.mjs.map +1 -0
  77. package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
  78. package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
  79. package/fesm2022/forty-cdk-number-input.mjs +559 -0
  80. package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
  81. package/fesm2022/forty-cdk-otp-input.mjs +527 -0
  82. package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
  83. package/fesm2022/forty-cdk-pagination.mjs +323 -0
  84. package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
  85. package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
  86. package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
  87. package/fesm2022/forty-cdk-popover.mjs +698 -0
  88. package/fesm2022/forty-cdk-popover.mjs.map +1 -0
  89. package/fesm2022/forty-cdk-progress.mjs +226 -0
  90. package/fesm2022/forty-cdk-progress.mjs.map +1 -0
  91. package/fesm2022/forty-cdk-radio-group.mjs +378 -0
  92. package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
  93. package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
  94. package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
  95. package/fesm2022/forty-cdk-search.mjs +205 -0
  96. package/fesm2022/forty-cdk-search.mjs.map +1 -0
  97. package/fesm2022/forty-cdk-select.mjs +1661 -0
  98. package/fesm2022/forty-cdk-select.mjs.map +1 -0
  99. package/fesm2022/forty-cdk-separator.mjs +82 -0
  100. package/fesm2022/forty-cdk-separator.mjs.map +1 -0
  101. package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
  102. package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
  103. package/fesm2022/forty-cdk-slider.mjs +803 -0
  104. package/fesm2022/forty-cdk-slider.mjs.map +1 -0
  105. package/fesm2022/forty-cdk-stepper.mjs +886 -0
  106. package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
  107. package/fesm2022/forty-cdk-switch.mjs +137 -0
  108. package/fesm2022/forty-cdk-switch.mjs.map +1 -0
  109. package/fesm2022/forty-cdk-table.mjs +1518 -0
  110. package/fesm2022/forty-cdk-table.mjs.map +1 -0
  111. package/fesm2022/forty-cdk-tabs.mjs +400 -0
  112. package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
  113. package/fesm2022/forty-cdk-time-field.mjs +593 -0
  114. package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
  115. package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
  116. package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
  117. package/fesm2022/forty-cdk-toast.mjs +1153 -0
  118. package/fesm2022/forty-cdk-toast.mjs.map +1 -0
  119. package/fesm2022/forty-cdk-toggle.mjs +516 -0
  120. package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
  121. package/fesm2022/forty-cdk-toolbar.mjs +374 -0
  122. package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
  123. package/fesm2022/forty-cdk-tooltip.mjs +672 -0
  124. package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
  125. package/fesm2022/forty-cdk-tree.mjs +2007 -0
  126. package/fesm2022/forty-cdk-tree.mjs.map +1 -0
  127. package/fesm2022/forty-cdk-virtualization.mjs +1 -1
  128. package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
  129. package/fesm2022/forty-cdk.mjs +0 -43310
  130. package/fesm2022/forty-cdk.mjs.map +1 -1
  131. package/field/README.md +97 -0
  132. package/fieldset/README.md +86 -0
  133. package/file-upload/README.md +73 -0
  134. package/hover-card/README.md +171 -0
  135. package/input/README.md +156 -0
  136. package/listbox/README.md +424 -0
  137. package/menu/README.md +181 -0
  138. package/menubar/README.md +140 -0
  139. package/meter/README.md +128 -0
  140. package/navigation-menu/README.md +253 -0
  141. package/number-input/README.md +171 -0
  142. package/otp-input/README.md +198 -0
  143. package/package.json +213 -1
  144. package/pagination/README.md +61 -0
  145. package/pane-resizer/README.md +136 -0
  146. package/popover/README.md +262 -0
  147. package/progress/README.md +115 -0
  148. package/radio-group/README.md +129 -0
  149. package/scroll-area/README.md +184 -0
  150. package/search/README.md +42 -0
  151. package/select/README.md +488 -0
  152. package/separator/README.md +84 -0
  153. package/signal-forms/README.md +72 -0
  154. package/slider/README.md +152 -0
  155. package/stepper/README.md +292 -0
  156. package/switch/README.md +116 -0
  157. package/table/README.md +769 -0
  158. package/tabs/README.md +130 -0
  159. package/time-field/README.md +157 -0
  160. package/time-picker/README.md +172 -0
  161. package/toast/README.md +398 -0
  162. package/toggle/README.md +224 -0
  163. package/toolbar/README.md +109 -0
  164. package/tooltip/README.md +274 -0
  165. package/tree/README.md +708 -0
  166. package/types/forty-cdk-accordion.d.ts +242 -0
  167. package/types/forty-cdk-aspect-ratio.d.ts +59 -0
  168. package/types/forty-cdk-avatar.d.ts +133 -0
  169. package/types/forty-cdk-breadcrumbs.d.ts +92 -0
  170. package/types/forty-cdk-breakpoints.d.ts +141 -0
  171. package/types/forty-cdk-button.d.ts +80 -0
  172. package/types/forty-cdk-calendar.d.ts +914 -0
  173. package/types/forty-cdk-carousel.d.ts +530 -0
  174. package/types/forty-cdk-checkbox.d.ts +141 -0
  175. package/types/forty-cdk-combobox.d.ts +1259 -0
  176. package/types/forty-cdk-context-menu.d.ts +313 -0
  177. package/types/forty-cdk-core.d.ts +5774 -0
  178. package/types/forty-cdk-date-field.d.ts +307 -0
  179. package/types/forty-cdk-date-picker.d.ts +622 -0
  180. package/types/forty-cdk-dialog.d.ts +546 -0
  181. package/types/forty-cdk-disclosure.d.ts +127 -0
  182. package/types/forty-cdk-drag-drop.d.ts +456 -0
  183. package/types/forty-cdk-drawer.d.ts +871 -0
  184. package/types/forty-cdk-dropdown-menu.d.ts +242 -0
  185. package/types/forty-cdk-field.d.ts +236 -0
  186. package/types/forty-cdk-fieldset.d.ts +119 -0
  187. package/types/forty-cdk-file-upload.d.ts +124 -0
  188. package/types/forty-cdk-hover-card.d.ts +320 -0
  189. package/types/forty-cdk-input.d.ts +169 -0
  190. package/types/forty-cdk-internationalized-date.d.ts +1 -1
  191. package/types/forty-cdk-listbox.d.ts +513 -0
  192. package/types/forty-cdk-menu.d.ts +629 -0
  193. package/types/forty-cdk-menubar.d.ts +451 -0
  194. package/types/forty-cdk-meter.d.ts +122 -0
  195. package/types/forty-cdk-navigation-menu.d.ts +514 -0
  196. package/types/forty-cdk-number-input.d.ts +319 -0
  197. package/types/forty-cdk-otp-input.d.ts +248 -0
  198. package/types/forty-cdk-pagination.d.ts +214 -0
  199. package/types/forty-cdk-pane-resizer.d.ts +145 -0
  200. package/types/forty-cdk-popover.d.ts +509 -0
  201. package/types/forty-cdk-progress.d.ts +143 -0
  202. package/types/forty-cdk-radio-group.d.ts +222 -0
  203. package/types/forty-cdk-scroll-area.d.ts +258 -0
  204. package/types/forty-cdk-search.d.ts +142 -0
  205. package/types/forty-cdk-select.d.ts +899 -0
  206. package/types/forty-cdk-separator.d.ts +59 -0
  207. package/types/forty-cdk-signal-forms.d.ts +58 -0
  208. package/types/forty-cdk-slider.d.ts +379 -0
  209. package/types/forty-cdk-stepper.d.ts +650 -0
  210. package/types/forty-cdk-switch.d.ts +87 -0
  211. package/types/forty-cdk-table.d.ts +723 -0
  212. package/types/forty-cdk-tabs.d.ts +235 -0
  213. package/types/forty-cdk-time-field.d.ts +307 -0
  214. package/types/forty-cdk-time-picker.d.ts +578 -0
  215. package/types/forty-cdk-toast.d.ts +598 -0
  216. package/types/forty-cdk-toggle.d.ts +310 -0
  217. package/types/forty-cdk-toolbar.d.ts +217 -0
  218. package/types/forty-cdk-tooltip.d.ts +436 -0
  219. package/types/forty-cdk-tree.d.ts +688 -0
  220. package/types/forty-cdk.d.ts +1 -19743
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forty-cdk-menu.mjs","sources":["../../../projects/forty-cdk/menu/src/menu-content.ts","../../../projects/forty-cdk/menu/src/menu-horizontal-arrow.ts","../../../projects/forty-cdk/menu/src/menu-tab-out.ts","../../../projects/forty-cdk/menu/src/menu-item.ts","../../../projects/forty-cdk/menu/src/menu-checkbox-item.ts","../../../projects/forty-cdk/menu/src/menu-radio-group-context.ts","../../../projects/forty-cdk/menu/src/menu-radio-group.ts","../../../projects/forty-cdk/menu/src/menu-radio-item.ts","../../../projects/forty-cdk/menu/src/menu-item-indicator.ts","../../../projects/forty-cdk/menu/src/menu-separator.ts","../../../projects/forty-cdk/menu/src/menu-group-context.ts","../../../projects/forty-cdk/menu/src/menu-group.ts","../../../projects/forty-cdk/menu/src/menu-group-label.ts","../../../projects/forty-cdk/menu/src/menu-defaults.ts","../../../projects/forty-cdk/menu/src/menu-sub.ts","../../../projects/forty-cdk/menu/src/menu-sub-trigger.ts","../../../projects/forty-cdk/menu/src/forty-cdk-menu.ts"],"sourcesContent":["import { Directive, ElementRef, inject } from '@angular/core';\n\nimport { registerHandle, injectOverlayShell, injectMenuContext } from 'forty-cdk/core';\n\n/**\n * The menu surface. Carries `role=\"menu\"`, is portaled to `document.body`,\n * and is positioned by `@floating-ui/dom` against the registered anchor —\n * the trigger button for `[forDropdownMenu]`, or a virtual pointer element\n * for `[forContextMenu]`.\n *\n * The directive does not manage DOM presence — wrap with\n * `@if (open())` so `animate.enter` / `animate.leave` fire on the natural\n * mount cycle. While mounted, a `DismissableLayer` activates (Escape,\n * pointer-down outside, focus outside) and initial focus is sent to the\n * first or last menu item per the trigger's hint.\n *\n * The trigger element is exempt from the layer's outside-pointer checks,\n * so clicking the trigger again routes through its own toggle handler\n * without spuriously closing.\n *\n * The lifecycle (positioner + dismissable layer + initial focus + return\n * focus) is owned by the shared `injectOverlayShell` helper.\n *\n * Navigation is vertical-only (Up / Down between items, per the APG Menu\n * pattern), so the surface reflects `aria-orientation=\"vertical\"` explicitly.\n * Horizontal menus are out of scope; a horizontal *bar* of menus is modelled\n * by `[forMenubar]` instead.\n */\n@Directive({\n // The same directive serves submenu content too — the behavior is identical\n // (the injected ctx is the [forMenuSub] in that case). The extra selector is\n // an alias for template readability.\n selector: '[forMenuContent], [forMenuSubContent]',\n exportAs: 'forMenuContent',\n host: {\n role: 'menu',\n '[id]': 'ctx.contentId()',\n '[attr.aria-labelledby]': 'ctx.ariaLabel() ? null : ctx.triggerId()',\n '[attr.aria-label]': 'ctx.ariaLabel() || null',\n '[attr.aria-orientation]': '\"vertical\"',\n '[attr.data-state]': 'ctx.open() ? \"open\" : \"closed\"',\n tabindex: '-1',\n '(pointerleave)': 'onPointerLeave($event)',\n },\n})\nexport class ForMenuContent {\n protected readonly ctx = injectMenuContext('ForMenuContent');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n constructor() {\n registerHandle(\n this.#host.nativeElement,\n (el) => this.ctx.registerContent(el),\n (el) => this.ctx.unregisterContent(el),\n );\n\n injectOverlayShell({\n positioner: {\n kind: 'floating',\n reference: this.ctx.anchor,\n open: this.ctx.open,\n side: this.ctx.side,\n align: this.ctx.align,\n sideOffset: this.ctx.sideOffset,\n alignOffset: this.ctx.alignOffset,\n avoidCollisions: this.ctx.avoidCollisions,\n collisionPadding: this.ctx.collisionPadding,\n arrowPadding: this.ctx.arrowPadding,\n sticky: this.ctx.sticky,\n hideWhenDetached: this.ctx.hideWhenDetached,\n clipUntilPositioned: this.ctx.clipUntilPositioned,\n },\n dismiss: {\n dismissible: this.ctx.dismissible,\n requestClose: (reason) => this.ctx.requestClose(reason),\n emitEscapeKeyDown: (event) => this.ctx.emitEscapeKeyDown(event),\n emitPointerDownOutside: (veto) => this.ctx.emitPointerDownOutside(veto),\n emitFocusOutside: (veto) => this.ctx.emitFocusOutside(veto),\n emitInteractOutside: (veto) => this.ctx.emitInteractOutside(veto),\n // DropdownMenu's trigger is exempt (its own click handler toggles —\n // without exemption pointer-down-outside would race and double-close).\n // ContextMenu exempts nothing so left-clicks on the region close the\n // menu like any other outside click.\n exemptElements: () => this.ctx.dismissableExemptions(),\n },\n // Primitive-owned move: focusFirstEnabledItem / focusLastEnabledItem\n // each return `true` on success. The shell falls back to focusing the\n // host element on miss, which mirrors the previous hand-rolled code.\n initialFocus: {\n move: () =>\n this.ctx.initialFocus() === 'last'\n ? this.ctx.focusLastEnabledItem()\n : this.ctx.focusFirstEnabledItem(),\n veto: () => this.ctx.emitAutoFocusOnOpen(),\n },\n returnFocus: {\n enabled: this.ctx.returnFocus,\n target: () => this.ctx.trigger(),\n // `(autoFocusOnClose)` lets the consumer veto the return-focus.\n veto: () => this.ctx.emitAutoFocusOnClose(),\n // Skip on `'tab'` closes — Tab already moved focus to the trigger\n // and let the browser advance from there; re-focusing would steal\n // it back.\n skip: () => this.ctx.lastCloseReason() === 'tab',\n },\n });\n }\n\n /**\n * Hover-follows-pointer: the pointer left the menu surface, so drop the\n * highlight from whichever item the pointer was over. Focus is left where it\n * is (anchored on the item for keyboard navigation); only `data-highlighted`\n * clears. Gated to mouse — touch / pen never hover.\n */\n protected onPointerLeave(event: PointerEvent): void {\n if (event.pointerType !== '' && event.pointerType !== 'mouse') {\n return;\n }\n this.ctx.clearItemHighlights();\n }\n}\n","import { type ForMenuContext } from 'forty-cdk/core';\n\n/**\n * Handle ArrowLeft / ArrowRight on a menu item (regular, checkbox, radio,\n * or submenu trigger when its open-key is the orthogonal arrow). Returns\n * `true` when the event was consumed (caller should stop further handling).\n *\n * Routing precedence:\n * - Inside a submenu (`ctx.parentMenu != null`): the close-submenu key\n * (ArrowLeft in LTR, ArrowRight in RTL) closes the submenu. The other\n * horizontal arrow propagates to the menubar (if any) only after the\n * submenu chain has been collapsed — so this helper returns `false` for\n * it and the caller can let it bubble.\n * - At the top of a menubar (`ctx.parentMenu == null && ctx.menubar`):\n * both arrows switch to the previous / next sibling menu.\n * - Otherwise: not handled.\n */\nexport function handleMenuHorizontalArrow(event: KeyboardEvent, ctx: ForMenuContext): boolean {\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') {\n return false;\n }\n const isRtl = ctx.dir() === 'rtl';\n\n if (ctx.parentMenu) {\n const closeKey = isRtl ? 'ArrowRight' : 'ArrowLeft';\n if (event.key === closeKey) {\n event.preventDefault();\n ctx.closeMenu('escape');\n return true;\n }\n return false;\n }\n\n const menubar = ctx.menubar;\n if (!menubar) {\n return false;\n }\n\n const isPrev = (event.key === 'ArrowLeft' && !isRtl) || (event.key === 'ArrowRight' && isRtl);\n event.preventDefault();\n menubar.switchToSibling(isPrev ? 'prev' : 'next');\n return true;\n}\n","import { type ForMenuContext } from 'forty-cdk/core';\n\n/**\n * Handle Tab from inside a menu (regular item, checkbox / radio item, or a\n * submenu trigger). Per WAI-ARIA APG, Tab moves focus out of the menu rather\n * than back to the trigger.\n *\n * Focus is moved synchronously to the outermost menu's trigger — the only\n * element guaranteed to survive in the DOM once the whole open chain unmounts\n * — so the browser's own Tab default advances from there to the next (or\n * previous, with Shift) focusable. The event is NOT `preventDefault`-ed for\n * that reason. `closeMenu('tab')` then collapses the chain; every\n * `[forMenuContent]` skips its return-focus on `'tab'` (see\n * `ForMenuContext.lastCloseReason`) so none of them steal focus back from\n * wherever the browser advanced it.\n *\n * Pass the context that should drive the close: the item's own `ctx` for\n * menu items, or the submenu trigger's `parentMenu` (the menu the trigger\n * lives in).\n */\nexport function handleMenuTabOut(ctx: ForMenuContext): void {\n let root: ForMenuContext = ctx;\n while (root.parentMenu) {\n root = root.parentMenu;\n }\n root.trigger()?.focus();\n ctx.closeMenu('tab');\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport {\n registerHandle,\n resolveListNavigation,\n emitVetoableEvent,\n type VetoableEvent,\n injectMenuContext,\n} from 'forty-cdk/core';\nimport { handleMenuHorizontalArrow } from './menu-horizontal-arrow';\nimport { handleMenuTabOut } from './menu-tab-out';\n\n/**\n * A single action inside `[forMenuContent]`. Apply on a `<button>` so\n * Space / Enter activation come from native button semantics.\n *\n * Activation emits `(activate)` and then closes the menu. To keep the menu\n * open after activation (e.g. the action toggled something the user\n * wants to refine), call `event.preventDefault()` on the emitted event.\n *\n * Disabled items remain in the tab/focus rotation (per APG) so screen\n * readers can announce them — `aria-disabled=\"true\"` rather than the\n * native `disabled` attribute.\n */\n@Directive({\n selector: '[forMenuItem]',\n exportAs: 'forMenuItem',\n host: {\n role: 'menuitem',\n type: 'button',\n tabindex: '-1',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '(click)': 'onClick()',\n '(keydown)': 'onKeyDown($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(pointermove)': 'onPointerMove($event)',\n },\n})\nexport class ForMenuItem {\n protected readonly ctx = injectMenuContext('ForMenuItem');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Per-item disabled, in addition to the menu's `disabled`. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Override the string used for typeahead matching. Defaults to `''`,\n * which falls back to the item's `textContent`. Set this when the item\n * DOM contains icons, kbd hints, or other text that shouldn't bleed\n * into the match — e.g. `<button forMenuItem textValue=\"New file\">…</button>`\n * for an item rendered as `New file ⌘N`.\n */\n readonly textValue = input<string>('');\n\n readonly effectiveDisabled = computed(() => this.disabled() || this.ctx.disabled());\n\n readonly #highlighted = signal(false);\n /**\n * True while this item is the active keyboard candidate or hovered by the\n * pointer. Set on keyboard-driven focus and on `pointermove` (hover follows\n * the pointer), cleared on `blur` and when the pointer leaves the surface.\n * The programmatic initial focus of a pointer-driven open lands without a\n * highlight until the pointer moves onto the item or keyboard navigation\n * begins. Reflected as `data-highlighted`.\n */\n readonly highlighted = this.#highlighted.asReadonly();\n\n #suppressNextFocusHighlight = false;\n\n /**\n * Fires on click / Enter / Space activation. Call `preventDefault()`\n * on the emitted veto to keep the menu open after activation.\n */\n readonly activate = output<VetoableEvent>();\n\n constructor() {\n const handle = {\n host: this.#host.nativeElement,\n disabled: this.effectiveDisabled,\n textValue: this.textValue,\n suppressHighlightOnNextFocus: () => {\n this.#suppressNextFocusHighlight = true;\n },\n clearHighlight: () => {\n this.#highlighted.set(false);\n },\n };\n registerHandle(\n handle,\n (h) => this.ctx.registerItem(h),\n (h) => this.ctx.unregisterItem(h),\n );\n }\n\n protected onClick(): void {\n if (this.effectiveDisabled()) {\n return;\n }\n if (!emitVetoableEvent(this.activate)) {\n this.ctx.closeMenu('select');\n }\n }\n\n protected onFocus(): void {\n if (this.#suppressNextFocusHighlight) {\n this.#suppressNextFocusHighlight = false;\n return;\n }\n this.#highlighted.set(true);\n }\n\n protected onBlur(): void {\n this.#suppressNextFocusHighlight = false;\n this.#highlighted.set(false);\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (event.pointerType !== '' && event.pointerType !== 'mouse') {\n return;\n }\n if (this.effectiveDisabled()) {\n return;\n }\n const host = this.#host.nativeElement;\n if (host.ownerDocument.activeElement !== host) {\n host.focus({ preventScroll: true });\n }\n this.#highlighted.set(true);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.effectiveDisabled()) {\n return;\n }\n // ArrowLeft / ArrowRight: inside a submenu, close-submenu key collapses\n // one level; in the top menu of a menubar, both arrows switch to the\n // previous / next sibling menu.\n if (handleMenuHorizontalArrow(event, this.ctx)) {\n return;\n }\n const action = resolveListNavigation(event, { orientation: 'vertical' });\n if (action) {\n event.preventDefault();\n this.ctx.navigate(this.#host.nativeElement, action);\n return;\n }\n if (event.key === 'Tab') {\n handleMenuTabOut(this.ctx);\n return;\n }\n this.ctx.handleTypeahead(event);\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\n\nimport {\n registerHandle,\n resolveListNavigation,\n createVetoableEvent,\n emitVetoableEvent,\n type VetoableEvent,\n injectMenuContext,\n} from 'forty-cdk/core';\nimport { handleMenuHorizontalArrow } from './menu-horizontal-arrow';\nimport { handleMenuTabOut } from './menu-tab-out';\n\n/**\n * Injection key the `[forMenuItemIndicator]` uses to resolve a parent\n * checkbox item, decoupled from the concrete `ForMenuCheckboxItem` class.\n * `ForMenuCheckboxItem` provides itself under this token, so a design system\n * wrapping the item by subclassing re-points it at the subclass with a single\n * provider (`{ provide: FOR_MENU_CHECKBOX_ITEM, useExisting: MtxMenuCheckboxItem }`)\n * and the indicator keeps resolving — see `docs/wrapping-form-primitives.md`.\n */\nexport const FOR_MENU_CHECKBOX_ITEM = new InjectionToken<ForMenuCheckboxItem>(\n 'FOR_MENU_CHECKBOX_ITEM',\n);\n\n/**\n * Tri-state-free checkbox item. Click and Enter toggle `checked`, emit\n * `(activate)`, and close the menu — `event.preventDefault()` on the emitted\n * event keeps the menu open. Per APG, **Space** toggles `checked` and\n * emits `(activate)` without closing the menu, so users can flip several\n * options in one open without consumer glue.\n */\n@Directive({\n selector: '[forMenuCheckboxItem]',\n exportAs: 'forMenuCheckboxItem',\n providers: [{ provide: FOR_MENU_CHECKBOX_ITEM, useExisting: ForMenuCheckboxItem }],\n host: {\n role: 'menuitemcheckbox',\n type: 'button',\n tabindex: '-1',\n '[attr.aria-checked]': 'checked() ? \"true\" : \"false\"',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '(click)': 'onClick()',\n '(keydown)': 'onKeyDown($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(pointermove)': 'onPointerMove($event)',\n },\n})\nexport class ForMenuCheckboxItem {\n protected readonly ctx = injectMenuContext('ForMenuCheckboxItem');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Two-way bindable. */\n readonly checked = model<boolean>(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Override the string used for typeahead matching. Defaults to `''`,\n * which falls back to the item's `textContent`. See `[forMenuItem]`\n * for the rationale.\n */\n readonly textValue = input<string>('');\n\n readonly effectiveDisabled = computed(() => this.disabled() || this.ctx.disabled());\n\n readonly #highlighted = signal(false);\n /**\n * True while this item is the active keyboard candidate or hovered by the\n * pointer. Set on keyboard-driven focus and on `pointermove` (hover follows\n * the pointer), cleared on `blur` and when the pointer leaves the surface.\n * The programmatic initial focus of a pointer-driven open lands without a\n * highlight until the pointer moves onto the item or keyboard navigation\n * begins. Reflected as `data-highlighted`.\n */\n readonly highlighted = this.#highlighted.asReadonly();\n\n #suppressNextFocusHighlight = false;\n\n /**\n * Fires on click / Enter / Space activation. Call `preventDefault()`\n * on the emitted veto to keep the menu open after activation.\n */\n readonly activate = output<VetoableEvent>();\n\n constructor() {\n const handle = {\n host: this.#host.nativeElement,\n disabled: this.effectiveDisabled,\n textValue: this.textValue,\n suppressHighlightOnNextFocus: () => {\n this.#suppressNextFocusHighlight = true;\n },\n clearHighlight: () => {\n this.#highlighted.set(false);\n },\n };\n registerHandle(\n handle,\n (h) => this.ctx.registerItem(h),\n (h) => this.ctx.unregisterItem(h),\n );\n }\n\n protected onClick(): void {\n if (this.effectiveDisabled()) {\n return;\n }\n this.checked.update((v) => !v);\n if (!emitVetoableEvent(this.activate)) {\n this.ctx.closeMenu('select');\n }\n }\n\n protected onFocus(): void {\n if (this.#suppressNextFocusHighlight) {\n this.#suppressNextFocusHighlight = false;\n return;\n }\n this.#highlighted.set(true);\n }\n\n protected onBlur(): void {\n this.#suppressNextFocusHighlight = false;\n this.#highlighted.set(false);\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (event.pointerType !== '' && event.pointerType !== 'mouse') {\n return;\n }\n if (this.effectiveDisabled()) {\n return;\n }\n const host = this.#host.nativeElement;\n if (host.ownerDocument.activeElement !== host) {\n host.focus({ preventScroll: true });\n }\n this.#highlighted.set(true);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.effectiveDisabled()) {\n return;\n }\n if (handleMenuHorizontalArrow(event, this.ctx)) {\n return;\n }\n // APG menubar guidance: Space toggles checked without closing the menu\n // (Enter and click still close via native button activation). preventDefault\n // here suppresses the browser-synthesized click so the menu stays open.\n if (event.key === ' ') {\n event.preventDefault();\n this.checked.update((v) => !v);\n this.activate.emit(createVetoableEvent());\n return;\n }\n const action = resolveListNavigation(event, { orientation: 'vertical' });\n if (action) {\n event.preventDefault();\n this.ctx.navigate(this.#host.nativeElement, action);\n return;\n }\n if (event.key === 'Tab') {\n handleMenuTabOut(this.ctx);\n return;\n }\n this.ctx.handleTypeahead(event);\n }\n}\n","import { inject, InjectionToken, type ModelSignal } from '@angular/core';\n\n/**\n * Coordination contract owned by `[forMenuRadioGroup]`. Radio items inject\n * it to read selection state and request a value change. Independent from\n * the parent menu's context so radio items can compose without the radio\n * group needing to know about menu internals (and vice versa).\n */\nexport interface ForMenuRadioGroupContext {\n readonly value: ModelSignal<string>;\n isSelected(value: string): boolean;\n select(value: string): void;\n}\n\nexport const FOR_MENU_RADIO_GROUP_CONTEXT = new InjectionToken<ForMenuRadioGroupContext>(\n 'FOR_MENU_RADIO_GROUP_CONTEXT',\n);\n\nexport function injectMenuRadioGroupContext(piece: string): ForMenuRadioGroupContext {\n const ctx = inject(FOR_MENU_RADIO_GROUP_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/menu] ${piece} must be used inside a [forMenuRadioGroup] element.`);\n }\n return ctx;\n}\n","import { Directive, model } from '@angular/core';\n\nimport {\n FOR_MENU_RADIO_GROUP_CONTEXT,\n type ForMenuRadioGroupContext,\n} from './menu-radio-group-context';\n\n/**\n * Container for a set of `[forMenuRadioItem]` elements. Acts as a\n * `role=\"group\"` plus a coordination point for the shared `value`.\n */\n@Directive({\n selector: '[forMenuRadioGroup]',\n exportAs: 'forMenuRadioGroup',\n host: {\n role: 'group',\n },\n providers: [{ provide: FOR_MENU_RADIO_GROUP_CONTEXT, useExisting: ForMenuRadioGroup }],\n})\nexport class ForMenuRadioGroup implements ForMenuRadioGroupContext {\n /**\n * Two-way bindable. The selected radio item's `value`. The `model()`\n * change emitter (`(valueChange)`) fires only on internal selection.\n */\n readonly value = model<string>('');\n\n isSelected(v: string): boolean {\n return this.value() === v;\n }\n\n select(v: string): void {\n this.value.set(v);\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n input,\n output,\n signal,\n} from '@angular/core';\n\nimport {\n registerHandle,\n resolveListNavigation,\n createVetoableEvent,\n emitVetoableEvent,\n type VetoableEvent,\n injectMenuContext,\n} from 'forty-cdk/core';\nimport { handleMenuHorizontalArrow } from './menu-horizontal-arrow';\nimport { handleMenuTabOut } from './menu-tab-out';\nimport { injectMenuRadioGroupContext } from './menu-radio-group-context';\n\n/**\n * Injection key the `[forMenuItemIndicator]` uses to resolve a parent radio\n * item, decoupled from the concrete `ForMenuRadioItem` class.\n * `ForMenuRadioItem` provides itself under this token, so a design system\n * wrapping the item by subclassing re-points it at the subclass with a single\n * provider (`{ provide: FOR_MENU_RADIO_ITEM, useExisting: MtxMenuRadioItem }`)\n * and the indicator keeps resolving — see `docs/wrapping-form-primitives.md`.\n */\nexport const FOR_MENU_RADIO_ITEM = new InjectionToken<ForMenuRadioItem>('FOR_MENU_RADIO_ITEM');\n\n/**\n * One radio option inside `[forMenuRadioGroup]`. Click and Enter set the\n * group's `value` to this item's `value`, emit `(activate)`, and close the\n * menu — call `event.preventDefault()` on the emitted event to keep the\n * menu open. Per APG, **Space** sets the value and emits `(activate)`\n * without closing the menu.\n */\n@Directive({\n selector: '[forMenuRadioItem]',\n exportAs: 'forMenuRadioItem',\n providers: [{ provide: FOR_MENU_RADIO_ITEM, useExisting: ForMenuRadioItem }],\n host: {\n role: 'menuitemradio',\n type: 'button',\n tabindex: '-1',\n '[attr.aria-checked]': 'checked() ? \"true\" : \"false\"',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '[attr.data-highlighted]': 'highlighted() ? \"\" : null',\n '(click)': 'onClick()',\n '(keydown)': 'onKeyDown($event)',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(pointermove)': 'onPointerMove($event)',\n },\n})\nexport class ForMenuRadioItem {\n protected readonly menu = injectMenuContext('ForMenuRadioItem');\n protected readonly group = injectMenuRadioGroupContext('ForMenuRadioItem');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Identifier added to / read from the radio group's `value`. Required. */\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Override the string used for typeahead matching. Defaults to `''`,\n * which falls back to the item's `textContent`. See `[forMenuItem]`\n * for the rationale.\n */\n readonly textValue = input<string>('');\n\n readonly checked = computed(() => this.group.isSelected(this.value()));\n\n readonly effectiveDisabled = computed(() => this.disabled() || this.menu.disabled());\n\n readonly #highlighted = signal(false);\n /**\n * True while this item is the active keyboard candidate or hovered by the\n * pointer. Set on keyboard-driven focus and on `pointermove` (hover follows\n * the pointer), cleared on `blur` and when the pointer leaves the surface.\n * The programmatic initial focus of a pointer-driven open lands without a\n * highlight until the pointer moves onto the item or keyboard navigation\n * begins. Reflected as `data-highlighted`.\n */\n readonly highlighted = this.#highlighted.asReadonly();\n\n #suppressNextFocusHighlight = false;\n\n /**\n * Fires on click / Enter / Space activation. Call `preventDefault()`\n * on the emitted veto to keep the menu open after activation.\n */\n readonly activate = output<VetoableEvent>();\n\n constructor() {\n const handle = {\n host: this.#host.nativeElement,\n disabled: this.effectiveDisabled,\n textValue: this.textValue,\n suppressHighlightOnNextFocus: () => {\n this.#suppressNextFocusHighlight = true;\n },\n clearHighlight: () => {\n this.#highlighted.set(false);\n },\n };\n registerHandle(\n handle,\n (h) => this.menu.registerItem(h),\n (h) => this.menu.unregisterItem(h),\n );\n }\n\n protected onClick(): void {\n if (this.effectiveDisabled()) {\n return;\n }\n this.group.select(this.value());\n if (!emitVetoableEvent(this.activate)) {\n this.menu.closeMenu('select');\n }\n }\n\n protected onFocus(): void {\n if (this.#suppressNextFocusHighlight) {\n this.#suppressNextFocusHighlight = false;\n return;\n }\n this.#highlighted.set(true);\n }\n\n protected onBlur(): void {\n this.#suppressNextFocusHighlight = false;\n this.#highlighted.set(false);\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (event.pointerType !== '' && event.pointerType !== 'mouse') {\n return;\n }\n if (this.effectiveDisabled()) {\n return;\n }\n const host = this.#host.nativeElement;\n if (host.ownerDocument.activeElement !== host) {\n host.focus({ preventScroll: true });\n }\n this.#highlighted.set(true);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.effectiveDisabled()) {\n return;\n }\n if (handleMenuHorizontalArrow(event, this.menu)) {\n return;\n }\n // APG menubar guidance: Space sets the group value without closing the\n // menu (Enter and click still close via native button activation).\n // preventDefault here suppresses the browser-synthesized click.\n if (event.key === ' ') {\n event.preventDefault();\n this.group.select(this.value());\n this.activate.emit(createVetoableEvent());\n return;\n }\n const action = resolveListNavigation(event, { orientation: 'vertical' });\n if (action) {\n event.preventDefault();\n this.menu.navigate(this.#host.nativeElement, action);\n return;\n }\n if (event.key === 'Tab') {\n handleMenuTabOut(this.menu);\n return;\n }\n this.menu.handleTypeahead(event);\n }\n}\n","import { booleanAttribute, computed, Directive, inject, input } from '@angular/core';\n\nimport { FOR_MENU_CHECKBOX_ITEM } from './menu-checkbox-item';\nimport { FOR_MENU_RADIO_ITEM } from './menu-radio-item';\n\n/**\n * Visibility helper inside `[forMenuCheckboxItem]` or `[forMenuRadioItem]`.\n * The directive flips a `[hidden]` host binding so the consumer can keep\n * the checkmark / dot inline without extra `@if` glue:\n *\n * ```html\n * <button forMenuCheckboxItem [(checked)]=\"bold\">\n * <span forMenuItemIndicator>✓</span>\n * Bold\n * </button>\n *\n * <div forMenuRadioGroup [(value)]=\"alignment\">\n * <button forMenuRadioItem value=\"left\">\n * <span forMenuItemIndicator>•</span>\n * Left\n * </button>\n * </div>\n * ```\n *\n * Reflects the parent item's `data-state` (`\"checked\" | \"unchecked\"`) so\n * the consumer can also style it from CSS. Set `[forceMount]` to keep the\n * indicator in the DOM regardless of state — useful when wrapping\n * `animate.leave` for an exit animation, or when the consumer styles the\n * indicator via `data-state` instead of presence.\n *\n * Visibility while unchecked is enforced with an inline `display: none`\n * (which beats any author `display` rule a consumer applies via a class) in\n * addition to the `hidden` attribute that removes it from the a11y tree.\n */\n@Directive({\n selector: '[forMenuItemIndicator]',\n exportAs: 'forMenuItemIndicator',\n host: {\n 'aria-hidden': 'true',\n '[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n '[hidden]': '!checked() && !forceMount()',\n '[style.display]': '!checked() && !forceMount() ? \"none\" : null',\n },\n})\nexport class ForMenuItemIndicator {\n readonly #checkbox = inject(FOR_MENU_CHECKBOX_ITEM, { optional: true });\n readonly #radio = inject(FOR_MENU_RADIO_ITEM, { optional: true });\n\n protected readonly checked = computed(() => {\n if (this.#checkbox) {\n return this.#checkbox.checked();\n }\n if (this.#radio) {\n return this.#radio.checked();\n }\n return false;\n });\n\n /** Keep the indicator mounted even when the parent item is unchecked. */\n readonly forceMount = input(false, { transform: booleanAttribute });\n\n constructor() {\n if (!this.#checkbox && !this.#radio) {\n throw new Error(\n '[forty-cdk/menu] ForMenuItemIndicator must be used inside a [forMenuCheckboxItem] or [forMenuRadioItem] element.',\n );\n }\n }\n}\n","import { Directive, input } from '@angular/core';\n\n/**\n * Visual + semantic separator between menu items. Decorative — never\n * focused, never registers with the menu's item collection.\n */\n@Directive({\n selector: '[forMenuSeparator]',\n host: {\n role: 'separator',\n '[attr.aria-orientation]': 'orientation()',\n },\n})\nexport class ForMenuSeparator {\n /**\n * Axis the separator divides along, reflected to `aria-orientation`.\n * `horizontal` (default) splits items stacked vertically — the common case\n * in a vertical menu; `vertical` splits items laid out horizontally.\n */\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import { inject, InjectionToken } from '@angular/core';\n\n/**\n * Coordination contract owned by `[forMenuGroup]`. `[forMenuGroupLabel]`\n * registers its generated id so the group wires `aria-labelledby`.\n */\nexport interface ForMenuGroupContext {\n registerLabel(id: string): void;\n unregisterLabel(id: string): void;\n}\n\nexport const FOR_MENU_GROUP_CONTEXT = new InjectionToken<ForMenuGroupContext>(\n 'FOR_MENU_GROUP_CONTEXT',\n);\n\nexport function injectMenuGroupContext(piece: string): ForMenuGroupContext {\n const ctx = inject(FOR_MENU_GROUP_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/menu] ${piece} must be used inside a [forMenuGroup] element.`);\n }\n return ctx;\n}\n","import { computed, Directive, signal } from '@angular/core';\n\nimport { FOR_MENU_GROUP_CONTEXT, type ForMenuGroupContext } from './menu-group-context';\n\n/**\n * Logical grouping of menu items, exposed to assistive tech as\n * `role=\"group\"`. Use with `[forMenuGroupLabel]` for an accessible name\n * (rendered as a section header in most designs).\n */\n@Directive({\n selector: '[forMenuGroup]',\n exportAs: 'forMenuGroup',\n host: {\n role: 'group',\n '[attr.aria-labelledby]': 'labelledBy()',\n },\n providers: [{ provide: FOR_MENU_GROUP_CONTEXT, useExisting: ForMenuGroup }],\n})\nexport class ForMenuGroup implements ForMenuGroupContext {\n readonly #labelIds = signal<readonly string[]>([]);\n readonly labelledBy = computed<string | null>(() => {\n const ids = this.#labelIds();\n return ids.length === 0 ? null : ids.join(' ');\n });\n\n registerLabel(id: string): void {\n this.#labelIds.update((arr) => (arr.includes(id) ? arr : [...arr, id]));\n }\n\n unregisterLabel(id: string): void {\n this.#labelIds.update((arr) => arr.filter((x) => x !== id));\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { registerA11yName } from 'forty-cdk/core';\nimport { injectMenuGroupContext } from './menu-group-context';\n\n/**\n * Accessible name for `[forMenuGroup]`. Generates an id on the host and\n * registers it with the parent group so `aria-labelledby` resolves to\n * this element.\n */\n@Directive({\n selector: '[forMenuGroupLabel]',\n host: {\n '[id]': 'id()',\n },\n})\nexport class ForMenuGroupLabel {\n readonly id = registerA11yName(\n injectMenuGroupContext('ForMenuGroupLabel'),\n 'for-menu-group-label',\n );\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\n\n/**\n * Defaults inherited by descendant menus in the surrounding injector\n * scope. Configure with `provideForMenuDefaults` at the app root or in any\n * component's `providers`.\n *\n * They tune the pointer-driven submenu interaction — hovering a\n * `[forMenuSubTrigger]` opens its submenu after `subMenuOpenDelay`, and\n * leaving it (without travelling into the submenu through the pointer-grace\n * \"safe triangle\") closes it after `subMenuCloseDelay` — and the submenu's\n * floating-ui placement offsets (`sideOffset` / `collisionPadding`), so the\n * submenu reads them from a provider like `[forDropdownMenu]` /\n * `[forContextMenu]` do instead of hardcoding them. Click / Enter / Space /\n * ArrowRight semantics are unaffected by these values.\n */\nexport interface ForMenuDefaults {\n /**\n * Delay (ms) before a hovered `[forMenuSubTrigger]` opens its submenu.\n * A short intent delay avoids opening every submenu the pointer merely\n * passes over. Default `100`.\n */\n subMenuOpenDelay: number;\n /**\n * Delay (ms) before a submenu closes once the pointer has left both the\n * sub-trigger and the submenu content (and is not inside the pointer-grace\n * region). Default `100`.\n */\n subMenuCloseDelay: number;\n /**\n * Lifetime (ms) of the pointer-grace \"safe triangle\" armed when the pointer\n * leaves the sub-trigger toward the open submenu. While the pointer stays\n * inside the triangle the close is held off; the window caps how long that\n * hold lasts if the pointer lingers without reaching the content. Default\n * `300`.\n */\n subMenuPointerGraceDuration: number;\n /**\n * Distance (px) between the sub-trigger and the submenu content along the\n * resolved `side` axis. Default `0` — a\n * submenu sits flush against its parent item.\n */\n sideOffset: number;\n /**\n * Padding (px) added to the viewport edges for collision-aware positioning\n * of the submenu. Higher values keep the submenu further from the edge when\n * `flip` / `shift` runs. Default `8`.\n */\n collisionPadding: number;\n}\n\n/**\n * Library fallback for menu defaults, read at the root injector when no\n * consumer has called `provideForMenuDefaults`. Exported for the shared\n * defaults contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_MENU_FALLBACK_DEFAULTS: ForMenuDefaults = {\n subMenuOpenDelay: 100,\n subMenuCloseDelay: 100,\n subMenuPointerGraceDuration: 300,\n sideOffset: 0,\n collisionPadding: 8,\n};\n\nconst { token, provideDefaults } = createDefaults<ForMenuDefaults>(\n 'FOR_MENU_DEFAULTS',\n FOR_MENU_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved menu defaults for the current scope. */\nexport const FOR_MENU_DEFAULTS = token;\n\n/**\n * Configures forty-cdk menu defaults for this injector scope. Partial\n * overrides inherit unspecified keys from the parent scope (or library\n * defaults at the root).\n */\nexport function provideForMenuDefaults(defaults: Partial<ForMenuDefaults> = {}): Provider[] {\n return provideDefaults(defaults);\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n inject,\n input,\n model,\n numberAttribute,\n output,\n PLATFORM_ID,\n} from '@angular/core';\nimport type { ReferenceElement } from '@floating-ui/dom';\n\nimport {\n type FloatingAlign,\n type FloatingSide,\n createDebouncedAction,\n type WritingDirection,\n createMenuOverlay,\n MenuOverlayHost,\n MENU_POSITIONING_DEFAULTS,\n attachPointerGrace,\n buildSubmenuGracePolygon,\n type Point,\n resolveGraceSide,\n emitVetoableEvent,\n type VetoableEvent,\n type VetoableNativeEvent,\n FOR_MENU_CONTEXT,\n type ForMenuCloseReason,\n type ForMenuContext,\n} from 'forty-cdk/core';\nimport { FOR_MENU_DEFAULTS } from './menu-defaults';\n\n/**\n * Root for a nested submenu inside a parent `[forDropdownMenu]` /\n * `[forContextMenu]` (or another `[forMenuSub]`). Owns its own open\n * state, ids, and item collection — items inside the submenu register\n * here, not in the parent.\n *\n * The shared item-collection / typeahead / navigate / focus / id /\n * outside-veto logic is owned by the `_internal/menu-overlay` helper (the\n * same one `[forDropdownMenu]` / `[forContextMenu]` compose). The submenu\n * contributes only its genuine differences on top: pointer-driven (hover)\n * open/close scheduling, the `#suppressFocusMoves` autofocus vetoes that\n * keep hover from stealing / returning focus, and the reason-dependent\n * upward `closeMenu` propagation — the latter two wired through the\n * overlay's `onOpen` / `onClose` lifecycle hooks.\n *\n * The parent menu's content is added to this submenu's dismissable\n * exemptions so a click on a parent menu item doesn't fire the\n * submenu's outside-handler (the parent item's own click flow closes\n * everything via propagated `closeMenu`).\n *\n * Closing this submenu propagates `closeMenu` upward for every reason\n * except `'escape'` and `'programmatic'` — Escape inside a submenu\n * closes only that level, while activating an item or clicking outside\n * everything tears down the entire chain.\n *\n * ```html\n * <div forDropdownMenu [(open)]=\"open\">\n * <button forDropdownMenuTrigger>Options</button>\n * @if (open()) {\n * <div forMenuContent>\n * <button forMenuItem>Cut</button>\n * <div forMenuSub [(open)]=\"moreOpen\">\n * <button forMenuSubTrigger>More</button>\n * @if (moreOpen()) {\n * <div forMenuSubContent>\n * <button forMenuItem>Advanced</button>\n * </div>\n * }\n * </div>\n * </div>\n * }\n * </div>\n * ```\n */\n@Directive({\n selector: '[forMenuSub]',\n exportAs: 'forMenuSub',\n host: {\n '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n },\n providers: [{ provide: FOR_MENU_CONTEXT, useExisting: ForMenuSub }],\n})\nexport class ForMenuSub extends MenuOverlayHost implements ForMenuContext {\n readonly #defaults = inject(FOR_MENU_DEFAULTS);\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** The enclosing menu — required (orphan throws). */\n readonly parentMenu: ForMenuContext;\n\n readonly open = model<boolean>(false);\n\n /**\n * Writing direction. When unset, inherits from the enclosing menu — set\n * `[dir]` once on the top-level `[forDropdownMenu]` / `[forContextMenu]`\n * and every nested submenu picks it up. Override per-submenu only when\n * a specific submenu needs to render against the opposite direction.\n *\n * The input is aliased to `dir`; consumers bind `[dir]=\"...\"` and read\n * the effective value via the public `dir` computed below.\n */\n readonly _dirInput = input<WritingDirection | undefined>(undefined, { alias: 'dir' });\n readonly dir = computed<WritingDirection>(() => this._dirInput() ?? this.parentMenu.dir());\n\n /**\n * Side the submenu opens on. When unset, defaults to `'right'` in LTR\n * and `'left'` in RTL (per `dir`). Set explicitly to pin a side\n * regardless of writing direction.\n *\n * The input is aliased to `side`; consumers bind `[side]=\"...\"` and read\n * the effective value via the public `side` computed below.\n */\n readonly _sideInput = input<FloatingSide | undefined>(undefined, { alias: 'side' });\n readonly side = computed<FloatingSide>(\n () => this._sideInput() ?? (this.dir() === 'rtl' ? 'left' : 'right'),\n );\n\n /**\n * Gap (px) along the main axis. Defaults to `0` from `provideForMenuDefaults`\n * — a submenu sits flush against its parent item. Now read from the defaults\n * provider (like `[forDropdownMenu]` / `[forContextMenu]`) rather than\n * hardcoded, so it can't drift.\n */\n readonly sideOffset = input(this.#defaults.sideOffset, { transform: numberAttribute });\n\n /**\n * Alignment along the chosen `side`. Defaults to `'start'`.\n *\n * Shares the single `MENU_POSITIONING_DEFAULTS` source with the two\n * top-level roots; `menu-positioning-inputs.spec.ts` guards the three roots\n * against drift.\n */\n readonly align = input<FloatingAlign | undefined>(MENU_POSITIONING_DEFAULTS.align);\n\n /** Gap (px) along the cross axis. Default `0`. */\n readonly alignOffset = input(MENU_POSITIONING_DEFAULTS.alignOffset, {\n transform: numberAttribute,\n });\n\n /** When `true` (default), `flip` and `shift` keep the submenu inside the viewport. */\n readonly avoidCollisions = input(MENU_POSITIONING_DEFAULTS.avoidCollisions, {\n transform: booleanAttribute,\n });\n\n /**\n * Padding (px) applied uniformly to flip / shift / size. Defaults to `8`\n * from `provideForMenuDefaults` for the surrounding scope.\n */\n readonly collisionPadding = input(this.#defaults.collisionPadding, {\n transform: numberAttribute,\n });\n\n /** Padding (px) for the `arrow` middleware. Default `0`. */\n readonly arrowPadding = input(MENU_POSITIONING_DEFAULTS.arrowPadding, {\n transform: numberAttribute,\n });\n\n /** Stickiness behaviour for `shift`. Default `'partial'`. */\n readonly sticky = input<'partial' | 'always' | false>(MENU_POSITIONING_DEFAULTS.sticky);\n\n /** When `true`, sets `data-detached=\"\"` while the parent item is scrolled off-screen. */\n readonly hideWhenDetached = input(MENU_POSITIONING_DEFAULTS.hideWhenDetached, {\n transform: booleanAttribute,\n });\n\n /**\n * When `true` (default), the menu is clipped until floating-ui resolves\n * its first position, preventing a flash at the viewport corner. Set to\n * `false` so a dramatic `animate.enter` plays from its first frame.\n */\n readonly clipUntilPositioned = input(MENU_POSITIONING_DEFAULTS.clipUntilPositioned, {\n transform: booleanAttribute,\n });\n\n /**\n * When `true` (default), arrow-key navigation wraps from the last enabled\n * item back to the first (and vice versa). When `false`, navigation stops\n * at the ends.\n */\n readonly loop = input(true, { transform: booleanAttribute });\n\n /**\n * When true, the sub-trigger interaction is ignored and any open submenu\n * stays open until the consumer flips `open`. Layered on top of the parent\n * menu's own `disabled`.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** When true (default), Escape, pointer-down outside, and focus outside close the submenu. */\n readonly dismissible = input(true, { transform: booleanAttribute });\n\n /** When true (default), focus returns to the sub-trigger on close. */\n readonly returnFocus = input(true, { transform: booleanAttribute });\n\n /** Manual `aria-label` on `[forMenuSubContent]`. Use when the sub-trigger isn't a meaningful name. */\n readonly ariaLabel = input<string | null>(null);\n\n /**\n * Fires when Escape is pressed while the submenu is open, just before it\n * closes. Call `preventDefault()` on the emitted veto to keep the submenu\n * open and suppress the Escape-driven close.\n */\n readonly escapeKeyDown = output<VetoableNativeEvent<KeyboardEvent>>();\n\n /**\n * Fires on a pointer-down outside the submenu (and outside its exempt\n * parent content), just before it closes. Call `preventDefault()` on the\n * veto to keep the submenu open.\n */\n readonly pointerDownOutside = output<VetoableNativeEvent<PointerEvent>>();\n\n /**\n * Fires when focus moves outside the submenu, just before it closes. Call\n * `preventDefault()` on the veto to keep the submenu open.\n */\n readonly focusOutside = output<VetoableNativeEvent<FocusEvent>>();\n\n /**\n * Composite outside-interaction channel: fires for either a\n * pointer-down-outside or a focus-outside, just before the submenu closes.\n * Call `preventDefault()` on the veto to keep the submenu open regardless of\n * which interaction triggered it.\n */\n readonly interactOutside = output<VetoableNativeEvent<PointerEvent | FocusEvent>>();\n\n /**\n * Fires just before the submenu sends focus to its first / last\n * enabled item on mount. Call `preventDefault()` on the emitted veto\n * to skip the imperative focus move.\n */\n readonly autoFocusOnOpen = output<VetoableEvent>();\n\n /**\n * Fires just before focus returns to the parent item on unmount. Call\n * `preventDefault()` on the veto to suppress the return-focus.\n */\n readonly autoFocusOnClose = output<VetoableEvent>();\n\n protected readonly _overlay = createMenuOverlay('for-menu-sub', {\n open: this.open,\n disabled: this.disabled,\n dismissible: this.dismissible,\n loop: this.loop,\n escapeKeyDown: this.escapeKeyDown,\n pointerDownOutside: this.pointerDownOutside,\n focusOutside: this.focusOutside,\n interactOutside: this.interactOutside,\n autoFocusOnOpen: this.autoFocusOnOpen,\n autoFocusOnClose: this.autoFocusOnClose,\n // A keyboard / click open supersedes any in-flight hover scheduling and\n // moves focus into the submenu (unlike the pointer path).\n onOpen: () => {\n this.#cancelPointerScheduling();\n this.#suppressFocusMoves = false;\n },\n // Propagate up so item activation, Tab, and outside-pointer collapse\n // the entire menu chain. `'escape'` collapses only this level (per APG);\n // `'programmatic'` is the consumer's own write — no propagation either.\n onClose: (reason) => {\n this.#cancelPointerScheduling();\n this.#suppressFocusMoves = false;\n if (reason !== 'escape' && reason !== 'programmatic') {\n this.parentMenu.closeMenu(reason);\n }\n },\n });\n\n readonly anchor = computed<ReferenceElement | null>(() => this._overlay.trigger());\n\n // --- Pointer-driven (hover) open/close state. Additive to click/keyboard. ---\n readonly #openAction = createDebouncedAction(() => this.#openByPointer());\n readonly #closeAction = createDebouncedAction(() => this.#closeByPointer());\n #graceTimer: ReturnType<typeof setTimeout> | null = null;\n #detachGrace: (() => void) | null = null;\n #detachContentPointer: (() => void) | null = null;\n /**\n * True while the current open/close transition is pointer-driven, so the\n * shared content's auto-focus-on-open and return-focus-on-close are vetoed:\n * hovering must never steal focus into the submenu nor yank it back to the\n * trigger. Reset to `false` by every keyboard / click / programmatic path.\n */\n #suppressFocusMoves = false;\n\n /**\n * Submenus exempt the parent menu's content. Clicks on parent menu items\n * activate via the item's own click handler (which propagates `closeMenu`\n * upward through the whole chain) instead of firing the submenu's\n * outside-close.\n */\n readonly dismissableExemptions = computed<readonly HTMLElement[]>(() => {\n const parentContent = this.parentMenu.content();\n return parentContent ? [parentContent] : [];\n });\n\n constructor() {\n super();\n const parent = inject(FOR_MENU_CONTEXT, { skipSelf: true, optional: true });\n if (!parent) {\n throw new Error(\n '[forty-cdk/menu] [forMenuSub] must be inside a [forDropdownMenu], [forContextMenu], or another [forMenuSub] element.',\n );\n }\n this.parentMenu = parent;\n\n inject(DestroyRef).onDestroy(() => this.#teardownPointer());\n }\n\n override registerContent(el: HTMLElement): void {\n this._overlay.registerContent(el);\n this.#attachContentPointer(el);\n }\n override unregisterContent(el: HTMLElement): void {\n if (this._overlay.content() === el) {\n this._overlay.unregisterContent(el);\n this.#detachContentPointer?.();\n this.#detachContentPointer = null;\n }\n }\n\n override closeMenu(reason: ForMenuCloseReason): void {\n this._overlay.closeMenu(reason);\n }\n\n // --- Pointer-driven (hover) open/close. Additive to click / keyboard. ---\n\n /**\n * Schedule a hover-open of the submenu after `subMenuOpenDelay`. Re-entering\n * the trigger also keeps every ancestor menu alive and aborts a pending\n * close. No-op when disabled or already open / scheduled.\n */\n scheduleOpenByPointer(): void {\n if (this.disabled()) {\n return;\n }\n this.#keepChainOpen();\n this.cancelPendingClose();\n if (this.open() || this.#openAction.isPending()) {\n return;\n }\n this.#openAction.schedule(this.#defaults.subMenuOpenDelay);\n }\n\n /**\n * The pointer left the sub-trigger. Cancels a not-yet-fired hover-open; if\n * the submenu is already open, arms the pointer-grace \"safe triangle\" toward\n * the content so travelling into the submenu doesn't close it.\n */\n onTriggerPointerLeave(cursor: Point): void {\n this.#clearOpenTimer();\n if (!this.open()) {\n return;\n }\n this.#armPointerGrace(cursor);\n }\n\n /** Schedule a hover-close of the submenu after `subMenuCloseDelay`. */\n scheduleCloseByPointer(): void {\n this.#clearOpenTimer();\n if (!this.open() || this.#closeAction.isPending()) {\n return;\n }\n this.#closeAction.schedule(this.#defaults.subMenuCloseDelay);\n }\n\n /** Cancel a pending hover-close and disarm the pointer-grace tracker. */\n cancelPendingClose(): void {\n this.#closeAction.cancel();\n this.#disarmPointerGrace();\n }\n\n #openByPointer(): void {\n if (this.disabled()) {\n return;\n }\n this.cancelPendingClose();\n // Hover-open never steals focus — it stays on whatever the user was on.\n this.#suppressFocusMoves = true;\n this.open.set(true);\n }\n\n #closeByPointer(): void {\n this.#disarmPointerGrace();\n this.#closeAction.cancel();\n // Hover-close affects only this level (like Escape / programmatic — no\n // upward propagation) and suppresses the trigger return-focus.\n this.#suppressFocusMoves = true;\n this.open.set(false);\n }\n\n #armPointerGrace(cursor: Point): void {\n const content = this._overlay.content();\n if (!this.#isBrowser || !content) {\n this.scheduleCloseByPointer();\n return;\n }\n const rect = content.getBoundingClientRect();\n const trigger = this.trigger();\n const side = trigger ? resolveGraceSide(trigger.getBoundingClientRect(), rect) : this.side();\n const polygon = buildSubmenuGracePolygon(cursor, rect, side);\n this.#disarmPointerGrace();\n this.#detachGrace = attachPointerGrace(content.ownerDocument, polygon, () => {\n this.#disarmPointerGrace();\n this.scheduleCloseByPointer();\n });\n this.#graceTimer = setTimeout(\n () => {\n this.#graceTimer = null;\n this.#detachGrace?.();\n this.#detachGrace = null;\n this.scheduleCloseByPointer();\n },\n Math.max(0, this.#defaults.subMenuPointerGraceDuration),\n );\n }\n\n #disarmPointerGrace(): void {\n if (this.#detachGrace) {\n this.#detachGrace();\n this.#detachGrace = null;\n }\n if (this.#graceTimer !== null) {\n clearTimeout(this.#graceTimer);\n this.#graceTimer = null;\n }\n }\n\n #onContentPointerEnter(): void {\n // Arrived at (or moving within) the content — keep it and every ancestor\n // submenu open.\n this.cancelPendingClose();\n this.#keepChainOpen();\n }\n\n #onContentPointerLeave(): void {\n this.scheduleCloseByPointer();\n }\n\n /** Abort pending hover-closes on this submenu and every ancestor menu. */\n #keepChainOpen(): void {\n let parent: ForMenuContext | null = this.parentMenu;\n while (parent) {\n parent.cancelPendingClose?.();\n parent = parent.parentMenu;\n }\n }\n\n #cancelPointerScheduling(): void {\n this.#clearOpenTimer();\n this.cancelPendingClose();\n }\n\n #clearOpenTimer(): void {\n this.#openAction.cancel();\n }\n\n #attachContentPointer(el: HTMLElement): void {\n this.#detachContentPointer?.();\n const onEnter = (event: PointerEvent): void => {\n if (event.pointerType !== '' && event.pointerType !== 'mouse') {\n return;\n }\n this.#onContentPointerEnter();\n };\n const onLeave = (event: PointerEvent): void => {\n if (event.pointerType !== '' && event.pointerType !== 'mouse') {\n return;\n }\n this.#onContentPointerLeave();\n };\n el.addEventListener('pointerenter', onEnter);\n el.addEventListener('pointerleave', onLeave);\n this.#detachContentPointer = () => {\n el.removeEventListener('pointerenter', onEnter);\n el.removeEventListener('pointerleave', onLeave);\n };\n }\n\n #teardownPointer(): void {\n this.#clearOpenTimer();\n this.#closeAction.cancel();\n this.#disarmPointerGrace();\n this.#detachContentPointer?.();\n this.#detachContentPointer = null;\n }\n\n override emitAutoFocusOnOpen(): boolean {\n // Hover-open leaves focus where it is — only keyboard / click moves it in.\n if (this.#suppressFocusMoves) {\n return true;\n }\n return emitVetoableEvent(this.autoFocusOnOpen);\n }\n\n override emitAutoFocusOnClose(): boolean {\n // Hover-close must not yank focus back to the trigger.\n if (this.#suppressFocusMoves) {\n return true;\n }\n return emitVetoableEvent(this.autoFocusOnClose);\n }\n}\n","import { booleanAttribute, computed, Directive, ElementRef, inject, input } from '@angular/core';\n\nimport {\n registerHandle,\n resolveListNavigation,\n type MenuActivationModality,\n injectMenuContext,\n} from 'forty-cdk/core';\nimport { handleMenuTabOut } from './menu-tab-out';\n\n/**\n * The `menuitem` inside the parent menu that opens its `[forMenuSub]`.\n * Apply on a `<button>` so Space / Enter dispatch native click events that\n * toggle the submenu via `(click)`.\n *\n * Wires `aria-haspopup=\"menu\"`, `aria-expanded`, and `aria-controls`\n * pointing to the submenu's content. Registers itself as a `menuitem` in\n * the **parent** menu's collection (so parent navigation reaches it),\n * while reading open state from the **submenu**.\n *\n * Keyboard:\n * - **Click / Enter / Space** — toggle the submenu (focus first item on open).\n * - **ArrowRight (LTR) / ArrowLeft (RTL)** — open the submenu and focus its first item.\n * - **ArrowDown / ArrowUp / Home / End** — navigate parent's items.\n * - **ArrowLeft (LTR) / ArrowRight (RTL)** — when the parent menu is itself\n * a submenu, close the parent (return to grandparent's trigger). No-op at\n * the top level.\n * - **Tab** — close the entire menu chain.\n * - **Typeahead** — printable keys delegate to parent's typeahead.\n *\n * Pointer (mouse):\n * - **pointermove** — drop the parent menu's hover highlight so no sibling item\n * stays active while the submenu opens. The sub-trigger reflects no\n * `data-highlighted` of its own and does not take focus (hover-open never\n * moves focus, per #332).\n * - **pointerenter** — open the submenu after the configured `subMenuOpenDelay`\n * ({@link provideForMenuDefaults}), without moving focus into it.\n * - **pointerleave** — close after `subMenuCloseDelay`, unless the pointer\n * travels toward the open submenu through the pointer-grace \"safe triangle\".\n *\n * Touch / pen never hover, so submenus open by tap (the native click) on those\n * pointer types — the hover listeners are gated to `pointerType === 'mouse'`.\n *\n * Pointer-driven opens (click / tap, detected by the `pointerdown` preceding\n * the click) move focus to the submenu's first item without highlighting it;\n * keyboard activation (Enter / Space / the open arrow) highlights it.\n */\n@Directive({\n selector: '[forMenuSubTrigger]',\n exportAs: 'forMenuSubTrigger',\n host: {\n role: 'menuitem',\n type: 'button',\n tabindex: '-1',\n '[id]': 'submenu.triggerId()',\n '[attr.aria-haspopup]': '\"menu\"',\n '[attr.aria-expanded]': 'submenu.open() ? \"true\" : \"false\"',\n '[attr.aria-controls]': 'submenu.open() ? submenu.contentId() : null',\n '[attr.aria-disabled]': 'effectiveDisabled() ? \"true\" : null',\n '[attr.data-state]': 'submenu.open() ? \"open\" : \"closed\"',\n '[attr.data-disabled]': 'effectiveDisabled() ? \"\" : null',\n '(pointerdown)': 'onPointerDown()',\n '(click)': 'onClick()',\n '(keydown)': 'onKeyDown($event)',\n '(pointerenter)': 'onPointerEnter($event)',\n '(pointerleave)': 'onPointerLeave($event)',\n '(pointermove)': 'onPointerMove($event)',\n },\n})\nexport class ForMenuSubTrigger {\n protected readonly submenu = injectMenuContext('ForMenuSubTrigger');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n #pointerActivation = false;\n\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly effectiveDisabled = computed(() => this.disabled() || this.submenu.disabled());\n\n constructor() {\n if (!this.submenu.parentMenu) {\n throw new Error(\n '[forty-cdk/menu] [forMenuSubTrigger] must be inside a [forMenuSub] inside a parent menu.',\n );\n }\n const parent = this.submenu.parentMenu;\n const handle = {\n host: this.#host.nativeElement,\n disabled: this.effectiveDisabled,\n };\n registerHandle(\n handle,\n (h) => parent.registerItem(h),\n (h) => parent.unregisterItem(h),\n );\n registerHandle(\n this.#host.nativeElement,\n (el) => this.submenu.registerTrigger(el),\n (el) => this.submenu.unregisterTrigger(el),\n );\n }\n\n protected onPointerDown(): void {\n this.#pointerActivation = true;\n }\n\n protected onClick(): void {\n const modality: MenuActivationModality = this.#pointerActivation ? 'pointer' : 'keyboard';\n this.#pointerActivation = false;\n if (this.effectiveDisabled()) {\n return;\n }\n this.submenu.toggle('first', modality);\n }\n\n protected onPointerEnter(event: PointerEvent): void {\n // Hover is a mouse affordance; touch / pen open the submenu by tap (click).\n if (event.pointerType !== 'mouse') {\n return;\n }\n if (this.effectiveDisabled()) {\n return;\n }\n this.submenu.scheduleOpenByPointer?.();\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (event.pointerType !== '' && event.pointerType !== 'mouse') {\n return;\n }\n if (this.effectiveDisabled()) {\n return;\n }\n // The sub-trigger carries no highlight of its own, and hover-open must not\n // move focus into the submenu (#332). So hovering it just drops the parent\n // menu's hover highlight, leaving no sibling item active while the submenu\n // opens — focus stays where it was.\n this.submenu.parentMenu?.clearItemHighlights();\n }\n\n protected onPointerLeave(event: PointerEvent): void {\n if (event.pointerType !== 'mouse') {\n return;\n }\n this.submenu.onTriggerPointerLeave?.({ x: event.clientX, y: event.clientY });\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n this.#pointerActivation = false;\n if (this.effectiveDisabled()) {\n return;\n }\n const parent = this.submenu.parentMenu!;\n const isRtl = this.submenu.dir() === 'rtl';\n const openKey = isRtl ? 'ArrowLeft' : 'ArrowRight';\n const closeParentKey = isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n if (event.key === openKey) {\n event.preventDefault();\n this.submenu.openMenu('first');\n return;\n }\n\n // Close-parent key when the *parent* is itself a submenu: collapse the parent.\n if (event.key === closeParentKey && parent.parentMenu) {\n event.preventDefault();\n parent.closeMenu('escape');\n return;\n }\n // Close-parent key when the *parent* is the top menu of a menubar:\n // switch to the previous / next sibling menu (LTR-ArrowLeft → prev,\n // RTL-ArrowRight → prev). Open-key on the sub-trigger keeps its own\n // meaning (open this submenu) — only the close-direction propagates\n // up to the menubar.\n if (event.key === closeParentKey && parent.menubar) {\n event.preventDefault();\n parent.menubar.switchToSibling('prev');\n return;\n }\n\n const action = resolveListNavigation(event, { orientation: 'vertical' });\n if (action) {\n event.preventDefault();\n parent.navigate(this.#host.nativeElement, action);\n return;\n }\n\n if (event.key === 'Tab') {\n handleMenuTabOut(parent);\n return;\n }\n\n parent.handleTypeahead(event);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}