@angular/aria 21.1.0-next.2 → 21.1.0-next.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 (76) hide show
  1. package/fesm2022/_accordion-chunk.mjs +108 -0
  2. package/fesm2022/_accordion-chunk.mjs.map +1 -0
  3. package/fesm2022/_combobox-chunk.mjs +2 -2
  4. package/fesm2022/_combobox-chunk.mjs.map +1 -1
  5. package/fesm2022/_combobox-listbox-chunk.mjs +4 -286
  6. package/fesm2022/_combobox-listbox-chunk.mjs.map +1 -1
  7. package/fesm2022/_combobox-tree-chunk.mjs +331 -0
  8. package/fesm2022/_combobox-tree-chunk.mjs.map +1 -0
  9. package/fesm2022/_deferred-content-chunk.mjs +124 -0
  10. package/fesm2022/_deferred-content-chunk.mjs.map +1 -0
  11. package/fesm2022/_expansion-chunk.mjs +41 -0
  12. package/fesm2022/_expansion-chunk.mjs.map +1 -0
  13. package/fesm2022/_list-chunk.mjs +287 -0
  14. package/fesm2022/_list-chunk.mjs.map +1 -0
  15. package/fesm2022/_list-navigation-chunk.mjs +1 -1
  16. package/fesm2022/_list-navigation-chunk.mjs.map +1 -1
  17. package/fesm2022/_menu-chunk.mjs +515 -0
  18. package/fesm2022/_menu-chunk.mjs.map +1 -0
  19. package/fesm2022/_pointer-event-manager-chunk.mjs +2 -82
  20. package/fesm2022/_pointer-event-manager-chunk.mjs.map +1 -1
  21. package/fesm2022/_signal-like-chunk.mjs +118 -0
  22. package/fesm2022/_signal-like-chunk.mjs.map +1 -0
  23. package/fesm2022/_tabs-chunk.mjs +159 -0
  24. package/fesm2022/_tabs-chunk.mjs.map +1 -0
  25. package/fesm2022/_toolbar-widget-group-chunk.mjs +148 -0
  26. package/fesm2022/_toolbar-widget-group-chunk.mjs.map +1 -0
  27. package/fesm2022/_widget-chunk.mjs +3 -2
  28. package/fesm2022/_widget-chunk.mjs.map +1 -1
  29. package/fesm2022/accordion.mjs +10 -5
  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 +50 -13
  34. package/fesm2022/combobox.mjs.map +1 -1
  35. package/fesm2022/grid.mjs +3 -1
  36. package/fesm2022/grid.mjs.map +1 -1
  37. package/fesm2022/listbox.mjs +9 -7
  38. package/fesm2022/listbox.mjs.map +1 -1
  39. package/fesm2022/menu.mjs +9 -5
  40. package/fesm2022/menu.mjs.map +1 -1
  41. package/fesm2022/private.mjs +13 -1402
  42. package/fesm2022/private.mjs.map +1 -1
  43. package/fesm2022/tabs.mjs +14 -6
  44. package/fesm2022/tabs.mjs.map +1 -1
  45. package/fesm2022/toolbar.mjs +5 -1
  46. package/fesm2022/toolbar.mjs.map +1 -1
  47. package/fesm2022/tree.mjs +13 -5
  48. package/fesm2022/tree.mjs.map +1 -1
  49. package/package.json +2 -2
  50. package/types/_accordion-chunk.d.ts +100 -0
  51. package/types/_combobox-chunk.d.ts +187 -91
  52. package/types/_deferred-content-chunk.d.ts +42 -0
  53. package/types/_expansion-chunk.d.ts +40 -0
  54. package/types/_grid-chunk.d.ts +41 -41
  55. package/types/_keyboard-event-manager-chunk.d.ts +68 -0
  56. package/types/_list-chunk.d.ts +8 -9
  57. package/types/_list-navigation-chunk.d.ts +8 -101
  58. package/types/_listbox-chunk.d.ts +17 -16
  59. package/types/_menu-chunk.d.ts +267 -0
  60. package/types/_pointer-event-manager-chunk.d.ts +34 -0
  61. package/types/_tabs-chunk.d.ts +153 -0
  62. package/types/_toolbar-chunk.d.ts +124 -0
  63. package/types/_tree-chunk.d.ts +185 -0
  64. package/types/accordion.d.ts +13 -5
  65. package/types/aria.d.ts +1 -1
  66. package/types/combobox.d.ts +122 -6
  67. package/types/grid.d.ts +10 -0
  68. package/types/listbox.d.ts +17 -5
  69. package/types/menu.d.ts +23 -5
  70. package/types/private.d.ts +25 -885
  71. package/types/tabs.d.ts +24 -8
  72. package/types/toolbar.d.ts +12 -4
  73. package/types/tree.d.ts +16 -5
  74. package/fesm2022/_combobox-popup-chunk.mjs +0 -46
  75. package/fesm2022/_combobox-popup-chunk.mjs.map +0 -1
  76. package/types/_combobox-chunk.d2.ts +0 -193
