@radix-ng/primitives 1.0.1 → 1.0.3

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 (40) hide show
  1. package/composite/README.md +1 -1
  2. package/fesm2022/radix-ng-primitives-accordion.mjs +18 -36
  3. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-checkbox.mjs +134 -58
  5. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  6. package/fesm2022/radix-ng-primitives-collapsible.mjs +113 -64
  7. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-composite.mjs +127 -43
  9. package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-menu.mjs +288 -63
  11. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-menubar.mjs +24 -1
  13. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-select.mjs +56 -29
  15. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-slider.mjs +57 -13
  17. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-tabs.mjs +292 -59
  19. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-toolbar.mjs +19 -13
  21. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  22. package/package.json +2 -10
  23. package/types/radix-ng-primitives-accordion.d.ts +7 -15
  24. package/types/radix-ng-primitives-checkbox.d.ts +98 -70
  25. package/types/radix-ng-primitives-collapsible.d.ts +44 -24
  26. package/types/radix-ng-primitives-composite.d.ts +58 -15
  27. package/types/radix-ng-primitives-menu.d.ts +44 -16
  28. package/types/radix-ng-primitives-menubar.d.ts +2 -0
  29. package/types/radix-ng-primitives-select.d.ts +46 -32
  30. package/types/radix-ng-primitives-slider.d.ts +19 -4
  31. package/types/radix-ng-primitives-tabs.d.ts +63 -11
  32. package/types/radix-ng-primitives-toolbar.d.ts +80 -73
  33. package/collection/README.md +0 -1
  34. package/fesm2022/radix-ng-primitives-collection.mjs +0 -72
  35. package/fesm2022/radix-ng-primitives-collection.mjs.map +0 -1
  36. package/fesm2022/radix-ng-primitives-roving-focus.mjs +0 -420
  37. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +0 -1
  38. package/roving-focus/README.md +0 -3
  39. package/types/radix-ng-primitives-collection.d.ts +0 -44
  40. package/types/radix-ng-primitives-roving-focus.d.ts +0 -201
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, ElementRef, contentChildren, signal, input, booleanAttribute, computed, effect, Directive, NgModule } from '@angular/core';
3
3
  import * as i1 from '@radix-ng/primitives/composite';
4
- import { RdxCompositeRoot } from '@radix-ng/primitives/composite';
4
+ import { RdxCompositeRoot, RdxCompositeList } from '@radix-ng/primitives/composite';
5
5
  import { createContext, provideFloatingTree } from '@radix-ng/primitives/core';
6
6
  import { RdxMenuRoot } from '@radix-ng/primitives/menu';
7
7
 
