slim-select 3.4.3 → 3.5.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 (73) hide show
  1. package/dist/classes.d.ts +46 -0
  2. package/dist/helpers.d.ts +5 -0
  3. package/dist/index.d.ts +53 -319
  4. package/dist/index.umd.d.ts +2 -0
  5. package/dist/react/index.d.ts +4 -319
  6. package/dist/react/index.js +1459 -1697
  7. package/dist/react/index.umd.js +2 -2
  8. package/dist/react/react.d.ts +17 -0
  9. package/dist/react/react.test.d.ts +1 -0
  10. package/dist/react/slim-select/react/index.d.ts +4 -0
  11. package/dist/render.d.ts +88 -0
  12. package/dist/select.d.ts +38 -0
  13. package/dist/settings.d.ts +39 -0
  14. package/dist/slimselect.cjs.js +2 -2
  15. package/dist/slimselect.cjs.js.map +1 -1
  16. package/dist/slimselect.css +1 -1
  17. package/dist/slimselect.css.map +1 -1
  18. package/dist/slimselect.es.js +1233 -1385
  19. package/dist/slimselect.es.js.map +1 -1
  20. package/dist/slimselect.iife.js +2 -2
  21. package/dist/slimselect.iife.js.map +1 -1
  22. package/dist/slimselect.js +2 -2
  23. package/dist/slimselect.js.map +1 -1
  24. package/dist/src/docs/main.d.ts +0 -0
  25. package/dist/src/docs/router.d.ts +2 -0
  26. package/dist/src/docs/store.d.ts +12 -0
  27. package/dist/store.d.ts +53 -0
  28. package/dist/vue/index.d.ts +4 -319
  29. package/dist/vue/index.js +1335 -1504
  30. package/dist/vue/index.umd.js +1 -1
  31. package/dist/vue/slim-select/vue/index.d.ts +4 -0
  32. package/package.json +30 -36
  33. package/src/slim-select/slimselect.scss +34 -5
  34. package/.nvmrc +0 -1
  35. package/.prettierignore +0 -1
  36. package/.prettierrc +0 -7
  37. package/CODE_OF_CONDUCT.md +0 -46
  38. package/CONTRIBUTING.md +0 -1
  39. package/cdn.html +0 -21
  40. package/docs.go +0 -12
  41. package/example.html +0 -25
  42. package/index.html +0 -76
  43. package/release.js +0 -191
  44. package/sitemap.js +0 -108
  45. package/src/slim-select/accessibility.test.ts +0 -782
  46. package/src/slim-select/classes.test.ts +0 -73
  47. package/src/slim-select/classes.ts +0 -117
  48. package/src/slim-select/helpers.test.ts +0 -162
  49. package/src/slim-select/helpers.ts +0 -61
  50. package/src/slim-select/index.test.ts +0 -1356
  51. package/src/slim-select/index.ts +0 -594
  52. package/src/slim-select/index.umd.ts +0 -8
  53. package/src/slim-select/react/index.tsx +0 -9
  54. package/src/slim-select/react/react.test.tsx +0 -498
  55. package/src/slim-select/react/react.tsx +0 -209
  56. package/src/slim-select/render.test.ts +0 -1927
  57. package/src/slim-select/render.ts +0 -1771
  58. package/src/slim-select/select.test.ts +0 -683
  59. package/src/slim-select/select.ts +0 -659
  60. package/src/slim-select/settings.test.ts +0 -285
  61. package/src/slim-select/settings.ts +0 -78
  62. package/src/slim-select/store.test.ts +0 -1007
  63. package/src/slim-select/store.ts +0 -433
  64. package/src/slim-select/vue/index.ts +0 -9
  65. package/src/slim-select/vue/vue.test.ts +0 -1091
  66. package/src/slim-select/vue/vue.vue +0 -224
  67. package/tsconfig.json +0 -26
  68. package/vite.config.docs.mts +0 -29
  69. package/vite.config.lib.es-cjs.ts +0 -40
  70. package/vite.config.lib.umd-iife.ts +0 -34
  71. package/vite.config.react.mts +0 -41
  72. package/vite.config.vue.mts +0 -40
  73. package/vitest.config.ts +0 -30
