@angular/aria 22.0.0-next.3 → 22.0.0-next.5

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 (91) hide show
  1. package/fesm2022/_accordion-chunk.mjs +5 -5
  2. package/fesm2022/_accordion-chunk.mjs.map +1 -1
  3. package/fesm2022/_click-event-manager-chunk.mjs +45 -0
  4. package/fesm2022/_click-event-manager-chunk.mjs.map +1 -0
  5. package/fesm2022/_combobox-chunk.mjs +8 -8
  6. package/fesm2022/_combobox-chunk.mjs.map +1 -1
  7. package/fesm2022/_combobox-listbox-chunk.mjs +17 -7
  8. package/fesm2022/_combobox-listbox-chunk.mjs.map +1 -1
  9. package/fesm2022/_combobox-tree-chunk.mjs +16 -6
  10. package/fesm2022/_combobox-tree-chunk.mjs.map +1 -1
  11. package/fesm2022/_deferred-content-chunk.mjs +6 -6
  12. package/fesm2022/_element-chunk.mjs +6 -0
  13. package/fesm2022/_element-chunk.mjs.map +1 -0
  14. package/fesm2022/_list-chunk.mjs.map +1 -1
  15. package/fesm2022/_list-navigation-chunk.mjs.map +1 -1
  16. package/fesm2022/_list-typeahead-chunk.mjs.map +1 -1
  17. package/fesm2022/_menu-chunk.mjs +33 -12
  18. package/fesm2022/_menu-chunk.mjs.map +1 -1
  19. package/fesm2022/_pointer-event-manager-chunk.mjs.map +1 -1
  20. package/fesm2022/_signal-like-chunk.mjs.map +1 -1
  21. package/fesm2022/_tabs-chunk.mjs +15 -5
  22. package/fesm2022/_tabs-chunk.mjs.map +1 -1
  23. package/fesm2022/_toolbar-widget-group-chunk.mjs +13 -1
  24. package/fesm2022/_toolbar-widget-group-chunk.mjs.map +1 -1
  25. package/fesm2022/_widget-chunk.mjs +17 -169
  26. package/fesm2022/_widget-chunk.mjs.map +1 -1
  27. package/fesm2022/accordion-testing.mjs +61 -0
  28. package/fesm2022/accordion-testing.mjs.map +1 -0
  29. package/fesm2022/accordion.mjs +217 -192
  30. package/fesm2022/accordion.mjs.map +1 -1
  31. package/fesm2022/aria.mjs +1 -1
  32. package/fesm2022/aria.mjs.map +1 -1
  33. package/fesm2022/combobox.mjs +15 -15
  34. package/fesm2022/combobox.mjs.map +1 -1
  35. package/fesm2022/grid.mjs +26 -97
  36. package/fesm2022/grid.mjs.map +1 -1
  37. package/fesm2022/listbox-testing.mjs +55 -0
  38. package/fesm2022/listbox-testing.mjs.map +1 -0
  39. package/fesm2022/listbox.mjs +13 -20
  40. package/fesm2022/listbox.mjs.map +1 -1
  41. package/fesm2022/menu-testing.mjs +75 -0
  42. package/fesm2022/menu-testing.mjs.map +1 -0
  43. package/fesm2022/menu.mjs +18 -22
  44. package/fesm2022/menu.mjs.map +1 -1
  45. package/fesm2022/private.mjs +2 -0
  46. package/fesm2022/private.mjs.map +1 -1
  47. package/fesm2022/tabs-testing.mjs +57 -0
  48. package/fesm2022/tabs-testing.mjs.map +1 -0
  49. package/fesm2022/tabs.mjs +22 -32
  50. package/fesm2022/tabs.mjs.map +1 -1
  51. package/fesm2022/toolbar-testing.mjs +56 -0
  52. package/fesm2022/toolbar-testing.mjs.map +1 -0
  53. package/fesm2022/toolbar.mjs +20 -26
  54. package/fesm2022/toolbar.mjs.map +1 -1
  55. package/fesm2022/tree-testing.mjs +88 -0
  56. package/fesm2022/tree-testing.mjs.map +1 -0
  57. package/fesm2022/tree.mjs +16 -26
  58. package/fesm2022/tree.mjs.map +1 -1
  59. package/package.json +26 -2
  60. package/resources/code-examples.db +0 -0
  61. package/types/_accordion-chunk.d.ts +10 -9
  62. package/types/_click-event-manager-chunk.d.ts +27 -0
  63. package/types/_combobox-chunk.d.ts +23 -23
  64. package/types/_element-chunk.d.ts +10 -0
  65. package/types/_expansion-chunk.d.ts +1 -1
  66. package/types/_grid-chunk.d.ts +13 -51
  67. package/types/_keyboard-event-manager-chunk.d.ts +2 -2
  68. package/types/_list-chunk.d.ts +19 -18
  69. package/types/_list-navigation-chunk.d.ts +6 -16
  70. package/types/_listbox-chunk.d.ts +37 -30
  71. package/types/_menu-chunk.d.ts +60 -56
  72. package/types/_pointer-event-manager-chunk.d.ts +1 -1
  73. package/types/_signal-like-chunk.d.ts +14 -0
  74. package/types/_tabs-chunk.d.ts +13 -6
  75. package/types/_toolbar-chunk.d.ts +6 -1
  76. package/types/_tree-chunk.d.ts +24 -17
  77. package/types/accordion-testing.d.ts +63 -0
  78. package/types/accordion.d.ts +69 -55
  79. package/types/combobox.d.ts +6 -5
  80. package/types/grid.d.ts +8 -14
  81. package/types/listbox-testing.d.ts +39 -0
  82. package/types/listbox.d.ts +21 -22
  83. package/types/menu-testing.d.ts +50 -0
  84. package/types/menu.d.ts +4 -3
  85. package/types/private.d.ts +48 -45
  86. package/types/tabs-testing.d.ts +57 -0
  87. package/types/tabs.d.ts +4 -9
  88. package/types/toolbar-testing.d.ts +72 -0
  89. package/types/toolbar.d.ts +3 -5
  90. package/types/tree-testing.d.ts +75 -0
  91. package/types/tree.d.ts +5 -9
@@ -1,7 +1,7 @@
1
1
  import { ListExpansion } from './_expansion-chunk.mjs';
2
2
  import { ListFocus, ListNavigation } from './_list-navigation-chunk.mjs';
3
3
  import { computed, KeyboardEventManager } from './_signal-like-chunk.mjs';
4
- import { PointerEventManager } from './_pointer-event-manager-chunk.mjs';
4
+ import { ClickEventManager } from './_click-event-manager-chunk.mjs';
5
5
 
6
6
  const focusMode = () => 'roving';
7
7
  class AccordionGroupPattern {
@@ -43,8 +43,8 @@ class AccordionGroupPattern {
43
43
  ignoreRepeat: false
44
44
  }).on('Home', () => this.navigationBehavior.first()).on('End', () => this.navigationBehavior.last()).on(' ', () => this.toggle()).on('Enter', () => this.toggle());
45
45
  });
