slim-select 2.2.0 → 2.2.2

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 (118) hide show
  1. package/dist/helpers.d.ts +1 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/select.d.ts +1 -1
  4. package/dist/slimselect.cjs.js +62 -40
  5. package/dist/slimselect.es.js +62 -40
  6. package/dist/slimselect.global.js +62 -40
  7. package/dist/slimselect.js +62 -40
  8. package/dist/slimselect.min.js +1 -1
  9. package/dist/slimselect.umd.js +62 -40
  10. package/dist/slimselect.umd.min.js +1 -1
  11. package/package.json +1 -3
  12. package/src/slim-select/helpers.ts +4 -0
  13. package/src/slim-select/index.ts +26 -2
  14. package/src/slim-select/render.ts +5 -3
  15. package/src/slim-select/select.ts +12 -3
  16. package/src/vue/dist/slim-select/helpers.d.ts +5 -0
  17. package/src/vue/dist/slim-select/index.d.ts +45 -0
  18. package/src/vue/dist/slim-select/render.d.ts +116 -0
  19. package/src/vue/dist/slim-select/select.d.ts +33 -0
  20. package/src/vue/dist/slim-select/settings.d.ts +30 -0
  21. package/src/vue/dist/slim-select/store.d.ts +76 -0
  22. package/src/vue/dist/slimselectvue.es.js +114 -43
  23. package/src/vue/dist/slimselectvue.global.js +114 -43
  24. package/src/vue/dist/slimselectvue.ssr.js +114 -43
  25. package/src/vue/dist/vue/hello.d.ts +2 -0
  26. package/src/vue/dist/vue/slimselect.vue.d.ts +309 -0
  27. package/src/vue/package.json +2 -3
  28. package/src/vue/slimselect.vue +66 -2
  29. package/src/vue/tsconfig.json +3 -3
  30. package/tsconfig.json +9 -2
  31. package/.github/FUNDING.yml +0 -12
  32. package/.github/ISSUE_TEMPLATE/issue-report.md +0 -14
  33. package/.vscode/extensions.json +0 -3
  34. package/.vscode/settings.json +0 -17
  35. package/docs/404.html +0 -42
  36. package/docs/CNAME +0 -1
  37. package/docs/assets/check-mark.svg +0 -6
  38. package/docs/assets/data.js +0 -63
  39. package/docs/assets/home.css +0 -1
  40. package/docs/assets/home.js +0 -1
  41. package/docs/assets/index.css +0 -1
  42. package/docs/assets/index.js +0 -16
  43. package/docs/assets/index2.js +0 -358
  44. package/docs/assets/index3.js +0 -142
  45. package/docs/assets/index4.js +0 -60
  46. package/docs/assets/index5.js +0 -149
  47. package/docs/assets/install.js +0 -34
  48. package/docs/assets/selects.js +0 -55
  49. package/docs/favicon.ico +0 -0
  50. package/docs/index.html +0 -36
  51. package/public/404.html +0 -42
  52. package/public/CNAME +0 -1
  53. package/public/favicon.ico +0 -0
  54. package/slimselect.gif +0 -0
  55. package/src/docs/app.vue +0 -228
  56. package/src/docs/assets/images/check-mark.svg +0 -6
  57. package/src/docs/assets/images/chrome.svg +0 -22
  58. package/src/docs/assets/images/firefox.svg +0 -58
  59. package/src/docs/assets/images/github.png +0 -0
  60. package/src/docs/assets/images/ie.svg +0 -11
  61. package/src/docs/assets/images/npm.png +0 -0
  62. package/src/docs/assets/images/opera.svg +0 -15
  63. package/src/docs/assets/images/safari.svg +0 -22
  64. package/src/docs/assets/scss/_variables.scss +0 -26
  65. package/src/docs/assets/scss/alert.scss +0 -12
  66. package/src/docs/assets/scss/animations.scss +0 -8
  67. package/src/docs/assets/scss/button.scss +0 -21
  68. package/src/docs/assets/scss/index.scss +0 -8
  69. package/src/docs/assets/scss/input.scss +0 -3
  70. package/src/docs/assets/scss/layout.scss +0 -250
  71. package/src/docs/assets/scss/misc.scss +0 -162
  72. package/src/docs/assets/scss/prism.scss +0 -157
  73. package/src/docs/env.d.ts +0 -13
  74. package/src/docs/main.ts +0 -27
  75. package/src/docs/pages/data.vue +0 -134
  76. package/src/docs/pages/events/addable.vue +0 -95
  77. package/src/docs/pages/events/before_after_change.vue +0 -154
  78. package/src/docs/pages/events/before_after_open_close.vue +0 -122
  79. package/src/docs/pages/events/error.vue +0 -59
  80. package/src/docs/pages/events/index.vue +0 -33
  81. package/src/docs/pages/events/search.vue +0 -169
  82. package/src/docs/pages/events/search_filter.vue +0 -45
  83. package/src/docs/pages/frameworks/index.vue +0 -18
  84. package/src/docs/pages/frameworks/vue.vue +0 -407
  85. package/src/docs/pages/home.vue +0 -241
  86. package/src/docs/pages/install.vue +0 -105
  87. package/src/docs/pages/methods/destroy.vue +0 -66
  88. package/src/docs/pages/methods/enable_disable.vue +0 -70
  89. package/src/docs/pages/methods/get_data.vue +0 -82
  90. package/src/docs/pages/methods/get_selected.vue +0 -78
  91. package/src/docs/pages/methods/index.vue +0 -36
  92. package/src/docs/pages/methods/open_close.vue +0 -63
  93. package/src/docs/pages/methods/search.vue +0 -62
  94. package/src/docs/pages/methods/set_data.vue +0 -106
  95. package/src/docs/pages/methods/set_selected.vue +0 -70
  96. package/src/docs/pages/selects.vue +0 -213
  97. package/src/docs/pages/settings/always_open.vue +0 -88
  98. package/src/docs/pages/settings/closable.vue +0 -128
  99. package/src/docs/pages/settings/close_on_select.vue +0 -69
  100. package/src/docs/pages/settings/content_location.vue +0 -64
  101. package/src/docs/pages/settings/content_position.vue +0 -86
  102. package/src/docs/pages/settings/css.vue +0 -73
  103. package/src/docs/pages/settings/data_attributes.vue +0 -39
  104. package/src/docs/pages/settings/deselect.vue +0 -69
  105. package/src/docs/pages/settings/display.vue +0 -88
  106. package/src/docs/pages/settings/hide_selected.vue +0 -73
  107. package/src/docs/pages/settings/html.vue +0 -86
  108. package/src/docs/pages/settings/index.vue +0 -76
  109. package/src/docs/pages/settings/mandatory.vue +0 -91
  110. package/src/docs/pages/settings/min_max.vue +0 -61
  111. package/src/docs/pages/settings/open_position.vue +0 -60
  112. package/src/docs/pages/settings/placeholder.vue +0 -72
  113. package/src/docs/pages/settings/search.vue +0 -140
  114. package/src/docs/pages/settings/select.vue +0 -32
  115. package/src/docs/pages/settings/select_all.vue +0 -88
  116. package/src/docs/pages/settings/show_tooltip.vue +0 -44
  117. package/src/docs/pages/settings/styles.vue +0 -51
  118. package/src/docs/router.ts +0 -50
