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.
Files changed (66) hide show
  1. package/README.md +8 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/render.d.ts +10 -3
  4. package/dist/select.d.ts +6 -6
  5. package/dist/settings.d.ts +0 -3
  6. package/dist/slimselect.cjs.js +202 -67
  7. package/dist/slimselect.css +1 -1
  8. package/dist/slimselect.css.map +1 -1
  9. package/dist/slimselect.es.js +202 -67
  10. package/dist/slimselect.global.js +202 -67
  11. package/dist/slimselect.js +202 -67
  12. package/dist/slimselect.min.js +1 -1
  13. package/dist/slimselect.umd.js +202 -67
  14. package/dist/slimselect.umd.min.js +1 -1
  15. package/dist/store.d.ts +5 -0
  16. package/docs/assets/data.js +7 -3
  17. package/docs/assets/home.css +1 -1
  18. package/docs/assets/home.js +1 -1
  19. package/docs/assets/index.css +1 -1
  20. package/docs/assets/index.js +7 -7
  21. package/docs/assets/index2.js +119 -35
  22. package/docs/assets/index3.js +39 -23
  23. package/docs/assets/index4.js +1 -1
  24. package/docs/assets/index5.js +147 -9
  25. package/docs/assets/install.js +4 -4
  26. package/docs/assets/selects.js +1 -1
  27. package/package.json +11 -3
  28. package/src/docs/app.vue +6 -5
  29. package/src/docs/{images → assets/images}/check-mark.svg +0 -0
  30. package/src/docs/{images → assets/images}/chrome.svg +0 -0
  31. package/src/docs/{images → assets/images}/firefox.svg +0 -0
  32. package/src/docs/{images → assets/images}/github.png +0 -0
  33. package/src/docs/{images → assets/images}/ie.svg +0 -0
  34. package/src/docs/{images → assets/images}/npm.png +0 -0
  35. package/src/docs/{images → assets/images}/opera.svg +0 -0
  36. package/src/docs/{images → assets/images}/safari.svg +0 -0
  37. package/src/docs/assets/scss/misc.scss +7 -0
  38. package/src/docs/env.d.ts +1 -0
  39. package/src/docs/pages/data.vue +4 -0
  40. package/src/docs/pages/events/addable.vue +22 -6
  41. package/src/docs/pages/events/before_after_change.vue +15 -1
  42. package/src/docs/pages/events/search.vue +31 -16
  43. package/src/docs/pages/frameworks/vue.vue +375 -7
  44. package/src/docs/pages/home.vue +104 -57
  45. package/src/docs/pages/methods/get_data.vue +2 -1
  46. package/src/docs/pages/methods/open_close.vue +1 -1
  47. package/src/docs/pages/settings/closable.vue +128 -0
  48. package/src/docs/pages/settings/index.vue +6 -3
  49. package/src/docs/pages/settings/select_all.vue +88 -0
  50. package/src/slim-select/index.ts +4 -2
  51. package/src/slim-select/render.ts +247 -59
  52. package/src/slim-select/rollup.config.mjs +5 -0
  53. package/src/slim-select/select.ts +48 -31
  54. package/src/slim-select/settings.ts +0 -4
  55. package/src/slim-select/slimselect.scss +112 -11
  56. package/src/slim-select/store.ts +19 -1
  57. package/src/vue/README.md +48 -0
  58. package/src/vue/dist/slimselectvue.es.js +1752 -0
  59. package/src/vue/dist/slimselectvue.global.js +1755 -0
  60. package/src/vue/dist/slimselectvue.ssr.js +1754 -0
  61. package/src/vue/hello.ts +5 -0
  62. package/src/vue/package.json +28 -0
  63. package/src/vue/rollup.config.mjs +44 -0
  64. package/src/vue/slimselect.vue +39 -5
  65. package/src/vue/tsconfig.json +14 -0
  66. 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
- font-weight: bold;
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-option-selected {
474
+ &:not(.ss-disabled).ss-selected {
374
475
  color: var(--ss-font-color);
375
476
  background-color: var(--ss-highlight-color);
376
477
  }
@@ -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({ id: dataObj.id, label: dataObj.label, options: optOptions }))
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
+ [![NPM Downloads](https://img.shields.io/npm/dt/@slim-select/vue)](https://www.npmjs.com/package/@slim-select/vue)
10
+
11
+ ## Support
12
+
13
+ [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](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
+ ```