Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/brianvoe/slim-select

Slim advanced select dropdown
https://github.com/brianvoe/slim-select

dropdown javascript search select vanilla-javascript

Last synced: about 8 hours ago
JSON representation

Slim advanced select dropdown

Awesome Lists containing this project

README

        

# Slim Select 2

## [slimselectjs.com](https://slimselectjs.com)

Advanced select dropdown

[![NPM Downloads](https://img.shields.io/npm/dt/slim-select.svg)](https://www.npmjs.com/package/slim-select)
![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/brianvoe/slim-select/jest.yml?logo=jest&label=unit%20tests) [![slim-select](https://snyk.io/advisor/npm-package/slim-select/badge.svg)](https://snyk.io/advisor/npm-package/slim-select)

## Support

[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/brianvoe)

Buy Me A Coffee

## [Documentation and Examples](https://slimselectjs.com)

See [website](https://slimselectjs.com) for the full list of [settings](https://slimselectjs.com/settings), [methods](https://slimselectjs.com/methods) and [event callbacks](https://slimselectjs.com/events)

![](https://raw.githubusercontent.com/brianvoe/slim-select/master/slimselect.gif)

## Features

- No Dependencies
- JS: 29kb - 5kb gzip
- CSS: 7kb - 1kb gzip
- Single Select
- Multi Select
- User Addable Options
- Html Options
- Settable Data
- Callback Events
- Placeholders
- Search
- Disable Options
- Light CSS
- Light Color Scheme
- Style and Class Inheritance
- Clean Animations
- Performant
- Typescript

## Frameworks

- Vue

## Installation

```bash
npm install slim-select
```

### or

```html

```

## Simple Usage

```javascript
import SlimSelect from 'slim-select'

new SlimSelect({
select: '#selectElement',
})
```

```html

Value 1

```

## Data

Data is an array of objects that represent both option and optgroups.

See below for list of data types

```javascript
new SlimSelect({
select: '#selectElement',

// Array of Option objects
data: [{ text: 'Value 1', value: 'value1' }],

// or

// Array of Optgroups and/or Options
data: [{ label: 'Optgroup Label', options: { text: 'Value 1', value: 'value1' } }],
})
```

## Data Types

```javascript
//
var optgroup = {
label: 'label', // Required
selectAll: false, // Optional - default false
closable: 'off', // Optional - default 'off' - 'off', 'open', 'close'
options: [], // Required - value is an array of options
}

//
var option = {
text: 'text', // Required
value: 'value', // Optional - value will be set by text if not set
html: 'Html', // Optional - if set, used for display purposes
selected: false, // Optional - default is false
display: true, // Optional - default is true
disabled: false, // Optional - default is false
mandatory: false, // Optional - default is false
placeholder: false, // Optional - default is false
class: '', // Optional - default is not set
style: '', // Optional - default is not set
data: {}, // Optional - If you have data attributes
}
```

## Settings

Settings are a list of fields that help customize how SlimSelect operates

```javascript
new SlimSelect({
select: '#selectElement',

settings: {
// Below are a list of optional fields
// their values are the defaults
disabled: false,
alwaysOpen: false,
showSearch: true,
focusSearch: true,
searchPlaceholder: 'Search',
searchText: 'No Results',
searchingText: 'Searching...',
searchHighlight: false,
closeOnSelect: true,
contentLocation: document.body,
contentPosition: 'absolute',
openPosition: 'auto', // options: auto, up, down
placeholderText: 'Select Value',
allowDeselect: false,
hideSelected: false,
showOptionTooltips: false,
minSelected: 0,
maxSelected: 1000,
timeoutDelay: 200,
maxValuesShown: 20,
maxValuesMessage: '{number} selected',
addableText: 'Press "Enter" to add {value}',
},
})
```

## Events

Events are function callbacks for when certain actions happen

```javascript
new SlimSelect({
select: '#selectElement',

events: {
search: (searchValue: string, currentData: DataArray) => Promise | DataArrayPartial
searchFilter: (option: Option, search: string) => boolean
addable: (value: string) => Promise | OptionOptional | string | Error
beforeChange: (newVal: Option[], oldVal: Option[]) => boolean | void
afterChange: (newVal: Option[]) => void
beforeOpen: () => void
afterOpen: () => void
beforeClose: () => void
afterClose: () => void
error: (err: Error) => void
},
})
```