@smilodon/core 1.0.0 → 1.0.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 (2) hide show
  1. package/README.md +291 -0
  2. package/package.json +22 -3
package/README.md ADDED
@@ -0,0 +1,291 @@
1
+ # @smilodon/core
2
+
3
+ <div align="center">
4
+ <img src="https://raw.githubusercontent.com/navidrezadoost/smilodon/main/.github/logo.jpg" alt="Smilodon Logo" width="220" style="border-radius:16px;" />
5
+ <p><strong>High-performance native select component with extreme-scale virtualization</strong></p>
6
+ <p>
7
+ <a href="https://www.npmjs.com/package/@smilodon/core"><img src="https://img.shields.io/npm/v/@smilodon/core.svg" alt="npm version"></a>
8
+ <a href="https://github.com/navidrezadoost/smilodon"><img src="https://img.shields.io/github/stars/navidrezadoost/smilodon.svg" alt="GitHub stars"></a>
9
+ <a href="https://github.com/navidrezadoost/smilodon/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/@smilodon/core.svg" alt="license"></a>
10
+ </p>
11
+ </div>
12
+
13
+ ## Why Smilodon?
14
+
15
+ Smilodon is a Web Component that renders **1,000,000+ items at 60 FPS** with constant DOM size, sub-millisecond search, and zero framework lock-in. Built for extreme-scale data applications where legacy libraries crash or lag.
16
+
17
+ ### Performance Comparison
18
+
19
+ | Library | 10K Items | 100K Items | 1M Items | Memory | FPS |
20
+ |---------|-----------|------------|----------|---------|-----|
21
+ | **Smilodon** | 38ms | 81ms | 162ms | 18 MB | 60 |
22
+ | React Select | 1200ms | ❌ Crash | ❌ Crash | 200+ MB | 10-25 |
23
+ | Vue Select | 890ms | ❌ Crash | ❌ Crash | 180+ MB | 15-30 |
24
+ | ng-select | 1100ms | ❌ Crash | ❌ Crash | 220+ MB | 12-28 |
25
+
26
+ See [full benchmarks](https://github.com/navidrezadoost/smilodon/blob/main/docs/BENCHMARKS.md) for methodology and reproducibility.
27
+
28
+ ## Installation
29
+
30
+ ```bash
31
+ npm install @smilodon/core
32
+ ```
33
+
34
+ ## Quick Start
35
+
36
+ ### Vanilla JavaScript / Web Components
37
+
38
+ ```html
39
+ <!DOCTYPE html>
40
+ <html>
41
+ <head>
42
+ <script type="module">
43
+ import '@smilodon/core';
44
+ </script>
45
+ </head>
46
+ <body>
47
+ <smilodon-select id="my-select"></smilodon-select>
48
+
49
+ <script type="module">
50
+ const select = document.getElementById('my-select');
51
+
52
+ // Generate 1 million items
53
+ const items = Array.from({ length: 1_000_000 }, (_, i) => ({
54
+ label: `Item ${i + 1}`,
55
+ value: i + 1
56
+ }));
57
+
58
+ select.items = items;
59
+
60
+ select.addEventListener('change', (e) => {
61
+ console.log('Selected:', e.detail);
62
+ });
63
+ </script>
64
+ </body>
65
+ </html>
66
+ ```
67
+
68
+ ### With Framework Adapters
69
+
70
+ Smilodon provides native adapters for all major frameworks:
71
+
72
+ - **React**: `npm install @smilodon/react`
73
+ - **Vue**: `npm install @smilodon/vue`
74
+ - **Svelte**: `npm install @smilodon/svelte`
75
+ - **Angular**: `npm install @smilodon/angular`
76
+
77
+ See the [main documentation](https://github.com/navidrezadoost/smilodon#readme) for framework-specific examples.
78
+
79
+ ## Key Features
80
+
81
+ ### 🚀 Extreme Performance
82
+ - **Constant DOM**: Only 10-15 elements rendered regardless of dataset size
83
+ - **Work Stealing**: Background search workers with automatic cancellation
84
+ - **Sub-millisecond Search**: Fenwick tree indexing for O(log n) queries
85
+ - **60 FPS Scrolling**: Hardware-accelerated virtualization
86
+
87
+ ### 🎯 Production Ready
88
+ - **TypeScript First**: Complete type definitions included
89
+ - **Zero Dependencies**: 6.6 KB gzipped runtime
90
+ - **Framework Agnostic**: Works with React, Vue, Svelte, Angular, or vanilla JS
91
+ - **Accessibility**: WCAG 2.2 AA compliant with ARIA 1.2
92
+
93
+ ### 🔒 Enterprise Grade
94
+ - **SOC2 Compliant**: Audit-ready security controls
95
+ - **CSP Compatible**: No eval(), no inline scripts
96
+ - **SBOM Included**: Full dependency transparency
97
+ - **99.8% Test Coverage**: Unit, integration, and E2E tests
98
+
99
+ ## API Reference
100
+
101
+ ### Properties
102
+
103
+ ```typescript
104
+ interface SmilodonSelectElement extends HTMLElement {
105
+ items: SelectItem[]; // Dataset (can be millions of items)
106
+ value: any; // Current selected value
107
+ placeholder?: string; // Placeholder text
108
+ searchable?: boolean; // Enable search (default: true)
109
+ disabled?: boolean; // Disable the select
110
+ multiple?: boolean; // Multiple selection mode
111
+ virtualization?: boolean; // Enable virtualization (default: true)
112
+ maxHeight?: number; // Max dropdown height in pixels
113
+ }
114
+
115
+ interface SelectItem {
116
+ label: string; // Display text
117
+ value: any; // Value (can be any type)
118
+ disabled?: boolean; // Disable this option
119
+ group?: string; // Optgroup name
120
+ }
121
+ ```
122
+
123
+ ### Events
124
+
125
+ ```typescript
126
+ // Selection changed
127
+ select.addEventListener('change', (event: CustomEvent) => {
128
+ console.log(event.detail); // { value, label }
129
+ });
130
+
131
+ // Dropdown opened
132
+ select.addEventListener('open', () => {
133
+ console.log('Dropdown opened');
134
+ });
135
+
136
+ // Dropdown closed
137
+ select.addEventListener('close', () => {
138
+ console.log('Dropdown closed');
139
+ });
140
+
141
+ // Search query changed
142
+ select.addEventListener('search', (event: CustomEvent) => {
143
+ console.log(event.detail.query);
144
+ });
145
+ ```
146
+
147
+ ### Methods
148
+
149
+ ```typescript
150
+ // Programmatically open/close
151
+ select.open();
152
+ select.close();
153
+
154
+ // Clear selection
155
+ select.clear();
156
+
157
+ // Focus the select
158
+ select.focus();
159
+
160
+ // Get filtered items (useful for debugging)
161
+ const filtered = select.getFilteredItems();
162
+ ```
163
+
164
+ ## Advanced Usage
165
+
166
+ ### Custom Styling
167
+
168
+ Smilodon uses CSS custom properties for theming:
169
+
170
+ ```css
171
+ smilodon-select {
172
+ --smilodon-border-color: #d1d5db;
173
+ --smilodon-focus-color: #3b82f6;
174
+ --smilodon-bg-color: #ffffff;
175
+ --smilodon-text-color: #1f2937;
176
+ --smilodon-hover-bg: #f3f4f6;
177
+ --smilodon-selected-bg: #dbeafe;
178
+ --smilodon-font-family: system-ui, -apple-system, sans-serif;
179
+ --smilodon-border-radius: 0.375rem;
180
+ }
181
+ ```
182
+
183
+ ### Server-Side Rendering (SSR)
184
+
185
+ Smilodon gracefully handles SSR environments:
186
+
187
+ ```javascript
188
+ // Check if running in browser
189
+ if (typeof window !== 'undefined') {
190
+ import('@smilodon/core').then(() => {
191
+ // Initialize after hydration
192
+ });
193
+ }
194
+ ```
195
+
196
+ ### Performance Monitoring
197
+
198
+ Enable telemetry to monitor performance:
199
+
200
+ ```javascript
201
+ select.enableTelemetry = true;
202
+
203
+ select.addEventListener('telemetry', (event) => {
204
+ console.log('Performance metrics:', event.detail);
205
+ // { renderTime, searchTime, scrollFPS, memoryUsage }
206
+ });
207
+ ```
208
+
209
+ ## Architecture
210
+
211
+ Smilodon's performance comes from three core optimizations:
212
+
213
+ 1. **Virtual Scrolling**: Only renders visible items (10-15 DOM nodes for any dataset size)
214
+ 2. **Work Stealing Scheduler**: Search operations run in background workers with automatic cancellation
215
+ 3. **Fenwick Tree Indexing**: O(log n) search queries instead of O(n) array scans
216
+
217
+ Read the [full architecture guide](https://github.com/navidrezadoost/smilodon/blob/main/ARCHITECTURE.md) for implementation details.
218
+
219
+ ## Browser Support
220
+
221
+ | Browser | Version |
222
+ |---------|---------|
223
+ | Chrome | 90+ |
224
+ | Firefox | 88+ |
225
+ | Safari | 14.1+ |
226
+ | Edge | 90+ |
227
+
228
+ Requires browsers with native Web Components support (custom elements v1).
229
+
230
+ ## Bundle Size
231
+
232
+ - **Runtime**: 6.6 KB gzipped (ESM)
233
+ - **Full Package**: 365 KB (includes 5 formats + source maps + types)
234
+ - **Tree-shakeable**: Import only what you need
235
+
236
+ ## TypeScript
237
+
238
+ Full TypeScript definitions included. No need for `@types/*` packages.
239
+
240
+ ```typescript
241
+ import type { SmilodonSelectElement, SelectItem } from '@smilodon/core';
242
+
243
+ const items: SelectItem[] = [
244
+ { label: 'Option 1', value: 1 },
245
+ { label: 'Option 2', value: 2 }
246
+ ];
247
+
248
+ const select = document.querySelector('smilodon-select') as SmilodonSelectElement;
249
+ select.items = items;
250
+ ```
251
+
252
+ ## Documentation
253
+
254
+ - **Main README**: [Complete guide with framework examples](https://github.com/navidrezadoost/smilodon#readme)
255
+ - **Benchmarks**: [Transparent performance comparisons](https://github.com/navidrezadoost/smilodon/blob/main/docs/BENCHMARKS.md)
256
+ - **API Reference**: [Full API documentation](https://github.com/navidrezadoost/smilodon/blob/main/docs/API-REFERENCE.md)
257
+ - **Architecture**: [Technical deep-dive](https://github.com/navidrezadoost/smilodon/blob/main/ARCHITECTURE.md)
258
+ - **Migration Guide**: [Migrate from React Select, Vue Select, etc.](https://github.com/navidrezadoost/smilodon/blob/main/docs/MIGRATION.md)
259
+
260
+ ## Examples
261
+
262
+ Visit the [interactive playground](https://github.com/navidrezadoost/smilodon/tree/main/playground) to see Smilodon in action with:
263
+ - 1M item datasets
264
+ - Real-time search
265
+ - Framework integrations
266
+ - Custom styling
267
+
268
+ ## Contributing
269
+
270
+ Contributions are welcome! Please read our [Contributing Guide](https://github.com/navidrezadoost/smilodon/blob/main/CONTRIBUTING.md) for details.
271
+
272
+ ## License
273
+
274
+ MIT © [Navid Rezadoost](https://github.com/navidrezadoost)
275
+
276
+ ## Support
277
+
278
+ - **Issues**: [GitHub Issues](https://github.com/navidrezadoost/smilodon/issues)
279
+ - **Discussions**: [GitHub Discussions](https://github.com/navidrezadoost/smilodon/discussions)
280
+ - **Security**: [Security Policy](https://github.com/navidrezadoost/smilodon/blob/main/SECURITY.md)
281
+
282
+ ---
283
+
284
+ <div align="center">
285
+ <p>Made with ⚡ by the Smilodon team</p>
286
+ <p>
287
+ <a href="https://github.com/navidrezadoost/smilodon">GitHub</a> •
288
+ <a href="https://www.npmjs.com/package/@smilodon/core">npm</a> •
289
+ <a href="https://github.com/navidrezadoost/smilodon/blob/main/docs/BENCHMARKS.md">Benchmarks</a>
290
+ </p>
291
+ </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smilodon/core",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "High-performance native select component with extreme-scale virtualization",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -23,7 +23,9 @@
23
23
  "dev": "rollup -c --watch",
24
24
  "test": "vitest run",
25
25
  "test:watch": "vitest",
26
- "size": "gzip -c dist/index.js | wc -c"
26
+ "size": "gzip -c dist/index.js | wc -c",
27
+ "prepublishOnly": "npm run build",
28
+ "release": "npm version patch && npm publish"
27
29
  },
28
30
  "keywords": [
29
31
  "select",
@@ -33,8 +35,25 @@
33
35
  "custom-element",
34
36
  "performance"
35
37
  ],
36
- "author": "",
38
+ "author": "Navid Rezadoost <navidrezadoost07@gmail.com>",
37
39
  "license": "MIT",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/navidrezadoost/smilodon.git",
43
+ "directory": "packages/core"
44
+ },
45
+ "homepage": "https://github.com/navidrezadoost/smilodon#readme",
46
+ "bugs": {
47
+ "url": "https://github.com/navidrezadoost/smilodon/issues"
48
+ },
49
+ "engines": {
50
+ "node": ">=18",
51
+ "npm": ">=9"
52
+ },
53
+ "publishConfig": {
54
+ "access": "public",
55
+ "registry": "https://registry.npmjs.org/"
56
+ },
38
57
  "devDependencies": {
39
58
  "@rollup/plugin-node-resolve": "^15.2.3",
40
59
  "@rollup/plugin-terser": "^0.4.4",