@brightspace-ui-labs/autocomplete
![NPM version](https://img.shields.io/npm/v/@brightspace-ui-labs/autocomplete.svg)
Note: this is a "labs" component. While functional, these tasks are prerequisites to promotion to BrightspaceUI "official" status:
Polymer-based web component for integrating autocomplete with text inputs
Installation
npm install @brightspace-ui-labs/autocomplete
Components
Text Input
<d2l-labs-autocomplete-input-text id="my-autocomplete"></d2l-labs-autocomplete-input-text>
const autocomplete = document.getElementById('my-autocomplete')
autocomplete.data = [
{ value: 'Option 1' },
{ value: 'Option 2' }
]
autocomplete.filterFn = (value, filter) => value === filter;
Custom Input
<d2l-labs-autocomplete id="my-autocomplete">
<input id="my-input" slot="input">
</d2l-labs-autocomplete>
Remote Source
Set remote-source
on the autocomplete.
Add an event listener for the d2l-labs-autocomplete-filter-change
event, and set the suggestions manually after fetching the filtered options.
E.g.,
<d2l-labs-autocomplete-input-text id="my-autocomplete" remote-source></d2l-labs-autocomplete-input-text>
autocomplete.addEventListener('d2l-labs-autocomplete-filter-change', event => {
fetchResultsFromRemoteSource(event.detail.value)
.then(results => autocomplete.setSuggestions(results))
})
Events
d2l-labs-autocomplete-filter-change
(remote source only)
- Emitted whenever the filter changes, provided the filter is at least
min-length
characters long (default: 1
). Also fires when the input is cleared.
d2l-labs-autocomplete-suggestion-selected
- Emitted when a suggestion from the dropdown is selected (keyboard or mouse).
Developing, Testing and Contributing
After cloning the repo, run npm install
to install dependencies.
Linting
npm run lint
Testing
# lint & run headless unit tests
npm test
# unit tests only
npm run test:headless
# debug or run a subset of local unit tests
npm run test:headless:watch
Running the demos
To start a @web/dev-server that hosts the demo page and tests:
npm start
Versioning & Releasing
TL;DR: Commits prefixed with fix:
and feat:
will trigger patch and minor releases when merged to main
. Read on for more details...
The semantic-release GitHub Action is called from the release.yml
GitHub Action workflow to handle version changes and releasing.
Version Changes
All version changes should obey semantic versioning rules:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards compatible manner, and
- PATCH version when you make backwards compatible bug fixes.
The next version number will be determined from the commit messages since the previous release. Our semantic-release configuration uses the Angular convention when analyzing commits:
- Commits which are prefixed with
fix:
or perf:
will trigger a patch
release. Example: fix: validate input before using
- Commits which are prefixed with
feat:
will trigger a minor
release. Example: feat: add toggle() method
- To trigger a MAJOR release, include
BREAKING CHANGE:
with a space or two newlines in the footer of the commit message - Other suggested prefixes which will NOT trigger a release:
build:
, ci:
, docs:
, style:
, refactor:
and test:
. Example: docs: adding README for new component
To revert a change, add the revert:
prefix to the original commit message. This will cause the reverted change to be omitted from the release notes. Example: revert: fix: validate input before using
.
Releases
When a release is triggered, it will:
- Update the version in
package.json
- Tag the commit
- Create a GitHub release (including release notes)
- Deploy a new package to NPM
Releasing from Maintenance Branches
Occasionally you'll want to backport a feature or bug fix to an older release. semantic-release
refers to these as maintenance branches.
Maintenance branch names should be of the form: +([0-9])?(.{+([0-9]),x}).x
.
Regular expressions are complicated, but this essentially means branch names should look like:
1.15.x
for patch releases on top of the 1.15
release (after version 1.16
exists)2.x
for feature releases on top of the 2
release (after version 3
exists)