forty-cdk 0.24.0 → 0.25.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 (73) hide show
  1. package/accordion/README.md +7 -0
  2. package/aspect-ratio/README.md +6 -0
  3. package/avatar/README.md +6 -0
  4. package/breadcrumbs/README.md +7 -0
  5. package/breakpoints/README.md +6 -0
  6. package/button/README.md +8 -1
  7. package/calendar/README.md +10 -1
  8. package/carousel/README.md +7 -0
  9. package/checkbox/README.md +7 -0
  10. package/combobox/README.md +8 -1
  11. package/context-menu/README.md +8 -1
  12. package/date-field/README.md +9 -2
  13. package/date-picker/README.md +7 -0
  14. package/dialog/README.md +8 -1
  15. package/disclosure/README.md +7 -0
  16. package/drag-drop/README.md +9 -2
  17. package/drawer/README.md +7 -0
  18. package/dropdown-menu/README.md +8 -1
  19. package/fesm2022/forty-cdk-listbox.mjs +7 -1
  20. package/fesm2022/forty-cdk-listbox.mjs.map +1 -1
  21. package/fesm2022/forty-cdk-select.mjs +10 -1
  22. package/fesm2022/forty-cdk-select.mjs.map +1 -1
  23. package/fesm2022/forty-cdk-table-virtualization.mjs +20 -3
  24. package/fesm2022/forty-cdk-table-virtualization.mjs.map +1 -1
  25. package/fesm2022/forty-cdk-table.mjs +74 -11
  26. package/fesm2022/forty-cdk-table.mjs.map +1 -1
  27. package/fesm2022/forty-cdk-time-picker.mjs +10 -1
  28. package/fesm2022/forty-cdk-time-picker.mjs.map +1 -1
  29. package/field/README.md +7 -1
  30. package/fieldset/README.md +7 -1
  31. package/file-upload/README.md +7 -1
  32. package/hover-card/README.md +6 -0
  33. package/input/README.md +7 -1
  34. package/internationalized-date/README.md +7 -1
  35. package/listbox/README.md +9 -1
  36. package/menu/README.md +7 -0
  37. package/menubar/README.md +7 -0
  38. package/meter/README.md +7 -0
  39. package/navigation-menu/README.md +7 -0
  40. package/number-input/README.md +7 -0
  41. package/otp-input/README.md +6 -0
  42. package/package.json +1 -1
  43. package/pagination/README.md +7 -0
  44. package/pane-resizer/README.md +7 -0
  45. package/popover/README.md +8 -1
  46. package/progress/README.md +7 -0
  47. package/radio-group/README.md +7 -0
  48. package/scroll-area/README.md +6 -0
  49. package/search/README.md +6 -0
  50. package/select/README.md +10 -2
  51. package/separator/README.md +6 -0
  52. package/shared/README.md +6 -0
  53. package/slider/README.md +7 -0
  54. package/stepper/README.md +7 -0
  55. package/switch/README.md +7 -0
  56. package/table/README.md +89 -16
  57. package/table-virtualization/README.md +38 -10
  58. package/tabs/README.md +7 -0
  59. package/time-field/README.md +9 -2
  60. package/time-picker/README.md +8 -0
  61. package/toast/README.md +7 -0
  62. package/toggle/README.md +7 -0
  63. package/toolbar/README.md +7 -0
  64. package/tooltip/README.md +7 -0
  65. package/tree/README.md +8 -1
  66. package/types/forty-cdk-listbox.d.ts +4 -1
  67. package/types/forty-cdk-select.d.ts +15 -1
  68. package/types/forty-cdk-table-virtualization.d.ts +18 -3
  69. package/types/forty-cdk-table.d.ts +78 -25
  70. package/types/forty-cdk-time-picker.d.ts +13 -1
  71. package/virtual-reorder/README.md +7 -1
  72. package/virtualization/README.md +6 -0
  73. package/visually-hidden/README.md +6 -0
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Accordion
3
+ group: primitives
4
+ archetype: [composable-ui]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/accordion/
6
+ ---
7
+
1
8
  # Accordion