package/index.html DELETED
@@ -1,76 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <link rel="icon" href="/favicon.ico" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
-
8
- <!-- Primary Meta Tags -->
9
- <title>SlimSelect - Advanced JavaScript Select Dropdown Library | Vanilla JS Multi-select</title>
10
- <meta name="title" content="SlimSelect - Advanced JavaScript Select Dropdown Library | Vanilla JS Multi-select" />
11
- <meta
12
- name="description"
13
- content="SlimSelect is a lightweight, advanced select dropdown library for vanilla JavaScript. Features multi-select, search, custom styling, and framework support for React and Vue. No jQuery required."
14
- />
15
- <meta
16
- name="keywords"
17
- content="javascript select dropdown, vanilla js select, multi-select dropdown, searchable select, custom select dropdown, react select component, vue select component, select2 alternative, chosen alternative, lightweight select library"
18
- />
19
- <meta name="author" content="Brian Voelker" />
20
- <meta name="robots" content="index, follow" />
21
- <link rel="canonical" href="https://slimselectjs.com" />
22
-
23
- <!-- Open Graph / Facebook -->
24
- <meta property="og:type" content="website" />
25
- <meta property="og:url" content="https://slimselectjs.com" />
26
- <meta property="og:title" content="SlimSelect - Advanced JavaScript Select Dropdown Library" />
27
- <meta
28
- property="og:description"
29
- content="Lightweight, feature-rich select dropdown library for vanilla JavaScript. Multi-select, search, custom styling, and framework support. No jQuery required."
30
- />
31
- <meta property="og:image" content="https://slimselectjs.com/slimselect.gif" />
32
- <meta property="og:site_name" content="SlimSelect" />
33
- <meta property="og:locale" content="en_US" />
34
-
35
- <!-- Twitter -->
36
- <meta property="twitter:card" content="summary_large_image" />
37
- <meta property="twitter:url" content="https://slimselectjs.com" />
38
- <meta property="twitter:title" content="SlimSelect - Advanced JavaScript Select Dropdown Library" />
39
- <meta
40
- property="twitter:description"
41
- content="Lightweight, feature-rich select dropdown library for vanilla JavaScript. Multi-select, search, custom styling, and framework support."
42
- />
43
- <meta property="twitter:image" content="https://slimselectjs.com/slimselect.gif" />
44
-
45
- <!-- Additional Meta Tags -->
46
- <meta name="theme-color" content="#5897fb" />
47
- <meta name="mobile-web-app-capable" content="yes" />
48
- <meta name="apple-mobile-web-app-status-bar-style" content="default" />
49
- <meta name="apple-mobile-web-app-title" content="SlimSelect" />
50
-
51
- <!-- Google AdSense -->
52
- <meta name="google-adsense-account" content="ca-pub-4428453911800052" />
53
- </head>
54
- <body>
55
- <noscript>
56
- <strong
57
- >We're sorry but this site doesn't work properly without JavaScript enabled. Please enable it to
58
- continue.</strong
59
- >
60
- </noscript>
61
- <div id="app"></div>
62
- <script type="module" src="/src/docs/main.ts"></script>
63
-
64
- <!-- Google tag (gtag.js) -->
65
- <script async src="https://www.googletagmanager.com/gtag/js?id=G-14PMXQVXTC"></script>
66
- <script>
67
- window.dataLayer = window.dataLayer || []
68
- function gtag() {
69
- dataLayer.push(arguments)
70
- }
71
- gtag('js', new Date())
72
-
73
- gtag('config', 'G-14PMXQVXTC')
74
- </script>
75
- </body>
76
- </html>
package/release.js DELETED
@@ -1,191 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { execSync } from 'child_process'
4
- import { readFileSync, writeFileSync } from 'fs'
5
- import { fileURLToPath } from 'url'
6
- import { dirname, join } from 'path'
7
- import readline from 'readline'
8
- import process from 'process'
9
-
10
- const __filename = fileURLToPath(import.meta.url)
11
- const __dirname = dirname(__filename)
12
- const rootDir = __dirname
13
-
14
- // Colors for console output
15
- const colors = {
16
- reset: '\x1b[0m',
17
- bright: '\x1b[1m',
18
- red: '\x1b[31m',
19
- green: '\x1b[32m',
20
- yellow: '\x1b[33m',
21
- blue: '\x1b[34m',
22
- magenta: '\x1b[35m',
23
- cyan: '\x1b[36m'
24
- }
25
-
26
- function log(message, color = 'reset') {
27
- console.log(`${colors[color]}${message}${colors.reset}`)
28
- }
29
-
30
- function exec(command, options = {}) {
31
- try {
32
- log(`Running: ${command}`, 'cyan')
33
- execSync(command, {
34
- stdio: 'inherit',
35
- cwd: rootDir,
36
- ...options
37
- })
38
- return true
39
- } catch (error) {
40
- log(`Command failed: ${command}`, 'red')
41
- log(`Exit code: ${error.status}`, 'red')
42
- return false
43
- }
44
- }
45
-
46
- function readPackageJson() {
47
- const packagePath = join(rootDir, 'package.json')
48
- return JSON.parse(readFileSync(packagePath, 'utf8'))
49
- }
50
-
51
- function writePackageJson(packageJson) {
52
- const packagePath = join(rootDir, 'package.json')
53
- writeFileSync(packagePath, JSON.stringify(packageJson, null, 2) + '\n')
54
- }
55
-
56
- function askQuestion(question) {
57
- const rl = readline.createInterface({
58
- input: process.stdin,
59
- output: process.stdout
60
- })
61
-
62
- return new Promise((resolve) => {
63
- rl.question(question, (answer) => {
64
- rl.close()
65
- resolve(answer)
66
- })
67
- })
68
- }
69
-
70
- function validateVersion(currentVersion, newVersion) {
71
- // Check if version format is valid (x.y.z)
72
- const versionRegex = /^\d+\.\d+\.\d+$/
73
- if (!versionRegex.test(newVersion)) {
74
- log('āŒ Invalid version format. Please use format: x.y.z (e.g., 1.0.1)', 'red')
75
- return null
76
- }
77
-
78
- const [major1, minor1, patch1] = currentVersion.split('.').map(Number)
79
- const [major2, minor2, patch2] = newVersion.split('.').map(Number)
80
-
81
- // Check if new version is greater than current
82
- if (major2 > major1) return 'major'
83
- if (major2 === major1 && minor2 > minor1) return 'minor'
84
- if (major2 === major1 && minor2 === minor1 && patch2 > patch1) return 'patch'
85
-
86
- log('āŒ New version must be greater than current version', 'red')
87
- log(` Current: ${currentVersion}`, 'yellow')
88
- log(` New: ${newVersion}`, 'yellow')
89
- return null
90
- }
91
-
92
- async function main() {
93
- log('šŸš€ Starting release process...', 'bright')
94
-
95
- // Step 1: Run tests
96
- log('\nšŸ“‹ Step 1: Running tests...', 'yellow')
97
- if (!exec('npm test')) {
98
- log('āŒ Tests failed. Aborting release.', 'red')
99
- process.exit(1)
100
- }
101
- log('āœ… Tests passed!', 'green')
102
-
103
- // Step 2: Build the project
104
- log('\nšŸ”Ø Step 2: Building project...', 'yellow')
105
-
106
- // Then build
107
- if (!exec('npm run build')) {
108
- log('āŒ Build failed. Aborting release.', 'red')
109
- process.exit(1)
110
- }
111
- log('āœ… Build successful!', 'green')
112
-
113
- // Step 3: Confirm documentation update
114
- log('\nšŸ“š Step 3: Documentation update confirmation...', 'yellow')
115
- log(' Please ensure you have updated the documentation before proceeding.', 'cyan')
116
-
117
- let docConfirmed = false
118
- do {
119
- const docAnswer = await askQuestion('Have you updated the documentation? (y/n): ')
120
- docConfirmed = docAnswer.toLowerCase() === 'y' || docAnswer.toLowerCase() === 'yes'
121
-
122
- if (!docConfirmed) {
123
- log('āŒ Please update the documentation before continuing with the release.', 'red')
124
- log(' You can run: npm run build:docs', 'cyan')
125
- }
126
- } while (!docConfirmed)
127
-
128
- log('āœ… Documentation update confirmed!', 'green')
129
-
130
- // Step 4: Get current version and ask for new version
131
- const packageJson = readPackageJson()
132
- const currentVersion = packageJson.version
133
-
134
- log(`\nšŸ“¦ Current version: ${currentVersion}`, 'blue')
135
- log(' Format: x.y.z (e.g., 1.0.1, 1.1.0, 2.0.0)', 'cyan')
136
-
137
- let newVersion
138
- let versionType
139
-
140
- do {
141
- newVersion = await askQuestion(`Enter new version (current: ${currentVersion}): `)
142
- versionType = validateVersion(currentVersion, newVersion)
143
- } while (!versionType)
144
-
145
- log(`\nšŸ”„ Step 4: Updating version from ${currentVersion} to ${newVersion} (${versionType} release)...`, 'yellow')
146
-
147
- // Update package.json
148
- packageJson.version = newVersion
149
- writePackageJson(packageJson)
150
- log('āœ… Package.json updated!', 'green')
151
-
152
- // Update package-lock.json to match the new version
153
- log('Updating package-lock.json...', 'cyan')
154
- if (!exec('npm install --package-lock-only')) {
155
- log('āŒ Failed to update package-lock.json. Aborting release.', 'red')
156
- process.exit(1)
157
- }
158
- log('āœ… Package-lock.json updated!', 'green')
159
-
160
- // Step 5: NPM login
161
- log('\nšŸ” Step 5: NPM login...', 'yellow')
162
- if (!exec('npm login')) {
163
- log('āŒ NPM login failed. Aborting release.', 'red')
164
- process.exit(1)
165
- }
166
- log('āœ… NPM login successful!', 'green')
167
-
168
- // Step 6: NPM publish
169
- log('\nšŸ“¤ Step 6: Publishing to NPM...', 'yellow')
170
- if (!exec('npm publish')) {
171
- log('āŒ NPM publish failed. Aborting release.', 'red')
172
- process.exit(1)
173
- }
174
- log('āœ… Package published to NPM!', 'green')
175
-
176
- log('\nšŸŽ‰ Release completed successfully!', 'bright')
177
- log(`šŸ“¦ Version ${newVersion} is now published on NPM`, 'green')
178
- log(`šŸ”— Package: https://www.npmjs.com/package/${packageJson.name}`, 'blue')
179
- }
180
-
181
- // Handle errors
182
- process.on('unhandledRejection', (error) => {
183
- log(`āŒ Unhandled error: ${error}`, 'red')
184
- process.exit(1)
185
- })
186
-
187
- // Run the release script
188
- main().catch((error) => {
189
- log(`āŒ Release failed: ${error}`, 'red')
190
- process.exit(1)
191
- })
package/sitemap.js DELETED
@@ -1,108 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import fs from 'fs'
4
- import path from 'path'
5
- import { fileURLToPath } from 'url'
6
-
7
- const __filename = fileURLToPath(import.meta.url)
8
- const __dirname = path.dirname(__filename)
9
-
10
- // Define all routes and their metadata
11
- // Based on routes defined in src/docs/router.ts
12
- const routes = [
13
- {
14
- loc: 'https://slimselectjs.com/',
15
- lastmod: new Date().toISOString().split('T')[0],
16
- changefreq: 'weekly',
17
- priority: '1.0'
18
- },
19
- {
20
- loc: 'https://slimselectjs.com/install',
21
- lastmod: new Date().toISOString().split('T')[0],
22
- changefreq: 'monthly',
23
- priority: '0.9'
24
- },
25
- {
26
- loc: 'https://slimselectjs.com/selects',
27
- lastmod: new Date().toISOString().split('T')[0],
28
- changefreq: 'monthly',
29
- priority: '0.9'
30
- },
31
- {
32
- loc: 'https://slimselectjs.com/data',
33
- lastmod: new Date().toISOString().split('T')[0],
34
- changefreq: 'monthly',
35
- priority: '0.8'
36
- },
37
- {
38
- loc: 'https://slimselectjs.com/examples',
39
- lastmod: new Date().toISOString().split('T')[0],
40
- changefreq: 'monthly',
41
- priority: '0.8'
42
- },
43
- {
44
- loc: 'https://slimselectjs.com/privacy',
45
- lastmod: new Date().toISOString().split('T')[0],
46
- changefreq: 'yearly',
47
- priority: '0.3'
48
- },
49
- {
50
- loc: 'https://slimselectjs.com/settings',
51
- lastmod: new Date().toISOString().split('T')[0],
52
- changefreq: 'monthly',
53
- priority: '0.8'
54
- },
55
- {
56
- loc: 'https://slimselectjs.com/style',
57
- lastmod: new Date().toISOString().split('T')[0],
58
- changefreq: 'monthly',
59
- priority: '0.8'
60
- },
61
- {
62
- loc: 'https://slimselectjs.com/events',
63
- lastmod: new Date().toISOString().split('T')[0],
64
- changefreq: 'monthly',
65
- priority: '0.7'
66
- },
67
- {
68
- loc: 'https://slimselectjs.com/methods',
69
- lastmod: new Date().toISOString().split('T')[0],
70
- changefreq: 'monthly',
71
- priority: '0.7'
72
- },
73
- {
74
- loc: 'https://slimselectjs.com/react',
75
- lastmod: new Date().toISOString().split('T')[0],
76
- changefreq: 'monthly',
77
- priority: '0.8'
78
- },
79
- {
80
- loc: 'https://slimselectjs.com/vue',
81
- lastmod: new Date().toISOString().split('T')[0],
82
- changefreq: 'monthly',
83
- priority: '0.8'
84
- }
85
- ]
86
-
87
- function generateSitemap() {
88
- const sitemapContent = `<?xml version="1.0" encoding="UTF-8"?>
89
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
90
- ${routes
91
- .map(
92
- (route) => ` <url>
93
- <loc>${route.loc}</loc>
94
- <lastmod>${route.lastmod}</lastmod>
95
- <changefreq>${route.changefreq}</changefreq>
96
- <priority>${route.priority}</priority>
97
- </url>`
98
- )
99
- .join('\n')}
100
- </urlset>`
101
-
102
- const sitemapPath = path.join(__dirname, 'public', 'sitemap.xml')
103
- fs.writeFileSync(sitemapPath, sitemapContent, 'utf8')
104
- console.log('āœ… Sitemap generated successfully at:', sitemapPath)
105
- }
106
-
107
- // Run the generator
108
- generateSitemap()