@@ -0,0 +1,108 @@
1
+ import { ListExpansion } from './_expansion-chunk.mjs';
2
+ import { ListFocus, ListNavigation } from './_list-navigation-chunk.mjs';
3
+ import { computed, KeyboardEventManager } from './_signal-like-chunk.mjs';
4
+ import { PointerEventManager } from './_pointer-event-manager-chunk.mjs';
5
+
6
+ const focusMode = () => 'roving';
7
+ class AccordionGroupPattern {
8
+ inputs;
9
+ navigationBehavior;
10
+ focusBehavior;
11
+ expansionBehavior;
12
+ constructor(inputs) {
13
+ this.inputs = inputs;
14
+ this.focusBehavior = new ListFocus({
15
+ ...inputs,
16
+ focusMode
17
+ });
18
+ this.navigationBehavior = new ListNavigation({
19
+ ...inputs,
20
+ focusMode,
21
+ focusManager: this.focusBehavior
22
+ });
23
+ this.expansionBehavior = new ListExpansion({
24
+ ...inputs
25
+ });
26
+ }
27
+ prevKey = computed(() => {
28
+ if (this.inputs.orientation() === 'vertical') {
29
+ return 'ArrowUp';
30
+ }
31
+ return this.inputs.textDirection() === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
32
+ });
33
+ nextKey = computed(() => {
34
+ if (this.inputs.orientation() === 'vertical') {
35
+ return 'ArrowDown';
36
+ }
37
+ return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
38
+ });
39
+ keydown = computed(() => {
40
+ return new KeyboardEventManager().on(this.prevKey, () => this.navigationBehavior.prev()).on(this.nextKey, () => this.navigationBehavior.next()).on('Home', () => this.navigationBehavior.first()).on('End', () => this.navigationBehavior.last()).on(' ', () => this.toggle()).on('Enter', () => this.toggle());
41
+ });
42
+ pointerdown = computed(() => {
43
+ return new PointerEventManager().on(e => {
44
+ const item = this.inputs.getItem(e.target);
45
+ if (!item) return;
46
+ this.navigationBehavior.goto(item);
47
+ this.expansionBehavior.toggle(item);
48
+ });
49
+ });
50
+ onKeydown(event) {
51
+ this.keydown().handle(event);
52
+ }
53
+ onPointerdown(event) {
54
+ this.pointerdown().handle(event);
55
+ }
56
+ onFocus(event) {
57
+ const item = this.inputs.getItem(event.target);
58
+ if (!item) return;
59
+ if (!this.focusBehavior.isFocusable(item)) return;
60
+ this.focusBehavior.focus(item);
61
+ }
62
+ toggle() {
63
+ const activeItem = this.inputs.activeItem();
64
+ if (activeItem === undefined) return;
65
+ this.expansionBehavior.toggle(activeItem);
66
+ }
67
+ }
68
+ class AccordionTriggerPattern {
69
+ inputs;
70
+ id = () => this.inputs.id();
71
+ element = () => this.inputs.element();
72
+ expandable = () => true;
73
+ expanded;
74
+ active = computed(() => this.inputs.accordionGroup().inputs.activeItem() === this);
75
+ controls = computed(() => this.inputs.accordionPanel()?.inputs.id());
76
+ tabIndex = computed(() => this.inputs.accordionGroup().focusBehavior.isFocusable(this) ? 0 : -1);
77
+ disabled = computed(() => this.inputs.disabled() || this.inputs.accordionGroup().inputs.disabled());
78
+ hardDisabled = computed(() => this.disabled() && !this.inputs.accordionGroup().inputs.softDisabled());
79
+ index = computed(() => this.inputs.accordionGroup().inputs.items().indexOf(this));
80
+ constructor(inputs) {
81
+ this.inputs = inputs;
82
+ this.expanded = inputs.expanded;
83
+ }
84
+ open() {
85
+ this.inputs.accordionGroup().expansionBehavior.open(this);
86
+ }
87
+ close() {
88
+ this.inputs.accordionGroup().expansionBehavior.close(this);
89
+ }
90
+ toggle() {
91
+ this.inputs.accordionGroup().expansionBehavior.toggle(this);
92
+ }
93
+ }
94
+ class AccordionPanelPattern {
95
+ inputs;
96
+ id;
97
+ accordionTrigger;
98
+ hidden;
99
+ constructor(inputs) {
100
+ this.inputs = inputs;
101
+ this.id = inputs.id;
102
+ this.accordionTrigger = inputs.accordionTrigger;
103
+ this.hidden = computed(() => inputs.accordionTrigger()?.expanded() === false);
104
+ }
105
+ }
106
+
107
+ export { AccordionGroupPattern, AccordionPanelPattern, AccordionTriggerPattern };
108
+ //# sourceMappingURL=_accordion-chunk.mjs.map
@@ -0,0 +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 /** A function that returns the trigger associated with a given element. */\n getItem: (e: Element | null | undefined) => AccordionTriggerPattern | undefined;\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())\n .on(this.nextKey, () => this.navigationBehavior.next())\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.inputs.getItem(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.inputs.getItem(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\n/** Inputs for the AccordionTriggerPattern. */\nexport interface AccordionTriggerInputs\n extends Omit<ListNavigationItem & ListFocusItem, 'index'>, Omit<ExpansionItem, 'expandable'> {\n /** A local unique identifier for the trigger's corresponding panel. */\n panelId: SignalLike<string>;\n\n /** The parent accordion group that controls this trigger. */\n accordionGroup: SignalLike<AccordionGroupPattern>;\n\n /** The accordion panel controlled by this trigger. */\n accordionPanel: SignalLike<AccordionPanelPattern | undefined>;\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> = () => this.inputs.id();\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>;\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 = computed(() => this.inputs.accordionPanel()?.inputs.id());\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 /** The index of the trigger within its accordion group. */\n readonly index = computed(() => this.inputs.accordionGroup().inputs.items().indexOf(this));\n\n constructor(readonly inputs: AccordionTriggerInputs) {\n this.expanded = inputs.expanded;\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\n/** Represents the required inputs for the AccordionPanelPattern. */\nexport interface AccordionPanelInputs {\n /** A global unique identifier for the panel. */\n id: SignalLike<string>;\n\n /** A local unique identifier for the panel, matching its trigger's panelId. */\n panelId: SignalLike<string>;\n\n /** The parent accordion trigger that controls this panel. */\n accordionTrigger: SignalLike<AccordionTriggerPattern | undefined>;\n}\n\n/** Represents an accordion panel. */\nexport class AccordionPanelPattern {\n /** A global unique identifier for the panel. */\n id: SignalLike<string>;\n\n /** The parent accordion trigger that controls this panel. */\n accordionTrigger: SignalLike<AccordionTriggerPattern | undefined>;\n\n /** Whether the accordion panel is hidden. True if the associated trigger is not expanded. */\n hidden: SignalLike<boolean>;\n\n constructor(readonly inputs: AccordionPanelInputs) {\n this.id = inputs.id;\n this.accordionTrigger = inputs.accordionTrigger;\n this.hidden = computed(() => inputs.accordionTrigger()?.expanded() === false);\n }\n}\n"],"names":["focusMode","AccordionGroupPattern","inputs","navigationBehavior","focusBehavior","expansionBehavior","constructor","ListFocus","ListNavigation","focusManager","ListExpansion","prevKey","computed","orientation","textDirection","nextKey","keydown","KeyboardEventManager","on","prev","next","first","last","toggle","pointerdown","PointerEventManager","e","item","getItem","target","goto","onKeydown","event","handle","onPointerdown","onFocus","isFocusable","focus","activeItem","undefined","AccordionTriggerPattern","id","element","expandable","expanded","active","accordionGroup","controls","accordionPanel","tabIndex","disabled","hardDisabled","softDisabled","index","items","indexOf","open","close","AccordionPanelPattern","accordionTrigger","hidden"],"mappings":";;;;;AA6BA,MAAMA,SAAS,GAAGA,MAAM,QAAiB;MAG5BC,qBAAqB,CAAA;EAUXC,MAAA;EARZC,kBAAkB;EAGlBC,aAAa;EAGbC,iBAAiB;EAE1BC,WAAAA,CAAqBJ,MAA4B,EAAA;IAA5B,IAAM,CAAAA,MAAA,GAANA,MAAM;AACzB,IAAA,IAAI,CAACE,aAAa,GAAG,IAAIG,SAAS,CAAC;AACjC,MAAA,GAAGL,MAAM;AACTF,MAAAA;AACD,KAAA,CAAC;AACF,IAAA,IAAI,CAACG,kBAAkB,GAAG,IAAIK,cAAc,CAAC;AAC3C,MAAA,GAAGN,MAAM;MACTF,SAAS;MACTS,YAAY,EAAE,IAAI,CAACL;AACpB,KAAA,CAAC;AACF,IAAA,IAAI,CAACC,iBAAiB,GAAG,IAAIK,aAAa,CAAC;MACzC,GAAGR;AACJ,KAAA,CAAC;AACJ;EAGAS,OAAO,GAAGC,QAAQ,CAAC,MAAK;IACtB,IAAI,IAAI,CAACV,MAAM,CAACW,WAAW,EAAE,KAAK,UAAU,EAAE;AAC5C,MAAA,OAAO,SAAS;AAClB;AACA,IAAA,OAAO,IAAI,CAACX,MAAM,CAACY,aAAa,EAAE,KAAK,KAAK,GAAG,YAAY,GAAG,WAAW;AAC3E,GAAC,CAAC;EAGFC,OAAO,GAAGH,QAAQ,CAAC,MAAK;IACtB,IAAI,IAAI,CAACV,MAAM,CAACW,WAAW,EAAE,KAAK,UAAU,EAAE;AAC5C,MAAA,OAAO,WAAW;AACpB;AACA,IAAA,OAAO,IAAI,CAACX,MAAM,CAACY,aAAa,EAAE,KAAK,KAAK,GAAG,WAAW,GAAG,YAAY;AAC3E,GAAC,CAAC;EAGFE,OAAO,GAAGJ,QAAQ,CAAC,MAAK;AACtB,IAAA,OAAO,IAAIK,oBAAoB,EAAE,CAC9BC,EAAE,CAAC,IAAI,CAACP,OAAO,EAAE,MAAM,IAAI,CAACR,kBAAkB,CAACgB,IAAI,EAAE,CAAA,CACrDD,EAAE,CAAC,IAAI,CAACH,OAAO,EAAE,MAAM,IAAI,CAACZ,kBAAkB,CAACiB,IAAI,EAAE,CAAA,CACrDF,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,CAACf,kBAAkB,CAACkB,KAAK,EAAE,CAAA,CAChDH,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,CAACf,kBAAkB,CAACmB,IAAI,EAAE,CAAA,CAC9CJ,EAAE,CAAC,GAAG,EAAE,MAAM,IAAI,CAACK,MAAM,EAAE,CAAA,CAC3BL,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAACK,MAAM,EAAE,CAAC;AACrC,GAAC,CAAC;EAGFC,WAAW,GAAGZ,QAAQ,CAAC,MAAK;IAC1B,OAAO,IAAIa,mBAAmB,EAAE,CAACP,EAAE,CAACQ,CAAC,IAAG;MACtC,MAAMC,IAAI,GAAG,IAAI,CAACzB,MAAM,CAAC0B,OAAO,CAACF,CAAC,CAACG,MAAiB,CAAC;MACrD,IAAI,CAACF,IAAI,EAAE;AAEX,MAAA,IAAI,CAACxB,kBAAkB,CAAC2B,IAAI,CAACH,IAAI,CAAC;AAClC,MAAA,IAAI,CAACtB,iBAAiB,CAACkB,MAAM,CAACI,IAAI,CAAC;AACrC,KAAC,CAAC;AACJ,GAAC,CAAC;EAGFI,SAASA,CAACC,KAAoB,EAAA;IAC5B,IAAI,CAAChB,OAAO,EAAE,CAACiB,MAAM,CAACD,KAAK,CAAC;AAC9B;EAGAE,aAAaA,CAACF,KAAmB,EAAA;IAC/B,IAAI,CAACR,WAAW,EAAE,CAACS,MAAM,CAACD,KAAK,CAAC;AAClC;EAGAG,OAAOA,CAACH,KAAiB,EAAA;IACvB,MAAML,IAAI,GAAG,IAAI,CAACzB,MAAM,CAAC0B,OAAO,CAACI,KAAK,CAACH,MAAiB,CAAC;IACzD,IAAI,CAACF,IAAI,EAAE;IACX,IAAI,CAAC,IAAI,CAACvB,aAAa,CAACgC,WAAW,CAACT,IAAI,CAAC,EAAE;AAE3C,IAAA,IAAI,CAACvB,aAAa,CAACiC,KAAK,CAACV,IAAI,CAAC;AAChC;AAGAJ,EAAAA,MAAMA,GAAA;IACJ,MAAMe,UAAU,GAAG,IAAI,CAACpC,MAAM,CAACoC,UAAU,EAAE;IAC3C,IAAIA,UAAU,KAAKC,SAAS,EAAE;AAC9B,IAAA,IAAI,CAAClC,iBAAiB,CAACkB,MAAM,CAACe,UAAU,CAAC;AAC3C;AACD;MAgBYE,uBAAuB,CAAA;EAqCbtC,MAAA;EAnCZuC,EAAE,GAAuBA,MAAM,IAAI,CAACvC,MAAM,CAACuC,EAAE,EAAE;EAG/CC,OAAO,GAA4BA,MAAM,IAAI,CAACxC,MAAM,CAACwC,OAAO,EAAG;EAG/DC,UAAU,GAAwBA,MAAM,IAAI;EAG5CC,QAAQ;AAGRC,EAAAA,MAAM,GAAGjC,QAAQ,CAAC,MAAM,IAAI,CAACV,MAAM,CAAC4C,cAAc,EAAE,CAAC5C,MAAM,CAACoC,UAAU,EAAE,KAAK,IAAI,CAAC;AAGlFS,EAAAA,QAAQ,GAAGnC,QAAQ,CAAC,MAAM,IAAI,CAACV,MAAM,CAAC8C,cAAc,EAAE,EAAE9C,MAAM,CAACuC,EAAE,EAAE,CAAC;EAGpEQ,QAAQ,GAAGrC,QAAQ,CAAC,MAC3B,IAAI,CAACV,MAAM,CAAC4C,cAAc,EAAE,CAAC1C,aAAa,CAACgC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CACtE;EAGQc,QAAQ,GAAGtC,QAAQ,CAC1B,MAAM,IAAI,CAACV,MAAM,CAACgD,QAAQ,EAAE,IAAI,IAAI,CAAChD,MAAM,CAAC4C,cAAc,EAAE,CAAC5C,MAAM,CAACgD,QAAQ,EAAE,CAC/E;EAGQC,YAAY,GAAGvC,QAAQ,CAC9B,MAAM,IAAI,CAACsC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAChD,MAAM,CAAC4C,cAAc,EAAE,CAAC5C,MAAM,CAACkD,YAAY,EAAE,CAC7E;EAGQC,KAAK,GAAGzC,QAAQ,CAAC,MAAM,IAAI,CAACV,MAAM,CAAC4C,cAAc,EAAE,CAAC5C,MAAM,CAACoD,KAAK,EAAE,CAACC,OAAO,CAAC,IAAI,CAAC,CAAC;EAE1FjD,WAAAA,CAAqBJ,MAA8B,EAAA;IAA9B,IAAM,CAAAA,MAAA,GAANA,MAAM;AACzB,IAAA,IAAI,CAAC0C,QAAQ,GAAG1C,MAAM,CAAC0C,QAAQ;AACjC;AAGAY,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,CAACtD,MAAM,CAAC4C,cAAc,EAAE,CAACzC,iBAAiB,CAACmD,IAAI,CAAC,IAAI,CAAC;AAC3D;AAGAC,EAAAA,KAAKA,GAAA;AACH,IAAA,IAAI,CAACvD,MAAM,CAAC4C,cAAc,EAAE,CAACzC,iBAAiB,CAACoD,KAAK,CAAC,IAAI,CAAC;AAC5D;AAGAlC,EAAAA,MAAMA,GAAA;AACJ,IAAA,IAAI,CAACrB,MAAM,CAAC4C,cAAc,EAAE,CAACzC,iBAAiB,CAACkB,MAAM,CAAC,IAAI,CAAC;AAC7D;AACD;MAeYmC,qBAAqB,CAAA;EAUXxD,MAAA;EARrBuC,EAAE;EAGFkB,gBAAgB;EAGhBC,MAAM;EAENtD,WAAAA,CAAqBJ,MAA4B,EAAA;IAA5B,IAAM,CAAAA,MAAA,GAANA,MAAM;AACzB,IAAA,IAAI,CAACuC,EAAE,GAAGvC,MAAM,CAACuC,EAAE;AACnB,IAAA,IAAI,CAACkB,gBAAgB,GAAGzD,MAAM,CAACyD,gBAAgB;AAC/C,IAAA,IAAI,CAACC,MAAM,GAAGhD,QAAQ,CAAC,MAAMV,MAAM,CAACyD,gBAAgB,EAAE,EAAEf,QAAQ,EAAE,KAAK,KAAK,CAAC;AAC/E;AACD;;;;"}
@@ -1,5 +1,5 @@
1
- import { signal, computed } from '@angular/core';
2
- import { PointerEventManager, KeyboardEventManager } from './_pointer-event-manager-chunk.mjs';
1
+ import { signal, computed, KeyboardEventManager } from './_signal-like-chunk.mjs';
2
+ import { PointerEventManager } from './_pointer-event-manager-chunk.mjs';
3
3
 
4
4
  class ComboboxPattern {
5
5
  inputs;
@@ -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 {computed, signal} from '@angular/core';\nimport {SignalLike, WritableSignalLike} 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())\n .on('ArrowUp', () => this.prev())\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 const item = opts.item ?? controls?.getActiveItem();\n\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","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":";;;MAyIaA,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;AAEA,IAAA,OAAOD,aAAa,EAAEE,QAAQ,EAAE,IAAI,IAAI;AAC1C,GAAC,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;AAEA,IAAA,OAAOD,aAAa;GACrB;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;AAEA,IAAA,OAAO,IAAI;GACZ;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;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;AACF;AAEA,MAAA,OAAOH,OAAO;AAChB;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;AAEA,IAAA,IAAI,CAAC,IAAI,CAACtB,QAAQ,EAAE,EAAE;MACpB0B,OAAO,CACJE,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;AAAK,OAAA,CAAC,CAAC;AAE/C,MAAA,IAAI,IAAI,CAACZ,QAAQ,EAAE,EAAE;QACnBI,OAAO,CACJE,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;AAAK,SAAA,CAAC,CAAC;AAC/C;AAEA,MAAA,OAAOT,OAAO;AAChB;IAEAA,OAAO,CACJE,EAAE,CAAC,WAAW,EAAE,MAAM,IAAI,CAACQ,IAAI,EAAE,CAAA,CACjCR,EAAE,CAAC,SAAS,EAAE,MAAM,IAAI,CAACS,IAAI,EAAE,CAAA,CAC/BT,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,CAACU,MAAM,CAAC;AAACC,QAAAA,MAAM,EAAE,IAAI;AAAER,QAAAA,KAAK,EAAE,CAAC1B,aAAa,CAACmC,KAAK;AAAE,OAAC,CAAC,CAAC;AACnF;AAEA,IAAA,IAAInC,aAAa,CAACgB,IAAI,EAAE,KAAK,SAAS,EAAE;AACtCK,MAAAA,OAAO,CAACE,EAAE,CAAC,OAAO,EAAE,MAAK;QACvB,IAAI,CAACU,MAAM,CAAC;AAACC,UAAAA,MAAM,EAAE,IAAI;AAAER,UAAAA,KAAK,EAAE,CAAC1B,aAAa,CAACmC,KAAK;AAAE,SAAC,CAAC;AAC5D,OAAC,CAAC;AACJ;AAEA,IAAA,MAAMhB,YAAY,GAAG,IAAI,CAACA,YAAY,EAAE;AAExC,IAAA,IAAIA,YAAY,EAAEiB,gBAAgB,EAAE,EAAE;MACpCf,OAAO,CAACE,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAACU,MAAM,CAAC;AAACC,QAAAA,MAAM,EAAE,IAAI;AAAER,QAAAA,KAAK,EAAE;AAAI,OAAC,CAAC,CAAC;AACrE;AAEA,IAAA,IAAIP,YAAY,EAAEkB,gBAAgB,EAAE,EAAE;AACpChB,MAAAA,OAAO,CACJE,EAAE,CAAC,IAAI,CAACf,SAAS,EAAE,EAAE,MAAM,IAAI,CAAC8B,UAAU,EAAE,CAAA,CAC5Cf,EAAE,CAAC,IAAI,CAACb,WAAW,EAAE,EAAE,MAAM,IAAI,CAAC6B,YAAY,EAAE,CAAC;AAEpD,MAAA,IAAI,CAACpB,YAAY,CAACiB,gBAAgB,EAAE,EAAE;QACpCf,OAAO,CAACE,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,CAACe,UAAU,EAAE,CAAC;AAC9C;AACF;AAEA,IAAA,IAAInB,YAAY,EAAEqB,iBAAiB,EAAE,EAAE;AACrCnB,MAAAA,OAAO,CAACE,EAAE,CAAC,IAAI,CAACb,WAAW,EAAE,EAAE,MAAM,IAAI,CAAC6B,YAAY,EAAE,CAAC;AAC3D;AAEA,IAAA,OAAOlB,OAAO;AAChB,GAAC,CAAC;AAGFoB,EAAAA,KAAK,GAAG1C,QAAQ,CAAC,MACf,IAAI2C,mBAAmB,EAAE,CAACnB,EAAE,CAACoB,CAAC,IAAG;IAC/B,IAAIA,CAAC,CAACC,MAAM,KAAK,IAAI,CAAClD,MAAM,CAACmD,OAAO,EAAE,EAAE;AACtC,MAAA,IAAI,IAAI,CAAC5B,QAAQ,EAAE,EAAE;AACnB,QAAA,IAAI,CAACtB,QAAQ,EAAE,GAAG,IAAI,CAAC+B,KAAK,EAAE,GAAG,IAAI,CAACF,IAAI,CAAC;AAACM,UAAAA,QAAQ,EAAE;AAAK,SAAA,CAAC;AAC9D;AACF;IAEA,MAAMgB,QAAQ,GAAG,IAAI,CAACpD,MAAM,CAACM,aAAa,EAAE;IAE5C,IAAI8C,QAAQ,YAAY7C,qBAAqB,EAAE;AAC7C,MAAA;AACF;AAEA,IAAA,MAAM8C,IAAI,GAAGD,QAAQ,EAAEE,OAAO,CAACL,CAAC,CAAC;AAEjC,IAAA,IAAII,IAAI,EAAE;AACR,MAAA,IAAID,QAAQ,EAAE9B,IAAI,EAAE,KAAK,MAAM,EAAE;QAC/B,MAAMG,YAAY,GAAG2B,QAAsC;AAE3D,QAAA,IAAI3B,YAAY,CAACkB,gBAAgB,CAACU,IAAI,CAAC,IAAI,CAAC5B,YAAY,CAACiB,gBAAgB,CAACW,IAAI,CAAC,EAAE;AAC/E5B,UAAAA,YAAY,CAAC8B,eAAe,CAACF,IAAI,CAAC;UAClC,IAAI,CAACrD,MAAM,CAACmD,OAAO,EAAE,EAAEK,KAAK,EAAE;AAC9B,UAAA;AACF;AACF;MAEA,IAAI,CAACjB,MAAM,CAAC;QAACc,IAAI;AAAEb,QAAAA,MAAM,EAAE,IAAI;AAAER,QAAAA,KAAK,EAAE,CAACoB,QAAQ,EAAEX,KAAK;AAAE,OAAC,CAAC;MAC5D,IAAI,CAACzC,MAAM,CAACmD,OAAO,EAAE,EAAEK,KAAK,EAAE;AAChC;AACF,GAAC,CAAC,CACH;EAEDC,WAAAA,CAAqBzD,MAA4B,EAAA;IAA5B,IAAM,CAAAA,MAAA,GAANA,MAAM;AAAyB;EAGpD0D,SAASA,CAACC,KAAoB,EAAA;IAC5B,IAAI,CAAC,IAAI,CAAC3D,MAAM,CAACG,QAAQ,EAAE,EAAE;MAC3B,IAAI,CAACuB,OAAO,EAAE,CAACkC,MAAM,CAACD,KAAK,CAAC;AAC9B;AACF;EAGAE,OAAOA,CAACF,KAAiB,EAAA;IACvB,IAAI,CAAC,IAAI,CAAC3D,MAAM,CAACG,QAAQ,EAAE,EAAE;MAC3B,IAAI,CAAC4C,KAAK,EAAE,CAACa,MAAM,CAACD,KAAqB,CAAC;AAC5C;AACF;EAGAG,OAAOA,CAACH,KAAY,EAAA;AAClB,IAAA,IAAI,IAAI,CAAC3D,MAAM,CAACG,QAAQ,EAAE,IAAI,IAAI,CAACH,MAAM,CAACuB,QAAQ,EAAE,EAAE;AACpD,MAAA;AACF;IAEA,MAAM4B,OAAO,GAAG,IAAI,CAACnD,MAAM,CAACmD,OAAO,EAAE;IAErC,IAAI,CAACA,OAAO,EAAE;AACZ,MAAA;AACF;IAEA,MAAM7C,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA;AACF;IAEA,IAAI,CAACuB,IAAI,EAAE;IACX,IAAI,CAAC9B,MAAM,CAAC+D,UAAU,EAAEC,GAAG,CAACb,OAAO,CAACc,KAAK,CAAC;AAC1C,IAAA,IAAI,CAACtD,UAAU,GAAGgD,KAAK,YAAYO,UAAU,IAAI,CAAC,CAACP,KAAK,CAACQ,SAAS,CAACC,KAAK,CAAC,SAAS,CAAC;AAEnF,IAAA,IAAI,IAAI,CAACpE,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,IAAI,CAAC,IAAI,CAACT,UAAU,EAAE;MAChE,IAAI,CAAC0D,SAAS,EAAE;AAClB;AACF;AAGAC,EAAAA,SAASA,GAAA;AACP,IAAA,IAAI,IAAI,CAACtE,MAAM,CAAC+B,cAAc,EAAE,IAAI,CAAC,IAAI,CAAClB,cAAc,EAAE,EAAE;AAC1D,MAAA,MAAM0D,iBAAiB,GAAG,IAAI,CAAC/C,YAAY,EAAE,EAAEgD,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACpED,MAAAA,iBAAiB,GAAG,IAAI,CAAC/C,YAAY,EAAE,EAAEgC,KAAK,CAACe,iBAAiB,CAAC,GAAG,IAAI,CAACrC,KAAK,EAAE;AAClF;AAEA,IAAA,IAAI,CAACtB,SAAS,CAACoD,GAAG,CAAC,IAAI,CAAC;AACxB,IAAA,IAAI,CAACnD,cAAc,CAACmD,GAAG,CAAC,IAAI,CAAC;AAC/B;EAGAS,UAAUA,CAACd,KAAiB,EAAA;AAC1B,IAAA,IAAI,IAAI,CAAC3D,MAAM,CAACG,QAAQ,EAAE,EAAE;AAC1B,MAAA;AACF;IAEA,MAAMG,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA;AACF;IAEA,IACE,EAAEoD,KAAK,CAACe,aAAa,YAAYC,WAAW,CAAC,IAC7C,CAAC,IAAI,CAAC3E,MAAM,CAAC4E,WAAW,EAAE,EAAEC,QAAQ,CAAClB,KAAK,CAACe,aAAa,CAAC,EACzD;AACA,MAAA,IAAI,CAAC9D,SAAS,CAACoD,GAAG,CAAC,KAAK,CAAC;AAEzB,MAAA,IAAI,CAAC,IAAI,CAAC/D,QAAQ,EAAE,EAAE;AACpB,QAAA;AACF;AAEA,MAAA,IAAI,IAAI,CAACsB,QAAQ,EAAE,EAAE;QACnB,IAAI,CAACS,KAAK,EAAE;AACZ,QAAA;AACF;MAEA,IAAI,IAAI,CAAChC,MAAM,CAACoB,UAAU,EAAE,KAAK,QAAQ,EAAE;QACzC,IAAI,CAACoB,MAAM,EAAE;AACf,OAAA,MAAO;QACL,MAAMa,IAAI,GAAG/C,aAAa,EACtBwE,KAAK,EAAE,CACRC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,UAAU,EAAE,KAAK,IAAI,CAACjF,MAAM,CAACmD,OAAO,EAAE,EAAEc,KAAK,CAAC;AAE7D,QAAA,IAAIZ,IAAI,EAAE;UACR,IAAI,CAACd,MAAM,CAAC;AAACc,YAAAA;AAAI,WAAC,CAAC;AACrB;AACF;MAEA,IAAI,CAACrB,KAAK,EAAE;AACd;AACF;EAGAkD,UAAU,GAAG7E,QAAQ,CAAC,MAAK;IAIzB,IAAI,IAAI,CAACmB,YAAY,EAAE,EAAEF,IAAI,EAAE,KAAK,SAAS,EAAE;MAC7C,OAAO,IAAI,CAACE,YAAY,EAAE,EAAEsD,KAAK,EAAE,CAAC,CAAC,CAAC;AACxC;IAEA,OAAO,IAAI,CAACtD,YAAY,EAAE,EACtBsD,KAAK,EAAE,CACRC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACf,KAAK,EAAE,KAAK,IAAI,CAACjE,MAAM,CAACkF,UAAU,EAAE,CAAC;AACtD,GAAC,CAAC;AAGFC,EAAAA,QAAQA,GAAA;AACN,IAAA,IAAI,IAAI,CAAC5D,QAAQ,EAAE,EAAE;AACnB,MAAA;AACF;IAEA,MAAMjB,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA;AACF;AAMA,IAAA,MAAM6E,eAAe,GAAG,CAAC,IAAI,CAACpF,MAAM,CAAC+D,UAAU,IAAI,CAACsB,MAAM,IAAI,CAAC,IAAI,CAAC1E,UAAU;AAE9E,IAAA,IAAIyE,eAAe,EAAE;AACnB,MAAA;AACF;AAGA,IAAA,IAAI,CAAC,IAAI,CAACxE,SAAS,EAAE,EAAE;AACrB,MAAA;AACF;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,CAAC+D,UAAU,IAAI,CAACsB,MAAM,GAAG5D,YAAY,CAAC6D,SAAS,EAAE,GAAG7D,YAAY,CAAC8D,WAAW,EAAE;AAC3F;AAEA,IAAA,MAAMlC,IAAI,GAAG,IAAI,CAAC6B,UAAU,EAAE;IAE9B,IAAI,CAAC7B,IAAI,EAAE;MACT/C,aAAa,EAAEkF,cAAc,EAAE;MAC/BlF,aAAa,EAAEmF,OAAO,EAAE;AACxB,MAAA;AACF;AAEAnF,IAAAA,aAAa,EAAEkD,KAAK,CAACH,IAAI,CAAC;IAE1B,IAAI,IAAI,CAACrD,MAAM,CAACoB,UAAU,EAAE,KAAK,QAAQ,EAAE;MACzC,IAAI,CAACmB,MAAM,CAAC;AAACc,QAAAA;AAAI,OAAC,CAAC;AACrB;AAEA,IAAA,IAAI,IAAI,CAACrD,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,IAAI,CAAC,IAAI,CAACT,UAAU,EAAE;MAChE,IAAI,CAAC0D,SAAS,EAAE;AAClB;AACF;AAGAA,EAAAA,SAASA,GAAA;IACP,MAAMlB,OAAO,GAAG,IAAI,CAACnD,MAAM,CAACmD,OAAO,EAAE;IACrC,MAAMuC,aAAa,GAAG,IAAI,CAAClE,YAAY,EAAE,EAAEgD,gBAAgB,EAAE;AAC7D,IAAA,MAAMnB,IAAI,GAAGqC,aAAa,GAAG,CAAC,CAAC;AAE/B,IAAA,IAAI,CAACvC,OAAO,IAAI,CAACE,IAAI,EAAE;AACrB,MAAA;AACF;IAEA,MAAMsC,eAAe,GAAGtC,IAAI,CACzB4B,UAAU,EAAE,CACZW,WAAW,EAAE,CACbC,UAAU,CAAC,IAAI,CAAC7F,MAAM,CAAC+D,UAAW,EAAE,CAAC6B,WAAW,EAAE,CAAC;AAEtD,IAAA,IAAID,eAAe,EAAE;AACnBxC,MAAAA,OAAO,CAACc,KAAK,GACX,IAAI,CAACjE,MAAM,CAAC+D,UAAW,EAAE,GAAGV,IAAI,CAAC4B,UAAU,EAAE,CAACa,KAAK,CAAC,IAAI,CAAC9F,MAAM,CAAC+D,UAAW,EAAE,CAACsB,MAAM,CAAC;MACvFlC,OAAO,CAAC4C,iBAAiB,CAAC,IAAI,CAAC/F,MAAM,CAAC+D,UAAW,EAAE,CAACsB,MAAM,EAAEhC,IAAI,CAAC4B,UAAU,EAAE,CAACI,MAAM,CAAC;AACrF,MAAA,IAAI,CAAC5E,eAAe,CAACuD,GAAG,CAACX,IAAI,CAAC;AAChC;AACF;EAGArB,KAAKA,CAACgE,IAAuB,EAAA;IAC3B,MAAM1F,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;AAEjD,IAAA,IAAI,IAAI,CAACN,MAAM,CAAC+B,cAAc,EAAE,EAAE;AAChC,MAAA;AACF;IAEA,IAAIzB,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA,IAAI,CAACN,QAAQ,CAAC+D,GAAG,CAAC,KAAK,CAAC;AACxB,MAAA;AACF;AAEA,IAAA,IAAI,IAAI,CAACzC,QAAQ,EAAE,EAAE;AACnB,MAAA,IAAI,CAACtB,QAAQ,CAAC+D,GAAG,CAAC,KAAK,CAAC;MACxB1D,aAAa,EAAEmF,OAAO,EAAE;AACxB,MAAA;AACF;AAEA,IAAA,IAAI,CAACO,IAAI,EAAE/D,KAAK,EAAE;MAChB,IAAI,IAAI,CAACjC,MAAM,CAACoB,UAAU,EAAE,KAAK,QAAQ,EAAE;AACzC,QAAA,IACE,CAAC,IAAI,CAACI,YAAY,EAAE,EAChBsD,KAAK,EAAE,CACRmB,IAAI,CAACjB,CAAC,IAAIA,CAAC,CAACC,UAAU,EAAE,KAAK,IAAI,CAACjF,MAAM,CAACmD,OAAO,EAAE,EAAEc,KAAK,CAAC,EAC7D;AACA,UAAA,IAAI,CAACzC,YAAY,EAAE,EAAEgE,cAAc,EAAE;AACvC;AACF;AAEA,MAAA,IAAI,CAACvF,QAAQ,CAAC+D,GAAG,CAAC,KAAK,CAAC;MACxB1D,aAAa,EAAEmF,OAAO,EAAE;AACxB,MAAA;AACF;AAEA,IAAA,IAAI,CAAC,IAAI,CAACxF,QAAQ,EAAE,EAAE;MACpB,IAAI,CAACD,MAAM,CAAC+D,UAAU,EAAEC,GAAG,CAAC,EAAE,CAAC;MAC/B1D,aAAa,EAAEkF,cAAc,EAAE;MAE/B,MAAMrC,OAAO,GAAG,IAAI,CAACnD,MAAM,CAACmD,OAAO,EAAE;AAErC,MAAA,IAAIA,OAAO,EAAE;QACXA,OAAO,CAACc,KAAK,GAAG,EAAE;AACpB;AACF,KAAA,MAAO,IAAI,IAAI,CAAChE,QAAQ,EAAE,EAAE;AAC1B,MAAA,IAAI,CAACA,QAAQ,CAAC+D,GAAG,CAAC,KAAK,CAAC;MACxB,MAAMkC,YAAY,GAAG5F,aAAa,EAAEkE,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAE3D,MAAA,IAAI0B,YAAY,EAAEjB,UAAU,EAAE,KAAK,IAAI,CAACjF,MAAM,CAAC+D,UAAW,EAAE,EAAE;QAC5DzD,aAAa,EAAEkF,cAAc,EAAE;AACjC;AAEA,MAAA;AACF;IAEA,IAAI,CAACxD,KAAK,EAAE;AAEZ,IAAA,IAAI,CAAC,IAAI,CAACT,QAAQ,EAAE,EAAE;MACpBjB,aAAa,EAAEkF,cAAc,EAAE;AACjC;AACF;EAGA1D,IAAIA,CAACqE,GAA2D,EAAA;AAC9D,IAAA,IAAI,CAAClG,QAAQ,CAAC+D,GAAG,CAAC,IAAI,CAAC;IACvB,MAAM1D,aAAa,GAAG,IAAI,CAACN,MAAM,CAACM,aAAa,EAAE;IAEjD,IAAIA,aAAa,YAAYC,qBAAqB,EAAE;AAClD,MAAA;AACF;IAEA,MAAM4C,OAAO,GAAG,IAAI,CAACnD,MAAM,CAACmD,OAAO,EAAE;IAErC,IAAIA,OAAO,IAAI,IAAI,CAACnD,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,EAAE;MACvD,MAAMgF,cAAc,GAAGjD,OAAO,CAACkD,cAAc,KAAKlD,OAAO,CAACc,KAAK,CAACoB,MAAM;MACtE,IAAI,CAACrF,MAAM,CAAC+D,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,CAAC3F,eAAe,CAACuD,GAAG,CAACtD,SAAS,CAAC;AACrC;AACF;IAEA,IAAIyF,GAAG,EAAEjE,KAAK,EAAE;MACd,IAAI,CAACA,KAAK,EAAE;AACd;IACA,IAAIiE,GAAG,EAAEhE,IAAI,EAAE;MACb,IAAI,CAACA,IAAI,EAAE;AACb;IACA,IAAIgE,GAAG,EAAE/D,QAAQ,EAAE;MACjB,MAAM8D,YAAY,GAAG5F,aAAa,EAC9BwE,KAAK,EAAE,CACRC,IAAI,CAACC,CAAC,IAAI1E,aAAa,EAAEkE,gBAAgB,EAAE,CAAC8B,QAAQ,CAACtB,CAAC,CAAC,CAAC;AAE3D,MAAA,IAAIkB,YAAY,EAAE;AAChB5F,QAAAA,aAAa,EAAEkD,KAAK,CAAC0C,YAAY,CAAC;AACpC;AACF;AACF;AAGA7D,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,CAACkE,SAAS,CAAC,MAAM,IAAI,CAAC/E,YAAY,EAAE,EAAEa,IAAI,EAAE,CAAC;AACnD;AAGAC,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,CAACiE,SAAS,CAAC,MAAM,IAAI,CAAC/E,YAAY,EAAE,EAAEc,IAAI,EAAE,CAAC;AACnD;AAGAJ,EAAAA,KAAKA,GAAA;AACH,IAAA,IAAI,CAACqE,SAAS,CAAC,MAAM,IAAI,CAAC/E,YAAY,EAAE,EAAEU,KAAK,EAAE,CAAC;AACpD;AAGAC,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,CAACoE,SAAS,CAAC,MAAM,IAAI,CAAC/E,YAAY,EAAE,EAAEW,IAAI,EAAE,CAAC;AACnD;AAGAU,EAAAA,YAAYA,GAAA;IACV,MAAMO,QAAQ,GAAG,IAAI,CAACpD,MAAM,CAACM,aAAa,EAAgC;IAC1E,IAAI,CAACiG,SAAS,CAAC,MAAMnD,QAAQ,EAAEP,YAAY,EAAE,CAAC;AAChD;AAGAD,EAAAA,UAAUA,GAAA;IACR,MAAMQ,QAAQ,GAAG,IAAI,CAACpD,MAAM,CAACM,aAAa,EAAgC;IAC1E,IAAI,CAACiG,SAAS,CAAC,MAAMnD,QAAQ,EAAER,UAAU,EAAE,CAAC;AAC9C;AAGAL,EAAAA,MAAMA,CAACyD,OAAsD,EAAE,EAAA;AAC7D,IAAA,MAAM5C,QAAQ,GAAG,IAAI,CAAC5B,YAAY,EAAE;IAEpC,MAAM6B,IAAI,GAAG2C,IAAI,CAAC3C,IAAI,IAAID,QAAQ,EAAEoD,aAAa,EAAE;AAEnD,IAAA,IAAInD,IAAI,EAAElD,QAAQ,EAAE,EAAE;AACpB,MAAA;AACF;IAEA,IAAI6F,IAAI,CAAC3C,IAAI,EAAE;AACbD,MAAAA,QAAQ,EAAEI,KAAK,CAACwC,IAAI,CAAC3C,IAAI,EAAE;AAACoD,QAAAA,YAAY,EAAE;AAAK,OAAC,CAAC;AACnD;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;IACA,IAAIwD,IAAI,CAAChE,KAAK,EAAE;MACd,IAAI,CAACA,KAAK,EAAE;AACd;AACF;AAGAQ,EAAAA,MAAMA,GAAA;IACJ,MAAMW,OAAO,GAAG,IAAI,CAACnD,MAAM,CAACmD,OAAO,EAAE;IACrC,MAAMuC,aAAa,GAAG,IAAI,CAAClE,YAAY,EAAE,EAAEgD,gBAAgB,EAAE;IAE7D,IAAI,CAACrB,OAAO,EAAE;AACZ,MAAA;AACF;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,CAAC5G,MAAM,CAAC+D,UAAU,EAAEC,GAAG,CAACb,OAAO,CAACc,KAAK,CAAC;AAE1C,IAAA,IAAI,IAAI,CAACjE,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,IAAI,CAAC,IAAI,CAACG,QAAQ,EAAE,EAAE;AAChE,MAAA,MAAM8D,MAAM,GAAGlC,OAAO,CAACc,KAAK,CAACoB,MAAM;AACnClC,MAAAA,OAAO,CAAC4C,iBAAiB,CAACV,MAAM,EAAEA,MAAM,CAAC;AAC3C;AACF;EAGQkB,SAASA,CAACM,SAAqB,EAAA;AACrCA,IAAAA,SAAS,EAAE;IAEX,IAAI,IAAI,CAAC7G,MAAM,CAACoB,UAAU,EAAE,KAAK,QAAQ,EAAE;MACzC,IAAI,CAACmB,MAAM,EAAE;AACf;IAEA,IAAI,IAAI,CAACvC,MAAM,CAACoB,UAAU,EAAE,KAAK,WAAW,EAAE;AAG5C,MAAA,MAAM8E,YAAY,GAAG,IAAI,CAAC1E,YAAY,EAAE,EAAEgD,gBAAgB,EAAE,CAAC,CAAC,CAAC;MAE/D,IAAI,CAAC0B,YAAY,EAAE;AACjB,QAAA;AACF;AAEA,MAAA,IAAIA,YAAY,KAAK,IAAI,CAACzF,eAAe,EAAE,EAAE;QAC3C,IAAI,CAAC4D,SAAS,EAAE;AAClB,OAAA,MAAO;QACL,MAAMlB,OAAO,GAAG,IAAI,CAACnD,MAAM,CAACmD,OAAO,EAAG;AACtCA,QAAAA,OAAO,CAACc,KAAK,GAAGiC,YAAY,EAAEjB,UAAU,EAAG;AAC7C;AACF;AACF;AACD;MAEY1E,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,CAAC8G,QAAQ,CAAC9E,KAAK,EAAE,CAAC;AACpF,GAAC,CAAC;EAEFyB,WAAAA,CACWzD,MAIR,EAAA;IAJQ,IAAM,CAAAA,MAAA,GAANA,MAAM;AAKd;EAEH0D,SAASA,CAACC,KAAoB,EAAA;IAC5B,IAAI,CAACjC,OAAO,EAAE,CAACkC,MAAM,CAACD,KAAK,CAAC;AAC9B;EAEAE,OAAOA,CAACF,KAAiB,EAAA;IAEvB,IAAIA,KAAK,CAACT,MAAM,KAAK,IAAI,CAAClD,MAAM,CAAC+G,OAAO,EAAE,EAAE;AAC1C,MAAA,IAAI,CAAC/G,MAAM,CAAC8G,QAAQ,CAAC9E,KAAK,EAAE;AAC9B;AACF;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 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())\n .on('ArrowUp', () => this.prev())\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 const item = opts.item ?? controls?.getActiveItem();\n\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","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,288 +1,6 @@
1
- import { signal, computed } from '@angular/core';
2
- import { ListFocus, ListNavigation } from './_list-navigation-chunk.mjs';
3
- import { Modifier, KeyboardEventManager, PointerEventManager } from './_pointer-event-manager-chunk.mjs';
4
-
5
- class ListSelection {
6
- inputs;
7
- rangeStartIndex = signal(0);
8
- rangeEndIndex = signal(0);
9
- selectedItems = computed(() => this.inputs.items().filter(item => this.inputs.values().includes(item.value())));
10
- constructor(inputs) {
11
- this.inputs = inputs;
12
- }
13
- select(item, opts = {
14
- anchor: true
15
- }) {
16
- item = item ?? this.inputs.focusManager.inputs.activeItem();
17
- if (!item || item.disabled() || !item.selectable() || this.inputs.values().includes(item.value())) {
18
- return;
19
- }
20
- if (!this.inputs.multi()) {
21
- this.deselectAll();
22
- }
23
- const index = this.inputs.items().findIndex(i => i === item);
24
- if (opts.anchor) {
25
- this.beginRangeSelection(index);
26
- }
27
- this.inputs.values.update(values => values.concat(item.value()));
28
- }
29
- deselect(item) {
30
- item = item ?? this.inputs.focusManager.inputs.activeItem();
31
- if (item && !item.disabled() && item.selectable()) {
32
- this.inputs.values.update(values => values.filter(value => value !== item.value()));
33
- }
34
- }
35
- toggle(item) {
36
- item = item ?? this.inputs.focusManager.inputs.activeItem();
37
- if (item) {
38
- this.inputs.values().includes(item.value()) ? this.deselect(item) : this.select(item);
39
- }
40
- }
41
- toggleOne() {
42
- const item = this.inputs.focusManager.inputs.activeItem();
43
- if (item) {
44
- this.inputs.values().includes(item.value()) ? this.deselect() : this.selectOne();
45
- }
46
- }
47
- selectAll() {
48
- if (!this.inputs.multi()) {
49
- return;
50
- }
51
- for (const item of this.inputs.items()) {
52
- this.select(item, {
53
- anchor: false
54
- });
55
- }
56
- this.beginRangeSelection();
57
- }
58
- deselectAll() {
59
- for (const value of this.inputs.values()) {
60
- const item = this.inputs.items().find(i => i.value() === value);
61
- item ? this.deselect(item) : this.inputs.values.update(values => values.filter(v => v !== value));
62
- }
63
- }
64
- toggleAll() {
65
- const selectableValues = this.inputs.items().filter(i => !i.disabled() && i.selectable()).map(i => i.value());
66
- selectableValues.every(i => this.inputs.values().includes(i)) ? this.deselectAll() : this.selectAll();
67
- }
68
- selectOne() {
69
- const item = this.inputs.focusManager.inputs.activeItem();
70
- if (item && (item.disabled() || !item.selectable())) {
71
- return;
72
- }
73
- this.deselectAll();
74
- if (this.inputs.values().length > 0 && !this.inputs.multi()) {
75
- return;
76
- }
77
- this.select();
78
- }
79
- selectRange(opts = {
80
- anchor: true
81
- }) {
82
- const isStartOfRange = this.inputs.focusManager.prevActiveIndex() === this.rangeStartIndex();
83
- if (isStartOfRange && opts.anchor) {
84
- this.beginRangeSelection(this.inputs.focusManager.prevActiveIndex());
85
- }
86
- const itemsInRange = this._getItemsFromIndex(this.rangeStartIndex());
87
- const itemsOutOfRange = this._getItemsFromIndex(this.rangeEndIndex()).filter(i => !itemsInRange.includes(i));
88
- for (const item of itemsOutOfRange) {
89
- this.deselect(item);
90
- }
91
- for (const item of itemsInRange) {
92
- this.select(item, {
93
- anchor: false
94
- });
95
- }
96
- if (itemsInRange.length) {
97
- const item = itemsInRange.pop();
98
- const index = this.inputs.items().findIndex(i => i === item);
99
- this.rangeEndIndex.set(index);
100
- }
101
- }
102
- beginRangeSelection(index = this.inputs.focusManager.activeIndex()) {
103
- this.rangeStartIndex.set(index);
104
- this.rangeEndIndex.set(index);
105
- }
106
- _getItemsFromIndex(index) {
107
- if (index === -1) {
108
- return [];
109
- }
110
- const upper = Math.max(this.inputs.focusManager.activeIndex(), index);
111
- const lower = Math.min(this.inputs.focusManager.activeIndex(), index);
112
- const items = [];
113
- for (let i = lower; i <= upper; i++) {
114
- items.push(this.inputs.items()[i]);
115
- }
116
- if (this.inputs.focusManager.activeIndex() < index) {
117
- return items.reverse();
118
- }
119
- return items;
120
- }
121
- }
122
-
123
- class ListTypeahead {
124
- inputs;
125
- timeout;
126
- focusManager;
127
- isTyping = computed(() => this._query().length > 0);
128
- _query = signal('');
129
- _startIndex = signal(undefined);
130
- constructor(inputs) {
131
- this.inputs = inputs;
132
- this.focusManager = inputs.focusManager;
133
- }
134
- search(char) {
135
- if (char.length !== 1) {
136
- return false;
137
- }
138
- if (!this.isTyping() && char === ' ') {
139
- return false;
140
- }
141
- if (this._startIndex() === undefined) {
142
- this._startIndex.set(this.focusManager.activeIndex());
143
- }
144
- clearTimeout(this.timeout);
145
- this._query.update(q => q + char.toLowerCase());
146
- const item = this._getItem();
147
- if (item) {
148
- this.focusManager.focus(item);
149
- }
150
- this.timeout = setTimeout(() => {
151
- this._query.set('');
152
- this._startIndex.set(undefined);
153
- }, this.inputs.typeaheadDelay());
154
- return true;
155
- }
156
- _getItem() {
157
- let items = this.focusManager.inputs.items();
158
- const after = items.slice(this._startIndex() + 1);
159
- const before = items.slice(0, this._startIndex());
160
- items = after.concat(before);
161
- items.push(this.inputs.items()[this._startIndex()]);
162
- const focusableItems = [];
163
- for (const item of items) {
164
- if (this.focusManager.isFocusable(item)) {
165
- focusableItems.push(item);
166
- }
167
- }
168
- return focusableItems.find(i => i.searchTerm().toLowerCase().startsWith(this._query()));
169
- }
170
- }
171
-
172
- class List {
173
- inputs;
174
- navigationBehavior;
175
- selectionBehavior;
176
- typeaheadBehavior;
177
- focusBehavior;
178
- disabled = computed(() => this.focusBehavior.isListDisabled());
179
- activeDescendant = computed(() => this.focusBehavior.getActiveDescendant());
180
- tabIndex = computed(() => this.focusBehavior.getListTabIndex());
181
- activeIndex = computed(() => this.focusBehavior.activeIndex());
182
- _anchorIndex = signal(0);
183
- _wrap = signal(true);
184
- constructor(inputs) {
185
- this.inputs = inputs;
186
- this.focusBehavior = new ListFocus(inputs);
187
- this.selectionBehavior = new ListSelection({
188
- ...inputs,
189
- focusManager: this.focusBehavior
190
- });
191
- this.typeaheadBehavior = new ListTypeahead({
192
- ...inputs,
193
- focusManager: this.focusBehavior
194
- });
195
- this.navigationBehavior = new ListNavigation({
196
- ...inputs,
197
- focusManager: this.focusBehavior,
198
- wrap: computed(() => this._wrap() && this.inputs.wrap())
199
- });
200
- }
201
- getItemTabindex(item) {
202
- return this.focusBehavior.getItemTabIndex(item);
203
- }
204
- first(opts) {
205
- this._navigate(opts, () => this.navigationBehavior.first(opts));
206
- }
207
- last(opts) {
208
- this._navigate(opts, () => this.navigationBehavior.last(opts));
209
- }
210
- next(opts) {
211
- this._navigate(opts, () => this.navigationBehavior.next(opts));
212
- }
213
- prev(opts) {
214
- this._navigate(opts, () => this.navigationBehavior.prev(opts));
215
- }
216
- goto(item, opts) {
217
- this._navigate(opts, () => this.navigationBehavior.goto(item, opts));
218
- }
219
- unfocus() {
220
- this.inputs.activeItem.set(undefined);
221
- }
222
- anchor(index) {
223
- this._anchorIndex.set(index);
224
- }
225
- search(char, opts) {
226
- this._navigate(opts, () => this.typeaheadBehavior.search(char));
227
- }
228
- isTyping() {
229
- return this.typeaheadBehavior.isTyping();
230
- }
231
- select(item) {
232
- this.selectionBehavior.select(item);
233
- }
234
- selectOne() {
235
- this.selectionBehavior.selectOne();
236
- }
237
- deselect(item) {
238
- this.selectionBehavior.deselect(item);
239
- }
240
- deselectAll() {
241
- this.selectionBehavior.deselectAll();
242
- }
243
- toggle(item) {
244
- this.selectionBehavior.toggle(item);
245
- }
246
- toggleOne() {
247
- this.selectionBehavior.toggleOne();
248
- }
249
- toggleAll() {
250
- this.selectionBehavior.toggleAll();
251
- }
252
- isFocusable(item) {
253
- return this.focusBehavior.isFocusable(item);
254
- }
255
- updateSelection(opts = {
256
- anchor: true
257
- }) {
258
- if (opts.toggle) {
259
- this.selectionBehavior.toggle();
260
- }
261
- if (opts.select) {
262
- this.selectionBehavior.select();
263
- }
264
- if (opts.selectOne) {
265
- this.selectionBehavior.selectOne();
266
- }
267
- if (opts.selectRange) {
268
- this.selectionBehavior.selectRange();
269
- }
270
- if (!opts.anchor) {
271
- this.anchor(this.selectionBehavior.rangeStartIndex());
272
- }
273
- }
274
- _navigate(opts = {}, operation) {
275
- if (opts?.selectRange) {
276
- this._wrap.set(false);
277
- this.selectionBehavior.rangeStartIndex.set(this._anchorIndex());
278
- }
279
- const moved = operation();
280
- if (moved) {
281
- this.updateSelection(opts);
282
- }
283
- this._wrap.set(true);
284
- }
285
- }
1
+ import { computed, signal, Modifier, KeyboardEventManager } from './_signal-like-chunk.mjs';
2
+ import { List } from './_list-chunk.mjs';
3
+ import { PointerEventManager } from './_pointer-event-manager-chunk.mjs';
286
4
 
287
5
  class ListboxPattern {
288
6
  inputs;
@@ -518,5 +236,5 @@ class ComboboxListboxPattern extends ListboxPattern {
518
236
  setValue = value => this.inputs.values.set(value ? [value] : []);
519
237
  }
520
238
 
521
- export { ComboboxListboxPattern, List, ListboxPattern, OptionPattern };
239
+ export { ComboboxListboxPattern, ListboxPattern, OptionPattern };
522
240
  //# sourceMappingURL=_combobox-listbox-chunk.mjs.map