2
9
 
3
10
  A stack of collapsible sections, optionally allowing multiple panels open at once.
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: Aspect Ratio
3
+ group: primitives
4
+ archetype: [composable-ui]
5
+ ---
6
+
1
7
  # AspectRatio
2
8
 
3
9
  A container that keeps its content at a fixed width-to-height ratio.
package/avatar/README.md CHANGED
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: Avatar
3
+ group: primitives
4
+ archetype: [composable-ui]
5
+ ---
6
+
1
7
  # Avatar
2
8
 
3
9
  A user image with a graceful fallback across its loading lifecycle.
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Breadcrumbs
3
+ group: primitives
4
+ archetype: [composable-ui]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/breadcrumb/
6
+ ---
7
+
1
8
  # Breadcrumbs
2
9
 
3
10
  A labelled navigation landmark for a breadcrumb trail: links with aria-current='page' on the current page and decorative separators hidden from assistive technology.
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: Breakpoints
3
+ group: utilities
4
+ archetype: [headless-utility]
5
+ ---
6
+
1
7
  # Breakpoints
2
8
 
3
9
  A signal-first, zoneless, SSR-safe viewport breakpoint observer (injectBreakpoints). Configure the breakpoint map once via provideForBreakpointsDefaults — or use the Tailwind scale by default — then read up / down / between / only / active or any arbitrary media query, each as a live Signal<boolean>.
package/button/README.md CHANGED
@@ -1,6 +1,13 @@
1
+ ---
2
+ title: Button
3
+ group: primitives
4
+ archetype: [composable-ui]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/button/
6
+ ---
7
+
1
8
  # ForButton
2
9
 
3
- Turns any element — a native <button> or a custom host like <div> / <span> — into an accessible button with keyboard activation. Disabled stays focusable (aria-disabled, never the native attribute) and pressed / hovered / focus-visible are reflected as data-\* hooks.
10
+ Turns any element — a native `<button>` or a custom host like `<div>` / `<span>` — into an accessible button with keyboard activation. Disabled stays focusable (aria-disabled, never the native attribute) and pressed / hovered / focus-visible are reflected as data-\* hooks.
4
11
 
5
12
  A single `[forButton]` directive does all of this. On a native `<button>` host the platform owns Enter/Space activation and `type` handling; on any non-button host the directive adds `role="button"`, `tabindex="0"`, and keyboard activation so the contract matches.
6
13
 
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Calendar
3
+ group: primitives
4
+ archetype: [composable-ui, form-control]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/grid/
6
+ ---
7
+
1
8
  # Calendar
2
9
 
3
10
  A single-date calendar grid implementing the APG Grid pattern over a pluggable date adapter: roving-tabindex day navigation, month / year paging, and min / max / per-date availability.
