UNPKG

choices.js

Version:

A vanilla JS customisable text input/select box plugin

94 lines (91 loc) 2.96 kB
import { ClassNames } from './interfaces/class-names'; import { Options } from './interfaces/options'; import { sortByAlpha } from './lib/utils'; export const DEFAULT_CLASSNAMES: ClassNames = { containerOuter: ['choices'], containerInner: ['choices__inner'], input: ['choices__input'], inputCloned: ['choices__input--cloned'], list: ['choices__list'], listItems: ['choices__list--multiple'], listSingle: ['choices__list--single'], listDropdown: ['choices__list--dropdown'], item: ['choices__item'], itemSelectable: ['choices__item--selectable'], itemDisabled: ['choices__item--disabled'], itemChoice: ['choices__item--choice'], description: ['choices__description'], placeholder: ['choices__placeholder'], group: ['choices__group'], groupHeading: ['choices__heading'], button: ['choices__button'], activeState: ['is-active'], focusState: ['is-focused'], openState: ['is-open'], disabledState: ['is-disabled'], highlightedState: ['is-highlighted'], selectedState: ['is-selected'], flippedState: ['is-flipped'], loadingState: ['is-loading'], notice: ['choices__notice'], addChoice: ['choices__item--selectable', 'add-choice'], noResults: ['has-no-results'], noChoices: ['has-no-choices'], } as const; export const DEFAULT_CONFIG: Options = { items: [], choices: [], silent: false, renderChoiceLimit: -1, maxItemCount: -1, closeDropdownOnSelect: 'auto', singleModeForMultiSelect: false, addChoices: false, addItems: true, addItemFilter: (value) => !!value && value !== '', removeItems: true, removeItemButton: false, removeItemButtonAlignLeft: false, editItems: false, allowHTML: false, allowHtmlUserInput: false, duplicateItemsAllowed: true, delimiter: ',', paste: true, searchEnabled: true, searchChoices: true, searchFloor: 1, searchResultLimit: 4, searchFields: ['label', 'value'], position: 'auto', resetScrollPosition: true, shouldSort: true, shouldSortItems: false, sorter: sortByAlpha, shadowRoot: null, placeholder: true, placeholderValue: null, searchPlaceholderValue: null, prependValue: null, appendValue: null, renderSelectedChoices: 'auto', loadingText: 'Loading...', noResultsText: 'No results found', noChoicesText: 'No choices to choose from', itemSelectText: 'Press to select', uniqueItemText: 'Only unique values can be added', customAddItemText: 'Only values matching specific conditions can be added', addItemText: (value) => `Press Enter to add <b>"${value}"</b>`, removeItemIconText: () => `Remove item`, removeItemLabelText: (value) => `Remove item: ${value}`, maxItemText: (maxItemCount) => `Only ${maxItemCount} values can be added`, valueComparer: (value1, value2) => value1 === value2, fuseOptions: { includeScore: true, }, labelId: '', callbackOnInit: null, callbackOnCreateTemplates: null, classNames: DEFAULT_CLASSNAMES, appendGroupInSearch: false, } as const;