Overview
AutoCompleteComboBox
is a type of ListComboBox pairing an AutoCompleteInput that auto-completes text as you type, and a ListBox that scrolls to show you the currently-selected choice.
Usage
import AutoCompleteComboBox from 'elix/define/AutoCompleteComboBox.js';
const autoCompleteComboBox = new AutoCompleteComboBox(); // or
const autoCompleteComboBox = document.createElement('elix-auto-complete-combo-box');
In HTML:
<script type="module" src="node_modules/elix/define/AutoCompleteComboBox.js"></script>
<elix-auto-complete-combo-box aria-label="Pet">
<div>Cat</div>
<div>Dog</div>
<div>Fish</div>
</elix-auto-complete-combo-box>
See also
API
Ancestry: AutoCompleteComboBox → ListComboBox → ComboBox → PopupSource → ReactiveElement → HTMLElement
Built with mixins AriaRoleMixin, AriaRoleMixin, AttributeMarshallingMixin, DelegateFocusMixin, DelegateItemsMixin, DirectionSelectionMixin, DisabledMixin, FocusVisibleMixin, FormElementMixin, ItemsTextMixin, KeyboardMixin, KeyboardMixin, OpenCloseMixin, ReactiveMixin, ShadowTemplateMixin, and SingleSelectionMixin.
The element defines the following shadow parts:
backdrop
: the backdrop behind the overlay, default type is Hiddendown-icon
: the icon shown in the toggle button if the popup will open or close in the down directionframe
: the frame around the overlay, default type is OverlayFrameinput
: the text input element, default type is AutoCompleteInputlist
: the list of choices, default type is FilterListBoxpopup
: the popup element, default type is Popupsource
: the element used as the reference point for positioning the popup, generally the element that invokes the popup, default type isdiv
elementtoggle-button
: the button that toggles the popup, default type is SeamlessButtonup-icon
: the icon shown in the toggle button if the popup will open or close in the up direction
backdrop Part Type property
The class, tag, or template used for the backdrop
part - the optional
element shown behind the popup.
This can help focus the user's attention on the overlay content. Additionally, a backdrop can be used to absorb clicks on background page elements. For example, Dialog uses ModalBackdrop as an overlay backdrop in such a way.
Type: (component class constructor)|HTMLTemplateElement|string
Default: Backdrop
Defined by PopupSource
can Select Next property
True if the selection can be moved to the next item, false if not (the selected item is the last item in the list).
Type: boolean
Defined by SingleSelectionMixin
can Select Previous property
True if the selection can be moved to the previous item, false if not (the selected item is the first one in the list).
Type: boolean
Defined by SingleSelectionMixin
close(closeResult) method
Close the component (if not already closed).
Some components like AlertDialog want to indicate why or
how they were closed. To support such scenarios, you can supply a value
to the optional closeResult
parameter. This closeResult will be made
available in the whenClosed
promise and the state.closeResult
member.
Parameters:
- closeResult:
object
– an indication of how or why the element closed
Defined by OpenCloseMixin
closed property
True if the element is currently closed.
Type: boolean
Defined by OpenCloseMixin
closed event
Raised when the component closes.
Defined by OpenCloseMixin
close Finished property
True if the element has completely closed.
For components not using asynchronous open/close effects, this property
returns the same value as the closed
property. For elements that have a
true value of state.openCloseEffects
(e.g., elements using
TransitionEffectMixin), this property returns
true only if state.effect
is "close" and state.effectPhase
is
"after".
Type: boolean
Defined by OpenCloseMixin
disabled property
True if the component is disabled, false (the default) if not.
The value of this property will be reflected to the disabled
attribute
so that it can be referenced in CSS. Note that this non-native
implementation of the disabled
attribute will not trigger the
:disabled
CSS pseudo-class, so your style rules will have to reference
the presence or absence of the disabled
attribute. That is, instead
of writing
my-component:disabled { ... }
write this instead
my-component[disabled] { ... }
Like the native disabled
attribute, this attribute is boolean. That
means that it's existence in markup sets the attribute, even if set to
an empty string or a string like "false".
Type: boolean
Default: false
Defined by DisabledMixin
form property
The ID of the form
element with which this element is associated,
or null
if the element is not associated with any form. This is provided
for consistency with the native HTML
form
property.
Type: string
Defined by FormElementMixin
frame Part Type property
The class, tag, or template used to create the frame
part – the popup's
primary content.
The frame element can be used to provide a border around the popup content, and to provide visual effects such as a drop-shadow to help distinguish popup content from background page elements.
Type: (component class constructor)|HTMLTemplateElement|string
Default: OverlayFrame
Defined by PopupSource
horizontal Align property
The alignment of the popup with respect to the source button.
start
: popup and source are aligned on the leading edge according to the text directionend
: popup and source are aligned on the trailing edge according to the text directionleft
: popup and source are left-alignedright
: popup and source are right-aligned- `stretch: both left and right edges are aligned
Type: 'start'|'end'|'left'|'right'|'stretch'
Default: 'start'
Defined by PopupSource
input property
The combo box's input element.
Type: Element|null
Defined by ComboBox
input Part Type property
The class, tag, or template used to create the input
part into which the
user can enter text.
Type: (component class constructor)|HTMLTemplateElement|string
Default: 'input'
Defined by ComboBox
[internal.default State] property
The default state for the component. This can be extended by mixins and classes to provide additional default state.
Type: State
Defined by ReactiveMixin
[internal.delegates Focus] property
Returns true if the component is delegating its focus.
A component using DelegateFocusMixin
will always have this property be
true unless a class takes measures to override it.
Type: boolean
Default: true
Defined by DelegateFocusMixin
[internal.get Item Text](item) method
Extract the text from the given item.
The default implementation returns an item's alt
attribute or its
textContent
, in that order.
Parameters:
- item:
HTMLElement|SVGElement
–
Returns: string
Defined by ItemsTextMixin
[internal.go Down]() method
Invokes selectNext
to select the next item.
Defined by DirectionSelectionMixin
[internal.go End]() method
Invokes selectLast
to select the next item.
Defined by DirectionSelectionMixin
[internal.go Left]() method
Invokes selectPrevious
to select the previous item.
If the element has a rightToLeft
property and it is true, then this
selects the next item.
Defined by DirectionSelectionMixin
[internal.go Next]() method
Invokes selectNext
to select the next item.
Defined by DirectionSelectionMixin
[internal.go Previous]() method
Invokes selectPrevious
to select the previous item.
Defined by DirectionSelectionMixin
[internal.go Right]() method
Invokes selectNext
to select the next item.
If the element has a rightToLeft
property and it is true, then this
selects the previous item.
Defined by DirectionSelectionMixin
[internal.go Start]() method
Invokes selectFirst
to select the first item.
Defined by DirectionSelectionMixin
[internal.go Up]() method
Invokes selectPrevious
to select the previous item.
Defined by DirectionSelectionMixin
[internal.ids] property
A convenient shortcut for looking up an element by ID in the component's Shadow DOM subtree.
Example: if component's template contains a shadow element <button
id="foo">
, you can use the reference this[internal.ids].foo
to obtain
the corresponding button in the component instance's shadow tree. The
ids
property is simply a shorthand for getElementById
, so
this[internal.ids].foo
is the same as
this.shadowRoot.getElementById('foo')
.
Type: object
Defined by ShadowTemplateMixin
[internal.keydown]() method
See the symbols documentation for details.
Defined by KeyboardMixin
[internal.render](changed) method
Render the indicated changes in state to the DOM.
The default implementation of this method does nothing. Override this method in your component to update your component's host element and any shadow elements to reflect the component's new state. See the rendering example.
Be sure to call super
in your method implementation so that your
component's base classes and mixins have a chance to perform their own
render work.
Parameters:
- changed:
object
– dictionary of flags indicating which state members have changed since the last render
Defined by ReactiveMixin
[internal.render Changes]() method
Render any pending component changes to the DOM.
This method does nothing if the state has not changed since the last render call.
ReactiveMixin will invoke this method following a setState
call;
you should not need to invoke this method yourself.
This method invokes all internal render methods, then invokes
componentDidMount
(for first render) or componentDidUpdate
(for
subsequent renders).
Defined by ReactiveMixin
[internal.set State](changes) method
Update the component's state by merging the specified changes on top of the existing state. If the component is connected to the document, and the new state has changed, this returns a promise to asynchronously render the component. Otherwise, this returns a resolved promise.
Parameters:
- changes:
object
– the changes to apply to the element's state
Returns: Promise
- resolves when the new state has been rendered
Defined by ReactiveMixin
[internal.state] property
The component's current state.
The returned state object is immutable. To update it, invoke
internal.setState
.
It's extremely useful to be able to inspect component state while
debugging. If you append ?elixdebug=true
to a page's URL, then
ReactiveMixin will conditionally expose a public state
property
that returns the component's state. You can then access the state
in your browser's debug console.
Type: State
Defined by ReactiveMixin
items property
The current set of items drawn from the element's current state.
Defined by DelegateItemsMixin
list Part Type property
The class, tag, or template used to create the list
part - the list of
available choices shown in the popup.
Type: (component class constructor)|HTMLTemplateElement|string
Default: ListBox
Defined by ListComboBox
name property
The name of the form field that will be filled with this element's
value
. This is an analogue of the standard HTML
name
property.
Type: string
Defined by FormElementMixin
open() method
Open the element (if not already opened).
Defined by OpenCloseMixin
opened property
True if the element is currently opened.
Type: boolean
Defined by OpenCloseMixin
opened event
Raised when the component opens.
Defined by OpenCloseMixin
opened-changed event
Raised when the opened/closed state of the component changes.
Defined by OpenCloseMixin
placeholder property
The prompt text shown in the input if it is empty.
Type: string
Defined by ComboBox
popup Part Type property
The class, tag, or template used to create the popup
part – the element
responsible for displaying the popup and handling overlay behavior.
Type: (component class constructor)|HTMLTemplateElement|string
Default: Popup
Defined by PopupSource
popup Position property
The preferred direction for the popup.
above
: popup should appear above the sourcebelow
: popup should appear below the source
Type: 'above'|'below'
Default: 'below'
Defined by PopupSource
selected-index-changed event
Raised when the selectedIndex
property changes.
Defined by SingleSelectionMixin
selected Index property
The index of the currently-selected item, or -1 if no item is selected.
Type: number
Defined by SingleSelectionMixin
selected Item property
The currently-selected item, or null if no item is selected.
Type: Element
Defined by SingleSelectionMixin
select First() method
Select the first item in the list.
Returns: Boolean
True if the selection changed, false if not.
Defined by SingleSelectionMixin
selection Required property
True if the list should always have a selection (if it has items).
Type: boolean
Default: false
Defined by SingleSelectionMixin
selection Wraps property
True if selection navigations wrap from last to first, and vice versa.
Type: boolean
Default: false
Defined by SingleSelectionMixin
select Last() method
Select the last item in the list.
Returns: Boolean
True if the selection changed, false if not.
Defined by SingleSelectionMixin
select Next() method
Select the next item in the list.
If the list has no selection, the first item will be selected.
Returns: Boolean
True if the selection changed, false if not.
Defined by SingleSelectionMixin
select Previous() method
Select the previous item in the list.
If the list has no selection, the last item will be selected.
Returns: Boolean
True if the selection changed, false if not.
Defined by SingleSelectionMixin
source Part Type property
The class, tag, or template used to create the source
part - the button
(or other element) the user can tap/click to invoke the popup.
Type: (component class constructor)|HTMLTemplateElement|string
Default: 'button'
Defined by PopupSource
suppress Focus Visibility() method
Temporarily suppress visibility of the keyboard focus until the next keydown event.
This can be useful in components like Menu that actively manage
where the focus is in response to mouse hover activity. If the user uses
the keyboard to invoke a menu, then changes to using the mouse, it can be
distracting to see the focus indicator moving as well. In such
situations, the component can invoke this method (e.g., in response to
mousemove
) to temporarily suppress focus visibility.
Defined by FocusVisibleMixin
toggle(opened) method
Toggle the open/close state of the element.
Parameters:
- opened:
boolean
– true if the element should be opened, false if closed.
Defined by OpenCloseMixin
toggle Button Part Type property
The class, tag, or template used to create the toggle-button
part – the
button that toggles the popup.
Type: (component class constructor)|HTMLTemplateElement|string
Default: SeamlessButton
Defined by ComboBox
type property
The "type" of the form field, provided for consistency with the native HTML type property. The value of this property will be the same as the HTML tag name registered for the custom element.
Type: string
Defined by FormElementMixin
when Closed() method
This method can be used as an alternative to listening to the "opened-changed" event, particularly in situations where you want to only handle the next time the component is closed.
Returns: Promise
A promise that resolves when the element has
completely closed, including the completion of any asynchronous opening
effect.
Defined by OpenCloseMixin