@@ -26,6 +33,8 @@ bootstrapApplication(App, {
26
33
 
27
34
  `@internationalized/date` is a widely-used immutable date primitive; it works in every browser today with no polyfill, and its reference-equality-on-mutation makes it signal-friendly.
28
35
 
36
+ → **[Date adapters](../../../docs/date-adapters.md)** — picking one, the optional peer dependency, and writing your own.
37
+
29
38
  **Calendar system (Gregorian).** The adapter seam abstracts the date _library_ and locale-aware _formatting_, not the calendar _system_'s month structure. Both `@internationalized/date` adapters build Gregorian dates, so the grid stays Gregorian regardless of the runtime locale, and the grid, the month picker and the date field all assume a Gregorian-structured year — exactly twelve months, `month` **1-12**, the year ending at month 12. Adapters over calendars with a different month structure (e.g. a 13-month year) are not supported. The optional `compareDate` hook overrides day-only _ordering_ only — it does not make the grid non-Gregorian.
30
39
 
31
40
  ## Anatomy
@@ -401,7 +410,7 @@ Auto-disabled when the entire previous / next page would be outside `[min, max]`
401
410
  | `[forCalendarYearCell]` | `data-highlighted` | present \| absent |
402
411
  | `[forCalendarYearCell]` | `data-disabled` | present \| absent |
403
412
 
404
- ## Scope defaults
413
+ ## Scoped defaults
405
414
 
406
415
  ```ts
407
416
  import { provideForCalendarDefaults } from 'forty-cdk/calendar';
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Carousel
3
+ group: primitives
4
+ archetype: [composable-ui]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/carousel/
6
+ ---
7
+
1
8
  # ForCarousel
2
9
 
3
10
  A slideshow of content panels with previous / next controls, an indicator group, optional looping and multi-slide views, and an accessible autoplay mode with a pause control.
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Checkbox
3
+ group: primitives
4
+ archetype: [form-control]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/
6
+ ---
7
+
1
8
  # Checkbox
2
9
 
3
10
  A checkbox supporting the three states checked, unchecked and indeterminate.
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Combobox
3
+ group: primitives
4
+ archetype: [overlay, form-control]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/combobox/
6
+ ---
7
+
1
8
  # Combobox
2
9
 
3
10
  An editable input paired with a filterable listbox popup, supporting single or multi selection with chips.
@@ -259,7 +266,7 @@ An action:
259
266
 
260
267
  Use `[forComboboxAction]` for a pinned side-effect. For an entry that _does_
261
268
  select (an "Add new" row that adds an item and commits it to `value`), use a
262
- plain `[forComboboxOption]` — see [Static options alongside the `@for`](#static-options-alongside-the-for).
269
+ plain `[forComboboxOption]` — see the static options under [Examples](#examples).
263
270
 
264
271
  ### Focus & keyboard (model A)
265
272
 
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Context Menu
3
+ group: primitives
4
+ archetype: [overlay]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/menu/
6
+ ---
7
+
1
8
  # ContextMenu
2
9
 
3
10
  A menu opened by right-click or long-press, anchored to the pointer position.
@@ -140,7 +147,7 @@ Both triggers carry `[menuPositioning]`, a partial `{ side, align, sideOffset, a
140
147
 
141
148
  Same vetoable dismiss API as DropdownMenu. Call `preventDefault()` on the emitted veto to suppress the directive's default action; the original DOM event, when present, is on `.event`.
142
149
 
143
- `(autoFocusOnOpen)` / `(autoFocusOnClose)` are output-shape because ContextMenu always routes close transitions through `[(open)]` (via the implicit `openChange` emitter). See [Conventions › Auto-focus hook shape](../../../.claude/rules/conventions.md#auto-focus-hook-shape) for why Dialog uses callback-shape inputs instead.
150
+ `(autoFocusOnOpen)` / `(autoFocusOnClose)` are output-shape because ContextMenu always routes close transitions through `[(open)]` (via the implicit `openChange` emitter). Dialog and Drawer take callback-shape inputs for the same pair instead: either can be closed by a direct `open.set(false)` that bypasses the `(dismiss)` output entirely, so their close hook has to be a stored function reference that still runs during teardown.
144
151
 
145
152
  ### Data attributes
146
153
 
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Date Field
3
+ group: primitives
4
+ archetype: [form-control]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/
6
+ ---
7
+
1
8
  # DateField
2
9
 
3
10
  A segmented date (and optional time) input over a pluggable date adapter — each part a spinbutton with keyboard stepping, locale-driven segment order and min / max clamping.
@@ -171,7 +178,7 @@ Set `granularity` to `'hour'`, `'minute'`, or `'second'` (`granularity > 'day'`)
171
178
 
172
179
  On the AM/PM segment, `a` / `p` set the period and ArrowUp / ArrowDown toggle it; the period is derived from the entered hour, so clearing it is a no-op (clear or step the hour instead). The value stays `null` until every visible segment — date **and** time — is filled.
173
180
 
174
- ## Scope defaults
181
+ ## Scoped defaults
175
182
 
176
183
  ```ts
177
184
  import { provideForDateFieldDefaults } from 'forty-cdk/date-field';
@@ -256,7 +263,7 @@ The two endpoints are typed independently, so order is not guaranteed by constru
256
263
 
257
264
  Each endpoint is its own tab stop, so `Tab` moves start group → end group → next control; arrows move between segments **within** an endpoint. Every other key behaves as in the [Keyboard](#keyboard) table below. Roving tabindex is per endpoint, and `aria-invalid="true"` is reflected on the root when the form marks it invalid **or** when two complete endpoints are out of order; everything else matches the [Accessibility](#accessibility) notes below.
258
265
 
259
- ### Range scope defaults
266
+ ### Range scoped defaults
260
267
 
261
268
  `provideForDateRangeFieldDefaults` mirrors `provideForDateFieldDefaults` and adds `startLabel` / `endLabel` for the two endpoint group `aria-label`s (`'Start date'` / `'End date'` by default). Both wrapper patterns work via `FOR_DATE_RANGE_FIELD_HOST_DIRECTIVE_INPUTS` / `FOR_DATE_RANGE_FIELD_HOST_DIRECTIVE_OUTPUTS` — see [Wrapping form primitives](../../../docs/wrapping-form-primitives.md).
262
269
 
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Date Picker
3
+ group: primitives
4
+ archetype: [overlay, form-control]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/examples/datepicker-dialog/
6
+ ---
7
+
1
8
  # DatePicker
2
9
 
3
10
  A trigger that opens a floating calendar to pick a date, composing ForCalendar inside a dismissible popover with min / max bounds and per-date availability.
package/dialog/README.md CHANGED
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Dialog
3
+ group: primitives
4
+ archetype: [overlay]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/
6
+ ---
7
+
1
8
  # Dialog
2
9
 
3
10
  A modal window overlaid on the page, with a focus trap, scroll lock and Escape / dismiss handling. Also openable imperatively through ForDialogManager.
@@ -249,7 +256,7 @@ Keep `dismissible: true` (the default) so Escape still closes, and veto only the
249
256
 
250
257
  ### Inputs — focus callbacks
251
258
 
252
- The auto-focus pair is bound as **function references** (input callbacks), not as event listeners. Each callback receives a `VetoableEvent` whose `preventDefault()` suppresses the directive's default focus action. This shape mirrors `ForDialogManager`'s `config.autoFocusOn*` callbacks and guarantees the `autoFocusOnClose` callback fires reliably on every close path — including a direct `open.set(false)` that bypasses the `(dismiss)` output. See [Conventions › Auto-focus hook shape](../../../.claude/rules/conventions.md#auto-focus-hook-shape) for why the free-floating overlays (Dialog, Drawer) use callback-shape inputs while the trigger-anchored ones use output-shape.
259
+ The auto-focus pair is bound as **function references** (input callbacks), not as event listeners. Each callback receives a `VetoableEvent` whose `preventDefault()` suppresses the directive's default focus action. This shape mirrors `ForDialogManager`'s `config.autoFocusOn*` callbacks and guarantees the `autoFocusOnClose` callback fires reliably on every close path — including a direct `open.set(false)` that bypasses the `(dismiss)` output. The trigger-anchored overlays (Popover, DropdownMenu, Select, …) expose the same pair as **outputs** instead, because every close transition there runs through their own `[(open)]` model, so no path can bypass the emitter.
253
260
 
254
261
  | Property | Type | Description |
255
262
  | ------------------ | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Disclosure
3
+ group: primitives
4
+ archetype: [composable-ui]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/
6
+ ---
7
+
1
8
  # Disclosure
2
9
 
3
10
  A single trigger that shows or hides a related region of content.
@@ -1,3 +1,9 @@
1
+ ---
2
+ title: Drag & Drop
3
+ group: utilities
4
+ archetype: [headless-utility]
5
+ ---
6
+
1
7
  # Drag & Drop
2
8
 
3
9
  Headless, accessible drag-and-drop for sortable lists and cross-list transfers, driven by both keyboard and pointer. Ships drag handles, custom preview / placeholder templates, live-sort, FLIP reorder animations, auto-scroll, and boundary / axis-lock constraints.
@@ -369,8 +375,9 @@ A custom integration that cannot use either companion must supply the same three
369
375
  mechanisms itself: map window-relative to absolute indices with the reusable
370
376
  `translateWindowReorder` helper (`forty-cdk/core`), keep the lifted row mounted
371
377
  for the duration of the drag, and step the keyboard target over the true total
372
- count. See [`docs/drag-in-virtualized-list-spike.md`](../../../docs/drag-in-virtualized-list-spike.md)
373
- for the full analysis.
378
+ count. Miss any one of the three and the failure is silent — an index that
379
+ addresses the wrong row, a lifted row recycled mid-drag, or a keyboard move that
380
+ stops at the window edge.
374
381
 
375
382
  ## Data attributes
376
383
 
package/drawer/README.md CHANGED
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Drawer
3
+ group: primitives
4
+ archetype: [overlay]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/
6
+ ---
7
+
1
8
  # Drawer
2
9
 
3
10
  A side or bottom sheet built on the modal dialog pattern, adding pointer-driven swipe-to-dismiss and snap points.
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: Dropdown Menu
3
+ group: primitives
4
+ archetype: [overlay]
5
+ apgUrl: https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/
6
+ ---
7
+
1
8
  # DropdownMenu
2
9
 
3
10
  A button that opens a menu of actions, with full keyboard navigation, typeahead and submenus.
@@ -156,7 +163,7 @@ Angular resolves `ng-template` DI at the template's **declaration** site, not wh
156
163
 
157
164
  Every output above is vetoable — each handler receives a `VetoableEvent` (or `VetoableNativeEvent<E>` when there is a native DOM event). Call `preventDefault()` on the emitted veto to suppress the directive's default action; the original DOM event, when present, is on `.event`.
158
165
 
159
- `(autoFocusOnOpen)` / `(autoFocusOnClose)` are output-shape because DropdownMenu always routes close transitions through `[(open)]` (via the implicit `openChange` emitter). See [Conventions › Auto-focus hook shape](../../../.claude/rules/conventions.md#auto-focus-hook-shape) for why Dialog uses callback-shape inputs instead.
166
+ `(autoFocusOnOpen)` / `(autoFocusOnClose)` are output-shape because DropdownMenu always routes close transitions through `[(open)]` (via the implicit `openChange` emitter). Dialog and Drawer take callback-shape inputs for the same pair instead: either can be closed by a direct `open.set(false)` that bypasses the `(dismiss)` output entirely, so their close hook has to be a stored function reference that still runs during teardown.
160
167
 
161
168
  ### Data attributes
162
169
 
@@ -628,8 +628,11 @@ class ForListbox extends FormUiControlBase {
628
628
  }
629
629
  this.markTouched();
630
630
  }
631
+ onPointerLeave() {
632
+ this.#pointerHost.set(null);
633
+ }
631
634
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ForListbox, deps: [], target: i0.ɵɵFactoryTarget.Directive });
632
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: ForListbox, isStandalone: true, selector: "[forListbox]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, itemToFormValue: { classPropertyName: "itemToFormValue", publicName: "itemToFormValue", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, totalCount: { classPropertyName: "totalCount", publicName: "totalCount", isSignal: true, isRequired: false, transformFunction: null }, visibleRange: { classPropertyName: "visibleRange", publicName: "visibleRange", isSignal: true, isRequired: false, transformFunction: null }, dataVersion: { classPropertyName: "dataVersion", publicName: "dataVersion", isSignal: true, isRequired: false, transformFunction: null }, _dirInput: { classPropertyName: "_dirInput", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, selectionFollowsFocus: { classPropertyName: "selectionFollowsFocus", publicName: "selectionFollowsFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", scrollToIndex: "scrollToIndex" }, host: { attributes: { "role": "listbox" }, listeners: { "keydown": "onHostKeyDown($event)", "focusin": "onHostFocusIn()", "focusout": "onFocusOut($event)" }, properties: { "attr.aria-label": "resolvedAriaLabel()", "attr.aria-orientation": "orientation()", "attr.aria-multiselectable": "multiple() ? \"true\" : null", "attr.aria-disabled": "effectiveDisabled() ? \"true\" : null", "attr.aria-readonly": "readonly() ? \"true\" : null", "attr.aria-required": "required() ? \"true\" : null", "attr.aria-invalid": "invalid() ? \"true\" : null", "attr.aria-busy": "pending() ? \"true\" : null", "attr.aria-activedescendant": "activeDescendantId()", "attr.tabindex": "hostTabindex()", "attr.data-orientation": "orientation()", "attr.data-disabled": "effectiveDisabled() ? \"\" : null", "attr.data-readonly": "readonly() ? \"\" : null", "attr.dir": "dir()" } }, providers: [{ provide: FOR_LISTBOX_CONTEXT, useExisting: ForListbox }], exportAs: ["forListbox"], usesInheritance: true, ngImport: i0 });
635
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: ForListbox, isStandalone: true, selector: "[forListbox]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, itemToFormValue: { classPropertyName: "itemToFormValue", publicName: "itemToFormValue", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, totalCount: { classPropertyName: "totalCount", publicName: "totalCount", isSignal: true, isRequired: false, transformFunction: null }, visibleRange: { classPropertyName: "visibleRange", publicName: "visibleRange", isSignal: true, isRequired: false, transformFunction: null }, dataVersion: { classPropertyName: "dataVersion", publicName: "dataVersion", isSignal: true, isRequired: false, transformFunction: null }, _dirInput: { classPropertyName: "_dirInput", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, selectionFollowsFocus: { classPropertyName: "selectionFollowsFocus", publicName: "selectionFollowsFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", scrollToIndex: "scrollToIndex" }, host: { attributes: { "role": "listbox" }, listeners: { "keydown": "onHostKeyDown($event)", "focusin": "onHostFocusIn()", "focusout": "onFocusOut($event)", "pointerleave": "onPointerLeave()" }, properties: { "attr.aria-label": "resolvedAriaLabel()", "attr.aria-orientation": "orientation()", "attr.aria-multiselectable": "multiple() ? \"true\" : null", "attr.aria-disabled": "effectiveDisabled() ? \"true\" : null", "attr.aria-readonly": "readonly() ? \"true\" : null", "attr.aria-required": "required() ? \"true\" : null", "attr.aria-invalid": "invalid() ? \"true\" : null", "attr.aria-busy": "pending() ? \"true\" : null", "attr.aria-activedescendant": "activeDescendantId()", "attr.tabindex": "hostTabindex()", "attr.data-orientation": "orientation()", "attr.data-disabled": "effectiveDisabled() ? \"\" : null", "attr.data-readonly": "readonly() ? \"\" : null", "attr.dir": "dir()" } }, providers: [{ provide: FOR_LISTBOX_CONTEXT, useExisting: ForListbox }], exportAs: ["forListbox"], usesInheritance: true, ngImport: i0 });
633
636
  }
634
637
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ForListbox, decorators: [{
635
638
  type: Directive,
@@ -655,6 +658,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
655
658
  '(keydown)': 'onHostKeyDown($event)',
656
659
  '(focusin)': 'onHostFocusIn()',
657
660
  '(focusout)': 'onFocusOut($event)',
661
+ '(pointerleave)': 'onPointerLeave()',
658
662
  },
659
663
  providers: [{ provide: FOR_LISTBOX_CONTEXT, useExisting: ForListbox }],
660
664
  }]
@@ -685,6 +689,8 @@ const FOR_LISTBOX_OPTION = new InjectionToken('FOR_LISTBOX_OPTION');
685
689
 
686
690
 
687
691
 
692
+
693
+
688
694
  class ForListboxOption {
689
695
  buttonType = hostButtonType();
690
696
  #group = injectListboxContext('ForListboxOption');