Releases: thisbeyond/solid-select
Release 0.14.0
A major refactor to more clearly separate out the core and the builtin
components. The builtin Select
and accompanying component interfaces remains
unchanged, but there are backwards incompatible changes to the createSelect
interface.
Changed
-
Breaking Change Streamline the core and allow greater control in
components. No longer pass or use element refs in the core, including not
automatically settign up event handlers. Instead, return commonly useful
handlers (such asonKeyDown
) fromcreateSelect
for use in components. -
Breaking Change Expose signals directly as accessors rather than hiding
behind property getters in return ofcreateSelect
. For example,
select.options
should now beselect.options()
. This more closely matches
SolidJS and avoids inconsistency around not being able to set properties
directly. -
Breaking Change Remove helpers (such as
open
andclose
) in favour of
exposing setters (e.g.setIsOpen
) consistently fromcreateSelect
. This
provides a more intuitive interface rather than some aspects having helpers
and others not. -
Breaking Change Refactor
Select
components to make use of a shared
Context
providing the created select. Avoid unnecessary prop drilling and
make it easier to others to compose their own selects (withuseSelect
). -
Breaking Change Make
createAsyncOptions
throttle by default. The fetcher
will be called every 250ms by default to prevent excessive calls to resources.
The threshold can be configured or removed by passing a second argument - e.g.
createAsyncOptions(fetcher, 0)
for original behaviour. -
Hide the input caret with CSS rather than hide the entire input component to
make some logic easier (such as focus handling).
Fixed
- Allow repositioning the cursor on active input text. Previously, attempting to
do this would clear the input value.
Release 0.13.0
Changed
- Breaking Change Support Solid JS 1.5 as the minimum compatible version and
update relevant typings.
Release 0.12.0
Changed
- React to changing
initialValue
even if initiallyundefined
onSelect
component.
Fixed
- Fix
onFocus
prop being ignored bySelect
component. It now passes it
through to the core and is called correctly when the select is focused. Thanks
to kapilpipaliya for the fix.
Release 0.11.0
Changed
-
Change
initialValue
behaviour on theSelect
component to react to signals
in a more intuitive way. Rather than pass the raw signal in, use the resolved
signal in a tracking context to gain reactivity for theinitialValue
. This
is the recommended approach to passing Signals in Solid (and is also more
similar to plain values).<Select initialValue={initialValue}/>
becomes
<Select initialValue={initialValue()}/>
Thanks to rturnq for the tip!
Release 0.10.0
Added
-
Accept
emptyPlaceholder
property onSelect
to control the message
displayed when there are no options available. Defaults toNo options
.
Thanks to @raskyer for this contribution. -
The
initialValue
prop of theSelect
component can now be a Signal in order
to support reactively re-setting the initial value of the component. This is
useful for providing 'reset form' functionality for example.const [initialValue, setInitialValue] = createSignal(null, { equals: false }); <Select initialValue={initialValue} options={["apple", "banana", "pear", "pineapple", "kiwi"]} /> <button onClick={() => setInitialValue(null)}>Reset</button>
Release 0.9.0
Added
- Auto scroll focused options into view. As part of this, also set sensible
default styles for overflow and maximum height ofsolid-select-list
.
Release 0.8.0
Added
-
Provide a helper,
createAsyncOptions
for loading options asynchronously
based on input value. Uses Solid'screateResource
under the hood.const fetchData = async (inputValue) => { return await ... } const props = createAsyncOptions(fetchData); return <Select {...props} />;
-
Support displaying a loading indicator in the options lists - useful when
fetching options asynchronously. Pass theloading
prop to theSelect
component to control whether to display the loading indicator or the list of
options. Customise the loading message with theloadingPlaceholder
prop.
Release 0.7.1
Fixed
- Fix import error (
Failed to resolve import "virtual:windi.css"
) when using
'solid' export source in another SolidJS project that does not use WindiCSS.
Strip the relevant import line post build as it is not needed in the
distributed package (the styles are already compiled and available viaimport "@thisbeyond/solid-select/style.css";
).
Release 0.7.0
Added
-
Support disabling select by passing boolean value for
disabled
prop (both in
createSelect
or theSelect
component). When disabled no interaction is
permitted. The component is visually styled based on thedata-disabled
attribute.<Select disabled options={["one", "two", "three"]} />
Fixed
- Ensure control is focused even when clicking on extremities of container.
Release 0.6.0
Added
-
Add builtin fuzzy search and sort algorithm. Use as default for filtering in
createOptions
. This replaces the previous filtering logic that could only
match exact segments and was case sensitive. The new algorithm is case
insensitive, can match multiple partials and prioritises start of string /
start of word / consecutive matches. When sorting, if two matches have the
same score then their original array index is used as the tiebreaker.sorted = fuzzySort("spp", ["pineapple", "rose apple", "star apple"]) // [{ target: "star apple", ... }, { target: "rose apple", ... }]
A helper to highlight matches is also included:
highlighted = fuzzyHighlight(sorted[0]) // <><mark>s</mark>tar a<mark>pp</mark>le</>
Changed
- Mark package as side effect free.