@@ -29,6 +29,7 @@ class RdxMenubarRoot {
29
29
  constructor() {
30
30
  this.elementRef = inject(ElementRef);
31
31
  this.compositeRoot = inject(RdxCompositeRoot, { self: true });
32
+ this.compositeList = inject(RdxCompositeList, { self: true });
32
33
  this.menuRoots = contentChildren(RdxMenuRoot, { ...(ngDevMode ? { debugName: "menuRoots" } : /* istanbul ignore next */ {}), descendants: true });
33
34
  this.ids = new WeakMap();
34
35
  this.items = [];
@@ -49,6 +50,12 @@ class RdxMenubarRoot {
49
50
  effect(() => {
50
51
  this.itemsVersion();
51
52
  this.syncDisabledIndices();
53
+ this.syncTabIndices();
54
+ });
55
+ effect(() => {
56
+ this.compositeRoot.highlightedIndex();
57
+ this.itemsVersion();
58
+ this.syncTabIndices();
52
59
  });
53
60
  effect((onCleanup) => {
54
61
  const roots = this.menuRoots();
@@ -129,9 +136,19 @@ class RdxMenubarRoot {
129
136
  return true;
130
137
  });
131
138
  const unregisterTriggerInteraction = root.registerTriggerInteractionHandler((interaction) => this.handleTriggerInteraction(id, root, trigger, interaction));
139
+ const unregisterCompositeItem = this.compositeList.registerItem({
140
+ element: trigger,
141
+ metadata: computed(() => ({
142
+ disabled: this.disabled() ||
143
+ root.disabled() ||
144
+ trigger.hasAttribute('disabled') ||
145
+ trigger.getAttribute('aria-disabled') === 'true'
146
+ }))
147
+ });
132
148
  const unregisterItem = this.registerResolvedItem(id, trigger, root);
133
149
  return () => {
134
150
  unregisterItem();
151
+ unregisterCompositeItem();
135
152
  unregisterTriggerInteraction();
136
153
  unregisterPopupArrowNavigation();
137
154
  };
@@ -311,6 +328,12 @@ class RdxMenubarRoot {
311
328
  .filter((index) => index !== -1);
312
329
  this.compositeRoot.setDisabledIndices(disabledIndices.length ? disabledIndices : undefined);
313
330
  }
331
+ syncTabIndices() {
332
+ const highlightedIndex = this.compositeRoot.highlightedIndex();
333
+ this.items.forEach((item, index) => {
334
+ item.el.tabIndex = index === highlightedIndex && !item.disabled() ? 0 : -1;
335
+ });
336
+ }
314
337
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenubarRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
315
338
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.9", type: RdxMenubarRoot, isStandalone: true, selector: "[rdxMenubarRoot]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loopFocus: { classPropertyName: "loopFocus", publicName: "loopFocus", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "menubar" }, listeners: { "focusin": "handleFocusIn($event)" }, properties: { "attr.aria-orientation": "orientation()", "attr.data-orientation": "orientation()", "attr.data-disabled": "disabled() ? \"\" : undefined", "attr.data-has-submenu-open": "isAnyOpen() ? \"\" : undefined" } }, providers: [
316
339
  provideRdxMenubarContext(contextFactory),
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-menubar.mjs","sources":["../../../packages/primitives/menubar/src/menubar-root.ts","../../../packages/primitives/menubar/index.ts","../../../packages/primitives/menubar/radix-ng-primitives-menubar.ts"],"sourcesContent":["import {\n booleanAttribute,\n computed,\n contentChildren,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n Signal\n} from '@angular/core';\nimport { RdxCompositeRoot } from '@radix-ng/primitives/composite';\nimport { BooleanInput, createContext, provideFloatingTree } from '@radix-ng/primitives/core';\nimport { RdxMenuRoot, RdxMenuTriggerInteraction } from '@radix-ng/primitives/menu';\n\nexport type RdxMenubarOrientation = 'horizontal' | 'vertical';\n\ninterface RdxMenubarItem {\n id: string;\n el: HTMLElement;\n root?: RdxMenuRoot;\n open: () => void;\n close: () => void;\n disabled: () => boolean;\n}\n\nexport interface RdxMenubarContext {\n activeId: Signal<string | null>;\n isAnyOpen: Signal<boolean>;\n disabled: Signal<boolean>;\n orientation: Signal<RdxMenubarOrientation>;\n registerItem: (\n id: string,\n el: HTMLElement,\n open: () => void,\n close: () => void,\n disabled: () => boolean\n ) => () => void;\n activateItem: (id: string) => void;\n deactivateAll: () => void;\n focusAdjacent: (currentId: string, offset: 1 | -1, openOnMove: boolean) => void;\n focusBoundary: (boundary: 'first' | 'last', openOnMove: boolean) => void;\n}\n\nexport const [injectRdxMenubarContext, provideRdxMenubarContext] = createContext<RdxMenubarContext>(\n 'RdxMenubarContext',\n 'components/menubar'\n);\n\nconst contextFactory = () => buildContext(inject(RdxMenubarRoot));\n\nfunction buildContext(root: RdxMenubarRoot): RdxMenubarContext {\n return {\n activeId: root.activeId.asReadonly(),\n isAnyOpen: root.isAnyOpen,\n disabled: root.disabled,\n orientation: root.orientation,\n registerItem: (id, el, open, close, disabled) => root.registerItem(id, el, open, close, disabled),\n activateItem: (id) => root.activateItem(id),\n deactivateAll: () => root.deactivateAll(),\n focusAdjacent: (id, offset, open) => root.focusAdjacent(id, offset, open),\n focusBoundary: (boundary, open) => root.focusBoundary(boundary, open)\n };\n}\n\nlet nextMenubarItemId = 0;\n\n/**\n * Container for a horizontal application menu bar.\n * Coordinates open/close state across multiple menus and provides arrow-key navigation.\n */\n@Directive({\n selector: '[rdxMenubarRoot]',\n exportAs: 'rdxMenubarRoot',\n providers: [\n provideRdxMenubarContext(contextFactory),\n // One shared floating tree for all child menus (Base UI `Menubar` wraps them in a single\n // `FloatingTree`). Each `RdxMenuRoot`'s own `provideFloatingTree()` inherits this via skipSelf, so\n // sibling menubar menus live in the same tree — the dismissal / focus engine can see their\n // relationships instead of each menu owning an isolated tree.\n provideFloatingTree()\n ],\n host: {\n role: 'menubar',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-has-submenu-open]': 'isAnyOpen() ? \"\" : undefined',\n '(focusin)': 'handleFocusIn($event)'\n },\n hostDirectives: [RdxCompositeRoot]\n})\nexport class RdxMenubarRoot {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly compositeRoot = inject(RdxCompositeRoot, { self: true });\n private readonly menuRoots = contentChildren(RdxMenuRoot, { descendants: true });\n private readonly ids = new WeakMap<RdxMenuRoot, string>();\n private items: RdxMenubarItem[] = [];\n private readonly itemsVersion = signal(0);\n\n /** Whether every menubar trigger is disabled. */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Whether arrow-key navigation wraps at the first/last trigger. */\n readonly loopFocus = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n /** The menubar orientation. */\n readonly orientation = input<RdxMenubarOrientation>('horizontal');\n\n readonly activeId = signal<string | null>(null);\n readonly isAnyOpen = computed(() => this.activeId() !== null);\n\n constructor() {\n effect(() => {\n this.compositeRoot.setOrientation(this.orientation());\n this.compositeRoot.setLoopFocus(this.loopFocus());\n this.compositeRoot.setEnableHomeAndEndKeys(true);\n });\n\n effect(() => {\n this.itemsVersion();\n this.syncDisabledIndices();\n });\n\n effect((onCleanup) => {\n const roots = this.menuRoots();\n const registered: Array<() => void> = [];\n\n roots.forEach((root) => {\n const trigger = root.trigger();\n\n if (!trigger || trigger.closest('[rdxMenuPopup]')) {\n return;\n }\n\n registered.push(this.registerMenuRoot(root, trigger));\n });\n\n onCleanup(() => {\n registered.forEach((cleanup) => cleanup());\n });\n });\n\n effect(() => {\n const activeId = this.activeId();\n\n if (!activeId) {\n return;\n }\n\n this.menuRoots().forEach((root) => {\n const trigger = root.trigger();\n\n if (!trigger || trigger.closest('[rdxMenuPopup]')) {\n return;\n }\n\n if (this.idFor(root) === activeId && !root.open()) {\n this.deactivateAll();\n }\n });\n });\n }\n\n registerItem(\n id: string,\n el: HTMLElement,\n open: () => void,\n close: () => void,\n disabled: () => boolean\n ): () => void {\n this.items.push({ id, el, open, close, disabled });\n this.sortItems();\n return () => {\n this.items = this.items.filter((item) => item.id !== id);\n if (this.activeId() === id) this.activeId.set(null);\n this.markItemsChanged();\n };\n }\n\n activateItem(id: string): void {\n if (this.disabled()) {\n return;\n }\n\n // Close every other open menu\n this.items.forEach((item) => {\n if (item.id !== id) item.close();\n });\n this.activeId.set(id);\n }\n\n deactivateAll(): void {\n this.activeId.set(null);\n }\n\n focusBoundary(boundary: 'first' | 'last', openOnMove: boolean): void {\n const enabled = this.enabledItems();\n this.focusItem(boundary === 'first' ? enabled[0] : enabled[enabled.length - 1], openOnMove);\n }\n\n generateId(): string {\n return `rdx-menubar-item-${nextMenubarItemId++}`;\n }\n\n private idFor(root: RdxMenuRoot): string {\n let id = this.ids.get(root);\n\n if (!id) {\n id = this.generateId();\n this.ids.set(root, id);\n }\n\n return id;\n }\n\n private registerMenuRoot(root: RdxMenuRoot, trigger: HTMLElement): () => void {\n const id = this.idFor(root);\n const unregisterPopupArrowNavigation = root.registerPopupArrowNavigationHandler((offset) => {\n if (this.disabled()) {\n return false;\n }\n\n this.focusAdjacent(id, offset, true);\n return true;\n });\n const unregisterTriggerInteraction = root.registerTriggerInteractionHandler((interaction) =>\n this.handleTriggerInteraction(id, root, trigger, interaction)\n );\n const unregisterItem = this.registerResolvedItem(id, trigger, root);\n\n return () => {\n unregisterItem();\n unregisterTriggerInteraction();\n unregisterPopupArrowNavigation();\n };\n }\n\n private registerResolvedItem(id: string, el: HTMLElement, root: RdxMenuRoot): () => void {\n this.items.push({\n id,\n el,\n root,\n open: () => root.show(false),\n close: () => root.close(),\n disabled: () =>\n this.disabled() ||\n root.disabled() ||\n el.hasAttribute('disabled') ||\n el.getAttribute('aria-disabled') === 'true'\n });\n this.sortItems();\n\n return () => {\n this.items = this.items.filter((item) => item.id !== id);\n if (this.activeId() === id) this.activeId.set(null);\n this.markItemsChanged();\n };\n }\n\n private handleTriggerInteraction(\n id: string,\n root: RdxMenuRoot,\n trigger: HTMLElement,\n interaction: RdxMenuTriggerInteraction\n ): boolean {\n if (this.disabled()) {\n return false;\n }\n\n switch (interaction.type) {\n case 'click': {\n if (root.open()) {\n root.close();\n this.deactivateAll();\n } else {\n root.show();\n this.activateItem(id);\n }\n return true;\n }\n case 'enter':\n case 'space': {\n interaction.event.preventDefault();\n interaction.event.stopPropagation();\n\n if (root.open()) {\n root.close();\n this.deactivateAll();\n } else {\n root.show('first', 'trigger-press', interaction.event);\n this.activateItem(id);\n }\n\n return true;\n }\n case 'pointerenter': {\n if (interaction.event.pointerType === 'touch' || !this.hasOpenMenu()) {\n return false;\n }\n\n if (root.open()) {\n return true;\n }\n\n trigger.focus({ preventScroll: true });\n root.show(false, 'trigger-hover');\n this.activateItem(id);\n return true;\n }\n case 'arrowdown': {\n interaction.event.preventDefault();\n root.show('first');\n this.activateItem(id);\n return true;\n }\n case 'arrowup': {\n interaction.event.preventDefault();\n root.show('last');\n this.activateItem(id);\n return true;\n }\n case 'arrowleft': {\n this.handleTriggerArrow(interaction.event, id, -1, root.open());\n return true;\n }\n case 'arrowright': {\n this.handleTriggerArrow(interaction.event, id, 1, root.open());\n return true;\n }\n case 'home': {\n this.handleTriggerBoundary(interaction.event, 'first', root.open());\n return true;\n }\n case 'end': {\n this.handleTriggerBoundary(interaction.event, 'last', root.open());\n return true;\n }\n case 'escape': {\n interaction.event.preventDefault();\n interaction.event.stopPropagation();\n root.close();\n this.deactivateAll();\n trigger.focus({ preventScroll: true });\n return true;\n }\n }\n }\n\n private handleTriggerArrow(event: Event, id: string, offset: 1 | -1, openOnMove: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n (event as KeyboardEvent).stopImmediatePropagation();\n this.focusAdjacent(id, offset, openOnMove);\n }\n\n private handleTriggerBoundary(event: Event, boundary: 'first' | 'last', openOnMove: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n (event as KeyboardEvent).stopImmediatePropagation();\n this.focusBoundary(boundary, openOnMove);\n }\n\n focusAdjacent(currentId: string, offset: 1 | -1, openOnMove: boolean): void {\n const enabled = this.enabledItems();\n const currentIndex = enabled.findIndex((item) => item.id === currentId);\n if (currentIndex === -1 || enabled.length === 0) return;\n\n const nextIndex = currentIndex + offset;\n if (!this.loopFocus() && (nextIndex < 0 || nextIndex >= enabled.length)) {\n return;\n }\n\n const next = enabled[(nextIndex + enabled.length) % enabled.length];\n this.focusItem(next, openOnMove);\n }\n\n private focusItem(item: RdxMenubarItem | undefined, openOnMove: boolean): void {\n if (!item || this.disabled()) return;\n\n this.highlightItem(item);\n item.el.focus({ preventScroll: true });\n if (openOnMove) {\n item.open();\n this.activateItem(item.id);\n }\n }\n\n protected handleFocusIn(event: FocusEvent): void {\n const target = event.target;\n\n if (target === this.elementRef.nativeElement) {\n this.focusItem(this.enabledItems()[0], false);\n return;\n }\n\n const focusedItem = target instanceof HTMLElement ? this.items.find((item) => item.el === target) : undefined;\n if (!focusedItem || focusedItem.disabled()) {\n return;\n }\n\n this.highlightItem(focusedItem);\n\n if (this.hasOpenMenu() && this.activeId() !== focusedItem.id) {\n focusedItem.open();\n this.activateItem(focusedItem.id);\n }\n }\n\n private highlightItem(item: RdxMenubarItem): void {\n const index = this.items.findIndex((candidate) => candidate.id === item.id);\n if (index !== -1) {\n this.compositeRoot.setHighlightedIndex(index, true);\n }\n }\n\n private enabledItems(): RdxMenubarItem[] {\n return this.items.filter((item) => !item.disabled());\n }\n\n private hasOpenMenu(): boolean {\n return this.items.some((item) => item.root?.open());\n }\n\n private sortItems(): void {\n this.items.sort((a, b) => (a.el.compareDocumentPosition(b.el) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1));\n this.markItemsChanged();\n }\n\n private markItemsChanged(): void {\n this.itemsVersion.update((value) => value + 1);\n }\n\n private syncDisabledIndices(): void {\n const disabledIndices = this.items\n .map((item, index) => (item.disabled() ? index : -1))\n .filter((index) => index !== -1);\n\n this.compositeRoot.setDisabledIndices(disabledIndices.length ? disabledIndices : undefined);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxMenubarRoot } from './src/menubar-root';\n\nexport * from './src/menubar-root';\n\n/**\n * Menubar-specific parts. Triggers use the standard `rdxMenuTrigger` from\n * `@radix-ng/primitives/menu`; the menubar root composes them into Composite focus,\n * hover switching, and ArrowLeft / ArrowRight navigation. The menu popup, items,\n * checkbox/radio, submenu, separator, etc. also come from `RdxMenuModule`.\n */\nconst menubarImports = [RdxMenubarRoot];\n\n@NgModule({\n imports: [...menubarImports],\n exports: [...menubarImports]\n})\nexport class RdxMenubarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-menubar.mjs","sources":["../../../packages/primitives/menubar/src/menubar-root.ts","../../../packages/primitives/menubar/index.ts","../../../packages/primitives/menubar/radix-ng-primitives-menubar.ts"],"sourcesContent":["import {\n booleanAttribute,\n computed,\n contentChildren,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n signal,\n Signal\n} from '@angular/core';\nimport { RdxCompositeList, RdxCompositeRoot } from '@radix-ng/primitives/composite';\nimport { BooleanInput, createContext, provideFloatingTree } from '@radix-ng/primitives/core';\nimport { RdxMenuRoot, RdxMenuTriggerInteraction } from '@radix-ng/primitives/menu';\n\nexport type RdxMenubarOrientation = 'horizontal' | 'vertical';\n\ninterface RdxMenubarItem {\n id: string;\n el: HTMLElement;\n root?: RdxMenuRoot;\n open: () => void;\n close: () => void;\n disabled: () => boolean;\n}\n\nexport interface RdxMenubarContext {\n activeId: Signal<string | null>;\n isAnyOpen: Signal<boolean>;\n disabled: Signal<boolean>;\n orientation: Signal<RdxMenubarOrientation>;\n registerItem: (\n id: string,\n el: HTMLElement,\n open: () => void,\n close: () => void,\n disabled: () => boolean\n ) => () => void;\n activateItem: (id: string) => void;\n deactivateAll: () => void;\n focusAdjacent: (currentId: string, offset: 1 | -1, openOnMove: boolean) => void;\n focusBoundary: (boundary: 'first' | 'last', openOnMove: boolean) => void;\n}\n\nexport const [injectRdxMenubarContext, provideRdxMenubarContext] = createContext<RdxMenubarContext>(\n 'RdxMenubarContext',\n 'components/menubar'\n);\n\nconst contextFactory = () => buildContext(inject(RdxMenubarRoot));\n\nfunction buildContext(root: RdxMenubarRoot): RdxMenubarContext {\n return {\n activeId: root.activeId.asReadonly(),\n isAnyOpen: root.isAnyOpen,\n disabled: root.disabled,\n orientation: root.orientation,\n registerItem: (id, el, open, close, disabled) => root.registerItem(id, el, open, close, disabled),\n activateItem: (id) => root.activateItem(id),\n deactivateAll: () => root.deactivateAll(),\n focusAdjacent: (id, offset, open) => root.focusAdjacent(id, offset, open),\n focusBoundary: (boundary, open) => root.focusBoundary(boundary, open)\n };\n}\n\nlet nextMenubarItemId = 0;\n\n/**\n * Container for a horizontal application menu bar.\n * Coordinates open/close state across multiple menus and provides arrow-key navigation.\n */\n@Directive({\n selector: '[rdxMenubarRoot]',\n exportAs: 'rdxMenubarRoot',\n providers: [\n provideRdxMenubarContext(contextFactory),\n // One shared floating tree for all child menus (Base UI `Menubar` wraps them in a single\n // `FloatingTree`). Each `RdxMenuRoot`'s own `provideFloatingTree()` inherits this via skipSelf, so\n // sibling menubar menus live in the same tree — the dismissal / focus engine can see their\n // relationships instead of each menu owning an isolated tree.\n provideFloatingTree()\n ],\n host: {\n role: 'menubar',\n '[attr.aria-orientation]': 'orientation()',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-has-submenu-open]': 'isAnyOpen() ? \"\" : undefined',\n '(focusin)': 'handleFocusIn($event)'\n },\n hostDirectives: [RdxCompositeRoot]\n})\nexport class RdxMenubarRoot {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly compositeRoot = inject(RdxCompositeRoot, { self: true });\n private readonly compositeList = inject(RdxCompositeList, { self: true });\n private readonly menuRoots = contentChildren(RdxMenuRoot, { descendants: true });\n private readonly ids = new WeakMap<RdxMenuRoot, string>();\n private items: RdxMenubarItem[] = [];\n private readonly itemsVersion = signal(0);\n\n /** Whether every menubar trigger is disabled. */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n /** Whether arrow-key navigation wraps at the first/last trigger. */\n readonly loopFocus = input<boolean, BooleanInput>(true, { transform: booleanAttribute });\n\n /** The menubar orientation. */\n readonly orientation = input<RdxMenubarOrientation>('horizontal');\n\n readonly activeId = signal<string | null>(null);\n readonly isAnyOpen = computed(() => this.activeId() !== null);\n\n constructor() {\n effect(() => {\n this.compositeRoot.setOrientation(this.orientation());\n this.compositeRoot.setLoopFocus(this.loopFocus());\n this.compositeRoot.setEnableHomeAndEndKeys(true);\n });\n\n effect(() => {\n this.itemsVersion();\n this.syncDisabledIndices();\n this.syncTabIndices();\n });\n\n effect(() => {\n this.compositeRoot.highlightedIndex();\n this.itemsVersion();\n this.syncTabIndices();\n });\n\n effect((onCleanup) => {\n const roots = this.menuRoots();\n const registered: Array<() => void> = [];\n\n roots.forEach((root) => {\n const trigger = root.trigger();\n\n if (!trigger || trigger.closest('[rdxMenuPopup]')) {\n return;\n }\n\n registered.push(this.registerMenuRoot(root, trigger));\n });\n\n onCleanup(() => {\n registered.forEach((cleanup) => cleanup());\n });\n });\n\n effect(() => {\n const activeId = this.activeId();\n\n if (!activeId) {\n return;\n }\n\n this.menuRoots().forEach((root) => {\n const trigger = root.trigger();\n\n if (!trigger || trigger.closest('[rdxMenuPopup]')) {\n return;\n }\n\n if (this.idFor(root) === activeId && !root.open()) {\n this.deactivateAll();\n }\n });\n });\n }\n\n registerItem(\n id: string,\n el: HTMLElement,\n open: () => void,\n close: () => void,\n disabled: () => boolean\n ): () => void {\n this.items.push({ id, el, open, close, disabled });\n this.sortItems();\n return () => {\n this.items = this.items.filter((item) => item.id !== id);\n if (this.activeId() === id) this.activeId.set(null);\n this.markItemsChanged();\n };\n }\n\n activateItem(id: string): void {\n if (this.disabled()) {\n return;\n }\n\n // Close every other open menu\n this.items.forEach((item) => {\n if (item.id !== id) item.close();\n });\n this.activeId.set(id);\n }\n\n deactivateAll(): void {\n this.activeId.set(null);\n }\n\n focusBoundary(boundary: 'first' | 'last', openOnMove: boolean): void {\n const enabled = this.enabledItems();\n this.focusItem(boundary === 'first' ? enabled[0] : enabled[enabled.length - 1], openOnMove);\n }\n\n generateId(): string {\n return `rdx-menubar-item-${nextMenubarItemId++}`;\n }\n\n private idFor(root: RdxMenuRoot): string {\n let id = this.ids.get(root);\n\n if (!id) {\n id = this.generateId();\n this.ids.set(root, id);\n }\n\n return id;\n }\n\n private registerMenuRoot(root: RdxMenuRoot, trigger: HTMLElement): () => void {\n const id = this.idFor(root);\n const unregisterPopupArrowNavigation = root.registerPopupArrowNavigationHandler((offset) => {\n if (this.disabled()) {\n return false;\n }\n\n this.focusAdjacent(id, offset, true);\n return true;\n });\n const unregisterTriggerInteraction = root.registerTriggerInteractionHandler((interaction) =>\n this.handleTriggerInteraction(id, root, trigger, interaction)\n );\n const unregisterCompositeItem = this.compositeList.registerItem({\n element: trigger,\n metadata: computed(() => ({\n disabled:\n this.disabled() ||\n root.disabled() ||\n trigger.hasAttribute('disabled') ||\n trigger.getAttribute('aria-disabled') === 'true'\n }))\n });\n const unregisterItem = this.registerResolvedItem(id, trigger, root);\n\n return () => {\n unregisterItem();\n unregisterCompositeItem();\n unregisterTriggerInteraction();\n unregisterPopupArrowNavigation();\n };\n }\n\n private registerResolvedItem(id: string, el: HTMLElement, root: RdxMenuRoot): () => void {\n this.items.push({\n id,\n el,\n root,\n open: () => root.show(false),\n close: () => root.close(),\n disabled: () =>\n this.disabled() ||\n root.disabled() ||\n el.hasAttribute('disabled') ||\n el.getAttribute('aria-disabled') === 'true'\n });\n this.sortItems();\n\n return () => {\n this.items = this.items.filter((item) => item.id !== id);\n if (this.activeId() === id) this.activeId.set(null);\n this.markItemsChanged();\n };\n }\n\n private handleTriggerInteraction(\n id: string,\n root: RdxMenuRoot,\n trigger: HTMLElement,\n interaction: RdxMenuTriggerInteraction\n ): boolean {\n if (this.disabled()) {\n return false;\n }\n\n switch (interaction.type) {\n case 'click': {\n if (root.open()) {\n root.close();\n this.deactivateAll();\n } else {\n root.show();\n this.activateItem(id);\n }\n return true;\n }\n case 'enter':\n case 'space': {\n interaction.event.preventDefault();\n interaction.event.stopPropagation();\n\n if (root.open()) {\n root.close();\n this.deactivateAll();\n } else {\n root.show('first', 'trigger-press', interaction.event);\n this.activateItem(id);\n }\n\n return true;\n }\n case 'pointerenter': {\n if (interaction.event.pointerType === 'touch' || !this.hasOpenMenu()) {\n return false;\n }\n\n if (root.open()) {\n return true;\n }\n\n trigger.focus({ preventScroll: true });\n root.show(false, 'trigger-hover');\n this.activateItem(id);\n return true;\n }\n case 'arrowdown': {\n interaction.event.preventDefault();\n root.show('first');\n this.activateItem(id);\n return true;\n }\n case 'arrowup': {\n interaction.event.preventDefault();\n root.show('last');\n this.activateItem(id);\n return true;\n }\n case 'arrowleft': {\n this.handleTriggerArrow(interaction.event, id, -1, root.open());\n return true;\n }\n case 'arrowright': {\n this.handleTriggerArrow(interaction.event, id, 1, root.open());\n return true;\n }\n case 'home': {\n this.handleTriggerBoundary(interaction.event, 'first', root.open());\n return true;\n }\n case 'end': {\n this.handleTriggerBoundary(interaction.event, 'last', root.open());\n return true;\n }\n case 'escape': {\n interaction.event.preventDefault();\n interaction.event.stopPropagation();\n root.close();\n this.deactivateAll();\n trigger.focus({ preventScroll: true });\n return true;\n }\n }\n }\n\n private handleTriggerArrow(event: Event, id: string, offset: 1 | -1, openOnMove: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n (event as KeyboardEvent).stopImmediatePropagation();\n this.focusAdjacent(id, offset, openOnMove);\n }\n\n private handleTriggerBoundary(event: Event, boundary: 'first' | 'last', openOnMove: boolean): void {\n event.preventDefault();\n event.stopPropagation();\n (event as KeyboardEvent).stopImmediatePropagation();\n this.focusBoundary(boundary, openOnMove);\n }\n\n focusAdjacent(currentId: string, offset: 1 | -1, openOnMove: boolean): void {\n const enabled = this.enabledItems();\n const currentIndex = enabled.findIndex((item) => item.id === currentId);\n if (currentIndex === -1 || enabled.length === 0) return;\n\n const nextIndex = currentIndex + offset;\n if (!this.loopFocus() && (nextIndex < 0 || nextIndex >= enabled.length)) {\n return;\n }\n\n const next = enabled[(nextIndex + enabled.length) % enabled.length];\n this.focusItem(next, openOnMove);\n }\n\n private focusItem(item: RdxMenubarItem | undefined, openOnMove: boolean): void {\n if (!item || this.disabled()) return;\n\n this.highlightItem(item);\n item.el.focus({ preventScroll: true });\n if (openOnMove) {\n item.open();\n this.activateItem(item.id);\n }\n }\n\n protected handleFocusIn(event: FocusEvent): void {\n const target = event.target;\n\n if (target === this.elementRef.nativeElement) {\n this.focusItem(this.enabledItems()[0], false);\n return;\n }\n\n const focusedItem = target instanceof HTMLElement ? this.items.find((item) => item.el === target) : undefined;\n if (!focusedItem || focusedItem.disabled()) {\n return;\n }\n\n this.highlightItem(focusedItem);\n\n if (this.hasOpenMenu() && this.activeId() !== focusedItem.id) {\n focusedItem.open();\n this.activateItem(focusedItem.id);\n }\n }\n\n private highlightItem(item: RdxMenubarItem): void {\n const index = this.items.findIndex((candidate) => candidate.id === item.id);\n if (index !== -1) {\n this.compositeRoot.setHighlightedIndex(index, true);\n }\n }\n\n private enabledItems(): RdxMenubarItem[] {\n return this.items.filter((item) => !item.disabled());\n }\n\n private hasOpenMenu(): boolean {\n return this.items.some((item) => item.root?.open());\n }\n\n private sortItems(): void {\n this.items.sort((a, b) => (a.el.compareDocumentPosition(b.el) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1));\n this.markItemsChanged();\n }\n\n private markItemsChanged(): void {\n this.itemsVersion.update((value) => value + 1);\n }\n\n private syncDisabledIndices(): void {\n const disabledIndices = this.items\n .map((item, index) => (item.disabled() ? index : -1))\n .filter((index) => index !== -1);\n\n this.compositeRoot.setDisabledIndices(disabledIndices.length ? disabledIndices : undefined);\n }\n\n private syncTabIndices(): void {\n const highlightedIndex = this.compositeRoot.highlightedIndex();\n\n this.items.forEach((item, index) => {\n item.el.tabIndex = index === highlightedIndex && !item.disabled() ? 0 : -1;\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxMenubarRoot } from './src/menubar-root';\n\nexport * from './src/menubar-root';\n\n/**\n * Menubar-specific parts. Triggers use the standard `rdxMenuTrigger` from\n * `@radix-ng/primitives/menu`; the menubar root composes them into Composite focus,\n * hover switching, and ArrowLeft / ArrowRight navigation. The menu popup, items,\n * checkbox/radio, submenu, separator, etc. also come from `RdxMenuModule`.\n */\nconst menubarImports = [RdxMenubarRoot];\n\n@NgModule({\n imports: [...menubarImports],\n exports: [...menubarImports]\n})\nexport class RdxMenubarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -7,8 +7,8 @@ import * as i2 from '@radix-ng/primitives/floating-focus-manager';
7
7
  import { getInteractionTypeFromEvent, provideFloatingFocusManagerConfig, RdxFloatingFocusManager, createRdxTriggerInteraction } from '@radix-ng/primitives/floating-focus-manager';
8
8
  import * as i1 from '@radix-ng/primitives/popper';
9
9
  import { RdxPopper, RdxPopperContent, RdxPopperContentWrapper, legacyPopperVars, provideRdxPopperContentWrapper, provideRdxPopperContentConfig, RdxPopperAnchor } from '@radix-ng/primitives/popper';
10
- import * as i4 from '@radix-ng/primitives/collection';
11
- import { RdxCollectionProvider, RdxCollectionItem } from '@radix-ng/primitives/collection';
10
+ import * as i4 from '@radix-ng/primitives/composite';
11
+ import { RdxCompositeList, RdxCompositeListItem } from '@radix-ng/primitives/composite';
12
12
  import { RdxDismiss } from '@radix-ng/primitives/dismissable-layer';
13
13
  import * as i1$1 from '@radix-ng/primitives/portal';
14
14
  import { RdxPortalPresence } from '@radix-ng/primitives/portal';
@@ -341,9 +341,15 @@ const context$1 = () => {
341
341
  isPositioned: context.isPositioned,
342
342
  selectedItem: context.selectedItem,
343
343
  selectedItemText: context.selectedItemText,
344
+ items: context.items,
344
345
  highlightedItem: context.highlight.highlightedItem,
345
- isHighlighted: (item) => context.highlight.highlightedItem() === item,
346
- highlightItem: (item) => context.highlight.set(item),
346
+ isHighlighted: (element) => context.highlight.highlightedItem()?.element === element,
347
+ highlightItem: (element) => {
348
+ const item = context.items().find((item) => item.element === element);
349
+ if (item) {
350
+ context.highlight.set(item);
351
+ }
352
+ },
347
353
  isKeyboardActive: () => context.isKeyboardActive(),
348
354
  setKeyboardActive: (value) => context.setKeyboardActive(value),
349
355
  onViewportChange: (node) => {
@@ -391,23 +397,23 @@ class RdxSelectPopup {
391
397
  this.floatingContext = inject(RDX_FLOATING_ROOT_CONTEXT);
392
398
  this.registration = inject(RDX_FLOATING_REGISTRATION, { optional: true });
393
399
  this.currentElement = inject(ElementRef);
394
- this.collection = inject(RdxCollectionProvider);
400
+ this.compositeList = inject(RdxCompositeList, { self: true });
395
401
  this.injector = inject(Injector);
396
402
  this.rootContext = injectSelectRootContext();
397
403
  /**
398
404
  * The collected items (DOM order). Exposed so the `item-aligned` positioner — now the popup's
399
- * **ancestor** — can read them without injecting {@link RdxCollectionProvider} (which the popup
400
- * provides as a descendant, so an upward `inject` would not find it).
405
+ * **ancestor** — can read them without injecting the composite list (which the popup provides as
406
+ * a descendant, so an upward `inject` would not find it).
401
407
  */
402
- this.items = this.collection.items;
408
+ this.items = computed(() => this.compositeList.items(), ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
403
409
  /**
404
410
  * Highlight-model navigation over the collected items (DOM order). `loop` is disabled so arrow
405
411
  * navigation stops at the first / last item instead of wrapping around — matching native
406
412
  * `<select>` behavior.
407
413
  */
408
414
  this.highlight = useListHighlight({
409
- items: this.collection.items,
410
- isNavigable: (item) => !item.disabled(),
415
+ items: this.items,
416
+ isNavigable: (item) => !item.metadata()?.disabled,
411
417
  getId: (item) => item.element.id,
412
418
  loop: signal(false),
413
419
  injector: this.injector
@@ -420,6 +426,7 @@ class RdxSelectPopup {
420
426
  // Tracks whether the last interaction was the keyboard, so the highlight doesn't jump to an item
421
427
  // the cursor happens to rest on when arrow-key navigation scrolls the list.
422
428
  this.keyboardActive = false;
429
+ this.hasHighlightedOpen = false;
423
430
  /**
424
431
  * Event handler called when the escape key is down.
425
432
  * Can be prevented.
@@ -438,9 +445,8 @@ class RdxSelectPopup {
438
445
  */
439
446
  this.positioner = inject(RDX_SELECT_POSITIONER_TOKEN, { optional: true });
440
447
  this.positioner?.placed.subscribe(() => {
441
- this.highlightSelectedItem();
442
- this.scrollSelectedIntoView();
443
448
  this.isPositioned.set(true);
449
+ this.highlightSelectedItemAfterPositioned();
444
450
  // In Popper mode the popup lives inside the positioner, which stays `visibility: hidden`
445
451
  // until it is placed — so the mount-time `mountAutoFocus` call no-ops on the hidden
446
452
  // listbox and keyboard navigation never starts. Focus it now that it is visible (skip if
@@ -450,6 +456,16 @@ class RdxSelectPopup {
450
456
  popup.focus({ preventScroll: true });
451
457
  }
452
458
  });
459
+ effect(() => {
460
+ if (!this.rootContext.open()) {
461
+ this.hasHighlightedOpen = false;
462
+ return;
463
+ }
464
+ if (!this.isPositioned() || this.hasHighlightedOpen) {
465
+ return;
466
+ }
467
+ this.highlightSelectedItemAfterPositioned();
468
+ });
453
469
  // Keep the highlighted item in view during keyboard navigation. The highlight model is pure
454
470
  // state (it never moves DOM focus or scrolls), so without this the highlight can move past the
455
471
  // visible viewport — behind the scroll buttons. Only keyboard moves scroll; hover highlights
@@ -550,8 +566,8 @@ class RdxSelectPopup {
550
566
  }
551
567
  /** Highlights the selected item (or the first enabled one) when the popup opens. */
552
568
  highlightSelectedItem() {
553
- const items = this.collection.items();
554
- const selected = items.find((item) => valueComparator(this.rootContext.value(), item.value(), this.rootContext.isItemEqualToValue()));
569
+ const items = this.items();
570
+ const selected = items.find((item) => valueComparator(this.rootContext.value(), item.metadata()?.value, this.rootContext.isItemEqualToValue()));
555
571
  if (selected) {
556
572
  this.highlight.set(selected);
557
573
  }
@@ -559,6 +575,14 @@ class RdxSelectPopup {
559
575
  this.highlight.first();
560
576
  }
561
577
  }
578
+ highlightSelectedItemAfterPositioned() {
579
+ if (this.items().length === 0) {
580
+ return;
581
+ }
582
+ this.highlightSelectedItem();
583
+ this.scrollSelectedIntoView();
584
+ this.hasHighlightedOpen = true;
585
+ }
562
586
  scrollSelectedIntoView() {
563
587
  this.selectedItem()?.scrollIntoView?.({ block: 'nearest' });
564
588
  }
@@ -580,8 +604,9 @@ class RdxSelectPopup {
580
604
  if (SELECTION_KEYS.includes(keyEvent.key)) {
581
605
  event.preventDefault();
582
606
  const item = this.highlight.highlightedItem();
583
- if (item && !item.disabled()) {
584
- this.rootContext.onValueChange(item.value(), 'item-press', event);
607
+ const metadata = item?.metadata();
608
+ if (item && metadata && !metadata.disabled) {
609
+ this.rootContext.onValueChange(metadata.value, 'item-press', event);
585
610
  if (!this.rootContext.multiple()) {
586
611
  this.rootContext.onOpenChange(false, 'item-press', event);
587
612
  }
@@ -624,7 +649,7 @@ class RdxSelectPopup {
624
649
  closeInteractionType: () => rootContext.closeInteractionType()
625
650
  };
626
651
  })
627
- ], hostDirectives: [{ directive: i1.RdxPopperContent }, { directive: i2.RdxFloatingFocusManager, inputs: ["returnFocus", "finalFocus"] }, { directive: i3.RdxFloatingNodeRegistration }, { directive: i4.RdxCollectionProvider }], ngImport: i0 }); }
652
+ ], hostDirectives: [{ directive: i1.RdxPopperContent }, { directive: i2.RdxFloatingFocusManager, inputs: ["returnFocus", "finalFocus"] }, { directive: i3.RdxFloatingNodeRegistration }, { directive: i4.RdxCompositeList }], ngImport: i0 }); }
628
653
  }
629
654
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxSelectPopup, decorators: [{
630
655
  type: Directive,
@@ -634,7 +659,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
634
659
  RdxPopperContent,
635
660
  { directive: RdxFloatingFocusManager, inputs: ['returnFocus: finalFocus'] },
636
661
  RdxFloatingNodeRegistration,
637
- RdxCollectionProvider
662
+ RdxCompositeList
638
663
  ],
639
664
  providers: [
640
665
  provideSelectPopupContext(context$1),
@@ -692,7 +717,7 @@ class RdxSelectItem {
692
717
  constructor() {
693
718
  this.rootContext = injectSelectRootContext();
694
719
  this.contentContext = injectSelectPopupContext();
695
- this.collectionItem = inject(RdxCollectionItem);
720
+ this.listItem = inject(RdxCompositeListItem, { self: true });
696
721
  this.currentElement = inject(ElementRef);
697
722
  this.value = input(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
698
723
  this.textValue = input('', ...(ngDevMode ? [{ debugName: "textValue" }] : /* istanbul ignore next */ []));
@@ -700,7 +725,7 @@ class RdxSelectItem {
700
725
  this.textValue$ = linkedSignal(this.textValue, ...(ngDevMode ? [{ debugName: "textValue$" }] : /* istanbul ignore next */ []));
701
726
  this.isSelected = computed(() => valueComparator(this.rootContext.value(), this.value(), this.rootContext.isItemEqualToValue()), ...(ngDevMode ? [{ debugName: "isSelected" }] : /* istanbul ignore next */ []));
702
727
  /** Highlighted via the highlight model (keyboard / hover), not DOM focus. */
703
- this.isHighlighted = computed(() => this.contentContext.isHighlighted(this.collectionItem), ...(ngDevMode ? [{ debugName: "isHighlighted" }] : /* istanbul ignore next */ []));
728
+ this.isHighlighted = computed(() => this.contentContext.isHighlighted(this.currentElement.nativeElement), ...(ngDevMode ? [{ debugName: "isHighlighted" }] : /* istanbul ignore next */ []));
704
729
  /** Item id, referenced by the popup's `aria-activedescendant`. */
705
730
  this.id = injectId('rdx-select-item-');
706
731
  this.textId = injectId('rdx-select-item-text-');
@@ -708,6 +733,13 @@ class RdxSelectItem {
708
733
  this.contentContext.itemRefCallback(this.currentElement.nativeElement, this.value(), this.disabled());
709
734
  });
710
735
  this.SELECT_SELECT = 'select.select';
736
+ effect(() => {
737
+ this.listItem.setMetadata({
738
+ value: this.value(),
739
+ disabled: this.disabled(),
740
+ textValue: this.textValue$()
741
+ });
742
+ });
711
743
  }
712
744
  onPointerUp(event) {
713
745
  if (event.defaultPrevented)
@@ -738,7 +770,7 @@ class RdxSelectItem {
738
770
  return;
739
771
  }
740
772
  if (!this.disabled()) {
741
- this.contentContext.highlightItem(this.collectionItem);
773
+ this.contentContext.highlightItem(this.currentElement.nativeElement);
742
774
  }
743
775
  }
744
776
  handleKeyDown(event) {
@@ -749,7 +781,7 @@ class RdxSelectItem {
749
781
  this.onPointerUp(keyEvent);
750
782
  }
751
783
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxSelectItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
752
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxSelectItem, isStandalone: true, selector: "[rdxSelectItem]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, textValue: { classPropertyName: "textValue", publicName: "textValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "option" }, listeners: { "pointerup": "onPointerUp($event)", "pointerleave": "onPointerLeave($event)", "pointermove": "onPointerMove($event)" }, properties: { "attr.id": "id", "attr.aria-selected": "isSelected()", "attr.aria-disabled": "disabled() ? \"true\" : undefined", "attr.data-state": "isSelected() ? \"checked\" : \"unchecked\"", "attr.data-selected": "isSelected() ? \"\" : undefined", "attr.data-highlighted": "isHighlighted() ? \"\" : undefined", "attr.data-disabled": "disabled() ? \"\" : undefined" } }, providers: [provideSelectItemContext(context)], exportAs: ["rdxSelectItem"], hostDirectives: [{ directive: i4.RdxCollectionItem, inputs: ["value", "value", "disabled", "disabled"] }], ngImport: i0 }); }
784
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxSelectItem, isStandalone: true, selector: "[rdxSelectItem]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, textValue: { classPropertyName: "textValue", publicName: "textValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "option" }, listeners: { "pointerup": "onPointerUp($event)", "pointerleave": "onPointerLeave($event)", "pointermove": "onPointerMove($event)" }, properties: { "attr.id": "id", "attr.aria-selected": "isSelected()", "attr.aria-disabled": "disabled() ? \"true\" : undefined", "attr.data-state": "isSelected() ? \"checked\" : \"unchecked\"", "attr.data-selected": "isSelected() ? \"\" : undefined", "attr.data-highlighted": "isHighlighted() ? \"\" : undefined", "attr.data-disabled": "disabled() ? \"\" : undefined" } }, providers: [provideSelectItemContext(context)], exportAs: ["rdxSelectItem"], hostDirectives: [{ directive: i4.RdxCompositeListItem }], ngImport: i0 }); }
753
785
  }
754
786
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxSelectItem, decorators: [{
755
787
  type: Directive,
@@ -757,12 +789,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
757
789
  selector: '[rdxSelectItem]',
758
790
  exportAs: 'rdxSelectItem',
759
791
  providers: [provideSelectItemContext(context)],
760
- hostDirectives: [
761
- {
762
- directive: RdxCollectionItem,
763
- inputs: ['value', 'disabled']
764
- }
765
- ],
792
+ hostDirectives: [RdxCompositeListItem],
766
793
  host: {
767
794
  role: 'option',
768
795
  '[attr.id]': 'id',
@@ -777,7 +804,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
777
804
  '(pointermove)': 'onPointerMove($event)'
778
805
  }
779
806
  }]
780
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], textValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "textValue", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
807
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], textValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "textValue", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
781
808
 
782
809
  class RdxSelectItemIndicator {
783
810
  constructor() {