@angular/aria 21.2.0-next.3 → 21.2.0-next.4
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.
- package/fesm2022/_accordion-chunk.mjs +5 -1
- package/fesm2022/_accordion-chunk.mjs.map +1 -1
- package/fesm2022/_combobox-chunk.mjs +5 -1
- package/fesm2022/_combobox-chunk.mjs.map +1 -1
- package/fesm2022/_combobox-listbox-chunk.mjs +27 -7
- package/fesm2022/_combobox-listbox-chunk.mjs.map +1 -1
- package/fesm2022/_combobox-tree-chunk.mjs +17 -5
- package/fesm2022/_combobox-tree-chunk.mjs.map +1 -1
- package/fesm2022/_menu-chunk.mjs +10 -2
- package/fesm2022/_menu-chunk.mjs.map +1 -1
- package/fesm2022/_signal-like-chunk.mjs +6 -2
- package/fesm2022/_signal-like-chunk.mjs.map +1 -1
- package/fesm2022/_tabs-chunk.mjs +5 -1
- package/fesm2022/_tabs-chunk.mjs.map +1 -1
- package/fesm2022/_toolbar-widget-group-chunk.mjs +10 -2
- package/fesm2022/_toolbar-widget-group-chunk.mjs.map +1 -1
- package/fesm2022/_widget-chunk.mjs +15 -3
- package/fesm2022/_widget-chunk.mjs.map +1 -1
- package/fesm2022/aria.mjs +1 -1
- package/fesm2022/aria.mjs.map +1 -1
- package/fesm2022/grid.mjs +34 -34
- package/fesm2022/grid.mjs.map +1 -1
- package/package.json +2 -2
- package/resources/code-examples.db +0 -0
- package/types/_keyboard-event-manager-chunk.d.ts +1 -0
- package/types/grid.d.ts +2 -1
|
@@ -37,7 +37,11 @@ class AccordionGroupPattern {
|
|
|
37
37
|
return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
|
|
38
38
|
});
|
|
39
39
|
keydown = computed(() => {
|
|
40
|
-
return new KeyboardEventManager().on(this.prevKey, () => this.navigationBehavior.prev()
|
|
40
|
+
return new KeyboardEventManager().on(this.prevKey, () => this.navigationBehavior.prev(), {
|
|
41
|
+
ignoreRepeat: false
|
|
42
|
+
}).on(this.nextKey, () => this.navigationBehavior.next(), {
|
|
43
|
+
ignoreRepeat: false
|
|
44
|
+
}).on('Home', () => this.navigationBehavior.first()).on('End', () => this.navigationBehavior.last()).on(' ', () => this.toggle()).on('Enter', () => this.toggle());
|
|
41
45
|
});
|
|
42
46
|
pointerdown = computed(() => {
|
|
43
47
|
return new PointerEventManager().on(e => {
|
|
@@ -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 /** 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":"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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, 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(), {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.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","ignoreRepeat","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":"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"}
|
|
@@ -71,7 +71,11 @@ class ComboboxPattern {
|
|
|
71
71
|
}
|
|
72
72
|
return manager;
|
|
73
73
|
}
|
|
74
|
-
manager.on('ArrowDown', () => this.next()
|
|
74
|
+
manager.on('ArrowDown', () => this.next(), {
|
|
75
|
+
ignoreRepeat: false
|
|
76
|
+
}).on('ArrowUp', () => this.prev(), {
|
|
77
|
+
ignoreRepeat: false
|
|
78
|
+
}).on('Home', () => this.first()).on('End', () => this.last());
|
|
75
79
|
if (this.readonly()) {
|
|
76
80
|
manager.on(' ', () => this.select({
|
|
77
81
|
commit: true,
|
|
@@ -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())\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
|
+
{"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 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","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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"}
|
|
@@ -31,17 +31,29 @@ class ListboxPattern {
|
|
|
31
31
|
keydown = computed(() => {
|
|
32
32
|
const manager = new KeyboardEventManager();
|
|
33
33
|
if (this.readonly()) {
|
|
34
|
-
return manager.on(this.prevKey, () => this.listBehavior.prev()
|
|
34
|
+
return manager.on(this.prevKey, () => this.listBehavior.prev(), {
|
|
35
|
+
ignoreRepeat: false
|
|
36
|
+
}).on(this.nextKey, () => this.listBehavior.next(), {
|
|
37
|
+
ignoreRepeat: false
|
|
38
|
+
}).on('Home', () => this.listBehavior.first()).on('End', () => this.listBehavior.last()).on(this.typeaheadRegexp, e => this.listBehavior.search(e.key));
|
|
35
39
|
}
|
|
36
40
|
if (!this.followFocus()) {
|
|
37
|
-
manager.on(this.prevKey, () => this.listBehavior.prev()
|
|
41
|
+
manager.on(this.prevKey, () => this.listBehavior.prev(), {
|
|
42
|
+
ignoreRepeat: false
|
|
43
|
+
}).on(this.nextKey, () => this.listBehavior.next(), {
|
|
44
|
+
ignoreRepeat: false
|
|
45
|
+
}).on('Home', () => this.listBehavior.first()).on('End', () => this.listBehavior.last()).on(this.typeaheadRegexp, e => this.listBehavior.search(e.key));
|
|
38
46
|
}
|
|
39
47
|
if (this.followFocus()) {
|
|
40
48
|
manager.on(this.prevKey, () => this.listBehavior.prev({
|
|
41
49
|
selectOne: true
|
|
42
|
-
})
|
|
50
|
+
}), {
|
|
51
|
+
ignoreRepeat: false
|
|
52
|
+
}).on(this.nextKey, () => this.listBehavior.next({
|
|
43
53
|
selectOne: true
|
|
44
|
-
})
|
|
54
|
+
}), {
|
|
55
|
+
ignoreRepeat: false
|
|
56
|
+
}).on('Home', () => this.listBehavior.first({
|
|
45
57
|
selectOne: true
|
|
46
58
|
})).on('End', () => this.listBehavior.last({
|
|
47
59
|
selectOne: true
|
|
@@ -52,9 +64,13 @@ class ListboxPattern {
|
|
|
52
64
|
if (this.inputs.multi()) {
|
|
53
65
|
manager.on(Modifier.Any, 'Shift', () => this.listBehavior.anchor(this.listBehavior.activeIndex())).on(Modifier.Shift, this.prevKey, () => this.listBehavior.prev({
|
|
54
66
|
selectRange: true
|
|
55
|
-
})
|
|
67
|
+
}), {
|
|
68
|
+
ignoreRepeat: false
|
|
69
|
+
}).on(Modifier.Shift, this.nextKey, () => this.listBehavior.next({
|
|
56
70
|
selectRange: true
|
|
57
|
-
})
|
|
71
|
+
}), {
|
|
72
|
+
ignoreRepeat: false
|
|
73
|
+
}).on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'Home', () => this.listBehavior.first({
|
|
58
74
|
selectRange: true,
|
|
59
75
|
anchor: false
|
|
60
76
|
})).on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'End', () => this.listBehavior.last({
|
|
@@ -76,7 +92,11 @@ class ListboxPattern {
|
|
|
76
92
|
manager.on('Enter', () => this.listBehavior.toggleOne());
|
|
77
93
|
}
|
|
78
94
|
if (this.inputs.multi() && this.followFocus()) {
|
|
79
|
-
manager.on([Modifier.Ctrl, Modifier.Meta], this.prevKey, () => this.listBehavior.prev()
|
|
95
|
+
manager.on([Modifier.Ctrl, Modifier.Meta], this.prevKey, () => this.listBehavior.prev(), {
|
|
96
|
+
ignoreRepeat: false
|
|
97
|
+
}).on([Modifier.Ctrl, Modifier.Meta], this.nextKey, () => this.listBehavior.next(), {
|
|
98
|
+
ignoreRepeat: false
|
|
99
|
+
}).on([Modifier.Ctrl, Modifier.Meta], ' ', () => this.listBehavior.toggle()).on([Modifier.Ctrl, Modifier.Meta], 'Enter', () => this.listBehavior.toggle()).on([Modifier.Ctrl, Modifier.Meta], 'Home', () => this.listBehavior.first()).on([Modifier.Ctrl, Modifier.Meta], 'End', () => this.listBehavior.last()).on([Modifier.Ctrl, Modifier.Meta], 'A', () => {
|
|
80
100
|
this.listBehavior.toggleAll();
|
|
81
101
|
this.listBehavior.select();
|
|
82
102
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_combobox-listbox-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/listbox/listbox.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/listbox/option.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/listbox/combobox-listbox.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 {OptionPattern} from './option';\nimport {KeyboardEventManager, PointerEventManager, Modifier} from '../behaviors/event-manager';\nimport {computed, signal, SignalLike} from '../behaviors/signal-like/signal-like';\nimport {List, ListInputs} from '../behaviors/list/list';\n\n/** Represents the required inputs for a listbox. */\nexport type ListboxInputs<V> = ListInputs<OptionPattern<V>, V> & {\n /** A unique identifier for the listbox. */\n id: SignalLike<string>;\n\n /** Whether the listbox is readonly. */\n readonly: SignalLike<boolean>;\n};\n\n/** Controls the state of a listbox. */\nexport class ListboxPattern<V> {\n listBehavior: List<OptionPattern<V>, V>;\n\n /** Whether the list is vertically or horizontally oriented. */\n orientation: SignalLike<'vertical' | 'horizontal'>;\n\n /** Whether the listbox is disabled. */\n disabled = computed(() => this.listBehavior.disabled());\n\n /** Whether the listbox is readonly. */\n readonly: SignalLike<boolean>;\n\n /** The tab index of the listbox. */\n tabIndex: SignalLike<-1 | 0> = computed(() => this.listBehavior.tabIndex());\n\n /** The id of the current active item. */\n activeDescendant = computed(() => this.listBehavior.activeDescendant());\n\n /** Whether multiple items in the list can be selected at once. */\n multi: SignalLike<boolean>;\n\n /** The number of items in the listbox. */\n setsize = computed(() => this.inputs.items().length);\n\n /** Whether the listbox selection follows focus. */\n followFocus = computed(() => this.inputs.selectionMode() === 'follow');\n\n /** Whether the listbox should wrap. Used to disable wrapping while range selecting. */\n wrap = signal(true);\n\n /** The key used to navigate to the previous item in the list. */\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 item in the list. */\n nextKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowDown';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n });\n\n /** Represents the space key. Does nothing when the user is actively using typeahead. */\n dynamicSpaceKey = computed(() => (this.listBehavior.isTyping() ? '' : ' '));\n\n /** The regexp used to decide if a key should trigger typeahead. */\n typeaheadRegexp = /^.$/;\n\n /** The keydown event manager for the listbox. */\n keydown = computed(() => {\n const manager = new KeyboardEventManager();\n\n if (this.readonly()) {\n return manager\n .on(this.prevKey, () => this.listBehavior.prev())\n .on(this.nextKey, () => this.listBehavior.next())\n .on('Home', () => this.listBehavior.first())\n .on('End', () => this.listBehavior.last())\n .on(this.typeaheadRegexp, e => this.listBehavior.search(e.key));\n }\n\n if (!this.followFocus()) {\n manager\n .on(this.prevKey, () => this.listBehavior.prev())\n .on(this.nextKey, () => this.listBehavior.next())\n .on('Home', () => this.listBehavior.first())\n .on('End', () => this.listBehavior.last())\n .on(this.typeaheadRegexp, e => this.listBehavior.search(e.key));\n }\n\n if (this.followFocus()) {\n manager\n .on(this.prevKey, () => this.listBehavior.prev({selectOne: true}))\n .on(this.nextKey, () => this.listBehavior.next({selectOne: true}))\n .on('Home', () => this.listBehavior.first({selectOne: true}))\n .on('End', () => this.listBehavior.last({selectOne: true}))\n .on(this.typeaheadRegexp, e => this.listBehavior.search(e.key, {selectOne: true}));\n }\n\n if (this.inputs.multi()) {\n manager\n .on(Modifier.Any, 'Shift', () => this.listBehavior.anchor(this.listBehavior.activeIndex()))\n .on(Modifier.Shift, this.prevKey, () => this.listBehavior.prev({selectRange: true}))\n .on(Modifier.Shift, this.nextKey, () => this.listBehavior.next({selectRange: true}))\n .on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'Home', () =>\n this.listBehavior.first({selectRange: true, anchor: false}),\n )\n .on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'End', () =>\n this.listBehavior.last({selectRange: true, anchor: false}),\n )\n .on(Modifier.Shift, 'Enter', () =>\n this.listBehavior.updateSelection({selectRange: true, anchor: false}),\n )\n .on(Modifier.Shift, this.dynamicSpaceKey, () =>\n this.listBehavior.updateSelection({selectRange: true, anchor: false}),\n );\n }\n\n if (!this.followFocus() && this.inputs.multi()) {\n manager\n .on(this.dynamicSpaceKey, () => this.listBehavior.toggle())\n .on('Enter', () => this.listBehavior.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'A', () => this.listBehavior.toggleAll());\n }\n\n if (!this.followFocus() && !this.inputs.multi()) {\n manager.on(this.dynamicSpaceKey, () => this.listBehavior.toggleOne());\n manager.on('Enter', () => this.listBehavior.toggleOne());\n }\n\n if (this.inputs.multi() && this.followFocus()) {\n manager\n .on([Modifier.Ctrl, Modifier.Meta], this.prevKey, () => this.listBehavior.prev())\n .on([Modifier.Ctrl, Modifier.Meta], this.nextKey, () => this.listBehavior.next())\n .on([Modifier.Ctrl, Modifier.Meta], ' ', () => this.listBehavior.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'Enter', () => this.listBehavior.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'Home', () => this.listBehavior.first())\n .on([Modifier.Ctrl, Modifier.Meta], 'End', () => this.listBehavior.last())\n .on([Modifier.Ctrl, Modifier.Meta], 'A', () => {\n this.listBehavior.toggleAll();\n this.listBehavior.select(); // Ensure the currect option remains selected.\n });\n }\n\n return manager;\n });\n\n /** The pointerdown event manager for the listbox. */\n pointerdown = computed(() => {\n const manager = new PointerEventManager();\n\n if (this.readonly()) {\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!));\n }\n\n if (this.multi()) {\n manager.on(Modifier.Shift, e =>\n this.listBehavior.goto(this._getItem(e)!, {selectRange: true}),\n );\n }\n\n if (!this.multi() && this.followFocus()) {\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!, {selectOne: true}));\n }\n\n if (!this.multi() && !this.followFocus()) {\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!, {toggle: true}));\n }\n\n if (this.multi() && this.followFocus()) {\n return manager\n .on(e => this.listBehavior.goto(this._getItem(e)!, {selectOne: true}))\n .on(Modifier.Ctrl, e => this.listBehavior.goto(this._getItem(e)!, {toggle: true}));\n }\n\n if (this.multi() && !this.followFocus()) {\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!, {toggle: true}));\n }\n\n return manager;\n });\n\n constructor(readonly inputs: ListboxInputs<V>) {\n this.readonly = inputs.readonly;\n this.orientation = inputs.orientation;\n this.multi = inputs.multi;\n this.listBehavior = new List(inputs);\n }\n\n /** Returns a set of violations */\n validate(): string[] {\n const violations: string[] = [];\n\n if (!this.inputs.multi() && this.inputs.values().length > 1) {\n violations.push(\n `A single-select listbox should not have multiple selected options. Selected options: ${this.inputs.values().join(', ')}`,\n );\n }\n\n return violations;\n }\n\n /** Handles keydown events for the listbox. */\n onKeydown(event: KeyboardEvent) {\n if (!this.disabled()) {\n this.keydown().handle(event);\n }\n }\n\n onPointerdown(event: PointerEvent) {\n if (!this.disabled()) {\n this.pointerdown().handle(event);\n }\n }\n\n /**\n * Sets the listbox to it's default initial state.\n *\n * Sets the active index of the listbox to the first focusable selected\n * item if one exists. Otherwise, sets focus to the first focusable item.\n *\n * This method should be called once the listbox and it's options are properly initialized,\n * meaning the ListboxPattern and OptionPatterns should have references to each other before this\n * is called.\n */\n setDefaultState() {\n let firstItem: OptionPattern<V> | null = null;\n\n for (const item of this.inputs.items()) {\n if (this.listBehavior.isFocusable(item)) {\n if (!firstItem) {\n firstItem = item;\n }\n if (item.selected()) {\n this.inputs.activeItem.set(item);\n return;\n }\n }\n }\n\n if (firstItem) {\n this.inputs.activeItem.set(firstItem);\n }\n }\n\n protected _getItem(e: PointerEvent) {\n if (!(e.target instanceof HTMLElement)) {\n return;\n }\n\n const element = e.target.closest('[role=\"option\"]');\n return this.inputs.items().find(i => i.element() === element);\n }\n}\n","/**\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 {computed, SignalLike} from '../behaviors/signal-like/signal-like';\nimport {List, ListInputs, ListItem} from '../behaviors/list/list';\n\n/**\n * Represents the properties exposed by a listbox that need to be accessed by an option.\n * This exists to avoid circular dependency errors between the listbox and option.\n */\ninterface ListboxPattern<V> {\n inputs: ListInputs<OptionPattern<V>, V>;\n listBehavior: List<OptionPattern<V>, V>;\n}\n\n/** Represents the required inputs for an option in a listbox. */\nexport interface OptionInputs<V> extends Omit<ListItem<V>, 'index' | 'selectable'> {\n listbox: SignalLike<ListboxPattern<V> | undefined>;\n}\n\n/** Represents an option in a listbox. */\nexport class OptionPattern<V> {\n /** A unique identifier for the option. */\n id: SignalLike<string>;\n\n /** The value of the option. */\n value: SignalLike<V>;\n\n /** The position of the option in the list. */\n index = computed(() => this.listbox()?.inputs.items().indexOf(this) ?? -1);\n\n /** Whether the option is active. */\n active = computed(() => this.listbox()?.inputs.activeItem() === this);\n\n /** Whether the option is selected. */\n selected = computed(() => this.listbox()?.inputs.values().includes(this.value()));\n\n /** Whether the option is selectable. */\n selectable = () => true;\n\n /** Whether the option is disabled. */\n disabled: SignalLike<boolean>;\n\n /** The text used by the typeahead search. */\n searchTerm: SignalLike<string>;\n\n /** A reference to the parent listbox. */\n listbox: SignalLike<ListboxPattern<V> | undefined>;\n\n /** The tab index of the option. */\n tabIndex = computed(() => this.listbox()?.listBehavior.getItemTabindex(this));\n\n /** The html element that should receive focus. */\n element: SignalLike<HTMLElement | undefined>;\n\n constructor(args: OptionInputs<V>) {\n this.id = args.id;\n this.value = args.value;\n this.listbox = args.listbox;\n this.element = args.element;\n this.disabled = args.disabled;\n this.searchTerm = args.searchTerm;\n }\n}\n","/**\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 {ListboxInputs, ListboxPattern} from './listbox';\nimport {SignalLike, computed} from '../behaviors/signal-like/signal-like';\nimport {OptionPattern} from './option';\nimport {ComboboxPattern, ComboboxListboxControls} from '../combobox/combobox';\n\nexport type ComboboxListboxInputs<V> = ListboxInputs<V> & {\n /** The combobox controlling the listbox. */\n combobox: SignalLike<ComboboxPattern<OptionPattern<V>, V> | undefined>;\n};\n\nexport class ComboboxListboxPattern<V>\n extends ListboxPattern<V>\n implements ComboboxListboxControls<OptionPattern<V>, V>\n{\n /** A unique identifier for the popup. */\n id = computed(() => this.inputs.id());\n\n /** The ARIA role for the listbox. */\n role = computed(() => 'listbox' as const);\n\n /** The id of the active (focused) item in the listbox. */\n activeId = computed(() => this.listBehavior.activeDescendant());\n\n /** The list of options in the listbox. */\n items: SignalLike<OptionPattern<V>[]> = computed(() => this.inputs.items());\n\n /** The tab index for the listbox. Always -1 because the combobox handles focus. */\n override tabIndex: SignalLike<-1 | 0> = () => -1;\n\n /** Whether multiple items in the list can be selected at once. */\n override multi = computed(() => {\n return this.inputs.combobox()?.readonly() ? this.inputs.multi() : false;\n });\n\n constructor(override readonly inputs: ComboboxListboxInputs<V>) {\n if (inputs.combobox()) {\n inputs.focusMode = () => 'activedescendant';\n inputs.element = inputs.combobox()!.inputs.inputEl;\n }\n\n super(inputs);\n }\n\n /** Noop. The combobox handles keydown events. */\n override onKeydown(_: KeyboardEvent): void {}\n\n /** Noop. The combobox handles pointerdown events. */\n override onPointerdown(_: PointerEvent): void {}\n\n /** Noop. The combobox controls the open state. */\n override setDefaultState(): void {}\n\n /** Navigates to the specified item in the listbox. */\n focus = (item: OptionPattern<V>, opts?: {focusElement?: boolean}) => {\n this.listBehavior.goto(item, opts);\n };\n\n /** Navigates to the previous focusable item in the listbox. */\n getActiveItem = () => this.inputs.activeItem();\n\n /** Navigates to the next focusable item in the listbox. */\n next = () => this.listBehavior.next();\n\n /** Navigates to the previous focusable item in the listbox. */\n prev = () => this.listBehavior.prev();\n\n /** Navigates to the last focusable item in the listbox. */\n last = () => this.listBehavior.last();\n\n /** Navigates to the first focusable item in the listbox. */\n first = () => this.listBehavior.first();\n\n /** Unfocuses the currently focused item in the listbox. */\n unfocus = () => this.listBehavior.unfocus();\n\n /** Selects the specified item in the listbox. */\n select = (item?: OptionPattern<V>) => this.listBehavior.select(item);\n\n /** Toggles the selection state of the given item in the listbox. */\n toggle = (item?: OptionPattern<V>) => this.listBehavior.toggle(item);\n\n /** Clears the selection in the listbox. */\n clearSelection = () => this.listBehavior.deselectAll();\n\n /** Retrieves the OptionPattern associated with a pointer event. */\n getItem = (e: PointerEvent) => this._getItem(e);\n\n /** Retrieves the currently selected items in the listbox. */\n getSelectedItems = () => {\n // NOTE: We need to do this funky for loop to preserve the order of the selected values.\n const items = [];\n for (const value of this.inputs.values()) {\n const item = this.items().find(i => i.value() === value);\n if (item) {\n items.push(item);\n }\n }\n return items;\n };\n\n /** Sets the value of the combobox listbox. */\n setValue = (value: V | undefined) => this.inputs.values.set(value ? [value] : []);\n}\n"],"names":["ListboxPattern","inputs","listBehavior","orientation","disabled","computed","readonly","tabIndex","activeDescendant","multi","setsize","items","length","followFocus","selectionMode","wrap","signal","prevKey","textDirection","nextKey","dynamicSpaceKey","isTyping","typeaheadRegexp","keydown","manager","KeyboardEventManager","on","prev","next","first","last","e","search","key","selectOne","Modifier","Any","anchor","activeIndex","Shift","selectRange","Ctrl","Meta","updateSelection","toggle","toggleAll","toggleOne","select","pointerdown","PointerEventManager","goto","_getItem","constructor","List","validate","violations","values","push","join","onKeydown","event","handle","onPointerdown","setDefaultState","firstItem","item","isFocusable","selected","activeItem","set","target","HTMLElement","element","closest","find","i","OptionPattern","id","value","index","listbox","indexOf","active","includes","selectable","searchTerm","getItemTabindex","args","ComboboxListboxPattern","role","activeId","combobox","focusMode","inputEl","_","focus","opts","getActiveItem","unfocus","clearSelection","deselectAll","getItem","getSelectedItems","setValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_combobox-listbox-chunk.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/listbox/listbox.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/listbox/option.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/aria/private/listbox/combobox-listbox.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 {OptionPattern} from './option';\nimport {KeyboardEventManager, PointerEventManager, Modifier} from '../behaviors/event-manager';\nimport {computed, signal, SignalLike} from '../behaviors/signal-like/signal-like';\nimport {List, ListInputs} from '../behaviors/list/list';\n\n/** Represents the required inputs for a listbox. */\nexport type ListboxInputs<V> = ListInputs<OptionPattern<V>, V> & {\n /** A unique identifier for the listbox. */\n id: SignalLike<string>;\n\n /** Whether the listbox is readonly. */\n readonly: SignalLike<boolean>;\n};\n\n/** Controls the state of a listbox. */\nexport class ListboxPattern<V> {\n listBehavior: List<OptionPattern<V>, V>;\n\n /** Whether the list is vertically or horizontally oriented. */\n orientation: SignalLike<'vertical' | 'horizontal'>;\n\n /** Whether the listbox is disabled. */\n disabled = computed(() => this.listBehavior.disabled());\n\n /** Whether the listbox is readonly. */\n readonly: SignalLike<boolean>;\n\n /** The tab index of the listbox. */\n tabIndex: SignalLike<-1 | 0> = computed(() => this.listBehavior.tabIndex());\n\n /** The id of the current active item. */\n activeDescendant = computed(() => this.listBehavior.activeDescendant());\n\n /** Whether multiple items in the list can be selected at once. */\n multi: SignalLike<boolean>;\n\n /** The number of items in the listbox. */\n setsize = computed(() => this.inputs.items().length);\n\n /** Whether the listbox selection follows focus. */\n followFocus = computed(() => this.inputs.selectionMode() === 'follow');\n\n /** Whether the listbox should wrap. Used to disable wrapping while range selecting. */\n wrap = signal(true);\n\n /** The key used to navigate to the previous item in the list. */\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 item in the list. */\n nextKey = computed(() => {\n if (this.inputs.orientation() === 'vertical') {\n return 'ArrowDown';\n }\n return this.inputs.textDirection() === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n });\n\n /** Represents the space key. Does nothing when the user is actively using typeahead. */\n dynamicSpaceKey = computed(() => (this.listBehavior.isTyping() ? '' : ' '));\n\n /** The regexp used to decide if a key should trigger typeahead. */\n typeaheadRegexp = /^.$/;\n\n /** The keydown event manager for the listbox. */\n keydown = computed(() => {\n const manager = new KeyboardEventManager();\n\n if (this.readonly()) {\n return manager\n .on(this.prevKey, () => this.listBehavior.prev(), {ignoreRepeat: false})\n .on(this.nextKey, () => this.listBehavior.next(), {ignoreRepeat: false})\n .on('Home', () => this.listBehavior.first())\n .on('End', () => this.listBehavior.last())\n .on(this.typeaheadRegexp, e => this.listBehavior.search(e.key));\n }\n\n if (!this.followFocus()) {\n manager\n .on(this.prevKey, () => this.listBehavior.prev(), {ignoreRepeat: false})\n .on(this.nextKey, () => this.listBehavior.next(), {ignoreRepeat: false})\n .on('Home', () => this.listBehavior.first())\n .on('End', () => this.listBehavior.last())\n .on(this.typeaheadRegexp, e => this.listBehavior.search(e.key));\n }\n\n if (this.followFocus()) {\n manager\n .on(this.prevKey, () => this.listBehavior.prev({selectOne: true}), {ignoreRepeat: false})\n .on(this.nextKey, () => this.listBehavior.next({selectOne: true}), {ignoreRepeat: false})\n .on('Home', () => this.listBehavior.first({selectOne: true}))\n .on('End', () => this.listBehavior.last({selectOne: true}))\n .on(this.typeaheadRegexp, e => this.listBehavior.search(e.key, {selectOne: true}));\n }\n\n if (this.inputs.multi()) {\n manager\n .on(Modifier.Any, 'Shift', () => this.listBehavior.anchor(this.listBehavior.activeIndex()))\n .on(Modifier.Shift, this.prevKey, () => this.listBehavior.prev({selectRange: true}), {\n ignoreRepeat: false,\n })\n .on(Modifier.Shift, this.nextKey, () => this.listBehavior.next({selectRange: true}), {\n ignoreRepeat: false,\n })\n .on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'Home', () =>\n this.listBehavior.first({selectRange: true, anchor: false}),\n )\n .on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'End', () =>\n this.listBehavior.last({selectRange: true, anchor: false}),\n )\n .on(Modifier.Shift, 'Enter', () =>\n this.listBehavior.updateSelection({selectRange: true, anchor: false}),\n )\n .on(Modifier.Shift, this.dynamicSpaceKey, () =>\n this.listBehavior.updateSelection({selectRange: true, anchor: false}),\n );\n }\n\n if (!this.followFocus() && this.inputs.multi()) {\n manager\n .on(this.dynamicSpaceKey, () => this.listBehavior.toggle())\n .on('Enter', () => this.listBehavior.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'A', () => this.listBehavior.toggleAll());\n }\n\n if (!this.followFocus() && !this.inputs.multi()) {\n manager.on(this.dynamicSpaceKey, () => this.listBehavior.toggleOne());\n manager.on('Enter', () => this.listBehavior.toggleOne());\n }\n\n if (this.inputs.multi() && this.followFocus()) {\n manager\n .on([Modifier.Ctrl, Modifier.Meta], this.prevKey, () => this.listBehavior.prev(), {\n ignoreRepeat: false,\n })\n .on([Modifier.Ctrl, Modifier.Meta], this.nextKey, () => this.listBehavior.next(), {\n ignoreRepeat: false,\n })\n .on([Modifier.Ctrl, Modifier.Meta], ' ', () => this.listBehavior.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'Enter', () => this.listBehavior.toggle())\n .on([Modifier.Ctrl, Modifier.Meta], 'Home', () => this.listBehavior.first())\n .on([Modifier.Ctrl, Modifier.Meta], 'End', () => this.listBehavior.last())\n .on([Modifier.Ctrl, Modifier.Meta], 'A', () => {\n this.listBehavior.toggleAll();\n this.listBehavior.select(); // Ensure the currect option remains selected.\n });\n }\n\n return manager;\n });\n\n /** The pointerdown event manager for the listbox. */\n pointerdown = computed(() => {\n const manager = new PointerEventManager();\n\n if (this.readonly()) {\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!));\n }\n\n if (this.multi()) {\n manager.on(Modifier.Shift, e =>\n this.listBehavior.goto(this._getItem(e)!, {selectRange: true}),\n );\n }\n\n if (!this.multi() && this.followFocus()) {\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!, {selectOne: true}));\n }\n\n if (!this.multi() && !this.followFocus()) {\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!, {toggle: true}));\n }\n\n if (this.multi() && this.followFocus()) {\n return manager\n .on(e => this.listBehavior.goto(this._getItem(e)!, {selectOne: true}))\n .on(Modifier.Ctrl, e => this.listBehavior.goto(this._getItem(e)!, {toggle: true}));\n }\n\n if (this.multi() && !this.followFocus()) {\n return manager.on(e => this.listBehavior.goto(this._getItem(e)!, {toggle: true}));\n }\n\n return manager;\n });\n\n constructor(readonly inputs: ListboxInputs<V>) {\n this.readonly = inputs.readonly;\n this.orientation = inputs.orientation;\n this.multi = inputs.multi;\n this.listBehavior = new List(inputs);\n }\n\n /** Returns a set of violations */\n validate(): string[] {\n const violations: string[] = [];\n\n if (!this.inputs.multi() && this.inputs.values().length > 1) {\n violations.push(\n `A single-select listbox should not have multiple selected options. Selected options: ${this.inputs.values().join(', ')}`,\n );\n }\n\n return violations;\n }\n\n /** Handles keydown events for the listbox. */\n onKeydown(event: KeyboardEvent) {\n if (!this.disabled()) {\n this.keydown().handle(event);\n }\n }\n\n onPointerdown(event: PointerEvent) {\n if (!this.disabled()) {\n this.pointerdown().handle(event);\n }\n }\n\n /**\n * Sets the listbox to it's default initial state.\n *\n * Sets the active index of the listbox to the first focusable selected\n * item if one exists. Otherwise, sets focus to the first focusable item.\n *\n * This method should be called once the listbox and it's options are properly initialized,\n * meaning the ListboxPattern and OptionPatterns should have references to each other before this\n * is called.\n */\n setDefaultState() {\n let firstItem: OptionPattern<V> | null = null;\n\n for (const item of this.inputs.items()) {\n if (this.listBehavior.isFocusable(item)) {\n if (!firstItem) {\n firstItem = item;\n }\n if (item.selected()) {\n this.inputs.activeItem.set(item);\n return;\n }\n }\n }\n\n if (firstItem) {\n this.inputs.activeItem.set(firstItem);\n }\n }\n\n protected _getItem(e: PointerEvent) {\n if (!(e.target instanceof HTMLElement)) {\n return;\n }\n\n const element = e.target.closest('[role=\"option\"]');\n return this.inputs.items().find(i => i.element() === element);\n }\n}\n","/**\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 {computed, SignalLike} from '../behaviors/signal-like/signal-like';\nimport {List, ListInputs, ListItem} from '../behaviors/list/list';\n\n/**\n * Represents the properties exposed by a listbox that need to be accessed by an option.\n * This exists to avoid circular dependency errors between the listbox and option.\n */\ninterface ListboxPattern<V> {\n inputs: ListInputs<OptionPattern<V>, V>;\n listBehavior: List<OptionPattern<V>, V>;\n}\n\n/** Represents the required inputs for an option in a listbox. */\nexport interface OptionInputs<V> extends Omit<ListItem<V>, 'index' | 'selectable'> {\n listbox: SignalLike<ListboxPattern<V> | undefined>;\n}\n\n/** Represents an option in a listbox. */\nexport class OptionPattern<V> {\n /** A unique identifier for the option. */\n id: SignalLike<string>;\n\n /** The value of the option. */\n value: SignalLike<V>;\n\n /** The position of the option in the list. */\n index = computed(() => this.listbox()?.inputs.items().indexOf(this) ?? -1);\n\n /** Whether the option is active. */\n active = computed(() => this.listbox()?.inputs.activeItem() === this);\n\n /** Whether the option is selected. */\n selected = computed(() => this.listbox()?.inputs.values().includes(this.value()));\n\n /** Whether the option is selectable. */\n selectable = () => true;\n\n /** Whether the option is disabled. */\n disabled: SignalLike<boolean>;\n\n /** The text used by the typeahead search. */\n searchTerm: SignalLike<string>;\n\n /** A reference to the parent listbox. */\n listbox: SignalLike<ListboxPattern<V> | undefined>;\n\n /** The tab index of the option. */\n tabIndex = computed(() => this.listbox()?.listBehavior.getItemTabindex(this));\n\n /** The html element that should receive focus. */\n element: SignalLike<HTMLElement | undefined>;\n\n constructor(args: OptionInputs<V>) {\n this.id = args.id;\n this.value = args.value;\n this.listbox = args.listbox;\n this.element = args.element;\n this.disabled = args.disabled;\n this.searchTerm = args.searchTerm;\n }\n}\n","/**\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 {ListboxInputs, ListboxPattern} from './listbox';\nimport {SignalLike, computed} from '../behaviors/signal-like/signal-like';\nimport {OptionPattern} from './option';\nimport {ComboboxPattern, ComboboxListboxControls} from '../combobox/combobox';\n\nexport type ComboboxListboxInputs<V> = ListboxInputs<V> & {\n /** The combobox controlling the listbox. */\n combobox: SignalLike<ComboboxPattern<OptionPattern<V>, V> | undefined>;\n};\n\nexport class ComboboxListboxPattern<V>\n extends ListboxPattern<V>\n implements ComboboxListboxControls<OptionPattern<V>, V>\n{\n /** A unique identifier for the popup. */\n id = computed(() => this.inputs.id());\n\n /** The ARIA role for the listbox. */\n role = computed(() => 'listbox' as const);\n\n /** The id of the active (focused) item in the listbox. */\n activeId = computed(() => this.listBehavior.activeDescendant());\n\n /** The list of options in the listbox. */\n items: SignalLike<OptionPattern<V>[]> = computed(() => this.inputs.items());\n\n /** The tab index for the listbox. Always -1 because the combobox handles focus. */\n override tabIndex: SignalLike<-1 | 0> = () => -1;\n\n /** Whether multiple items in the list can be selected at once. */\n override multi = computed(() => {\n return this.inputs.combobox()?.readonly() ? this.inputs.multi() : false;\n });\n\n constructor(override readonly inputs: ComboboxListboxInputs<V>) {\n if (inputs.combobox()) {\n inputs.focusMode = () => 'activedescendant';\n inputs.element = inputs.combobox()!.inputs.inputEl;\n }\n\n super(inputs);\n }\n\n /** Noop. The combobox handles keydown events. */\n override onKeydown(_: KeyboardEvent): void {}\n\n /** Noop. The combobox handles pointerdown events. */\n override onPointerdown(_: PointerEvent): void {}\n\n /** Noop. The combobox controls the open state. */\n override setDefaultState(): void {}\n\n /** Navigates to the specified item in the listbox. */\n focus = (item: OptionPattern<V>, opts?: {focusElement?: boolean}) => {\n this.listBehavior.goto(item, opts);\n };\n\n /** Navigates to the previous focusable item in the listbox. */\n getActiveItem = () => this.inputs.activeItem();\n\n /** Navigates to the next focusable item in the listbox. */\n next = () => this.listBehavior.next();\n\n /** Navigates to the previous focusable item in the listbox. */\n prev = () => this.listBehavior.prev();\n\n /** Navigates to the last focusable item in the listbox. */\n last = () => this.listBehavior.last();\n\n /** Navigates to the first focusable item in the listbox. */\n first = () => this.listBehavior.first();\n\n /** Unfocuses the currently focused item in the listbox. */\n unfocus = () => this.listBehavior.unfocus();\n\n /** Selects the specified item in the listbox. */\n select = (item?: OptionPattern<V>) => this.listBehavior.select(item);\n\n /** Toggles the selection state of the given item in the listbox. */\n toggle = (item?: OptionPattern<V>) => this.listBehavior.toggle(item);\n\n /** Clears the selection in the listbox. */\n clearSelection = () => this.listBehavior.deselectAll();\n\n /** Retrieves the OptionPattern associated with a pointer event. */\n getItem = (e: PointerEvent) => this._getItem(e);\n\n /** Retrieves the currently selected items in the listbox. */\n getSelectedItems = () => {\n // NOTE: We need to do this funky for loop to preserve the order of the selected values.\n const items = [];\n for (const value of this.inputs.values()) {\n const item = this.items().find(i => i.value() === value);\n if (item) {\n items.push(item);\n }\n }\n return items;\n };\n\n /** Sets the value of the combobox listbox. */\n setValue = (value: V | undefined) => this.inputs.values.set(value ? [value] : []);\n}\n"],"names":["ListboxPattern","inputs","listBehavior","orientation","disabled","computed","readonly","tabIndex","activeDescendant","multi","setsize","items","length","followFocus","selectionMode","wrap","signal","prevKey","textDirection","nextKey","dynamicSpaceKey","isTyping","typeaheadRegexp","keydown","manager","KeyboardEventManager","on","prev","ignoreRepeat","next","first","last","e","search","key","selectOne","Modifier","Any","anchor","activeIndex","Shift","selectRange","Ctrl","Meta","updateSelection","toggle","toggleAll","toggleOne","select","pointerdown","PointerEventManager","goto","_getItem","constructor","List","validate","violations","values","push","join","onKeydown","event","handle","onPointerdown","setDefaultState","firstItem","item","isFocusable","selected","activeItem","set","target","HTMLElement","element","closest","find","i","OptionPattern","id","value","index","listbox","indexOf","active","includes","selectable","searchTerm","getItemTabindex","args","ComboboxListboxPattern","role","activeId","combobox","focusMode","inputEl","_","focus","opts","getActiveItem","unfocus","clearSelection","deselectAll","getItem","getSelectedItems","setValue"],"mappings":"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"}
|
|
@@ -288,9 +288,13 @@ class TreePattern {
|
|
|
288
288
|
const tree = this.treeBehavior;
|
|
289
289
|
manager.on(this.prevKey, () => tree.prev({
|
|
290
290
|
selectOne: this.followFocus()
|
|
291
|
-
})
|
|
291
|
+
}), {
|
|
292
|
+
ignoreRepeat: false
|
|
293
|
+
}).on(this.nextKey, () => tree.next({
|
|
292
294
|
selectOne: this.followFocus()
|
|
293
|
-
})
|
|
295
|
+
}), {
|
|
296
|
+
ignoreRepeat: false
|
|
297
|
+
}).on('Home', () => tree.first({
|
|
294
298
|
selectOne: this.followFocus()
|
|
295
299
|
})).on('End', () => tree.last({
|
|
296
300
|
selectOne: this.followFocus()
|
|
@@ -304,9 +308,13 @@ class TreePattern {
|
|
|
304
308
|
if (this.inputs.multi()) {
|
|
305
309
|
manager.on(Modifier.Any, 'Shift', () => tree.anchor(this.treeBehavior.activeIndex())).on(Modifier.Shift, this.prevKey, () => tree.prev({
|
|
306
310
|
selectRange: true
|
|
307
|
-
})
|
|
311
|
+
}), {
|
|
312
|
+
ignoreRepeat: false
|
|
313
|
+
}).on(Modifier.Shift, this.nextKey, () => tree.next({
|
|
308
314
|
selectRange: true
|
|
309
|
-
})
|
|
315
|
+
}), {
|
|
316
|
+
ignoreRepeat: false
|
|
317
|
+
}).on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'Home', () => tree.first({
|
|
310
318
|
selectRange: true,
|
|
311
319
|
anchor: false
|
|
312
320
|
})).on([Modifier.Ctrl | Modifier.Shift, Modifier.Meta | Modifier.Shift], 'End', () => tree.last({
|
|
@@ -332,7 +340,11 @@ class TreePattern {
|
|
|
332
340
|
});
|
|
333
341
|
}
|
|
334
342
|
if (this.inputs.multi() && this.followFocus()) {
|
|
335
|
-
manager.on([Modifier.Ctrl, Modifier.Meta], this.prevKey, () => tree.prev()
|
|
343
|
+
manager.on([Modifier.Ctrl, Modifier.Meta], this.prevKey, () => tree.prev(), {
|
|
344
|
+
ignoreRepeat: false
|
|
345
|
+
}).on([Modifier.Ctrl, Modifier.Meta], this.nextKey, () => tree.next(), {
|
|
346
|
+
ignoreRepeat: false
|
|
347
|
+
}).on([Modifier.Ctrl, Modifier.Meta], this.expandKey, () => this._expandOrFirstChild()).on([Modifier.Ctrl, Modifier.Meta], this.collapseKey, () => this._collapseOrParent()).on([Modifier.Ctrl, Modifier.Meta], ' ', () => tree.toggle()).on([Modifier.Ctrl, Modifier.Meta], 'Enter', () => tree.toggle()).on([Modifier.Ctrl, Modifier.Meta], 'Home', () => tree.first()).on([Modifier.Ctrl, Modifier.Meta], 'End', () => tree.last()).on([Modifier.Ctrl, Modifier.Meta], 'A', () => {
|
|
336
348
|
tree.toggleAll();
|
|
337
349
|
tree.select();
|
|
338
350
|
});
|