slim-select 3.4.2 ā 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.
- package/dist/classes.d.ts +46 -0
- package/dist/helpers.d.ts +5 -0
- package/dist/index.d.ts +53 -318
- package/dist/index.umd.d.ts +2 -0
- package/dist/react/index.d.ts +4 -318
- package/dist/react/index.js +1459 -1696
- package/dist/react/index.umd.js +2 -2
- package/dist/react/react.d.ts +17 -0
- package/dist/react/react.test.d.ts +1 -0
- package/dist/react/slim-select/react/index.d.ts +4 -0
- package/dist/render.d.ts +88 -0
- package/dist/select.d.ts +38 -0
- package/dist/settings.d.ts +39 -0
- package/dist/slimselect.cjs.js +2 -2
- package/dist/slimselect.cjs.js.map +1 -1
- package/dist/slimselect.css +1 -1
- package/dist/slimselect.css.map +1 -1
- package/dist/slimselect.es.js +1233 -1384
- package/dist/slimselect.es.js.map +1 -1
- package/dist/slimselect.iife.js +2 -2
- package/dist/slimselect.iife.js.map +1 -1
- package/dist/slimselect.js +2 -2
- package/dist/slimselect.js.map +1 -1
- package/dist/src/docs/main.d.ts +0 -0
- package/dist/src/docs/router.d.ts +2 -0
- package/dist/src/docs/store.d.ts +12 -0
- package/dist/store.d.ts +53 -0
- package/dist/vue/index.d.ts +4 -318
- package/dist/vue/index.js +1335 -1503
- package/dist/vue/index.umd.js +1 -1
- package/dist/vue/slim-select/vue/index.d.ts +4 -0
- package/package.json +30 -36
- package/src/slim-select/slimselect.scss +34 -5
- package/.nvmrc +0 -1
- package/.prettierignore +0 -1
- package/.prettierrc +0 -7
- package/CODE_OF_CONDUCT.md +0 -46
- package/CONTRIBUTING.md +0 -1
- package/cdn.html +0 -21
- package/docs.go +0 -12
- package/example.html +0 -25
- package/index.html +0 -76
- package/release.js +0 -191
- package/sitemap.js +0 -108
- package/src/slim-select/accessibility.test.ts +0 -782
- package/src/slim-select/classes.test.ts +0 -73
- package/src/slim-select/classes.ts +0 -117
- package/src/slim-select/helpers.test.ts +0 -162
- package/src/slim-select/helpers.ts +0 -61
- package/src/slim-select/index.test.ts +0 -1356
- package/src/slim-select/index.ts +0 -594
- package/src/slim-select/index.umd.ts +0 -8
- package/src/slim-select/react/index.tsx +0 -9
- package/src/slim-select/react/react.test.tsx +0 -498
- package/src/slim-select/react/react.tsx +0 -209
- package/src/slim-select/render.test.ts +0 -1877
- package/src/slim-select/render.ts +0 -1765
- package/src/slim-select/select.test.ts +0 -683
- package/src/slim-select/select.ts +0 -659
- package/src/slim-select/settings.test.ts +0 -285
- package/src/slim-select/settings.ts +0 -78
- package/src/slim-select/store.test.ts +0 -1007
- package/src/slim-select/store.ts +0 -433
- package/src/slim-select/vue/index.ts +0 -9
- package/src/slim-select/vue/vue.test.ts +0 -1091
- package/src/slim-select/vue/vue.vue +0 -224
- package/tsconfig.json +0 -26
- package/vite.config.docs.mts +0 -29
- package/vite.config.lib.es-cjs.ts +0 -40
- package/vite.config.lib.umd-iife.ts +0 -34
- package/vite.config.react.mts +0 -41
- package/vite.config.vue.mts +0 -40
- 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()
|