@@ -1,169 +0,0 @@
1
- <script lang="ts" setup>
2
- import { onMounted, Ref, ref } from 'vue'
3
-
4
- import SlimSelect from '../../../slim-select'
5
- import { DataArray, Option } from '../../../slim-select/store'
6
-
7
- interface Person {
8
- first_name: string
9
- last_name: string
10
- }
11
-
12
- let searchData: Person[] = []
13
- let searchSingle: Ref<HTMLSelectElement | null> = ref(null)
14
- let searchMultiple: Ref<HTMLSelectElement | null> = ref(null)
15
-
16
- // Go fetch some gofakeit data via post to json
17
- fetch('https://api.gofakeit.com/json', {
18
- method: 'POST',
19
- headers: {
20
- 'Content-Type': 'application/json',
21
- },
22
- body: JSON.stringify({
23
- type: 'array',
24
- rowcount: 1000,
25
- indent: false,
26
- fields: [
27
- { name: 'first_name', function: 'firstname', params: {} },
28
- { name: 'last_name', function: 'lastname', params: {} },
29
- ],
30
- }),
31
- })
32
- .then((response) => response.json())
33
- .then((data: Person[]) => {
34
- searchData = data
35
- })
36
-
37
- onMounted(() => {
38
- new SlimSelect({
39
- select: searchSingle.value!,
40
- settings: {
41
- placeholderText: 'Search First or Last Name',
42
- searchingText: 'Searching Users...',
43
- searchHighlight: true,
44
- },
45
- events: {
46
- search: searchPromise,
47
- },
48
- })
49
-
50
- new SlimSelect({
51
- select: searchMultiple.value!,
52
- settings: {
53
- placeholderText: 'Search First or Last Name',
54
- searchingText: 'Searching Users...',
55
- searchHighlight: true,
56
- },
57
- events: {
58
- search: searchPromise,
59
- },
60
- })
61
- })
62
-
63
- function searchPromise(search: string, currentData: DataArray): Promise<Option[]> {
64
- return new Promise((resolve, reject) => {
65
- if (search.length < 2) {
66
- return reject('Search must be at least 2 characters')
67
- }
68
-
69
- const results = searchData.filter((person) => {
70
- return (
71
- person.first_name.toLowerCase().includes(search.toLowerCase()) ||
72
- person.last_name.toLowerCase().includes(search.toLowerCase())
73
- )
74
- })
75
-
76
- if (results.length === 0) {
77
- return reject('No results found')
78
- }
79
-
80
- // Take the results and create an array of options excluding any that are already selected in currentData
81
- const options = results
82
- .filter((person) => {
83
- return !currentData.some((data) => {
84
- // check if option has a value property
85
- return data instanceof Option && data.value === `${person.first_name} ${person.last_name}`
86
- })
87
- })
88
- .map((person) => {
89
- return {
90
- text: `${person.first_name} ${person.last_name}`,
91
- value: `${person.first_name} ${person.last_name}`,
92
- } as Option
93
- })
94
-
95
- // Simulate a slow search
96
- setTimeout(() => {
97
- resolve(options)
98
- }, 300)
99
- })
100
- }
101
- </script>
102
-
103
- <template>
104
- <div id="search" class="content">
105
- <h2 class="header">search</h2>
106
- <p>
107
- Slim select allows you to syncronize result values from your promise response.<br />
108
- Call callback() method with slimselect data, false or string with specific string.
109
- </p>
110
-
111
- <div class="row">
112
- <select ref="searchSingle"></select>
113
- <select ref="searchMultiple" multiple></select>
114
- </div>
115
-
116
- <pre>
117
- <code class="language-javascript">
118
- new SlimSelect({
119
- select: '#selectElement',
120
- events: {
121
- search: (search, currentData) => {
122
- return new Promise((resolve, reject) => {
123
- if (search.length &lt; 2) {
124
- return reject('Search must be at least 2 characters')
125
- }
126
-
127
- // Fetch random first and last name data
128
- fetch('https://api.gofakeit.com/json', {
129
- method: 'POST',
130
- headers: {
131
- 'Content-Type': 'application/json',
132
- },
133
- body: JSON.stringify({
134
- type: 'array',
135
- rowcount: 10,
136
- indent: false,
137
- fields: [
138
- { name: 'first_name', function: 'firstname', params: {} },
139
- { name: 'last_name', function: 'lastname', params: {} },
140
- ],
141
- }),
142
- })
143
- .then((response) => response.json())
144
- .then((data) => {
145
- // Take the data and create an array of options
146
- // excluding any that are already selected in currentData
147
- const options = data
148
- .filter((person) => {
149
- return !currentData.some((optionData) => {
150
- return optionData.value === `${person.first_name} ${person.last_name}`
151
- })
152
- })
153
- .map((person) => {
154
- return {
155
- text: `${person.first_name} ${person.last_name}`,
156
- value: `${person.first_name} ${person.last_name}`,
157
- }
158
- })
159
-
160
- resolve(options)
161
- })
162
- })
163
- }
164
- }
165
- })
166
- </code>
167
- </pre>
168
- </div>
169
- </template>
@@ -1,45 +0,0 @@
1
- <script lang="ts">
2
- import { defineComponent } from 'vue'
3
-
4
- import SlimSelect from '../../../slim-select'
5
-
6
- export default defineComponent({
7
- name: 'SearchFilter',
8
- mounted() {
9
- new SlimSelect({
10
- select: this.$refs.searchFilter as HTMLSelectElement,
11
- events: {
12
- searchFilter: (option: any, search: any) => option.text.substr(0, search.length) === search,
13
- },
14
- })
15
- },
16
- })
17
- </script>
18
-
19
- <template>
20
- <div id="searchFilter" class="content">
21
- <h2 class="header">searchFilter</h2>
22
- <p>searchFilter event is used to replace the default matching algorithm.</p>
23
- <p>See Data for the proper object interface of <em>option</em>.</p>
24
-
25
- <select ref="searchFilter">
26
- <option value="apple">Apple</option>
27
- <option value="orange">Orange</option>
28
- <option value="pineapple">Pineapple</option>
29
- </select>
30
-
31
- <pre>
32
- <code class="language-javascript">
33
- new SlimSelect({
34
- select: '#selectElement',
35
- events: {
36
- // Exact case sensitive start of string match
37
- searchFilter: (option, search) => {
38
- return option.text.substr(0, search.length) === search
39
- }
40
- }
41
- })
42
- </code>
43
- </pre>
44
- </div>
45
- </template>
@@ -1,18 +0,0 @@
1
- <script lang="ts">
2
- import { defineComponent } from 'vue'
3
-
4
- import Vue from './vue.vue'
5
-
6
- export default defineComponent({
7
- name: 'Events',
8
- components: {
9
- Vue,
10
- },
11
- })
12
- </script>
13
-
14
- <template>
15
- <div id="frameworks" class="contents">
16
- <Vue />
17
- </div>
18
- </template>
@@ -1,407 +0,0 @@
1
- <script lang="ts">
2
- import { defineComponent } from 'vue'
3
-
4
- // We need to import from the root of the package
5
- // Because if we use @slim-select/vue then we loose
6
- // hot reloading of the file changes
7
- import SlimSelectJS from '../../../slim-select'
8
- import SlimSelect from '../../../vue/slimselect.vue'
9
- import Settings from '../../../slim-select/settings'
10
- import { Option, OptionOptional } from '../../../slim-select/store'
11
- import { Events } from '../../../slim-select'
12
-
13
- interface Person {
14
- id: string
15
- first_name: string
16
- last_name: string
17
- selected: number
18
- }
19
-
20
- export default defineComponent({
21
- name: 'Vue',
22
- components: {
23
- SlimSelect,
24
- },
25
- data() {
26
- return {
27
- settings: {
28
- showSearch: false,
29
- } as Settings,
30
- data: [
31
- { value: 'value1', text: 'Value 1' },
32
- { value: 'value2', text: 'Value 2' },
33
- { value: 'value3', text: 'Value 3' },
34
- ],
35
- dynamicData: [] as OptionOptional[],
36
- afterChangeData: [] as OptionOptional[],
37
- events: {
38
- afterChange: this.afterChange,
39
- } as Events,
40
- }
41
- },
42
- mounted() {
43
- // Show the original select for debugging
44
- // const randomComponent = this.$refs.randomDynamic as any
45
- // const randomSlim = randomComponent.getSlimSelect()
46
- // randomSlim.select.showUI()
47
- },
48
- methods: {
49
- changeData() {
50
- const dataSingle = this.$refs.dataSingle as any
51
- const dataSingleSlim = dataSingle.getSlimSelect() as SlimSelectJS
52
- dataSingleSlim.open()
53
- const dataMultiple = this.$refs.dataMultiple as any
54
- const dataMultipleSlim = dataMultiple.getSlimSelect() as SlimSelectJS
55
- dataMultipleSlim.open()
56
-
57
- setTimeout(() => {
58
- this.data = [
59
- { value: 'value4', text: 'Value 4' },
60
- { value: 'value5', text: 'Value 5' },
61
- { value: 'value6', text: 'Value 6' },
62
- ]
63
- }, 500)
64
- },
65
- afterChange(newVal: Option[]) {
66
- this.afterChangeData = newVal
67
- },
68
- randomDynamicData() {
69
- // Go fetch some gofakeit data via post to json
70
- fetch('https://api.gofakeit.com/json', {
71
- method: 'POST',
72
- headers: {
73
- 'Content-Type': 'application/json',
74
- },
75
- body: JSON.stringify({
76
- type: 'array',
77
- rowcount: 20,
78
- indent: false,
79
- fields: [
80
- {
81
- name: 'key',
82
- function: 'password',
83
- params: {
84
- lower: true,
85
- upper: true,
86
- numeric: true,
87
- special: false,
88
- space: false,
89
- length: 10,
90
- },
91
- },
92
- { name: 'first_name', function: 'firstname', params: {} },
93
- { name: 'last_name', function: 'lastname', params: {} },
94
- { name: 'selected', function: 'number', params: { min: 1, max: 10 } },
95
- ],
96
- }),
97
- })
98
- .then((response) => response.json())
99
- .then((data: Person[]) => {
100
- // Map the data to the format slim select expects
101
- this.dynamicData = data.map((person: Person) => {
102
- return {
103
- id: person.id,
104
- text: `${person.first_name} ${person.last_name}`,
105
- value: `${person.first_name} ${person.last_name}`,
106
- selected: person.selected >= 8,
107
- } as OptionOptional
108
- })
109
- })
110
- },
111
- },
112
- })
113
- </script>
114
-
115
- <template>
116
- <div id="vue" class="content">
117
- <h2 class="header">Vue</h2>
118
-
119
- <h3>Install</h3>
120
- <p>The vue component is in a sub package under SlimSelect</p>
121
- <pre>
122
- <code class="language-bash">
123
- npm install @slim-select/vue
124
- </code>
125
- </pre>
126
- <br />
127
-
128
- <h3>Simple example</h3>
129
- <div class="row">
130
- <SlimSelect>
131
- <option value="1">Option 1</option>
132
- <option value="2">Option 2</option>
133
- <option value="3">Option 3</option>
134
- </SlimSelect>
135
-
136
- <SlimSelect multiple>
137
- <option value="1">Option 1</option>
138
- <option value="2">Option 2</option>
139
- <option value="3">Option 3</option>
140
- </SlimSelect>
141
- </div>
142
-
143
- <pre>
144
- <code class="language-javascript">
145
- import { defineComponent } from 'vue'
146
- import SlimSelect from '@slim-select/vue'
147
-
148
- export default defineComponent({
149
- components: {
150
- SlimSelect,
151
- },
152
- })
153
- </code>
154
- </pre>
155
-
156
- <pre>
157
- <code class="language-html">
158
- &lt;SlimSelect&gt;
159
- &lt;option value="1"&gt;Option 1&lt;/option&gt;
160
- &lt;option value="2"&gt;Option 2&lt;/option&gt;
161
- &lt;option value="3"&gt;Option 3&lt;/option&gt;
162
- &lt;/SlimSelect&gt;
163
-
164
- &lt;SlimSelect multiple&gt;
165
- &lt;option value="1"&gt;Option 1&lt;/option&gt;
166
- &lt;option value="2"&gt;Option 2&lt;/option&gt;
167
- &lt;option value="3"&gt;Option 3&lt;/option&gt;
168
- &lt;/SlimSelect&gt;
169
- </code>
170
- </pre>
171
-
172
- <br />
173
- <div class="separator"></div>
174
- <br />
175
-
176
- <h3>Settings</h3>
177
- <p>
178
- Settings just like its passed as an object in normal SlimSelct will also be passed as an object to the component
179
- prop
180
- </p>
181
-
182
- <div class="row">
183
- <SlimSelect :settings="settings">
184
- <option value="1">Option 1</option>
185
- <option value="2">Option 2</option>
186
- <option value="3">Option 3</option>
187
- </SlimSelect>
188
-
189
- <SlimSelect :settings="settings" multiple>
190
- <option value="1">Option 1</option>
191
- <option value="2">Option 2</option>
192
- <option value="3">Option 3</option>
193
- </SlimSelect>
194
- </div>
195
-
196
- <pre>
197
- <code class="language-javascript">
198
- import { defineComponent } from 'vue'
199
- import SlimSelect from '@slim-select/vue'
200
-
201
- export default defineComponent({
202
- components: {
203
- SlimSelect,
204
- },
205
- data() {
206
- return {
207
- settings: {
208
- showSearch: false,
209
- }
210
- }
211
- },
212
- })
213
- </code>
214
- </pre>
215
-
216
- <pre>
217
- <code class="language-html">
218
- &lt;SlimSelect :settings="settings"&gt;
219
- &lt;option value="1"&gt;Option 1&lt;/option&gt;
220
- &lt;option value="2"&gt;Option 2&lt;/option&gt;
221
- &lt;option value="3"&gt;Option 3&lt;/option&gt;
222
- &lt;/SlimSelect&gt;
223
-
224
- &lt;SlimSelect :settings="settings" multiple&gt;
225
- &lt;option value="1"&gt;Option 1&lt;/option&gt;
226
- &lt;option value="2"&gt;Option 2&lt;/option&gt;
227
- &lt;option value="3"&gt;Option 3&lt;/option&gt;
228
- &lt;/SlimSelect&gt;
229
- </code>
230
- </pre>
231
-
232
- <br />
233
- <div class="separator"></div>
234
- <br />
235
-
236
- <h3>Data</h3>
237
- <p>
238
- Data just like its passed as an array in normal SlimSelct will also be passed as an array to the component prop.
239
- </p>
240
- <div class="alert info">
241
- You may pass data as a prop if you would like. But you can also have reactive options that when options change the
242
- select will update as well. See Reactivity below for more info.
243
- </div>
244
-
245
- <div class="row">
246
- <div class="btn info" @click="changeData">Change data</div>
247
- <SlimSelect ref="dataSingle" :data="data" />
248
- <SlimSelect ref="dataMultiple" :data="data" multiple />
249
- </div>
250
-
251
- <pre>
252
- <code class="language-javascript">
253
- import { defineComponent } from 'vue'
254
- import SlimSelect from '@slim-select/vue'
255
-
256
- export default defineComponent({
257
- components: {
258
- SlimSelect,
259
- },
260
- data() {
261
- return {
262
- data: [
263
- { value: 'value1', text: 'Value 1' },
264
- { value: 'value2', text: 'Value 2' },
265
- { value: 'value3', text: 'Value 3' },
266
- ],
267
- }
268
- },
269
- })
270
- </code>
271
- </pre>
272
-
273
- <pre>
274
- <code class="language-html">
275
- &lt;SlimSelect :data="data" /&gt;
276
-
277
- &lt;SlimSelect :data="data" multiple /&gt;
278
- </code>
279
- </pre>
280
-
281
- <br />
282
- <div class="separator"></div>
283
- <br />
284
-
285
- <h3>Events</h3>
286
- <p>
287
- Events just like its passed as an object in normal SlimSelct will also be passed as an object to the component
288
- prop.
289
- </p>
290
-
291
- <div v-if="afterChangeData.length"><strong>afterChange:</strong> {{ afterChangeData }}</div>
292
- <div class="row">
293
- <SlimSelect :events="events">
294
- <option value="1">Option 1</option>
295
- <option value="2">Option 2</option>
296
- <option value="3">Option 3</option>
297
- </SlimSelect>
298
-
299
- <SlimSelect :events="events" multiple>
300
- <option value="1">Option 1</option>
301
- <option value="2">Option 2</option>
302
- <option value="3">Option 3</option>
303
- </SlimSelect>
304
- </div>
305
-
306
- <pre>
307
- <code class="language-javascript">
308
- import { defineComponent } from 'vue'
309
- import SlimSelect from '@slim-select/vue'
310
-
311
- export default defineComponent({
312
- components: {
313
- SlimSelect,
314
- },
315
- data() {
316
- return {
317
- events: {
318
- afterChange: this.afterChange,
319
- },
320
- }
321
- },
322
- methods: {
323
- afterChange(newVal) {
324
- console.log(newVal)
325
- },
326
- },
327
- })
328
- </code>
329
- </pre>
330
-
331
- <pre>
332
- <code class="language-html">
333
- &lt;SlimSelect :events="events"&gt;
334
- &lt;option value="1"&gt;Option 1&lt;/option&gt;
335
- &lt;option value="2"&gt;Option 2&lt;/option&gt;
336
- &lt;option value="3"&gt;Option 3&lt;/option&gt;
337
- &lt;/SlimSelect&gt;
338
-
339
- &lt;SlimSelect :events="events" multiple&gt;
340
- &lt;option value="1"&gt;Option 1&lt;/option&gt;
341
- &lt;option value="2"&gt;Option 2&lt;/option&gt;
342
- &lt;option value="3"&gt;Option 3&lt;/option&gt;
343
- &lt;/SlimSelect&gt;
344
- </code>
345
- </pre>
346
-
347
- <br />
348
- <div class="separator"></div>
349
- <br />
350
-
351
- <h3>Reactivity</h3>
352
- <p>
353
- Slim select will look out for any options changes that happen to the select options and SlimSelect will update
354
- accordingly. This is done via mutation observers.
355
- </p>
356
-
357
- <div class="row">
358
- <div class="btn info" @click="randomDynamicData">Change data</div>
359
- <SlimSelect ref="randomDynamic">
360
- <option v-for="d in dynamicData" :key="d.id" :value="d.value" :selected="d.selected">{{ d.text }}</option>
361
- </SlimSelect>
362
-
363
- <SlimSelect multiple>
364
- <option v-for="d in dynamicData" :value="d.value" :selected="d.selected">{{ d.text }}</option>
365
- </SlimSelect>
366
- </div>
367
-
368
- <pre>
369
- <code class="language-javascript">
370
- import { defineComponent } from 'vue'
371
- import SlimSelect from '@slim-select/vue'
372
-
373
- export default defineComponent({
374
- components: {
375
- SlimSelect,
376
- },
377
- data() {
378
- return {
379
- dynamicData: []
380
- }
381
- },
382
- methods: {
383
- changeData() {
384
- this.dynamicData = [
385
- { id: 1, value: 1, text: 'Option 1', selected: true },
386
- { id: 2, value: 2, text: 'Option 2', selected: false },
387
- { id: 3, value: 3, text: 'Option 3', selected: false },
388
- ]
389
- },
390
- },
391
- })
392
- </code>
393
- </pre>
394
-
395
- <pre>
396
- <code class="language-html">
397
- &lt;SlimSelect :events="events"&gt;
398
- &lt;option v-for="d in dynamicData" :key="d.id" :value="d.value" :selected="d.selected"&gt;&#123;&#123; d.text &#125;&#125;&lt;/option&gt;
399
- &lt;/SlimSelect&gt;
400
-
401
- &lt;SlimSelect :events="events" multiple&gt;
402
- &lt;option v-for="d in dynamicData" :value="d.value" :selected="d.selected"&gt;&#123;&#123; d.text &#125;&#125;&lt;/option&gt;
403
- &lt;/SlimSelect&gt;
404
- </code>
405
- </pre>
406
- </div>
407
- </template>