Skip to content

Releases: Xon/Choices.js

v11.0.0-rc7

19 Aug 03:43
@Xon Xon
Compare
Choose a tag to compare
v11.0.0-rc7 Pre-release
Pre-release

⚠ BREAKING CHANGES

  • Improve consistency of the choice event firing. choice event now occurs after the addItem event
  • enter key now consistently opens/closes the dropdown instead of the behavior varying depending on backing element or internal state of the highlighted choice

Features

  • Improve performance of search/filtering with large number of choices.
  • Add closeDropdownOnSelect option, controls how the dropdown is close after selection is made. #636 #973 #1012
  • Allow choices.js to be imported on nodejs, useful for tests and also server side rendering. As windows.document is by default not defined, the default template rendering will not function. The callbackOnCreateTemplates callback must be used. #861

Bug Fixes (from 10.2.0)

  • Improve various [aria-*] attribute handling for better lighthouse accessibility scores #1169
  • Improve contrast on default CSS by darkening primary item selection color #924
  • Fix Choices does not accept an element from an iframe #1057
  • Fix Choices was not disable in a <fieldset disabled> #1132
  • Fix silent option does not silence warnings about unknown options #1119
  • Fix mutation APIs setChoiceByValue/setChoices/setValue now throw an error the Choices instance was not initialized or multiple choices instances where initialized on the same element. Prevents bad internal states from triggering unexpected errors #1129
  • Fix documentation that suggests duplicateItemsAllowed works with select-multiple, when it only works for text. #1123
  • Fix quadratic algorithm complexity (aka O(N^2) ) when filtering/search choices.
  • Fix search results could be unexpectedly unstable, and that fuseOptions.sortFn was effectively ignored #1106

Bug Fixes (from 11.0.0RC5)

  • Fix destroy&init of choices.js would lost track of data from the backing <input>/<select>
  • Update e2e tests

Bug Fixes (from 11.0.0RC1)

  • Fix various select-one bugs related to how <select> initializes and selected values do not match the configured choices.js
  • Fix legacy placeholder attribute support for select-one
  • Fix data-value attribute on choices may not be correctly rendered into html
  • Fix possible empty aria-label generation on remove item button
  • Fix clearChoices() did not remove the actual selection options

Chore

  • Switch e2e tests from puppeteer/selenium/cypress to playwright
  • Restructure end-to-end tests so html/script blocks are co-located to improve debugability
  • Enable @typescript-eslint/explicit-function-return-type eslint rule

v11.0.0-rc5

08 Aug 10:11
@Xon Xon
Compare
Choose a tag to compare
v11.0.0-rc5 Pre-release
Pre-release

Changelog

[11.0.0-rc5] (2024-08-08)

⚠ BREAKING CHANGES

  • Update to using Fuse.js v7.0.0
  • Update choices.js package to be an ES module, and use 'subpath exports' to expose multiple versions (UMD, CJS or MTS bundles).
  • Provide "fuse full" (default choices.js, ~20.36KB), or "fuse basic" (choices.search-basic.js ~19.31KB) or "prefix filter" (choices.search-filter.js ~15.27KB) based on how much Fuse.js is included.

Bug Fixes (from 10.2.0)

  • Fix select-one placeholder could ignore the non-option placeholder configuration
  • Remove typescript types for tests from distribution

Chore

  • Reduce bundle size from ~24KB to ~20.36KB
  • Switch bundler from webpack to rollup
  • Switch test framework from mocha to vitest

Bug Fixes (from 11.0.0RC4)

  • Fix aria-describedby was being assigned when it shouldn't be
  • Fix check to ensure search was fully enabled for multiple select mode, as this functionality is hard-coded enabled elsewhere in the code base.

v11.0.0 RC4

06 Aug 05:48
@Xon Xon
Compare
Choose a tag to compare
v11.0.0 RC4 Pre-release
Pre-release

Bug Fixes (from 11.0.0 RC3)

  • Fix aria-describedby was being assigned when it shouldn't be
  • Handle custom properties being a simple string
  • Fix placeholderChoice would apply for select-one even when configured to use a static string
  • Fix disabled options where skipped when rendering choices

Chore

  • Various linter fixes
  • Fixing tests

11.0.0 RC3

04 Aug 15:01
@Xon Xon
c341c58
Compare
Choose a tag to compare
11.0.0 RC3 Pre-release
Pre-release

⚠ BREAKING CHANGES

  • For select-one and select-multiple, the placeholder value is pulled from config.placeholderValue="..." or <select data-placeholder="..."> before attempting to extract a placeholder from the options list. #912 #567 #843