46
- pointerdown = computed(() => {
47
- return new PointerEventManager().on(e => {
46
+ click = computed(() => {
47
+ return new ClickEventManager().on(e => {
48
48
  const item = this._findTriggerPattern(e.target);
49
49
  if (!item) return;
50
50
  this.navigationBehavior.goto(item);
@@ -54,8 +54,8 @@ class AccordionGroupPattern {
54
54
  onKeydown(event) {
55
55
  this.keydown().handle(event);
56
56
  }
57
- onPointerdown(event) {
58
- this.pointerdown().handle(event);
57
+ onClick(event) {
58
+ this.click().handle(event);
59
59
  }
60
60
  onFocus(event) {
61
61
  const item = this._findTriggerPattern(event.target);
@@ -1 +1 @@
1
- {"version":3,"file":"_accordion-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/accordion/accordion.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {KeyboardEventManager, PointerEventManager} from '../behaviors/event-manager';\nimport {ExpansionItem, ListExpansion, ListExpansionInputs} from '../behaviors/expansion/expansion';\nimport {ListFocus, ListFocusInputs, ListFocusItem} from '../behaviors/list-focus/list-focus';\nimport {\n ListNavigation,\n ListNavigationInputs,\n ListNavigationItem,\n} from '../behaviors/list-navigation/list-navigation';\nimport {computed, SignalLike, WritableSignalLike} from '../behaviors/signal-like/signal-like';\n\n/** Inputs of the AccordionGroupPattern. */\nexport interface AccordionGroupInputs extends Omit<\n ListNavigationInputs<AccordionTriggerPattern> &\n ListFocusInputs<AccordionTriggerPattern> &\n Omit<ListExpansionInputs, 'items'>,\n 'focusMode'\n> {}\n\nconst focusMode = () => 'roving' as const;\n\n/** A pattern controls the nested Accordions. */\nexport class AccordionGroupPattern {\n /** Controls navigation for the group. */\n readonly navigationBehavior: ListNavigation<AccordionTriggerPattern>;\n\n /** Controls focus for the group. */\n readonly focusBehavior: ListFocus<AccordionTriggerPattern>;\n\n /** Controls expansion for the group. */\n readonly expansionBehavior: ListExpansion;\n\n constructor(readonly inputs: AccordionGroupInputs) {\n this.focusBehavior = new ListFocus({\n ...inputs,\n focusMode,\n });\n this.navigationBehavior = new ListNavigation({\n ...inputs,\n focusMode,\n focusManager: this.focusBehavior,\n });\n this.expansionBehavior = new ListExpansion({\n ...inputs,\n });\n }\n\n /** The key used to navigate to the previous accordion trigger. */\n prevKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowUp';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n });\n\n /** The key used to navigate to the next accordion trigger. */\n nextKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowDown';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n });\n\n /** The keydown event manager for the accordion trigger. */\n keydown = computed(() => {\n return new KeyboardEventManager()\n .on(this.prevKey, () => this.navigationBehavior.prev(), {ignoreRepeat: false})\n .on(this.nextKey, () => this.navigationBehavior.next(), {ignoreRepeat: false})\n .on('Home', () => this.navigationBehavior.first())\n .on('End', () => this.navigationBehavior.last())\n .on(' ', () => this.toggle())\n .on('Enter', () => this.toggle());\n });\n\n /** The pointerdown event manager for the accordion trigger. */\n pointerdown = computed(() => {\n return new PointerEventManager().on(e => {\n const item = this._findTriggerPattern(e.target as Element);\n if (!item) return;\n\n this.navigationBehavior.goto(item);\n this.expansionBehavior.toggle(item);\n });\n });\n\n /** Handles keydown events on the trigger, delegating to the group if not disabled. */\n onKeydown(event: KeyboardEvent): void {\n this.keydown().handle(event);\n }\n\n /** Handles pointerdown events on the trigger, delegating to the group if not disabled. */\n onPointerdown(event: PointerEvent): void {\n this.pointerdown().handle(event);\n }\n\n /** Handles focus events on the trigger. This ensures the tabbing changes the active index. */\n onFocus(event: FocusEvent): void {\n const item = this._findTriggerPattern(event.target as Element);\n if (!item) return;\n if (!this.focusBehavior.isFocusable(item)) return;\n\n this.focusBehavior.focus(item);\n }\n\n /** Toggles the expansion state of the active accordion item. */\n toggle() {\n const activeItem = this.inputs.activeItem();\n if (activeItem === undefined) return;\n this.expansionBehavior.toggle(activeItem);\n }\n\n /** Expands all accordion panels if multi-expandable. */\n expandAll() {\n this.expansionBehavior.openAll();\n }\n\n /** Collapses all accordion panels. */\n collapseAll() {\n this.expansionBehavior.closeAll();\n }\n\n /** Finds the trigger pattern for a given element. */\n private _findTriggerPattern(\n element: Element | null | undefined,\n ): AccordionTriggerPattern | undefined {\n let target = element;\n\n while (target) {\n const pattern = this.inputs.items().find(t => t.element() === target);\n if (pattern) {\n return pattern;\n }\n\n target = target.parentElement?.closest('[ngAccordionTrigger]');\n }\n\n return undefined;\n }\n}\n\n/** Inputs for the AccordionTriggerPattern. */\nexport interface AccordionTriggerInputs\n extends Omit<ListNavigationItem & ListFocusItem, 'index'>, Omit<ExpansionItem, 'expandable'> {\n /** The parent accordion group that controls this trigger. */\n accordionGroup: SignalLike<AccordionGroupPattern>;\n\n /** The accordion panel id controlled by this trigger. */\n accordionPanelId: SignalLike<string>;\n}\n\n/** A pattern controls the expansion state of an accordion. */\nexport class AccordionTriggerPattern implements ListNavigationItem, ListFocusItem, ExpansionItem {\n /** A unique identifier for this trigger. */\n readonly id: SignalLike<string>; // set from inputs\n\n /** A reference to the trigger element. */\n readonly element: SignalLike<HTMLElement> = () => this.inputs.element()!;\n\n /** Whether this trigger has expandable panel. */\n readonly expandable: SignalLike<boolean> = () => true;\n\n /** Whether the corresponding panel is expanded. */\n readonly expanded: WritableSignalLike<boolean>; // set from inputs\n\n /** Whether the trigger is active. */\n readonly active = computed(() => this.inputs.accordionGroup().inputs.activeItem() === this);\n\n /** Id of the accordion panel controlled by the trigger. */\n readonly controls: SignalLike<string>; // set from inputs\n\n /** The tabindex of the trigger. */\n readonly tabIndex = computed(() =>\n this.inputs.accordionGroup().focusBehavior.isFocusable(this) ? 0 : -1,\n );\n\n /** Whether the trigger is disabled. Disabling an accordion group disables all the triggers. */\n readonly disabled = computed(\n () => this.inputs.disabled() || this.inputs.accordionGroup().inputs.disabled(),\n );\n\n /** Whether the trigger is hard disabled. */\n readonly hardDisabled = computed(\n () => this.disabled() && !this.inputs.accordionGroup().inputs.softDisabled(),\n );\n\n constructor(readonly inputs: AccordionTriggerInputs) {\n this.id = inputs.id;\n this.expanded = inputs.expanded;\n this.controls = inputs.accordionPanelId;\n }\n\n /** Opens the accordion panel. */\n open(): void {\n this.inputs.accordionGroup().expansionBehavior.open(this);\n }\n\n /** Closes the accordion panel. */\n close(): void {\n this.inputs.accordionGroup().expansionBehavior.close(this);\n }\n\n /** Toggles the accordion panel. */\n toggle(): void {\n this.inputs.accordionGroup().expansionBehavior.toggle(this);\n }\n}\n"],"names":["focusMode","AccordionGroupPattern","inputs","navigationBehavior","focusBehavior","expansionBehavior","constructor","ListFocus","ListNavigation","focusManager","ListExpansion","prevKey","computed","orientation","textDirection","nextKey","keydown","KeyboardEventManager","on","prev","ignoreRepeat","next","first","last","toggle","pointerdown","PointerEventManager","e","item","_findTriggerPattern","target","goto","onKeydown","event","handle","onPointerdown","onFocus","isFocusable","focus","activeItem","undefined","expandAll","openAll","collapseAll","closeAll","element","pattern","items","find","t","parentElement","closest","AccordionTriggerPattern","id","expandable","expanded","active","accordionGroup","controls","tabIndex","disabled","hardDisabled","softDisabled","accordionPanelId","open","close"],"mappings":"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"}
1
+ {"version":3,"file":"_accordion-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/accordion/accordion.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {KeyboardEventManager, ClickEventManager} from '../behaviors/event-manager';\nimport {ExpansionItem, ListExpansion, ListExpansionInputs} from '../behaviors/expansion/expansion';\nimport {ListFocus, ListFocusInputs, ListFocusItem} from '../behaviors/list-focus/list-focus';\nimport {\n ListNavigation,\n ListNavigationInputs,\n ListNavigationItem,\n} from '../behaviors/list-navigation/list-navigation';\nimport {computed, SignalLike, WritableSignalLike} from '../behaviors/signal-like/signal-like';\n\n/** Inputs of the AccordionGroupPattern. */\nexport interface AccordionGroupInputs extends Omit<\n ListNavigationInputs<AccordionTriggerPattern> &\n ListFocusInputs<AccordionTriggerPattern> &\n Omit<ListExpansionInputs, 'items'>,\n 'focusMode'\n> {}\n\nconst focusMode = () => 'roving' as const;\n\n/** A pattern controls the nested Accordions. */\nexport class AccordionGroupPattern {\n /** Controls navigation for the group. */\n readonly navigationBehavior: ListNavigation<AccordionTriggerPattern>;\n\n /** Controls focus for the group. */\n readonly focusBehavior: ListFocus<AccordionTriggerPattern>;\n\n /** Controls expansion for the group. */\n readonly expansionBehavior: ListExpansion;\n\n constructor(readonly inputs: AccordionGroupInputs) {\n this.focusBehavior = new ListFocus({\n ...inputs,\n focusMode,\n });\n this.navigationBehavior = new ListNavigation({\n ...inputs,\n focusMode,\n focusManager: this.focusBehavior,\n });\n this.expansionBehavior = new ListExpansion({\n ...inputs,\n });\n }\n\n /** The key used to navigate to the previous accordion trigger. */\n readonly prevKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowUp';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft';\n });\n\n /** The key used to navigate to the next accordion trigger. */\n readonly nextKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowDown';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n });\n\n /** The keydown event manager for the accordion trigger. */\n readonly keydown = computed(() => {\n return new KeyboardEventManager()\n .on(this.prevKey, () => this.navigationBehavior.prev(), {ignoreRepeat: false})\n .on(this.nextKey, () => this.navigationBehavior.next(), {ignoreRepeat: false})\n .on('Home', () => this.navigationBehavior.first())\n .on('End', () => this.navigationBehavior.last())\n .on(' ', () => this.toggle())\n .on('Enter', () => this.toggle());\n });\n\n /** The click event manager for the accordion trigger. */\n readonly click = computed(() => {\n return new ClickEventManager<PointerEvent>().on((e: PointerEvent) => {\n const item = this._findTriggerPattern(e.target as Element);\n if (!item) return;\n\n this.navigationBehavior.goto(item);\n this.expansionBehavior.toggle(item);\n });\n });\n\n /** Handles keydown events on the trigger, delegating to the group if not disabled. */\n onKeydown(event: KeyboardEvent): void {\n this.keydown().handle(event);\n }\n\n /** Handles click events on the trigger, delegating to the group if not disabled. */\n onClick(event: PointerEvent): void {\n this.click().handle(event);\n }\n\n /** Handles focus events on the trigger. This ensures the tabbing changes the active index. */\n onFocus(event: FocusEvent): void {\n const item = this._findTriggerPattern(event.target as Element);\n if (!item) return;\n if (!this.focusBehavior.isFocusable(item)) return;\n\n this.focusBehavior.focus(item);\n }\n\n /** Toggles the expansion state of the active accordion item. */\n toggle() {\n const activeItem = this.inputs.activeItem();\n if (activeItem === undefined) return;\n this.expansionBehavior.toggle(activeItem);\n }\n\n /** Expands all accordion panels if multi-expandable. */\n expandAll() {\n this.expansionBehavior.openAll();\n }\n\n /** Collapses all accordion panels. */\n collapseAll() {\n this.expansionBehavior.closeAll();\n }\n\n /** Finds the trigger pattern for a given element. */\n private _findTriggerPattern(\n element: Element | null | undefined,\n ): AccordionTriggerPattern | undefined {\n let target = element;\n\n while (target) {\n const pattern = this.inputs.items().find(t => t.element() === target);\n if (pattern) {\n return pattern;\n }\n\n target = target.parentElement?.closest('[ngAccordionTrigger]');\n }\n\n return undefined;\n }\n}\n\n/** Inputs for the AccordionTriggerPattern. */\nexport interface AccordionTriggerInputs\n extends Omit<ListNavigationItem & ListFocusItem, 'index'>, Omit<ExpansionItem, 'expandable'> {\n /** The parent accordion group that controls this trigger. */\n accordionGroup: SignalLike<AccordionGroupPattern>;\n\n /** The accordion panel id controlled by this trigger. */\n accordionPanelId: SignalLike<string>;\n}\n\n/** A pattern controls the expansion state of an accordion. */\nexport class AccordionTriggerPattern implements ListNavigationItem, ListFocusItem, ExpansionItem {\n /** A unique identifier for this trigger. */\n readonly id: SignalLike<string>; // set from inputs\n\n /** A reference to the trigger element. */\n readonly element: SignalLike<HTMLElement> = () => this.inputs.element()!;\n\n /** Whether this trigger has expandable panel. */\n readonly expandable: SignalLike<boolean> = () => true;\n\n /** Whether the corresponding panel is expanded. */\n readonly expanded: WritableSignalLike<boolean>; // set from inputs\n\n /** Whether the trigger is active. */\n readonly active = computed(() => this.inputs.accordionGroup().inputs.activeItem() === this);\n\n /** Id of the accordion panel controlled by the trigger. */\n readonly controls: SignalLike<string>; // set from inputs\n\n /** The tabindex of the trigger. */\n readonly tabIndex = computed(() =>\n this.inputs.accordionGroup().focusBehavior.isFocusable(this) ? 0 : -1,\n );\n\n /** Whether the trigger is disabled. Disabling an accordion group disables all the triggers. */\n readonly disabled = computed(\n () => this.inputs.disabled() || this.inputs.accordionGroup().inputs.disabled(),\n );\n\n /** Whether the trigger is hard disabled. */\n readonly hardDisabled = computed(\n () => this.disabled() && !this.inputs.accordionGroup().inputs.softDisabled(),\n );\n\n constructor(readonly inputs: AccordionTriggerInputs) {\n this.id = inputs.id;\n this.expanded = inputs.expanded;\n this.controls = inputs.accordionPanelId;\n }\n\n /** Opens the accordion panel. */\n open(): void {\n this.inputs.accordionGroup().expansionBehavior.open(this);\n }\n\n /** Closes the accordion panel. */\n close(): void {\n this.inputs.accordionGroup().expansionBehavior.close(this);\n }\n\n /** Toggles the accordion panel. */\n toggle(): void {\n this.inputs.accordionGroup().expansionBehavior.toggle(this);\n }\n}\n"],"names":["focusMode","AccordionGroupPattern","inputs","navigationBehavior","focusBehavior","expansionBehavior","constructor","ListFocus","ListNavigation","focusManager","ListExpansion","prevKey","computed","orientation","textDirection","nextKey","keydown","KeyboardEventManager","on","prev","ignoreRepeat","next","first","last","toggle","click","ClickEventManager","e","item","_findTriggerPattern","target","goto","onKeydown","event","handle","onClick","onFocus","isFocusable","focus","activeItem","undefined","expandAll","openAll","collapseAll","closeAll","element","pattern","items","find","t","parentElement","closest","AccordionTriggerPattern","id","expandable","expanded","active","accordionGroup","controls","tabIndex","disabled","hardDisabled","softDisabled","accordionPanelId","open","close"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { EventManager, Modifier, hasModifiers } from './_signal-like-chunk.mjs';
2
+
3
+ function isFakeClick(event) {
4
+ return event.detail === 0 || !event.pointerType;
5
+ }
6
+ function isProgrammaticClick(event) {
7
+ return !event.isTrusted;
8
+ }
9
+ class ClickEventManager extends EventManager {
10
+ options = {
11
+ preventDefault: false,
12
+ stopPropagation: false
13
+ };
14
+ on(...args) {
15
+ const {
16
+ handler,
17
+ modifiers
18
+ } = this._normalizeInputs(...args);
19
+ this.configs.push({
20
+ handler,
21
+ matcher: event => this._isMatch(event, modifiers),
22
+ ...this.options
23
+ });
24
+ return this;
25
+ }
26
+ _normalizeInputs(...args) {
27
+ if (args.length === 2) {
28
+ return {
29
+ modifiers: args[0],
30
+ handler: args[1]
31
+ };
32
+ }
33
+ return {
34
+ modifiers: Modifier.None,
35
+ handler: args[0]
36
+ };
37
+ }
38
+ _isMatch(event, modifiers) {
39
+ const isAllowed = isProgrammaticClick(event) || !isFakeClick(event);
40
+ return isAllowed && hasModifiers(event, modifiers);
41
+ }
42
+ }
43
+
44
+ export { ClickEventManager };
45
+ //# sourceMappingURL=_click-event-manager-chunk.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_click-event-manager-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/behaviors/event-manager/click-event-manager.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n EventHandler,\n EventHandlerOptions,\n EventManager,\n hasModifiers,\n ModifierInputs,\n Modifier,\n} from './event-manager';\n\n/**\n * Gets whether an event could be a simulated click event.\n *\n * Screen readers and keyboard activation (Enter/Space) often dispatch fake click\n * events. We distinguish them by checking if `event.detail` is zero or if\n * `event.pointerType` is missing.\n */\nexport function isFakeClick(event: PointerEvent): boolean {\n return event.detail === 0 || !event.pointerType;\n}\n\n/**\n * Gets whether an event is a programmatic click (e.g. triggered by .click() or .dispatchEvent()).\n * Programmatic events are untrusted.\n */\nexport function isProgrammaticClick(event: Event): boolean {\n return !event.isTrusted;\n}\n\n/**\n * An event manager that is specialized for handling click events.\n *\n * This manager should ONLY be used to handle click events. It explicitly\n * filters out simulated click events generated by browsers when Enter or Space\n * keys are pressed, to avoid concurrent logic or overwriting selection state\n * when handling keyboard activation explicitly via KeyboardEventManager.\n */\nexport class ClickEventManager<T extends PointerEvent> extends EventManager<T> {\n readonly options: EventHandlerOptions = {\n preventDefault: false,\n stopPropagation: false,\n };\n\n /**\n * Configures this event manager to handle events with a specific modifier combination.\n */\n on(modifiers: ModifierInputs, handler: EventHandler<T>): this;\n\n /**\n * Configures this event manager to handle events with no modifiers.\n *\n * @param handler The handler function\n */\n on(handler: EventHandler<T>): this;\n\n on(...args: unknown[]) {\n const {handler, modifiers} = this._normalizeInputs(...args);\n\n this.configs.push({\n handler,\n matcher: event => this._isMatch(event, modifiers),\n ...this.options,\n });\n return this;\n }\n\n private _normalizeInputs(...args: unknown[]) {\n if (args.length === 2) {\n return {\n modifiers: args[0] as ModifierInputs,\n handler: args[1] as EventHandler<T>,\n };\n }\n\n return {\n modifiers: Modifier.None,\n handler: args[0] as EventHandler<T>,\n };\n }\n\n _isMatch(event: T, modifiers: ModifierInputs) {\n const isAllowed = isProgrammaticClick(event) || !isFakeClick(event);\n return isAllowed && hasModifiers(event, modifiers);\n }\n}\n"],"names":["isFakeClick","event","detail","pointerType","isProgrammaticClick","isTrusted","ClickEventManager","EventManager","options","preventDefault","stopPropagation","on","args","handler","modifiers","_normalizeInputs","configs","push","matcher","_isMatch","length","Modifier","None","isAllowed","hasModifiers"],"mappings":";;AAwBM,SAAUA,WAAWA,CAACC,KAAmB,EAAA;EAC7C,OAAOA,KAAK,CAACC,MAAM,KAAK,CAAC,IAAI,CAACD,KAAK,CAACE,WAAW;AACjD;AAMM,SAAUC,mBAAmBA,CAACH,KAAY,EAAA;EAC9C,OAAO,CAACA,KAAK,CAACI,SAAS;AACzB;AAUM,MAAOC,iBAA0C,SAAQC,YAAe,CAAA;AACnEC,EAAAA,OAAO,GAAwB;AACtCC,IAAAA,cAAc,EAAE,KAAK;AACrBC,IAAAA,eAAe,EAAE;GAClB;EAcDC,EAAEA,CAAC,GAAGC,IAAe,EAAA;IACnB,MAAM;MAACC,OAAO;AAAEC,MAAAA;AAAS,KAAC,GAAG,IAAI,CAACC,gBAAgB,CAAC,GAAGH,IAAI,CAAC;AAE3D,IAAA,IAAI,CAACI,OAAO,CAACC,IAAI,CAAC;MAChBJ,OAAO;MACPK,OAAO,EAAEjB,KAAK,IAAI,IAAI,CAACkB,QAAQ,CAAClB,KAAK,EAAEa,SAAS,CAAC;AACjD,MAAA,GAAG,IAAI,CAACN;AACT,KAAA,CAAC;AACF,IAAA,OAAO,IAAI;AACb,EAAA;EAEQO,gBAAgBA,CAAC,GAAGH,IAAe,EAAA;AACzC,IAAA,IAAIA,IAAI,CAACQ,MAAM,KAAK,CAAC,EAAE;MACrB,OAAO;AACLN,QAAAA,SAAS,EAAEF,IAAI,CAAC,CAAC,CAAmB;QACpCC,OAAO,EAAED,IAAI,CAAC,CAAC;OAChB;AACH,IAAA;IAEA,OAAO;MACLE,SAAS,EAAEO,QAAQ,CAACC,IAAI;MACxBT,OAAO,EAAED,IAAI,CAAC,CAAC;KAChB;AACH,EAAA;AAEAO,EAAAA,QAAQA,CAAClB,KAAQ,EAAEa,SAAyB,EAAA;IAC1C,MAAMS,SAAS,GAAGnB,mBAAmB,CAACH,KAAK,CAAC,IAAI,CAACD,WAAW,CAACC,KAAK,CAAC;AACnE,IAAA,OAAOsB,SAAS,IAAIC,YAAY,CAACvB,KAAK,EAAEa,SAAS,CAAC;AACpD,EAAA;AACD;;;;"}
@@ -13,9 +13,9 @@ class ComboboxPattern {
13
13
  return popupControls?.activeId() ?? null;
14
14
  });
15
15
  highlightedItem = signal(undefined);
16
- isDeleting = false;
16
+ _isDeleting = false;
17
17
  isFocused = signal(false);
18
- hasBeenFocused = signal(false);
18
+ hasBeenInteracted = signal(false);
19
19
  expandKey = computed(() => this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight');
20
20
  collapseKey = computed(() => this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft');
21
21
  popupId = computed(() => this.inputs.popupControls()?.id() || null);
@@ -165,18 +165,18 @@ class ComboboxPattern {
165
165
  }
166
166
  this.open();
167
167
  this.inputs.inputValue?.set(inputEl.value);
168
- this.isDeleting = event instanceof InputEvent && !!event.inputType.match(/^delete/);
169
- if (this.inputs.filterMode() === 'highlight' && !this.isDeleting) {
168
+ this._isDeleting = event instanceof InputEvent && !!event.inputType.match(/^delete/);
169
+ if (this.inputs.filterMode() === 'highlight' && !this._isDeleting) {
170
170
  this.highlight();
171
171
  }
172
172
  }
173
173
  onFocusIn() {
174
- if (this.inputs.alwaysExpanded() && !this.hasBeenFocused()) {
174
+ if (this.inputs.alwaysExpanded() && !this.hasBeenInteracted()) {
175
175
  const firstSelectedItem = this.listControls()?.getSelectedItems()[0];
176
176
  firstSelectedItem ? this.listControls()?.focus(firstSelectedItem) : this.first();
177
177
  }
178
178
  this.isFocused.set(true);
179
- this.hasBeenFocused.set(true);
179
+ this.hasBeenInteracted.set(true);
180
180
  }
181
181
  onFocusOut(event) {
182
182
  if (this.inputs.disabled()) {
@@ -222,7 +222,7 @@ class ComboboxPattern {
222
222
  if (popupControls instanceof ComboboxDialogPattern) {
223
223
  return;
224
224
  }
225
- const isInitialRender = !this.inputs.inputValue?.().length && !this.isDeleting;
225
+ const isInitialRender = !this.inputs.inputValue?.().length && !this._isDeleting;
226
226
  if (isInitialRender) {
227
227
  return;
228
228
  }
@@ -245,7 +245,7 @@ class ComboboxPattern {
245
245
  item
246
246
  });
247
247
  }
248
- if (this.inputs.filterMode() === 'highlight' && !this.isDeleting) {
248
+ if (this.inputs.filterMode() === 'highlight' && !this._isDeleting) {
249
249
  this.highlight();
250
250
  }
251
251
  }
@@ -1 +1 @@
1
- {"version":3,"file":"_combobox-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/combobox/combobox.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {KeyboardEventManager, PointerEventManager} from '../behaviors/event-manager';\nimport {\n computed,\n signal,\n SignalLike,\n WritableSignalLike,\n} from '../behaviors/signal-like/signal-like';\nimport {ListItem} from '../behaviors/list/list';\n\n/** Represents the required inputs for a combobox. */\nexport interface ComboboxInputs<T extends ListItem<V>, V> {\n /** The controls for the popup associated with the combobox. */\n popupControls: SignalLike<\n ComboboxListboxControls<T, V> | ComboboxTreeControls<T, V> | ComboboxDialogPattern | undefined\n >;\n\n /** The HTML input element that serves as the combobox input. */\n inputEl: SignalLike<HTMLInputElement | undefined>;\n\n /** The HTML element that serves as the combobox container. */\n containerEl: SignalLike<HTMLElement | undefined>;\n\n /** The filtering mode for the combobox. */\n filterMode: SignalLike<'manual' | 'auto-select' | 'highlight'>;\n\n /** The current value of the combobox. */\n inputValue?: WritableSignalLike<string>;\n\n /** The value of the first matching item in the popup. */\n firstMatch: SignalLike<V | undefined>;\n\n /** Whether the combobox is disabled. */\n disabled: SignalLike<boolean>;\n\n /** Whether the combobox is read-only. */\n readonly: SignalLike<boolean>;\n\n /** Whether the combobox is in a right-to-left context. */\n textDirection: SignalLike<'rtl' | 'ltr'>;\n\n /** Whether the combobox is always expanded. */\n alwaysExpanded: SignalLike<boolean>;\n}\n\n/** An interface that allows combobox popups to expose the necessary controls for the combobox. */\nexport interface ComboboxListboxControls<T extends ListItem<V>, V> {\n /** A unique identifier for the popup. */\n id: () => string;\n\n /** The ARIA role for the popup. */\n role: SignalLike<'listbox' | 'tree' | 'grid'>;\n\n // TODO(wagnermaciel): Add validation that ensures only readonly comboboxes can have multi-select popups.\n\n /** Whether multiple items in the popup can be selected at once. */\n multi: SignalLike<boolean>;\n\n /** The ID of the active item in the popup. */\n activeId: SignalLike<string | undefined>;\n\n /** The list of items in the popup. */\n items: SignalLike<T[]>;\n\n /** Navigates to the given item in the popup. */\n focus: (item: T, opts?: {focusElement?: boolean}) => void;\n\n /** Navigates to the next item in the popup. */\n next: () => void;\n\n /** Navigates to the previous item in the popup. */\n prev: () => void;\n\n /** Navigates to the first item in the popup. */\n first: () => void;\n\n /** Navigates to the last item in the popup. */\n last: () => void;\n\n /** Selects the current item in the popup. */\n select: (item?: T) => void;\n\n /** Toggles the selection state of the given item in the popup. */\n toggle: (item?: T) => void;\n\n /** Clears the selection state of the popup. */\n clearSelection: () => void;\n\n /** Removes focus from any item in the popup. */\n unfocus: () => void;\n\n /** Returns the item corresponding to the given event. */\n getItem: (e: PointerEvent) => T | undefined;\n\n /** Returns the currently active (focused) item in the popup. */\n getActiveItem: () => T | undefined;\n\n /** Returns the currently selected items in the popup. */\n getSelectedItems: () => T[];\n\n /** Sets the value of the combobox based on the selected item. */\n setValue: (value: V | undefined) => void; // For re-setting the value if the popup was destroyed.\n}\n\nexport interface ComboboxTreeControls<T extends ListItem<V>, V> extends ComboboxListboxControls<\n T,\n V\n> {\n /** Whether the currently active item in the popup is collapsible. */\n isItemCollapsible: () => boolean;\n\n /** Expands the currently active item in the popup. */\n expandItem: () => void;\n\n /** Collapses the currently active item in the popup. */\n collapseItem: () => void;\n\n /** Checks if the currently active item in the popup is expandable. */\n isItemExpandable: (item?: T) => boolean;\n\n /** Expands all nodes in the tree. */\n expandAll: () => void;\n\n /** Collapses all nodes in the tree. */\n collapseAll: () => void;\n\n /** Toggles the expansion state of the currently active item in the popup. */\n toggleExpansion: (item?: T) => void;\n\n /** Whether the current active item is selectable. */\n isItemSelectable: (item?: T) => boolean;\n}\n\n/** Controls the state of a combobox. */\nexport class ComboboxPattern<T extends ListItem<V>, V> {\n /** Whether the combobox is expanded. */\n expanded = signal(false);\n\n /** Whether the combobox is disabled. */\n disabled = () => this.inputs.disabled();\n\n /** The ID of the active item in the combobox. */\n activeDescendant = computed(() => {\n const popupControls = this.inputs.popupControls();\n if (popupControls instanceof ComboboxDialogPattern) {\n return null;\n }\n\n return popupControls?.activeId() ?? null;\n });\n\n /** The currently highlighted item in the combobox. */\n highlightedItem = signal<T | undefined>(undefined);\n\n /** Whether the most recent input event was a deletion. */\n isDeleting = false;\n\n /** Whether the combobox is focused. */\n isFocused = signal(false);\n\n /** Whether the combobox has ever been focused. */\n hasBeenFocused = signal(false);\n\n /** The key used to navigate to the previous item in the list. */\n expandKey = computed(() => (this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight'));\n\n /** The key used to navigate to the next item in the list. */\n collapseKey = computed(() =>\n this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft',\n );\n\n /** The ID of the popup associated with the combobox. */\n popupId = computed(() => this.inputs.popupControls()?.id() || null);\n\n /** The autocomplete behavior of the combobox. */\n autocomplete = computed(() => (this.inputs.filterMode() === 'highlight' ? 'both' : 'list'));\n\n /** The ARIA role of the popup associated with the combobox. */\n hasPopup = computed(() => this.inputs.popupControls()?.role() || null);\n\n /** Whether the combobox is read-only. */\n readonly = computed(() => this.inputs.readonly() || this.inputs.disabled() || null);\n\n /** Returns the listbox controls for the combobox. */\n listControls = () => {\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return null;\n }\n\n return popupControls;\n };\n\n /** Returns the tree controls for the combobox. */\n treeControls = () => {\n const popupControls = this.inputs.popupControls();\n\n if (popupControls?.role() === 'tree') {\n return popupControls as ComboboxTreeControls<T, V>;\n }\n\n return null;\n };\n\n /** The keydown event manager for the combobox. */\n keydown = computed(() => {\n const manager = new KeyboardEventManager();\n const popupControls = this.inputs.popupControls();\n\n if (!popupControls) {\n return manager;\n }\n\n if (popupControls instanceof ComboboxDialogPattern) {\n if (!this.expanded()) {\n manager.on('ArrowUp', () => this.open()).on('ArrowDown', () => this.open());\n\n if (this.readonly()) {\n manager.on('Enter', () => this.open()).on(' ', () => this.open());\n }\n }\n\n return manager;\n }\n\n if (!this.inputs.alwaysExpanded()) {\n manager.on('Escape', () => this.close({reset: !this.readonly()}));\n }\n\n if (!this.expanded()) {\n manager\n .on('ArrowDown', () => this.open({first: true}))\n .on('ArrowUp', () => this.open({last: true}));\n\n if (this.readonly()) {\n manager\n .on('Enter', () => this.open({selected: true}))\n .on(' ', () => this.open({selected: true}));\n }\n\n return manager;\n }\n\n manager\n .on('ArrowDown', () => this.next(), {ignoreRepeat: false})\n .on('ArrowUp', () => this.prev(), {ignoreRepeat: false})\n .on('Home', () => this.first())\n .on('End', () => this.last());\n\n if (this.readonly()) {\n manager.on(' ', () => this.select({commit: true, close: !popupControls.multi()}));\n }\n\n if (popupControls.role() === 'listbox') {\n manager.on('Enter', () => {\n this.select({commit: true, close: !popupControls.multi()});\n });\n }\n\n const treeControls = this.treeControls();\n\n if (treeControls?.isItemSelectable()) {\n manager.on('Enter', () => this.select({commit: true, close: true}));\n }\n\n if (treeControls?.isItemExpandable()) {\n manager\n .on(this.expandKey(), () => this.expandItem())\n .on(this.collapseKey(), () => this.collapseItem());\n\n if (!treeControls.isItemSelectable()) {\n manager.on('Enter', () => this.expandItem());\n }\n }\n\n if (treeControls?.isItemCollapsible()) {\n manager.on(this.collapseKey(), () => this.collapseItem());\n }\n\n return manager;\n });\n\n /** The click event manager for the combobox. */\n click = computed(() =>\n new PointerEventManager().on(e => {\n if (e.target === this.inputs.inputEl()) {\n if (this.readonly()) {\n this.expanded() ? this.close() : this.open({selected: true});\n }\n }\n\n const controls = this.inputs.popupControls();\n\n if (controls instanceof ComboboxDialogPattern) {\n return;\n }\n\n const item = controls?.getItem(e);\n\n if (item) {\n if (controls?.role() === 'tree') {\n const treeControls = controls as ComboboxTreeControls<T, V>;\n\n if (treeControls.isItemExpandable(item) && !treeControls.isItemSelectable(item)) {\n treeControls.toggleExpansion(item);\n this.inputs.inputEl()?.focus();\n return;\n }\n }\n\n this.select({item, commit: true, close: !controls?.multi()});\n this.inputs.inputEl()?.focus(); // Return focus to the input after selecting.\n }\n }),\n );\n\n constructor(readonly inputs: ComboboxInputs<T, V>) {}\n\n /** Handles keydown events for the combobox. */\n onKeydown(event: KeyboardEvent) {\n if (!this.inputs.disabled()) {\n this.keydown().handle(event);\n }\n }\n\n /** Handles click events for the combobox. */\n onClick(event: MouseEvent) {\n if (!this.inputs.disabled()) {\n this.click().handle(event as PointerEvent);\n }\n }\n\n /** Handles input events for the combobox. */\n onInput(event: Event) {\n if (this.inputs.disabled() || this.inputs.readonly()) {\n return;\n }\n\n const inputEl = this.inputs.inputEl();\n\n if (!inputEl) {\n return;\n }\n\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return;\n }\n\n this.open();\n this.inputs.inputValue?.set(inputEl.value);\n this.isDeleting = event instanceof InputEvent && !!event.inputType.match(/^delete/);\n\n if (this.inputs.filterMode() === 'highlight' && !this.isDeleting) {\n this.highlight();\n }\n }\n\n /** Handles focus in events for the combobox. */\n onFocusIn() {\n if (this.inputs.alwaysExpanded() && !this.hasBeenFocused()) {\n const firstSelectedItem = this.listControls()?.getSelectedItems()[0];\n firstSelectedItem ? this.listControls()?.focus(firstSelectedItem) : this.first();\n }\n\n this.isFocused.set(true);\n this.hasBeenFocused.set(true);\n }\n\n /** Handles focus out events for the combobox. */\n onFocusOut(event: FocusEvent) {\n if (this.inputs.disabled()) {\n return;\n }\n\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return;\n }\n\n if (\n !(event.relatedTarget instanceof HTMLElement) ||\n !this.inputs.containerEl()?.contains(event.relatedTarget)\n ) {\n this.isFocused.set(false);\n\n if (!this.expanded()) {\n return;\n }\n\n if (this.readonly()) {\n this.close();\n return;\n }\n\n if (this.inputs.filterMode() !== 'manual') {\n this.commit();\n } else {\n const item = popupControls\n ?.items()\n .find(i => i.searchTerm() === this.inputs.inputEl()?.value);\n\n if (item) {\n this.select({item});\n }\n }\n\n this.close();\n }\n }\n\n /** The first matching item in the combobox. */\n firstMatch = computed(() => {\n // TODO(wagnermaciel): Consider whether we should not provide this default behavior for the\n // listbox. Instead, we may want to allow users to have no match so that typing does not focus\n // any option.\n if (this.listControls()?.role() === 'listbox') {\n return this.listControls()?.items()[0];\n }\n\n return this.listControls()\n ?.items()\n .find(i => i.value() === this.inputs.firstMatch());\n });\n\n /** Handles filtering logic for the combobox. */\n onFilter() {\n if (this.readonly()) {\n return;\n }\n\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return;\n }\n\n // TODO(wagnermaciel)\n // When the user first interacts with the combobox, the popup will lazily render for the first\n // time. This is a simple way to detect this and avoid auto-focus & selection logic, but this\n // should probably be moved to the component layer instead.\n const isInitialRender = !this.inputs.inputValue?.().length && !this.isDeleting;\n\n if (isInitialRender) {\n return;\n }\n\n // Avoid refocusing the input if a filter event occurs after focus has left the combobox.\n if (!this.isFocused()) {\n return;\n }\n\n if (this.inputs.popupControls()?.role() === 'tree') {\n const treeControls = this.inputs.popupControls() as ComboboxTreeControls<T, V>;\n this.inputs.inputValue?.().length ? treeControls.expandAll() : treeControls.collapseAll();\n }\n\n const item = this.firstMatch();\n\n if (!item) {\n popupControls?.clearSelection();\n popupControls?.unfocus();\n return;\n }\n\n popupControls?.focus(item);\n\n if (this.inputs.filterMode() !== 'manual') {\n this.select({item});\n }\n\n if (this.inputs.filterMode() === 'highlight' && !this.isDeleting) {\n this.highlight();\n }\n }\n\n /** Highlights the currently selected item in the combobox. */\n highlight() {\n const inputEl = this.inputs.inputEl();\n const selectedItems = this.listControls()?.getSelectedItems();\n const item = selectedItems?.[0];\n\n if (!inputEl || !item) {\n return;\n }\n\n const isHighlightable = item\n .searchTerm()\n .toLowerCase()\n .startsWith(this.inputs.inputValue!().toLowerCase());\n\n if (isHighlightable) {\n inputEl.value =\n this.inputs.inputValue!() + item.searchTerm().slice(this.inputs.inputValue!().length);\n inputEl.setSelectionRange(this.inputs.inputValue!().length, item.searchTerm().length);\n this.highlightedItem.set(item);\n }\n }\n\n /** Closes the combobox. */\n close(opts?: {reset: boolean}) {\n const popupControls = this.inputs.popupControls();\n\n if (this.inputs.alwaysExpanded()) {\n return;\n }\n\n if (popupControls instanceof ComboboxDialogPattern) {\n this.expanded.set(false);\n return;\n }\n\n if (this.readonly()) {\n this.expanded.set(false);\n popupControls?.unfocus();\n return;\n }\n\n if (!opts?.reset) {\n if (this.inputs.filterMode() === 'manual') {\n if (\n !this.listControls()\n ?.items()\n .some(i => i.searchTerm() === this.inputs.inputEl()?.value)\n ) {\n this.listControls()?.clearSelection();\n }\n }\n\n this.expanded.set(false);\n popupControls?.unfocus();\n return;\n }\n\n if (!this.expanded()) {\n this.inputs.inputValue?.set('');\n popupControls?.clearSelection();\n\n const inputEl = this.inputs.inputEl();\n\n if (inputEl) {\n inputEl.value = '';\n }\n } else if (this.expanded()) {\n this.expanded.set(false);\n const selectedItem = popupControls?.getSelectedItems()?.[0];\n\n if (selectedItem?.searchTerm() !== this.inputs.inputValue!()) {\n popupControls?.clearSelection();\n }\n\n return;\n }\n\n this.close();\n\n if (!this.readonly()) {\n popupControls?.clearSelection();\n }\n }\n\n /** Opens the combobox. */\n open(nav?: {first?: boolean; last?: boolean; selected?: boolean}) {\n this.expanded.set(true);\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return;\n }\n\n const inputEl = this.inputs.inputEl();\n\n if (inputEl && this.inputs.filterMode() === 'highlight') {\n const isHighlighting = inputEl.selectionStart !== inputEl.value.length;\n this.inputs.inputValue?.set(inputEl.value.slice(0, inputEl.selectionStart || 0));\n if (!isHighlighting) {\n this.highlightedItem.set(undefined);\n }\n }\n\n if (nav?.first) {\n this.first();\n }\n if (nav?.last) {\n this.last();\n }\n if (nav?.selected) {\n const selectedItem = popupControls\n ?.items()\n .find(i => popupControls?.getSelectedItems().includes(i));\n\n if (selectedItem) {\n popupControls?.focus(selectedItem);\n }\n }\n }\n\n /** Navigates to the next focusable item in the combobox popup. */\n next() {\n this._navigate(() => this.listControls()?.next());\n }\n\n /** Navigates to the previous focusable item in the combobox popup. */\n prev() {\n this._navigate(() => this.listControls()?.prev());\n }\n\n /** Navigates to the first focusable item in the combobox popup. */\n first() {\n this._navigate(() => this.listControls()?.first());\n }\n\n /** Navigates to the last focusable item in the combobox popup. */\n last() {\n this._navigate(() => this.listControls()?.last());\n }\n\n /** Collapses the currently focused item in the combobox. */\n collapseItem() {\n const controls = this.inputs.popupControls() as ComboboxTreeControls<T, V>;\n this._navigate(() => controls?.collapseItem());\n }\n\n /** Expands the currently focused item in the combobox. */\n expandItem() {\n const controls = this.inputs.popupControls() as ComboboxTreeControls<T, V>;\n this._navigate(() => controls?.expandItem());\n }\n\n /** Selects an item in the combobox popup. */\n select(opts: {item?: T; commit?: boolean; close?: boolean} = {}) {\n const controls = this.listControls();\n\n // When no item is specified (e.g. on keyboard toggle), get the active item instead.\n // Note: this is only necessary for disabled check, as select/toggle will check active item too.\n const item = opts.item ?? controls?.getActiveItem();\n\n // Check if item is disabled before proceeding.\n if (item?.disabled()) {\n return;\n }\n\n if (opts.item) {\n controls?.focus(opts.item, {focusElement: false});\n }\n\n controls?.multi() ? controls.toggle(opts.item) : controls?.select(opts.item);\n\n if (opts.commit) {\n this.commit();\n }\n if (opts.close) {\n this.close();\n }\n }\n\n /** Updates the value of the input based on the currently selected item. */\n commit() {\n const inputEl = this.inputs.inputEl();\n const selectedItems = this.listControls()?.getSelectedItems();\n\n if (!inputEl) {\n return;\n }\n\n inputEl.value = selectedItems?.map(i => i.searchTerm()).join(', ') || '';\n this.inputs.inputValue?.set(inputEl.value);\n\n if (this.inputs.filterMode() === 'highlight' && !this.readonly()) {\n const length = inputEl.value.length;\n inputEl.setSelectionRange(length, length);\n }\n }\n\n /** Navigates and handles additional actions based on filter mode. */\n private _navigate(operation: () => void) {\n operation();\n\n if (this.inputs.filterMode() !== 'manual') {\n this.select();\n }\n\n if (this.inputs.filterMode() === 'highlight') {\n // This is to handle when the user navigates back to the originally highlighted item.\n // E.g. User types \"Al\", highlights \"Alice\", then navigates down and back up to \"Alice\".\n const selectedItem = this.listControls()?.getSelectedItems()[0];\n\n if (!selectedItem) {\n return;\n }\n\n if (selectedItem === this.highlightedItem()) {\n this.highlight();\n } else {\n const inputEl = this.inputs.inputEl()!;\n inputEl.value = selectedItem?.searchTerm()!;\n }\n }\n }\n}\n\nexport class ComboboxDialogPattern {\n id = () => this.inputs.id();\n\n role = () => 'dialog' as const;\n\n keydown = computed(() => {\n return new KeyboardEventManager().on('Escape', () => this.inputs.combobox.close());\n });\n\n constructor(\n readonly inputs: {\n combobox: ComboboxPattern<any, any>;\n element: SignalLike<HTMLDialogElement>;\n id: SignalLike<string>;\n },\n ) {}\n\n onKeydown(event: KeyboardEvent) {\n this.keydown().handle(event);\n }\n\n onClick(event: MouseEvent) {\n // The \"click\" event fires on the dialog when the user clicks outside of the dialog content.\n if (event.target === this.inputs.element()) {\n this.inputs.combobox.close();\n }\n }\n}\n"],"names":["ComboboxPattern","inputs","expanded","signal","disabled","activeDescendant","computed","popupControls","ComboboxDialogPattern","activeId","highlightedItem","undefined","isDeleting","isFocused","hasBeenFocused","expandKey","textDirection","collapseKey","popupId","id","autocomplete","filterMode","hasPopup","role","readonly","listControls","treeControls","keydown","manager","KeyboardEventManager","on","open","alwaysExpanded","close","reset","first","last","selected","next","ignoreRepeat","prev","select","commit","multi","isItemSelectable","isItemExpandable","expandItem","collapseItem","isItemCollapsible","click","PointerEventManager","e","target","inputEl","controls","item","getItem","toggleExpansion","focus","constructor","onKeydown","event","handle","onClick","onInput","inputValue","set","value","InputEvent","inputType","match","highlight","onFocusIn","firstSelectedItem","getSelectedItems","onFocusOut","relatedTarget","HTMLElement","containerEl","contains","items","find","i","searchTerm","firstMatch","onFilter","isInitialRender","length","expandAll","collapseAll","clearSelection","unfocus","selectedItems","isHighlightable","toLowerCase","startsWith","slice","setSelectionRange","opts","some","selectedItem","nav","isHighlighting","selectionStart","includes","_navigate","getActiveItem","focusElement","toggle","map","join","operation","combobox","element"],"mappings":";;;MA6IaA,eAAe,CAAA;EAuLLC,MAAA;AArLrBC,EAAAA,QAAQ,GAAGC,MAAM,CAAC,KAAK,CAAC;EAGxBC,QAAQ,GAAGA,MAAM,IAAI,CAACH,MAAM,CAACG,QAAQ,EAAE;EAGvCC,gBAAgB,GAAGC,QAAQ,CAAC,MAAK;IAC/B,MAAMC,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IACjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,OAAOD,aAAa,EAAEE,QAAQ,EAAE,IAAI,IAAI;AAC1C,EAAA,CAAC,CAAC;AAGFC,EAAAA,eAAe,GAAGP,MAAM,CAAgBQ,SAAS,CAAC;AAGlDC,EAAAA,UAAU,GAAG,KAAK;AAGlBC,EAAAA,SAAS,GAAGV,MAAM,CAAC,KAAK,CAAC;AAGzBW,EAAAA,cAAc,GAAGX,MAAM,CAAC,KAAK,CAAC;AAG9BY,EAAAA,SAAS,GAAGT,QAAQ,CAAC,MAAO,IAAI,CAACL,MAAM,CAACe,aAAa,EAAE,KAAK,KAAK,GAAG,WAAW,GAAG,YAAa,CAAC;AAGhGC,EAAAA,WAAW,GAAGX,QAAQ,CAAC,MACrB,IAAI,CAACL,MAAM,CAACe,aAAa,EAAE,KAAK,KAAK,GAAG,YAAY,GAAG,WAAW,CACnE;AAGDE,EAAAA,OAAO,GAAGZ,QAAQ,CAAC,MAAM,IAAI,CAACL,MAAM,CAACM,aAAa,EAAE,EAAEY,EAAE,EAAE,IAAI,IAAI,CAAC;AAGnEC,EAAAA,YAAY,GAAGd,QAAQ,CAAC,MAAO,IAAI,CAACL,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,GAAG,MAAM,GAAG,MAAO,CAAC;AAG3FC,EAAAA,QAAQ,GAAGhB,QAAQ,CAAC,MAAM,IAAI,CAACL,MAAM,CAACM,aAAa,EAAE,EAAEgB,IAAI,EAAE,IAAI,IAAI,CAAC;EAGtEC,QAAQ,GAAGlB,QAAQ,CAAC,MAAM,IAAI,CAACL,MAAM,CAACuB,QAAQ,EAAE,IAAI,IAAI,CAACvB,MAAM,CAACG,QAAQ,EAAE,IAAI,IAAI,CAAC;EAGnFqB,YAAY,GAAGA,MAAK;IAClB,MAAMlB,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,OAAOD,aAAa;EACtB,CAAC;EAGDmB,YAAY,GAAGA,MAAK;IAClB,MAAMnB,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;AAEjD,IAAA,IAAIA,aAAa,EAAEgB,IAAI,EAAE,KAAK,MAAM,EAAE;AACpC,MAAA,OAAOhB,aAA2C;AACpD,IAAA;AAEA,IAAA,OAAO,IAAI;EACb,CAAC;EAGDoB,OAAO,GAAGrB,QAAQ,CAAC,MAAK;AACtB,IAAA,MAAMsB,OAAO,GAAG,IAAIC,oBAAoB,EAAE;IAC1C,MAAMtB,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAI,CAACA,aAAa,EAAE;AAClB,MAAA,OAAOqB,OAAO;AAChB,IAAA;IAEA,IAAIrB,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA,IAAI,CAAC,IAAI,CAACN,QAAQ,EAAE,EAAE;QACpB0B,OAAO,CAACE,EAAE,CAAC,SAAS,EAAE,MAAM,IAAI,CAACC,IAAI,EAAE,CAAC,CAACD,EAAE,CAAC,WAAW,EAAE,MAAM,IAAI,CAACC,IAAI,EAAE,CAAC;AAE3E,QAAA,IAAI,IAAI,CAACP,QAAQ,EAAE,EAAE;UACnBI,OAAO,CAACE,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAACC,IAAI,EAAE,CAAC,CAACD,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,CAACC,IAAI,EAAE,CAAC;AACnE,QAAA;AACF,MAAA;AAEA,MAAA,OAAOH,OAAO;AAChB,IAAA;IAEA,IAAI,CAAC,IAAI,CAAC3B,MAAM,CAAC+B,cAAc,EAAE,EAAE;MACjCJ,OAAO,CAACE,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,CAACG,KAAK,CAAC;AAACC,QAAAA,KAAK,EAAE,CAAC,IAAI,CAACV,QAAQ;AAAE,OAAC,CAAC,CAAC;AACnE,IAAA;AAEA,IAAA,IAAI,CAAC,IAAI,CAACtB,QAAQ,EAAE,EAAE;MACpB0B,OAAA,CACGE,EAAE,CAAC,WAAW,EAAE,MAAM,IAAI,CAACC,IAAI,CAAC;AAACI,QAAAA,KAAK,EAAE;OAAK,CAAC,CAAA,CAC9CL,EAAE,CAAC,SAAS,EAAE,MAAM,IAAI,CAACC,IAAI,CAAC;AAACK,QAAAA,IAAI,EAAE;AAAI,OAAC,CAAC,CAAC;AAE/C,MAAA,IAAI,IAAI,CAACZ,QAAQ,EAAE,EAAE;QACnBI,OAAA,CACGE,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAACC,IAAI,CAAC;AAACM,UAAAA,QAAQ,EAAE;SAAK,CAAC,CAAA,CAC7CP,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,CAACC,IAAI,CAAC;AAACM,UAAAA,QAAQ,EAAE;AAAI,SAAC,CAAC,CAAC;AAC/C,MAAA;AAEA,MAAA,OAAOT,OAAO;AAChB,IAAA;IAEAA,OAAA,CACGE,EAAE,CAAC,WAAW,EAAE,MAAM,IAAI,CAACQ,IAAI,EAAE,EAAE;AAACC,MAAAA,YAAY,EAAE;KAAM,CAAA,CACxDT,EAAE,CAAC,SAAS,EAAE,MAAM,IAAI,CAACU,IAAI,EAAE,EAAE;AAACD,MAAAA,YAAY,EAAE;KAAM,CAAA,CACtDT,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,CAACK,KAAK,EAAE,CAAA,CAC7BL,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,CAACM,IAAI,EAAE,CAAC;AAE/B,IAAA,IAAI,IAAI,CAACZ,QAAQ,EAAE,EAAE;MACnBI,OAAO,CAACE,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,CAACW,MAAM,CAAC;AAACC,QAAAA,MAAM,EAAE,IAAI;AAAET,QAAAA,KAAK,EAAE,CAAC1B,aAAa,CAACoC,KAAK;AAAE,OAAC,CAAC,CAAC;AACnF,IAAA;AAEA,IAAA,IAAIpC,aAAa,CAACgB,IAAI,EAAE,KAAK,SAAS,EAAE;AACtCK,MAAAA,OAAO,CAACE,EAAE,CAAC,OAAO,EAAE,MAAK;QACvB,IAAI,CAACW,MAAM,CAAC;AAACC,UAAAA,MAAM,EAAE,IAAI;AAAET,UAAAA,KAAK,EAAE,CAAC1B,aAAa,CAACoC,KAAK;AAAE,SAAC,CAAC;AAC5D,MAAA,CAAC,CAAC;AACJ,IAAA;AAEA,IAAA,MAAMjB,YAAY,GAAG,IAAI,CAACA,YAAY,EAAE;AAExC,IAAA,IAAIA,YAAY,EAAEkB,gBAAgB,EAAE,EAAE;MACpChB,OAAO,CAACE,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAACW,MAAM,CAAC;AAACC,QAAAA,MAAM,EAAE,IAAI;AAAET,QAAAA,KAAK,EAAE;AAAI,OAAC,CAAC,CAAC;AACrE,IAAA;AAEA,IAAA,IAAIP,YAAY,EAAEmB,gBAAgB,EAAE,EAAE;AACpCjB,MAAAA,OAAA,CACGE,EAAE,CAAC,IAAI,CAACf,SAAS,EAAE,EAAE,MAAM,IAAI,CAAC+B,UAAU,EAAE,CAAA,CAC5ChB,EAAE,CAAC,IAAI,CAACb,WAAW,EAAE,EAAE,MAAM,IAAI,CAAC8B,YAAY,EAAE,CAAC;AAEpD,MAAA,IAAI,CAACrB,YAAY,CAACkB,gBAAgB,EAAE,EAAE;QACpChB,OAAO,CAACE,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAACgB,UAAU,EAAE,CAAC;AAC9C,MAAA;AACF,IAAA;AAEA,IAAA,IAAIpB,YAAY,EAAEsB,iBAAiB,EAAE,EAAE;AACrCpB,MAAAA,OAAO,CAACE,EAAE,CAAC,IAAI,CAACb,WAAW,EAAE,EAAE,MAAM,IAAI,CAAC8B,YAAY,EAAE,CAAC;AAC3D,IAAA;AAEA,IAAA,OAAOnB,OAAO;AAChB,EAAA,CAAC,CAAC;AAGFqB,EAAAA,KAAK,GAAG3C,QAAQ,CAAC,MACf,IAAI4C,mBAAmB,EAAE,CAACpB,EAAE,CAACqB,CAAC,IAAG;IAC/B,IAAIA,CAAC,CAACC,MAAM,KAAK,IAAI,CAACnD,MAAM,CAACoD,OAAO,EAAE,EAAE;AACtC,MAAA,IAAI,IAAI,CAAC7B,QAAQ,EAAE,EAAE;AACnB,QAAA,IAAI,CAACtB,QAAQ,EAAE,GAAG,IAAI,CAAC+B,KAAK,EAAE,GAAG,IAAI,CAACF,IAAI,CAAC;AAACM,UAAAA,QAAQ,EAAE;AAAI,SAAC,CAAC;AAC9D,MAAA;AACF,IAAA;IAEA,MAAMiB,QAAQ,GAAG,IAAI,CAACrD,MAAM,CAACM,aAAa,EAAE;IAE5C,IAAI+C,QAAQ,YAAY9C,qBAAqB,EAAE;AAC7C,MAAA;AACF,IAAA;AAEA,IAAA,MAAM+C,IAAI,GAAGD,QAAQ,EAAEE,OAAO,CAACL,CAAC,CAAC;AAEjC,IAAA,IAAII,IAAI,EAAE;AACR,MAAA,IAAID,QAAQ,EAAE/B,IAAI,EAAE,KAAK,MAAM,EAAE;QAC/B,MAAMG,YAAY,GAAG4B,QAAsC;AAE3D,QAAA,IAAI5B,YAAY,CAACmB,gBAAgB,CAACU,IAAI,CAAC,IAAI,CAAC7B,YAAY,CAACkB,gBAAgB,CAACW,IAAI,CAAC,EAAE;AAC/E7B,UAAAA,YAAY,CAAC+B,eAAe,CAACF,IAAI,CAAC;UAClC,IAAI,CAACtD,MAAM,CAACoD,OAAO,EAAE,EAAEK,KAAK,EAAE;AAC9B,UAAA;AACF,QAAA;AACF,MAAA;MAEA,IAAI,CAACjB,MAAM,CAAC;QAACc,IAAI;AAAEb,QAAAA,MAAM,EAAE,IAAI;AAAET,QAAAA,KAAK,EAAE,CAACqB,QAAQ,EAAEX,KAAK;AAAE,OAAC,CAAC;MAC5D,IAAI,CAAC1C,MAAM,CAACoD,OAAO,EAAE,EAAEK,KAAK,EAAE;AAChC,IAAA;AACF,EAAA,CAAC,CAAC,CACH;EAEDC,WAAAA,CAAqB1D,MAA4B,EAAA;IAA5B,IAAA,CAAAA,MAAM,GAANA,MAAM;AAAyB,EAAA;EAGpD2D,SAASA,CAACC,KAAoB,EAAA;IAC5B,IAAI,CAAC,IAAI,CAAC5D,MAAM,CAACG,QAAQ,EAAE,EAAE;MAC3B,IAAI,CAACuB,OAAO,EAAE,CAACmC,MAAM,CAACD,KAAK,CAAC;AAC9B,IAAA;AACF,EAAA;EAGAE,OAAOA,CAACF,KAAiB,EAAA;IACvB,IAAI,CAAC,IAAI,CAAC5D,MAAM,CAACG,QAAQ,EAAE,EAAE;MAC3B,IAAI,CAAC6C,KAAK,EAAE,CAACa,MAAM,CAACD,KAAqB,CAAC;AAC5C,IAAA;AACF,EAAA;EAGAG,OAAOA,CAACH,KAAY,EAAA;AAClB,IAAA,IAAI,IAAI,CAAC5D,MAAM,CAACG,QAAQ,EAAE,IAAI,IAAI,CAACH,MAAM,CAACuB,QAAQ,EAAE,EAAE;AACpD,MAAA;AACF,IAAA;IAEA,MAAM6B,OAAO,GAAG,IAAI,CAACpD,MAAM,CAACoD,OAAO,EAAE;IAErC,IAAI,CAACA,OAAO,EAAE;AACZ,MAAA;AACF,IAAA;IAEA,MAAM9C,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA;AACF,IAAA;IAEA,IAAI,CAACuB,IAAI,EAAE;IACX,IAAI,CAAC9B,MAAM,CAACgE,UAAU,EAAEC,GAAG,CAACb,OAAO,CAACc,KAAK,CAAC;AAC1C,IAAA,IAAI,CAACvD,UAAU,GAAGiD,KAAK,YAAYO,UAAU,IAAI,CAAC,CAACP,KAAK,CAACQ,SAAS,CAACC,KAAK,CAAC,SAAS,CAAC;AAEnF,IAAA,IAAI,IAAI,CAACrE,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,IAAI,CAAC,IAAI,CAACT,UAAU,EAAE;MAChE,IAAI,CAAC2D,SAAS,EAAE;AAClB,IAAA;AACF,EAAA;AAGAC,EAAAA,SAASA,GAAA;AACP,IAAA,IAAI,IAAI,CAACvE,MAAM,CAAC+B,cAAc,EAAE,IAAI,CAAC,IAAI,CAAClB,cAAc,EAAE,EAAE;AAC1D,MAAA,MAAM2D,iBAAiB,GAAG,IAAI,CAAChD,YAAY,EAAE,EAAEiD,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACpED,MAAAA,iBAAiB,GAAG,IAAI,CAAChD,YAAY,EAAE,EAAEiC,KAAK,CAACe,iBAAiB,CAAC,GAAG,IAAI,CAACtC,KAAK,EAAE;AAClF,IAAA;AAEA,IAAA,IAAI,CAACtB,SAAS,CAACqD,GAAG,CAAC,IAAI,CAAC;AACxB,IAAA,IAAI,CAACpD,cAAc,CAACoD,GAAG,CAAC,IAAI,CAAC;AAC/B,EAAA;EAGAS,UAAUA,CAACd,KAAiB,EAAA;AAC1B,IAAA,IAAI,IAAI,CAAC5D,MAAM,CAACG,QAAQ,EAAE,EAAE;AAC1B,MAAA;AACF,IAAA;IAEA,MAAMG,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA;AACF,IAAA;IAEA,IACE,EAAEqD,KAAK,CAACe,aAAa,YAAYC,WAAW,CAAC,IAC7C,CAAC,IAAI,CAAC5E,MAAM,CAAC6E,WAAW,EAAE,EAAEC,QAAQ,CAAClB,KAAK,CAACe,aAAa,CAAC,EACzD;AACA,MAAA,IAAI,CAAC/D,SAAS,CAACqD,GAAG,CAAC,KAAK,CAAC;AAEzB,MAAA,IAAI,CAAC,IAAI,CAAChE,QAAQ,EAAE,EAAE;AACpB,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,IAAI,CAACsB,QAAQ,EAAE,EAAE;QACnB,IAAI,CAACS,KAAK,EAAE;AACZ,QAAA;AACF,MAAA;MAEA,IAAI,IAAI,CAAChC,MAAM,CAACoB,UAAU,EAAE,KAAK,QAAQ,EAAE;QACzC,IAAI,CAACqB,MAAM,EAAE;AACf,MAAA,CAAA,MAAO;QACL,MAAMa,IAAI,GAAGhD,aAAA,EACTyE,KAAK,EAAA,CACNC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,UAAU,EAAE,KAAK,IAAI,CAAClF,MAAM,CAACoD,OAAO,EAAE,EAAEc,KAAK,CAAC;AAE7D,QAAA,IAAIZ,IAAI,EAAE;UACR,IAAI,CAACd,MAAM,CAAC;AAACc,YAAAA;AAAI,WAAC,CAAC;AACrB,QAAA;AACF,MAAA;MAEA,IAAI,CAACtB,KAAK,EAAE;AACd,IAAA;AACF,EAAA;EAGAmD,UAAU,GAAG9E,QAAQ,CAAC,MAAK;IAIzB,IAAI,IAAI,CAACmB,YAAY,EAAE,EAAEF,IAAI,EAAE,KAAK,SAAS,EAAE;MAC7C,OAAO,IAAI,CAACE,YAAY,EAAE,EAAEuD,KAAK,EAAE,CAAC,CAAC,CAAC;AACxC,IAAA;IAEA,OAAO,IAAI,CAACvD,YAAY,EAAA,EACpBuD,KAAK,EAAA,CACNC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACf,KAAK,EAAE,KAAK,IAAI,CAAClE,MAAM,CAACmF,UAAU,EAAE,CAAC;AACtD,EAAA,CAAC,CAAC;AAGFC,EAAAA,QAAQA,GAAA;AACN,IAAA,IAAI,IAAI,CAAC7D,QAAQ,EAAE,EAAE;AACnB,MAAA;AACF,IAAA;IAEA,MAAMjB,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA;AACF,IAAA;AAMA,IAAA,MAAM8E,eAAe,GAAG,CAAC,IAAI,CAACrF,MAAM,CAACgE,UAAU,IAAI,CAACsB,MAAM,IAAI,CAAC,IAAI,CAAC3E,UAAU;AAE9E,IAAA,IAAI0E,eAAe,EAAE;AACnB,MAAA;AACF,IAAA;AAGA,IAAA,IAAI,CAAC,IAAI,CAACzE,SAAS,EAAE,EAAE;AACrB,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,IAAI,CAACZ,MAAM,CAACM,aAAa,EAAE,EAAEgB,IAAI,EAAE,KAAK,MAAM,EAAE;MAClD,MAAMG,YAAY,GAAG,IAAI,CAACzB,MAAM,CAACM,aAAa,EAAgC;AAC9E,MAAA,IAAI,CAACN,MAAM,CAACgE,UAAU,IAAI,CAACsB,MAAM,GAAG7D,YAAY,CAAC8D,SAAS,EAAE,GAAG9D,YAAY,CAAC+D,WAAW,EAAE;AAC3F,IAAA;AAEA,IAAA,MAAMlC,IAAI,GAAG,IAAI,CAAC6B,UAAU,EAAE;IAE9B,IAAI,CAAC7B,IAAI,EAAE;MACThD,aAAa,EAAEmF,cAAc,EAAE;MAC/BnF,aAAa,EAAEoF,OAAO,EAAE;AACxB,MAAA;AACF,IAAA;AAEApF,IAAAA,aAAa,EAAEmD,KAAK,CAACH,IAAI,CAAC;IAE1B,IAAI,IAAI,CAACtD,MAAM,CAACoB,UAAU,EAAE,KAAK,QAAQ,EAAE;MACzC,IAAI,CAACoB,MAAM,CAAC;AAACc,QAAAA;AAAI,OAAC,CAAC;AACrB,IAAA;AAEA,IAAA,IAAI,IAAI,CAACtD,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,IAAI,CAAC,IAAI,CAACT,UAAU,EAAE;MAChE,IAAI,CAAC2D,SAAS,EAAE;AAClB,IAAA;AACF,EAAA;AAGAA,EAAAA,SAASA,GAAA;IACP,MAAMlB,OAAO,GAAG,IAAI,CAACpD,MAAM,CAACoD,OAAO,EAAE;IACrC,MAAMuC,aAAa,GAAG,IAAI,CAACnE,YAAY,EAAE,EAAEiD,gBAAgB,EAAE;AAC7D,IAAA,MAAMnB,IAAI,GAAGqC,aAAa,GAAG,CAAC,CAAC;AAE/B,IAAA,IAAI,CAACvC,OAAO,IAAI,CAACE,IAAI,EAAE;AACrB,MAAA;AACF,IAAA;IAEA,MAAMsC,eAAe,GAAGtC,IAAA,CACrB4B,UAAU,EAAA,CACVW,WAAW,EAAA,CACXC,UAAU,CAAC,IAAI,CAAC9F,MAAM,CAACgE,UAAW,EAAE,CAAC6B,WAAW,EAAE,CAAC;AAEtD,IAAA,IAAID,eAAe,EAAE;AACnBxC,MAAAA,OAAO,CAACc,KAAK,GACX,IAAI,CAAClE,MAAM,CAACgE,UAAW,EAAE,GAAGV,IAAI,CAAC4B,UAAU,EAAE,CAACa,KAAK,CAAC,IAAI,CAAC/F,MAAM,CAACgE,UAAW,EAAE,CAACsB,MAAM,CAAC;MACvFlC,OAAO,CAAC4C,iBAAiB,CAAC,IAAI,CAAChG,MAAM,CAACgE,UAAW,EAAE,CAACsB,MAAM,EAAEhC,IAAI,CAAC4B,UAAU,EAAE,CAACI,MAAM,CAAC;AACrF,MAAA,IAAI,CAAC7E,eAAe,CAACwD,GAAG,CAACX,IAAI,CAAC;AAChC,IAAA;AACF,EAAA;EAGAtB,KAAKA,CAACiE,IAAuB,EAAA;IAC3B,MAAM3F,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;AAEjD,IAAA,IAAI,IAAI,CAACN,MAAM,CAAC+B,cAAc,EAAE,EAAE;AAChC,MAAA;AACF,IAAA;IAEA,IAAIzB,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA,IAAI,CAACN,QAAQ,CAACgE,GAAG,CAAC,KAAK,CAAC;AACxB,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,IAAI,CAAC1C,QAAQ,EAAE,EAAE;AACnB,MAAA,IAAI,CAACtB,QAAQ,CAACgE,GAAG,CAAC,KAAK,CAAC;MACxB3D,aAAa,EAAEoF,OAAO,EAAE;AACxB,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAACO,IAAI,EAAEhE,KAAK,EAAE;MAChB,IAAI,IAAI,CAACjC,MAAM,CAACoB,UAAU,EAAE,KAAK,QAAQ,EAAE;AACzC,QAAA,IACE,CAAC,IAAI,CAACI,YAAY,EAAA,EACduD,KAAK,EAAA,CACNmB,IAAI,CAACjB,CAAC,IAAIA,CAAC,CAACC,UAAU,EAAE,KAAK,IAAI,CAAClF,MAAM,CAACoD,OAAO,EAAE,EAAEc,KAAK,CAAC,EAC7D;AACA,UAAA,IAAI,CAAC1C,YAAY,EAAE,EAAEiE,cAAc,EAAE;AACvC,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,CAACxF,QAAQ,CAACgE,GAAG,CAAC,KAAK,CAAC;MACxB3D,aAAa,EAAEoF,OAAO,EAAE;AACxB,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAC,IAAI,CAACzF,QAAQ,EAAE,EAAE;MACpB,IAAI,CAACD,MAAM,CAACgE,UAAU,EAAEC,GAAG,CAAC,EAAE,CAAC;MAC/B3D,aAAa,EAAEmF,cAAc,EAAE;MAE/B,MAAMrC,OAAO,GAAG,IAAI,CAACpD,MAAM,CAACoD,OAAO,EAAE;AAErC,MAAA,IAAIA,OAAO,EAAE;QACXA,OAAO,CAACc,KAAK,GAAG,EAAE;AACpB,MAAA;AACF,IAAA,CAAA,MAAO,IAAI,IAAI,CAACjE,QAAQ,EAAE,EAAE;AAC1B,MAAA,IAAI,CAACA,QAAQ,CAACgE,GAAG,CAAC,KAAK,CAAC;MACxB,MAAMkC,YAAY,GAAG7F,aAAa,EAAEmE,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAE3D,MAAA,IAAI0B,YAAY,EAAEjB,UAAU,EAAE,KAAK,IAAI,CAAClF,MAAM,CAACgE,UAAW,EAAE,EAAE;QAC5D1D,aAAa,EAAEmF,cAAc,EAAE;AACjC,MAAA;AAEA,MAAA;AACF,IAAA;IAEA,IAAI,CAACzD,KAAK,EAAE;AAEZ,IAAA,IAAI,CAAC,IAAI,CAACT,QAAQ,EAAE,EAAE;MACpBjB,aAAa,EAAEmF,cAAc,EAAE;AACjC,IAAA;AACF,EAAA;EAGA3D,IAAIA,CAACsE,GAA2D,EAAA;AAC9D,IAAA,IAAI,CAACnG,QAAQ,CAACgE,GAAG,CAAC,IAAI,CAAC;IACvB,MAAM3D,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA;AACF,IAAA;IAEA,MAAM6C,OAAO,GAAG,IAAI,CAACpD,MAAM,CAACoD,OAAO,EAAE;IAErC,IAAIA,OAAO,IAAI,IAAI,CAACpD,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,EAAE;MACvD,MAAMiF,cAAc,GAAGjD,OAAO,CAACkD,cAAc,KAAKlD,OAAO,CAACc,KAAK,CAACoB,MAAM;MACtE,IAAI,CAACtF,MAAM,CAACgE,UAAU,EAAEC,GAAG,CAACb,OAAO,CAACc,KAAK,CAAC6B,KAAK,CAAC,CAAC,EAAE3C,OAAO,CAACkD,cAAc,IAAI,CAAC,CAAC,CAAC;MAChF,IAAI,CAACD,cAAc,EAAE;AACnB,QAAA,IAAI,CAAC5F,eAAe,CAACwD,GAAG,CAACvD,SAAS,CAAC;AACrC,MAAA;AACF,IAAA;IAEA,IAAI0F,GAAG,EAAElE,KAAK,EAAE;MACd,IAAI,CAACA,KAAK,EAAE;AACd,IAAA;IACA,IAAIkE,GAAG,EAAEjE,IAAI,EAAE;MACb,IAAI,CAACA,IAAI,EAAE;AACb,IAAA;IACA,IAAIiE,GAAG,EAAEhE,QAAQ,EAAE;MACjB,MAAM+D,YAAY,GAAG7F,aAAA,EACjByE,KAAK,EAAA,CACNC,IAAI,CAACC,CAAC,IAAI3E,aAAa,EAAEmE,gBAAgB,EAAE,CAAC8B,QAAQ,CAACtB,CAAC,CAAC,CAAC;AAE3D,MAAA,IAAIkB,YAAY,EAAE;AAChB7F,QAAAA,aAAa,EAAEmD,KAAK,CAAC0C,YAAY,CAAC;AACpC,MAAA;AACF,IAAA;AACF,EAAA;AAGA9D,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,CAACmE,SAAS,CAAC,MAAM,IAAI,CAAChF,YAAY,EAAE,EAAEa,IAAI,EAAE,CAAC;AACnD,EAAA;AAGAE,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,CAACiE,SAAS,CAAC,MAAM,IAAI,CAAChF,YAAY,EAAE,EAAEe,IAAI,EAAE,CAAC;AACnD,EAAA;AAGAL,EAAAA,KAAKA,GAAA;AACH,IAAA,IAAI,CAACsE,SAAS,CAAC,MAAM,IAAI,CAAChF,YAAY,EAAE,EAAEU,KAAK,EAAE,CAAC;AACpD,EAAA;AAGAC,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,CAACqE,SAAS,CAAC,MAAM,IAAI,CAAChF,YAAY,EAAE,EAAEW,IAAI,EAAE,CAAC;AACnD,EAAA;AAGAW,EAAAA,YAAYA,GAAA;IACV,MAAMO,QAAQ,GAAG,IAAI,CAACrD,MAAM,CAACM,aAAa,EAAgC;IAC1E,IAAI,CAACkG,SAAS,CAAC,MAAMnD,QAAQ,EAAEP,YAAY,EAAE,CAAC;AAChD,EAAA;AAGAD,EAAAA,UAAUA,GAAA;IACR,MAAMQ,QAAQ,GAAG,IAAI,CAACrD,MAAM,CAACM,aAAa,EAAgC;IAC1E,IAAI,CAACkG,SAAS,CAAC,MAAMnD,QAAQ,EAAER,UAAU,EAAE,CAAC;AAC9C,EAAA;AAGAL,EAAAA,MAAMA,CAACyD,OAAsD,EAAE,EAAA;AAC7D,IAAA,MAAM5C,QAAQ,GAAG,IAAI,CAAC7B,YAAY,EAAE;IAIpC,MAAM8B,IAAI,GAAG2C,IAAI,CAAC3C,IAAI,IAAID,QAAQ,EAAEoD,aAAa,EAAE;AAGnD,IAAA,IAAInD,IAAI,EAAEnD,QAAQ,EAAE,EAAE;AACpB,MAAA;AACF,IAAA;IAEA,IAAI8F,IAAI,CAAC3C,IAAI,EAAE;AACbD,MAAAA,QAAQ,EAAEI,KAAK,CAACwC,IAAI,CAAC3C,IAAI,EAAE;AAACoD,QAAAA,YAAY,EAAE;AAAK,OAAC,CAAC;AACnD,IAAA;IAEArD,QAAQ,EAAEX,KAAK,EAAE,GAAGW,QAAQ,CAACsD,MAAM,CAACV,IAAI,CAAC3C,IAAI,CAAC,GAAGD,QAAQ,EAAEb,MAAM,CAACyD,IAAI,CAAC3C,IAAI,CAAC;IAE5E,IAAI2C,IAAI,CAACxD,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,EAAE;AACf,IAAA;IACA,IAAIwD,IAAI,CAACjE,KAAK,EAAE;MACd,IAAI,CAACA,KAAK,EAAE;AACd,IAAA;AACF,EAAA;AAGAS,EAAAA,MAAMA,GAAA;IACJ,MAAMW,OAAO,GAAG,IAAI,CAACpD,MAAM,CAACoD,OAAO,EAAE;IACrC,MAAMuC,aAAa,GAAG,IAAI,CAACnE,YAAY,EAAE,EAAEiD,gBAAgB,EAAE;IAE7D,IAAI,CAACrB,OAAO,EAAE;AACZ,MAAA;AACF,IAAA;IAEAA,OAAO,CAACc,KAAK,GAAGyB,aAAa,EAAEiB,GAAG,CAAC3B,CAAC,IAAIA,CAAC,CAACC,UAAU,EAAE,CAAC,CAAC2B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACxE,IAAI,CAAC7G,MAAM,CAACgE,UAAU,EAAEC,GAAG,CAACb,OAAO,CAACc,KAAK,CAAC;AAE1C,IAAA,IAAI,IAAI,CAAClE,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,IAAI,CAAC,IAAI,CAACG,QAAQ,EAAE,EAAE;AAChE,MAAA,MAAM+D,MAAM,GAAGlC,OAAO,CAACc,KAAK,CAACoB,MAAM;AACnClC,MAAAA,OAAO,CAAC4C,iBAAiB,CAACV,MAAM,EAAEA,MAAM,CAAC;AAC3C,IAAA;AACF,EAAA;EAGQkB,SAASA,CAACM,SAAqB,EAAA;AACrCA,IAAAA,SAAS,EAAE;IAEX,IAAI,IAAI,CAAC9G,MAAM,CAACoB,UAAU,EAAE,KAAK,QAAQ,EAAE;MACzC,IAAI,CAACoB,MAAM,EAAE;AACf,IAAA;IAEA,IAAI,IAAI,CAACxC,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,EAAE;AAG5C,MAAA,MAAM+E,YAAY,GAAG,IAAI,CAAC3E,YAAY,EAAE,EAAEiD,gBAAgB,EAAE,CAAC,CAAC,CAAC;MAE/D,IAAI,CAAC0B,YAAY,EAAE;AACjB,QAAA;AACF,MAAA;AAEA,MAAA,IAAIA,YAAY,KAAK,IAAI,CAAC1F,eAAe,EAAE,EAAE;QAC3C,IAAI,CAAC6D,SAAS,EAAE;AAClB,MAAA,CAAA,MAAO;QACL,MAAMlB,OAAO,GAAG,IAAI,CAACpD,MAAM,CAACoD,OAAO,EAAG;AACtCA,QAAAA,OAAO,CAACc,KAAK,GAAGiC,YAAY,EAAEjB,UAAU,EAAG;AAC7C,MAAA;AACF,IAAA;AACF,EAAA;AACD;MAEY3E,qBAAqB,CAAA;EAUrBP,MAAA;EATXkB,EAAE,GAAGA,MAAM,IAAI,CAAClB,MAAM,CAACkB,EAAE,EAAE;EAE3BI,IAAI,GAAGA,MAAM,QAAiB;EAE9BI,OAAO,GAAGrB,QAAQ,CAAC,MAAK;AACtB,IAAA,OAAO,IAAIuB,oBAAoB,EAAE,CAACC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC7B,MAAM,CAAC+G,QAAQ,CAAC/E,KAAK,EAAE,CAAC;AACpF,EAAA,CAAC,CAAC;EAEF0B,WAAAA,CACW1D,MAIR,EAAA;IAJQ,IAAA,CAAAA,MAAM,GAANA,MAAM;AAKd,EAAA;EAEH2D,SAASA,CAACC,KAAoB,EAAA;IAC5B,IAAI,CAAClC,OAAO,EAAE,CAACmC,MAAM,CAACD,KAAK,CAAC;AAC9B,EAAA;EAEAE,OAAOA,CAACF,KAAiB,EAAA;IAEvB,IAAIA,KAAK,CAACT,MAAM,KAAK,IAAI,CAACnD,MAAM,CAACgH,OAAO,EAAE,EAAE;AAC1C,MAAA,IAAI,CAAChH,MAAM,CAAC+G,QAAQ,CAAC/E,KAAK,EAAE;AAC9B,IAAA;AACF,EAAA;AACD;;;;"}
1
+ {"version":3,"file":"_combobox-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/combobox/combobox.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {KeyboardEventManager, PointerEventManager} from '../behaviors/event-manager';\nimport {\n computed,\n signal,\n SignalLike,\n WritableSignalLike,\n} from '../behaviors/signal-like/signal-like';\nimport {ListItem} from '../behaviors/list/list';\n\n/** Represents the required inputs for a combobox. */\nexport interface ComboboxInputs<T extends ListItem<V>, V> {\n /** The controls for the popup associated with the combobox. */\n popupControls: SignalLike<\n ComboboxListboxControls<T, V> | ComboboxTreeControls<T, V> | ComboboxDialogPattern | undefined\n >;\n\n /** The HTML input element that serves as the combobox input. */\n inputEl: SignalLike<HTMLInputElement | undefined>;\n\n /** The HTML element that serves as the combobox container. */\n containerEl: SignalLike<HTMLElement | undefined>;\n\n /** The filtering mode for the combobox. */\n filterMode: SignalLike<'manual' | 'auto-select' | 'highlight'>;\n\n /** The current value of the combobox. */\n inputValue?: WritableSignalLike<string>;\n\n /** The value of the first matching item in the popup. */\n firstMatch: SignalLike<V | undefined>;\n\n /** Whether the combobox is disabled. */\n disabled: SignalLike<boolean>;\n\n /** Whether the combobox is read-only. */\n readonly: SignalLike<boolean>;\n\n /** Whether the combobox is in a right-to-left context. */\n textDirection: SignalLike<'rtl' | 'ltr'>;\n\n /** Whether the combobox is always expanded. */\n alwaysExpanded: SignalLike<boolean>;\n}\n\n/** An interface that allows combobox popups to expose the necessary controls for the combobox. */\nexport interface ComboboxListboxControls<T extends ListItem<V>, V> {\n /** A unique identifier for the popup. */\n readonly id: () => string;\n\n /** The ARIA role for the popup. */\n role: SignalLike<'listbox' | 'tree' | 'grid'>;\n\n // TODO(wagnermaciel): Add validation that ensures only readonly comboboxes can have multi-select popups.\n\n /** Whether multiple items in the popup can be selected at once. */\n multi: SignalLike<boolean>;\n\n /** The ID of the active item in the popup. */\n activeId: SignalLike<string | undefined>;\n\n /** The list of items in the popup. */\n items: SignalLike<T[]>;\n\n /** Navigates to the given item in the popup. */\n focus: (item: T, opts?: {focusElement?: boolean}) => void;\n\n /** Navigates to the next item in the popup. */\n next: () => void;\n\n /** Navigates to the previous item in the popup. */\n prev: () => void;\n\n /** Navigates to the first item in the popup. */\n first: () => void;\n\n /** Navigates to the last item in the popup. */\n last: () => void;\n\n /** Selects the current item in the popup. */\n select: (item?: T) => void;\n\n /** Toggles the selection state of the given item in the popup. */\n toggle: (item?: T) => void;\n\n /** Clears the selection state of the popup. */\n clearSelection: () => void;\n\n /** Removes focus from any item in the popup. */\n unfocus: () => void;\n\n /** Returns the item corresponding to the given event. */\n getItem: (e: PointerEvent) => T | undefined;\n\n /** Returns the currently active (focused) item in the popup. */\n getActiveItem: () => T | undefined;\n\n /** Returns the currently selected items in the popup. */\n getSelectedItems: () => T[];\n\n /** Sets the value of the combobox based on the selected item. */\n setValue: (value: V | undefined) => void; // For re-setting the value if the popup was destroyed.\n}\n\nexport interface ComboboxTreeControls<T extends ListItem<V>, V> extends ComboboxListboxControls<\n T,\n V\n> {\n /** Whether the currently active item in the popup is collapsible. */\n isItemCollapsible: () => boolean;\n\n /** Expands the currently active item in the popup. */\n expandItem: () => void;\n\n /** Collapses the currently active item in the popup. */\n collapseItem: () => void;\n\n /** Checks if the currently active item in the popup is expandable. */\n isItemExpandable: (item?: T) => boolean;\n\n /** Expands all nodes in the tree. */\n expandAll: () => void;\n\n /** Collapses all nodes in the tree. */\n collapseAll: () => void;\n\n /** Toggles the expansion state of the currently active item in the popup. */\n toggleExpansion: (item?: T) => void;\n\n /** Whether the current active item is selectable. */\n isItemSelectable: (item?: T) => boolean;\n}\n\n/** Controls the state of a combobox. */\nexport class ComboboxPattern<T extends ListItem<V>, V> {\n /** Whether the combobox is expanded. */\n readonly expanded = signal(false);\n\n /** Whether the combobox is disabled. */\n readonly disabled = () => this.inputs.disabled();\n\n /** The ID of the active item in the combobox. */\n readonly activeDescendant = computed(() => {\n const popupControls = this.inputs.popupControls();\n if (popupControls instanceof ComboboxDialogPattern) {\n return null;\n }\n\n return popupControls?.activeId() ?? null;\n });\n\n /** The currently highlighted item in the combobox. */\n readonly highlightedItem = signal<T | undefined>(undefined);\n\n /** Whether the most recent input event was a deletion. */\n private _isDeleting = false;\n\n /** Whether the combobox is focused. */\n readonly isFocused = signal(false);\n\n /** Whether the combobox has ever been focused. */\n readonly hasBeenInteracted = signal(false);\n\n /** The key used to navigate to the previous item in the list. */\n readonly expandKey = computed(() =>\n this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight',\n );\n\n /** The key used to navigate to the next item in the list. */\n readonly collapseKey = computed(() =>\n this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft',\n );\n\n /** The ID of the popup associated with the combobox. */\n readonly popupId = computed(() => this.inputs.popupControls()?.id() || null);\n\n /** The autocomplete behavior of the combobox. */\n readonly autocomplete = computed(() =>\n this.inputs.filterMode() === 'highlight' ? 'both' : 'list',\n );\n\n /** The ARIA role of the popup associated with the combobox. */\n readonly hasPopup = computed(() => this.inputs.popupControls()?.role() || null);\n\n /** Whether the combobox is read-only. */\n readonly readonly = computed(() => this.inputs.readonly() || this.inputs.disabled() || null);\n\n /** Returns the listbox controls for the combobox. */\n readonly listControls = () => {\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return null;\n }\n\n return popupControls;\n };\n\n /** Returns the tree controls for the combobox. */\n readonly treeControls = () => {\n const popupControls = this.inputs.popupControls();\n\n if (popupControls?.role() === 'tree') {\n return popupControls as ComboboxTreeControls<T, V>;\n }\n\n return null;\n };\n\n /** The keydown event manager for the combobox. */\n readonly keydown = computed(() => {\n const manager = new KeyboardEventManager();\n const popupControls = this.inputs.popupControls();\n\n if (!popupControls) {\n return manager;\n }\n\n if (popupControls instanceof ComboboxDialogPattern) {\n if (!this.expanded()) {\n manager.on('ArrowUp', () => this.open()).on('ArrowDown', () => this.open());\n\n if (this.readonly()) {\n manager.on('Enter', () => this.open()).on(' ', () => this.open());\n }\n }\n\n return manager;\n }\n\n if (!this.inputs.alwaysExpanded()) {\n manager.on('Escape', () => this.close({reset: !this.readonly()}));\n }\n\n if (!this.expanded()) {\n manager\n .on('ArrowDown', () => this.open({first: true}))\n .on('ArrowUp', () => this.open({last: true}));\n\n if (this.readonly()) {\n manager\n .on('Enter', () => this.open({selected: true}))\n .on(' ', () => this.open({selected: true}));\n }\n\n return manager;\n }\n\n manager\n .on('ArrowDown', () => this.next(), {ignoreRepeat: false})\n .on('ArrowUp', () => this.prev(), {ignoreRepeat: false})\n .on('Home', () => this.first())\n .on('End', () => this.last());\n\n if (this.readonly()) {\n manager.on(' ', () => this.select({commit: true, close: !popupControls.multi()}));\n }\n\n if (popupControls.role() === 'listbox') {\n manager.on('Enter', () => {\n this.select({commit: true, close: !popupControls.multi()});\n });\n }\n\n const treeControls = this.treeControls();\n\n if (treeControls?.isItemSelectable()) {\n manager.on('Enter', () => this.select({commit: true, close: true}));\n }\n\n if (treeControls?.isItemExpandable()) {\n manager\n .on(this.expandKey(), () => this.expandItem())\n .on(this.collapseKey(), () => this.collapseItem());\n\n if (!treeControls.isItemSelectable()) {\n manager.on('Enter', () => this.expandItem());\n }\n }\n\n if (treeControls?.isItemCollapsible()) {\n manager.on(this.collapseKey(), () => this.collapseItem());\n }\n\n return manager;\n });\n\n /** The click event manager for the combobox. */\n readonly click = computed(() =>\n new PointerEventManager().on(e => {\n if (e.target === this.inputs.inputEl()) {\n if (this.readonly()) {\n this.expanded() ? this.close() : this.open({selected: true});\n }\n }\n\n const controls = this.inputs.popupControls();\n\n if (controls instanceof ComboboxDialogPattern) {\n return;\n }\n\n const item = controls?.getItem(e);\n\n if (item) {\n if (controls?.role() === 'tree') {\n const treeControls = controls as ComboboxTreeControls<T, V>;\n\n if (treeControls.isItemExpandable(item) && !treeControls.isItemSelectable(item)) {\n treeControls.toggleExpansion(item);\n this.inputs.inputEl()?.focus();\n return;\n }\n }\n\n this.select({item, commit: true, close: !controls?.multi()});\n this.inputs.inputEl()?.focus(); // Return focus to the input after selecting.\n }\n }),\n );\n\n constructor(readonly inputs: ComboboxInputs<T, V>) {}\n\n /** Handles keydown events for the combobox. */\n onKeydown(event: KeyboardEvent) {\n if (!this.inputs.disabled()) {\n this.keydown().handle(event);\n }\n }\n\n /** Handles click events for the combobox. */\n onClick(event: MouseEvent) {\n if (!this.inputs.disabled()) {\n this.click().handle(event as PointerEvent);\n }\n }\n\n /** Handles input events for the combobox. */\n onInput(event: Event) {\n if (this.inputs.disabled() || this.inputs.readonly()) {\n return;\n }\n\n const inputEl = this.inputs.inputEl();\n\n if (!inputEl) {\n return;\n }\n\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return;\n }\n\n this.open();\n this.inputs.inputValue?.set(inputEl.value);\n this._isDeleting = event instanceof InputEvent && !!event.inputType.match(/^delete/);\n\n if (this.inputs.filterMode() === 'highlight' && !this._isDeleting) {\n this.highlight();\n }\n }\n\n /** Handles focus in events for the combobox. */\n onFocusIn() {\n if (this.inputs.alwaysExpanded() && !this.hasBeenInteracted()) {\n const firstSelectedItem = this.listControls()?.getSelectedItems()[0];\n firstSelectedItem ? this.listControls()?.focus(firstSelectedItem) : this.first();\n }\n\n this.isFocused.set(true);\n this.hasBeenInteracted.set(true);\n }\n\n /** Handles focus out events for the combobox. */\n onFocusOut(event: FocusEvent) {\n if (this.inputs.disabled()) {\n return;\n }\n\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return;\n }\n\n if (\n !(event.relatedTarget instanceof HTMLElement) ||\n !this.inputs.containerEl()?.contains(event.relatedTarget)\n ) {\n this.isFocused.set(false);\n\n if (!this.expanded()) {\n return;\n }\n\n if (this.readonly()) {\n this.close();\n return;\n }\n\n if (this.inputs.filterMode() !== 'manual') {\n this.commit();\n } else {\n const item = popupControls\n ?.items()\n .find(i => i.searchTerm() === this.inputs.inputEl()?.value);\n\n if (item) {\n this.select({item});\n }\n }\n\n this.close();\n }\n }\n\n /** The first matching item in the combobox. */\n readonly firstMatch = computed(() => {\n // TODO(wagnermaciel): Consider whether we should not provide this default behavior for the\n // listbox. Instead, we may want to allow users to have no match so that typing does not focus\n // any option.\n if (this.listControls()?.role() === 'listbox') {\n return this.listControls()?.items()[0];\n }\n\n return this.listControls()\n ?.items()\n .find(i => i.value() === this.inputs.firstMatch());\n });\n\n /** Handles filtering logic for the combobox. */\n onFilter() {\n if (this.readonly()) {\n return;\n }\n\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return;\n }\n\n // TODO(wagnermaciel)\n // When the user first interacts with the combobox, the popup will lazily render for the first\n // time. This is a simple way to detect this and avoid auto-focus & selection logic, but this\n // should probably be moved to the component layer instead.\n const isInitialRender = !this.inputs.inputValue?.().length && !this._isDeleting;\n\n if (isInitialRender) {\n return;\n }\n\n // Avoid refocusing the input if a filter event occurs after focus has left the combobox.\n if (!this.isFocused()) {\n return;\n }\n\n if (this.inputs.popupControls()?.role() === 'tree') {\n const treeControls = this.inputs.popupControls() as ComboboxTreeControls<T, V>;\n this.inputs.inputValue?.().length ? treeControls.expandAll() : treeControls.collapseAll();\n }\n\n const item = this.firstMatch();\n\n if (!item) {\n popupControls?.clearSelection();\n popupControls?.unfocus();\n return;\n }\n\n popupControls?.focus(item);\n\n if (this.inputs.filterMode() !== 'manual') {\n this.select({item});\n }\n\n if (this.inputs.filterMode() === 'highlight' && !this._isDeleting) {\n this.highlight();\n }\n }\n\n /** Highlights the currently selected item in the combobox. */\n highlight() {\n const inputEl = this.inputs.inputEl();\n const selectedItems = this.listControls()?.getSelectedItems();\n const item = selectedItems?.[0];\n\n if (!inputEl || !item) {\n return;\n }\n\n const isHighlightable = item\n .searchTerm()\n .toLowerCase()\n .startsWith(this.inputs.inputValue!().toLowerCase());\n\n if (isHighlightable) {\n inputEl.value =\n this.inputs.inputValue!() + item.searchTerm().slice(this.inputs.inputValue!().length);\n inputEl.setSelectionRange(this.inputs.inputValue!().length, item.searchTerm().length);\n this.highlightedItem.set(item);\n }\n }\n\n /** Closes the combobox. */\n close(opts?: {reset: boolean}) {\n const popupControls = this.inputs.popupControls();\n\n if (this.inputs.alwaysExpanded()) {\n return;\n }\n\n if (popupControls instanceof ComboboxDialogPattern) {\n this.expanded.set(false);\n return;\n }\n\n if (this.readonly()) {\n this.expanded.set(false);\n popupControls?.unfocus();\n return;\n }\n\n if (!opts?.reset) {\n if (this.inputs.filterMode() === 'manual') {\n if (\n !this.listControls()\n ?.items()\n .some(i => i.searchTerm() === this.inputs.inputEl()?.value)\n ) {\n this.listControls()?.clearSelection();\n }\n }\n\n this.expanded.set(false);\n popupControls?.unfocus();\n return;\n }\n\n if (!this.expanded()) {\n this.inputs.inputValue?.set('');\n popupControls?.clearSelection();\n\n const inputEl = this.inputs.inputEl();\n\n if (inputEl) {\n inputEl.value = '';\n }\n } else if (this.expanded()) {\n this.expanded.set(false);\n const selectedItem = popupControls?.getSelectedItems()?.[0];\n\n if (selectedItem?.searchTerm() !== this.inputs.inputValue!()) {\n popupControls?.clearSelection();\n }\n\n return;\n }\n\n this.close();\n\n if (!this.readonly()) {\n popupControls?.clearSelection();\n }\n }\n\n /** Opens the combobox. */\n open(nav?: {first?: boolean; last?: boolean; selected?: boolean}) {\n this.expanded.set(true);\n const popupControls = this.inputs.popupControls();\n\n if (popupControls instanceof ComboboxDialogPattern) {\n return;\n }\n\n const inputEl = this.inputs.inputEl();\n\n if (inputEl && this.inputs.filterMode() === 'highlight') {\n const isHighlighting = inputEl.selectionStart !== inputEl.value.length;\n this.inputs.inputValue?.set(inputEl.value.slice(0, inputEl.selectionStart || 0));\n if (!isHighlighting) {\n this.highlightedItem.set(undefined);\n }\n }\n\n if (nav?.first) {\n this.first();\n }\n if (nav?.last) {\n this.last();\n }\n if (nav?.selected) {\n const selectedItem = popupControls\n ?.items()\n .find(i => popupControls?.getSelectedItems().includes(i));\n\n if (selectedItem) {\n popupControls?.focus(selectedItem);\n }\n }\n }\n\n /** Navigates to the next focusable item in the combobox popup. */\n next() {\n this._navigate(() => this.listControls()?.next());\n }\n\n /** Navigates to the previous focusable item in the combobox popup. */\n prev() {\n this._navigate(() => this.listControls()?.prev());\n }\n\n /** Navigates to the first focusable item in the combobox popup. */\n first() {\n this._navigate(() => this.listControls()?.first());\n }\n\n /** Navigates to the last focusable item in the combobox popup. */\n last() {\n this._navigate(() => this.listControls()?.last());\n }\n\n /** Collapses the currently focused item in the combobox. */\n collapseItem() {\n const controls = this.inputs.popupControls() as ComboboxTreeControls<T, V>;\n this._navigate(() => controls?.collapseItem());\n }\n\n /** Expands the currently focused item in the combobox. */\n expandItem() {\n const controls = this.inputs.popupControls() as ComboboxTreeControls<T, V>;\n this._navigate(() => controls?.expandItem());\n }\n\n /** Selects an item in the combobox popup. */\n select(opts: {item?: T; commit?: boolean; close?: boolean} = {}) {\n const controls = this.listControls();\n\n // When no item is specified (e.g. on keyboard toggle), get the active item instead.\n // Note: this is only necessary for disabled check, as select/toggle will check active item too.\n const item = opts.item ?? controls?.getActiveItem();\n\n // Check if item is disabled before proceeding.\n if (item?.disabled()) {\n return;\n }\n\n if (opts.item) {\n controls?.focus(opts.item, {focusElement: false});\n }\n\n controls?.multi() ? controls.toggle(opts.item) : controls?.select(opts.item);\n\n if (opts.commit) {\n this.commit();\n }\n if (opts.close) {\n this.close();\n }\n }\n\n /** Updates the value of the input based on the currently selected item. */\n commit() {\n const inputEl = this.inputs.inputEl();\n const selectedItems = this.listControls()?.getSelectedItems();\n\n if (!inputEl) {\n return;\n }\n\n inputEl.value = selectedItems?.map(i => i.searchTerm()).join(', ') || '';\n this.inputs.inputValue?.set(inputEl.value);\n\n if (this.inputs.filterMode() === 'highlight' && !this.readonly()) {\n const length = inputEl.value.length;\n inputEl.setSelectionRange(length, length);\n }\n }\n\n /** Navigates and handles additional actions based on filter mode. */\n private _navigate(operation: () => void) {\n operation();\n\n if (this.inputs.filterMode() !== 'manual') {\n this.select();\n }\n\n if (this.inputs.filterMode() === 'highlight') {\n // This is to handle when the user navigates back to the originally highlighted item.\n // E.g. User types \"Al\", highlights \"Alice\", then navigates down and back up to \"Alice\".\n const selectedItem = this.listControls()?.getSelectedItems()[0];\n\n if (!selectedItem) {\n return;\n }\n\n if (selectedItem === this.highlightedItem()) {\n this.highlight();\n } else {\n const inputEl = this.inputs.inputEl()!;\n inputEl.value = selectedItem?.searchTerm()!;\n }\n }\n }\n}\n\nexport class ComboboxDialogPattern {\n readonly id = () => this.inputs.id();\n\n readonly role = () => 'dialog' as const;\n\n readonly keydown = computed(() => {\n return new KeyboardEventManager().on('Escape', () => this.inputs.combobox.close());\n });\n\n constructor(\n readonly inputs: {\n combobox: ComboboxPattern<any, any>;\n element: SignalLike<HTMLDialogElement>;\n id: SignalLike<string>;\n },\n ) {}\n\n onKeydown(event: KeyboardEvent) {\n this.keydown().handle(event);\n }\n\n onClick(event: MouseEvent) {\n // The \"click\" event fires on the dialog when the user clicks outside of the dialog content.\n if (event.target === this.inputs.element()) {\n this.inputs.combobox.close();\n }\n }\n}\n"],"names":["ComboboxPattern","inputs","expanded","signal","disabled","activeDescendant","computed","popupControls","ComboboxDialogPattern","activeId","highlightedItem","undefined","_isDeleting","isFocused","hasBeenInteracted","expandKey","textDirection","collapseKey","popupId","id","autocomplete","filterMode","hasPopup","role","readonly","listControls","treeControls","keydown","manager","KeyboardEventManager","on","open","alwaysExpanded","close","reset","first","last","selected","next","ignoreRepeat","prev","select","commit","multi","isItemSelectable","isItemExpandable","expandItem","collapseItem","isItemCollapsible","click","PointerEventManager","e","target","inputEl","controls","item","getItem","toggleExpansion","focus","constructor","onKeydown","event","handle","onClick","onInput","inputValue","set","value","InputEvent","inputType","match","highlight","onFocusIn","firstSelectedItem","getSelectedItems","onFocusOut","relatedTarget","HTMLElement","containerEl","contains","items","find","i","searchTerm","firstMatch","onFilter","isInitialRender","length","expandAll","collapseAll","clearSelection","unfocus","selectedItems","isHighlightable","toLowerCase","startsWith","slice","setSelectionRange","opts","some","selectedItem","nav","isHighlighting","selectionStart","includes","_navigate","getActiveItem","focusElement","toggle","map","join","operation","combobox","element"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import { computed, signal, KeyboardEventManager, Modifier } from './_signal-like-chunk.mjs';
1
+ import { signal, computed, KeyboardEventManager, Modifier } from './_signal-like-chunk.mjs';
2
2
  import { List } from './_list-chunk.mjs';
3
- import { PointerEventManager } from './_pointer-event-manager-chunk.mjs';
3
+ import { ClickEventManager } from './_click-event-manager-chunk.mjs';
4
4
 
5
5
  class ListboxPattern {
6
6
  inputs;
7
7
  listBehavior;
8
+ hasBeenInteracted = signal(false);
8
9
  orientation;
9
10
  disabled = computed(() => this.listBehavior.disabled());
10
11
  readonly;
@@ -103,8 +104,8 @@ class ListboxPattern {
103
104
  }
104
105
  return manager;
105
106
  });
106
- pointerdown = computed(() => {
107
- const manager = new PointerEventManager();
107
+ clickManager = computed(() => {
108
+ const manager = new ClickEventManager();
108
109
  if (this.readonly()) {
109
110
  return manager.on(e => this.listBehavior.goto(this._getItem(e)));
110
111
  }
@@ -153,14 +154,19 @@ class ListboxPattern {
153
154
  }
154
155
  onKeydown(event) {
155
156
  if (!this.disabled()) {
157
+ this.hasBeenInteracted.set(true);
156
158
  this.keydown().handle(event);
157
159
  }
158
160
  }
159
- onPointerdown(event) {
161
+ onClick(event) {
160
162
  if (!this.disabled()) {
161
- this.pointerdown().handle(event);
163
+ this.hasBeenInteracted.set(true);
164
+ this.clickManager().handle(event);
162
165
  }
163
166
  }
167
+ onFocusIn() {
168
+ this.hasBeenInteracted.set(true);
169
+ }
164
170
  setDefaultState() {
165
171
  let firstItem = null;
166
172
  for (const item of this.inputs.items()) {
@@ -178,6 +184,10 @@ class ListboxPattern {
178
184
  this.inputs.activeItem.set(firstItem);
179
185
  }
180
186
  }
187
+ setDefaultStateEffect() {
188
+ if (this.hasBeenInteracted()) return;
189
+ this.setDefaultState();
190
+ }
181
191
  _getItem(e) {
182
192
  if (!(e.target instanceof HTMLElement)) {
183
193
  return;
@@ -228,7 +238,7 @@ class ComboboxListboxPattern extends ListboxPattern {
228
238
  this.inputs = inputs;
229
239
  }
230
240
  onKeydown(_) {}
231
- onPointerdown(_) {}
241
+ onClick(_) {}
232
242
  setDefaultState() {}
233
243
  focus = (item, opts) => {
234
244
  this.listBehavior.goto(item, opts);