slim-select 2.0.2 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/index.d.ts +1 -1
- package/dist/render.d.ts +10 -3
- package/dist/select.d.ts +6 -6
- package/dist/settings.d.ts +0 -3
- package/dist/slimselect.cjs.js +202 -67
- package/dist/slimselect.css +1 -1
- package/dist/slimselect.css.map +1 -1
- package/dist/slimselect.es.js +202 -67
- package/dist/slimselect.global.js +202 -67
- package/dist/slimselect.js +202 -67
- package/dist/slimselect.min.js +1 -1
- package/dist/slimselect.umd.js +202 -67
- package/dist/slimselect.umd.min.js +1 -1
- package/dist/store.d.ts +5 -0
- package/docs/assets/data.js +7 -3
- package/docs/assets/home.css +1 -1
- package/docs/assets/home.js +1 -1
- package/docs/assets/index.css +1 -1
- package/docs/assets/index.js +7 -7
- package/docs/assets/index2.js +119 -35
- package/docs/assets/index3.js +39 -23
- package/docs/assets/index4.js +1 -1
- package/docs/assets/index5.js +147 -9
- package/docs/assets/install.js +4 -4
- package/docs/assets/selects.js +1 -1
- package/package.json +11 -3
- package/src/docs/app.vue +6 -5
- package/src/docs/{images → assets/images}/check-mark.svg +0 -0
- package/src/docs/{images → assets/images}/chrome.svg +0 -0
- package/src/docs/{images → assets/images}/firefox.svg +0 -0
- package/src/docs/{images → assets/images}/github.png +0 -0
- package/src/docs/{images → assets/images}/ie.svg +0 -0
- package/src/docs/{images → assets/images}/npm.png +0 -0
- package/src/docs/{images → assets/images}/opera.svg +0 -0
- package/src/docs/{images → assets/images}/safari.svg +0 -0
- package/src/docs/assets/scss/misc.scss +7 -0
- package/src/docs/env.d.ts +1 -0
- package/src/docs/pages/data.vue +4 -0
- package/src/docs/pages/events/addable.vue +22 -6
- package/src/docs/pages/events/before_after_change.vue +15 -1
- package/src/docs/pages/events/search.vue +31 -16
- package/src/docs/pages/frameworks/vue.vue +375 -7
- package/src/docs/pages/home.vue +104 -57
- package/src/docs/pages/methods/get_data.vue +2 -1
- package/src/docs/pages/methods/open_close.vue +1 -1
- package/src/docs/pages/settings/closable.vue +128 -0
- package/src/docs/pages/settings/index.vue +6 -3
- package/src/docs/pages/settings/select_all.vue +88 -0
- package/src/slim-select/index.ts +4 -2
- package/src/slim-select/render.ts +247 -59
- package/src/slim-select/rollup.config.mjs +5 -0
- package/src/slim-select/select.ts +48 -31
- package/src/slim-select/settings.ts +0 -4
- package/src/slim-select/slimselect.scss +112 -11
- package/src/slim-select/store.ts +19 -1
- package/src/vue/README.md +48 -0
- package/src/vue/dist/slimselectvue.es.js +1752 -0
- package/src/vue/dist/slimselectvue.global.js +1755 -0
- package/src/vue/dist/slimselectvue.ssr.js +1754 -0
- package/src/vue/hello.ts +5 -0
- package/src/vue/package.json +28 -0
- package/src/vue/rollup.config.mjs +44 -0
- package/src/vue/slimselect.vue +39 -5
- package/src/vue/tsconfig.json +14 -0
- package/src/docs/pages/settings/select_by_group.vue +0 -46
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
--ss-disabled-color: #8a8a8a;
|
|
8
8
|
--ss-border-color: #dcdee2;
|
|
9
9
|
--ss-highlight-color: #fffb8c;
|
|
10
|
+
--ss-success-color: #00b755;
|
|
10
11
|
--ss-error-color: #dc3545;
|
|
11
12
|
|
|
12
13
|
// Heights
|
|
@@ -334,9 +335,117 @@
|
|
|
334
335
|
}
|
|
335
336
|
|
|
336
337
|
.ss-optgroup {
|
|
338
|
+
// If optgroup is open, show the options
|
|
339
|
+
&.ss-open {
|
|
340
|
+
.ss-option {
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// If optgroup has close, hide all options
|
|
345
|
+
&.ss-close {
|
|
346
|
+
.ss-option {
|
|
347
|
+
display: none !important;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
337
351
|
.ss-optgroup-label {
|
|
352
|
+
display: flex;
|
|
353
|
+
flex-direction: row;
|
|
354
|
+
align-items: center;
|
|
355
|
+
justify-content: space-between;
|
|
338
356
|
padding: var(--ss-spacing-m) var(--ss-spacing-l) var(--ss-spacing-m) var(--ss-spacing-l);
|
|
339
|
-
|
|
357
|
+
|
|
358
|
+
.ss-optgroup-label-text {
|
|
359
|
+
flex: 1 1 auto;
|
|
360
|
+
font-weight: bold;
|
|
361
|
+
color: var(--ss-font-color);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// If optgroup has arrow, make label clickable
|
|
365
|
+
&:has(.ss-arrow) {
|
|
366
|
+
cursor: pointer;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
.ss-optgroup-actions {
|
|
370
|
+
flex: 0 1 auto;
|
|
371
|
+
display: flex;
|
|
372
|
+
flex-direction: row;
|
|
373
|
+
align-items: center;
|
|
374
|
+
justify-content: center;
|
|
375
|
+
gap: var(--ss-spacing-m);
|
|
376
|
+
|
|
377
|
+
.ss-selectall {
|
|
378
|
+
flex: 0 0 auto;
|
|
379
|
+
display: flex;
|
|
380
|
+
flex-direction: row;
|
|
381
|
+
cursor: pointer;
|
|
382
|
+
|
|
383
|
+
&:hover {
|
|
384
|
+
opacity: 0.5;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
&.ss-selected {
|
|
388
|
+
svg {
|
|
389
|
+
path {
|
|
390
|
+
stroke: var(--ss-error-color);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
span {
|
|
396
|
+
flex: 0 1 auto;
|
|
397
|
+
display: flex;
|
|
398
|
+
align-items: center;
|
|
399
|
+
justify-content: center;
|
|
400
|
+
font-size: calc(100% * 0.6);
|
|
401
|
+
text-align: center;
|
|
402
|
+
padding: 0 var(--ss-spacing-s) 0 0;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
svg {
|
|
406
|
+
flex: 0 1 auto;
|
|
407
|
+
width: 13px;
|
|
408
|
+
height: 13px;
|
|
409
|
+
|
|
410
|
+
path {
|
|
411
|
+
fill: none;
|
|
412
|
+
stroke: var(--ss-success-color);
|
|
413
|
+
stroke-linecap: round;
|
|
414
|
+
stroke-linejoin: round;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
&:first-child {
|
|
418
|
+
stroke-width: 5;
|
|
419
|
+
}
|
|
420
|
+
&:last-child {
|
|
421
|
+
stroke-width: 11;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.ss-closable {
|
|
427
|
+
flex: 0 1 auto;
|
|
428
|
+
display: flex;
|
|
429
|
+
flex-direction: row;
|
|
430
|
+
cursor: pointer;
|
|
431
|
+
|
|
432
|
+
.ss-arrow {
|
|
433
|
+
flex: 1 1 auto;
|
|
434
|
+
width: 10px;
|
|
435
|
+
height: 10px;
|
|
436
|
+
|
|
437
|
+
path {
|
|
438
|
+
fill: none;
|
|
439
|
+
stroke: var(--ss-font-color);
|
|
440
|
+
stroke-width: 18;
|
|
441
|
+
stroke-linecap: round;
|
|
442
|
+
stroke-linejoin: round;
|
|
443
|
+
transition-timing-function: ease-out;
|
|
444
|
+
transition: var(--ss-animation-timing);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
340
449
|
}
|
|
341
450
|
|
|
342
451
|
.ss-option {
|
|
@@ -344,16 +453,8 @@
|
|
|
344
453
|
}
|
|
345
454
|
}
|
|
346
455
|
|
|
347
|
-
.ss-optgroup-selectable {
|
|
348
|
-
cursor: pointer;
|
|
349
|
-
|
|
350
|
-
&:hover {
|
|
351
|
-
color: var(--ss-bg-color);
|
|
352
|
-
background-color: var(--ss-primary-color);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
456
|
.ss-option {
|
|
457
|
+
display: flex;
|
|
357
458
|
padding: var(--ss-spacing-m) var(--ss-spacing-l) var(--ss-spacing-m) var(--ss-spacing-l);
|
|
358
459
|
cursor: pointer;
|
|
359
460
|
user-select: none;
|
|
@@ -370,7 +471,7 @@
|
|
|
370
471
|
background-color: var(--ss-bg-color);
|
|
371
472
|
}
|
|
372
473
|
|
|
373
|
-
&:not(.ss-disabled).ss-
|
|
474
|
+
&:not(.ss-disabled).ss-selected {
|
|
374
475
|
color: var(--ss-font-color);
|
|
375
476
|
background-color: var(--ss-highlight-color);
|
|
376
477
|
}
|
package/src/slim-select/store.ts
CHANGED
|
@@ -11,17 +11,23 @@ type selectType = 'single' | 'multiple'
|
|
|
11
11
|
export interface OptgroupOptional {
|
|
12
12
|
id?: string
|
|
13
13
|
label: string // Required
|
|
14
|
+
selectAll?: boolean
|
|
15
|
+
closable?: 'off' | 'open' | 'close'
|
|
14
16
|
options?: OptionOptional[]
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
export class Optgroup {
|
|
18
20
|
public id: string
|
|
19
21
|
public label: string
|
|
22
|
+
public selectAll: boolean
|
|
23
|
+
public closable: 'off' | 'open' | 'close'
|
|
20
24
|
public options: Option[]
|
|
21
25
|
|
|
22
26
|
constructor(optgroup: OptgroupOptional) {
|
|
23
27
|
this.id = !optgroup.id || optgroup.id === '' ? generateID() : optgroup.id
|
|
24
28
|
this.label = optgroup.label || ''
|
|
29
|
+
this.selectAll = optgroup.selectAll === undefined ? false : optgroup.selectAll
|
|
30
|
+
this.closable = optgroup.closable || 'off'
|
|
25
31
|
|
|
26
32
|
// If options exist, loop through options and create new option class
|
|
27
33
|
// and set the options to the optgroup options field
|
|
@@ -255,6 +261,18 @@ export default class Store {
|
|
|
255
261
|
return selectedIDs
|
|
256
262
|
}
|
|
257
263
|
|
|
264
|
+
public getOptgroupByID(id: string): Optgroup | null {
|
|
265
|
+
// Loop through each data object
|
|
266
|
+
// and if optgroup is found, return it
|
|
267
|
+
for (let dataObj of this.data) {
|
|
268
|
+
if (dataObj instanceof Optgroup && dataObj.id === id) {
|
|
269
|
+
return dataObj
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return null
|
|
274
|
+
}
|
|
275
|
+
|
|
258
276
|
public getOptionByID(id: string): Option | null {
|
|
259
277
|
let options = this.filter((opt: Option) => {
|
|
260
278
|
return opt.id === id
|
|
@@ -302,7 +320,7 @@ export default class Store {
|
|
|
302
320
|
})
|
|
303
321
|
|
|
304
322
|
if (optOptions.length > 0) {
|
|
305
|
-
dataSearch.push(new Optgroup(
|
|
323
|
+
dataSearch.push(new Optgroup(dataObj))
|
|
306
324
|
}
|
|
307
325
|
}
|
|
308
326
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Slim Select Vue
|
|
2
|
+
|
|
3
|
+
## slimselectjs.com
|
|
4
|
+
|
|
5
|
+
Vue integration for the SlimSelect
|
|
6
|
+
|
|
7
|
+
See the website for the best details on how to use the vue integration
|
|
8
|
+
|
|
9
|
+
[](https://www.npmjs.com/package/@slim-select/vue)
|
|
10
|
+
|
|
11
|
+
## Support
|
|
12
|
+
|
|
13
|
+
[](https://github.com/sponsors/brianvoe)
|
|
14
|
+
|
|
15
|
+
<a href="https://www.buymeacoffee.com/brianvoe" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: auto !important;width: auto !important;" ></a>
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @slim-select/vue
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```javascript
|
|
26
|
+
import { defineComponent } from 'vue'
|
|
27
|
+
import SlimSelect from '@slim-select/vue'
|
|
28
|
+
|
|
29
|
+
export default defineComponent({
|
|
30
|
+
components: {
|
|
31
|
+
SlimSelect,
|
|
32
|
+
},
|
|
33
|
+
})
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<SlimSelect>
|
|
38
|
+
<option value="1">Option 1</option>
|
|
39
|
+
<option value="2">Option 2</option>
|
|
40
|
+
<option value="3">Option 3</option>
|
|
41
|
+
</SlimSelect>
|
|
42
|
+
|
|
43
|
+
<SlimSelect multiple>
|
|
44
|
+
<option value="1">Option 1</option>
|
|
45
|
+
<option value="2">Option 2</option>
|
|
46
|
+
<option value="3">Option 3</option>
|
|
47
|
+
</SlimSelect>
|
|
48
|
+
```
|