Bug Fixes (from 10.2.0)

  • Fix search did not trigger to copy&paste events #860 #174

Chore

  • Update defaults for classnames to be arrays instead of strings

Bug Fixes (from 11.0.0 RC1)

  • Fix noResults/noChoices classes could not be set to a list of classes
  • Fix failing to add an item would close the dropdown
  • Fix invalid css selectors being generated for configurable css class-names with multiple css classes for an element
  • Fix "Press Enter to add..." would not render if the dropdown had partially matching search results
  • Fix render limit would allow select-one to select multiple items

v11.0.0 RC2

02 Aug 18:31
@Xon Xon
Compare
Choose a tag to compare
v11.0.0 RC2 Pre-release
Pre-release

Bug fixes from 10.2.0

  • Avoid pushing a search to fuse.js which is just additional whitespace to the existing search term

Bug fixes from 11.0.0 RC1

  • Fix error when using backspace key after adding an item and then removing it
  • Fix adding items for select boxes would not give the max item messages reliably
  • Fix destroy()/init() would not load choices from the underlying <select> as expected
  • Fix adding user provided choices for select-one would not remove the existing item and result in a select-one with multiple items set.

Chore

  • Remove unused code
  • Use constant enum instead of repeating strings and type information
  • For test html pages, prevent a failing fetch() from breaking the rest of the examples
  • Tweak _render loop to avoid duplicating has-changed checks

v11.0.0 RC1

02 Aug 09:47
@Xon Xon
Compare
Choose a tag to compare
v11.0.0 RC1 Pre-release
Pre-release

⚠ BREAKING CHANGES

  • allowHtml now defaults to false.
  • HTML escaping of choice/item labels should no longer double escape depending on allowHTML mode.
  • Templates/text functions now escape ' characters for display.
  • addItemText/uniqueItemText/customAddItemText are now called with the value argument already escaped.
  • Typescript classes for input data vs internal working data have been adjusted resulting in the Choice/Group/Item typescript classes have been renamed, and aliases left as required.

Features

  • The original option list for the select is not destroyed, and all loaded choices are serialised to HTML for better compatibility with external javascript.
  • New singleModeForMultiSelect feature to treat a select-single as if it was a select-multiple with a max item count of 1, and still auto-close the dropdown and swap the active item on selection.
  • Remove deepMerge dependency.
  • Remove item text can be localized.
  • Allow user-created choices for selects. #1117
    • User input is escaped by default. At the risk of XSS attacks this can be disabled by allowHtmlUserInput.
  • Render options without a group even if groups are present. #615 #1110
  • Read data-labelclass/data-label-description from <option> HTML to drive adding a per-choice CSS label and description text when allowHtml: false.
  • Add removeItemButtonAlignLeft option, to control if the remove item button is at the start or the end of the item.
  • Add removeChoice method. Removes the choice from the choices.js object and any backing <option> HTML element
  • Add refresh method. Reloads choices from the backing <select>s options.
  • Improve rendering performance by batching changes.
  • escapeForTemplate function is passed to the 2nd method of the callbackOnCreateTemplates callback.
  • When allowHtml is false, default templates now render escaped html to innerHtml writing to innerText.
    • This provides consistent rendering performance as innerText is quirky and slower than escaped html into innerHtml
  • Shadow DOM support #938

Bug Fixes

  • Replace malicious polyfill with cdnjs. #1161
  • Maintain groups in search mode. #1152
  • Fix various "first press" bugs on single select dropdowns. #1104
  • Fix 'esc' would close the dropdown and also apply to the container resulting in an overlay/modal unexpectedly closing. #1039
  • Fix form reset would clear the choices list, but not clear the search bar. #1023
  • Fix options would be disabled when choices.js was intialized on a disabled element. Choices-js#1025 Fix a search_term element to appear in form submit data. Choices-js#1049 Fix 'remove item' button would trigger the change event twice due to placeholder value being used (match html single-select). Choices-js#892 Fix optgroups are not preserved when Choices is destroyed Choices-js#1055 Fix placeholder config option would be ignored for select boxes which have blank entries. Fix data-custom-properties attribute did not serialize to created elements as a json blob as expected. Choices-js#840 Choices-js#1155 Choices-js#543 Fix multi-select did not correctly resizing when a select option is selected on choices.js initialization. Fix clearInput function did not clear the last search. Fix addItemFilter would allow empty strings as input to be added for items. Fix various issues with double escaping when displaying items/choices depending on allowHTML mode. Fix aria-label for placeholders was set to the string null Fix searchEnable flag was not respected for select-multiple Choices-js#1042 Fix poor error message when Choices is passed a string selector which fails to find the element for Choices to attach to.