eleva 1.0.0-alpha → 1.2.0-alpha

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/README.md CHANGED
@@ -1,16 +1,23 @@
1
- # Eleva
1
+ # Eleva 🚀
2
+
3
+ Pure JavaScript, Pure Performance, Simply Elegant.
4
+
5
+ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
6
+ [![Version](https://img.shields.io/npm/v/eleva.svg?style=flat)](https://www.npmjs.com/package/eleva)
7
+ ![100% Javascript](https://img.shields.io/github/languages/top/TarekRaafat/eleva?color=yellow)
8
+ ![Zero Dependencies](https://img.shields.io/badge/Dependencies-0-green.svg)
9
+ [![Minified Size](https://badgen.net/bundlephobia/min/eleva@latest)](https://bundlephobia.com/package/eleva@latest)
10
+ [![Gzipped Size](https://badgen.net/bundlephobia/minzip/eleva@latest)](https://bundlephobia.com/package/eleva@latest)
2
11
 
3
12
  **A minimalist, lightweight, pure vanilla JavaScript frontend runtime framework.**
4
13
  _Built with love for native JavaScript—because sometimes, less really is more!_ 😊
5
14
 
6
- [![Version](https://img.shields.io/npm/v/eleva.svg?style=flat)](https://www.npmjs.com/package/eleva)
7
- [![License](https://img.shields.io/npm/l/eleva.svg?style=flat)](LICENSE)
8
- [![Build Status](https://img.shields.io/travis/TarekRaafat/eleva.svg?style=flat)](https://travis-ci.org/TarekRaafat/eleva)
15
+ <!-- [![](https://data.jsdelivr.com/v1/package/npm/eleva/badge)](https://www.jsdelivr.com/package/npm/eleva) -->
9
16
 
10
- > **Stability Notice**: This is `v1.0.0-alpha` - APIs may change significantly until stable release.
11
- > Not recommended for production use yet. Follow the [versioning guide](#versioning) for updates.
17
+ > **Stability Notice**: This is `v1.2.0-alpha` - APIs may change significantly until the stable release.
18
+ > Not recommended for production use yet. Follow the [versioning guide](#version-guide) for updates.
12
19
 
13
- **Version:** `1.0.0-alpha`
20
+ **Version:** `1.2.0-alpha`
14
21
 
15
22
  Welcome to Eleva! This is my humble, experimental playground for a fresh approach to frontend development. Eleva was born out of my genuine passion for pure vanilla JavaScript—no frameworks, no bloat, just the power of native code. I hope you'll have fun exploring, testing, and contributing to make Eleva even better. 🚀
16
23
 
@@ -18,7 +25,7 @@ Welcome to Eleva! This is my humble, experimental playground for a fresh approac
18
25
 
19
26
  ## Table of Contents
20
27
 
21
- - [Eleva](#eleva)
28
+ - [Eleva 🚀](#eleva-)
22
29
  - [Table of Contents](#table-of-contents)
23
30
  - [Introduction](#introduction)
24
31
  - [Design Philosophy](#design-philosophy)
@@ -50,14 +57,14 @@ Welcome to Eleva! This is my humble, experimental playground for a fresh approac
50
57
 
51
58
  ## Introduction
52
59
 
53
- Eleva is a lightweight, no-nonsense runtime framework for frontend applications. Built with love for **pure vanilla JavaScript**, Eleva lets you create highly modular and scalable applications without the overhead of large frameworks. I built Eleva to prove that you don't need to rely on heavy libraries to build amazing user interfaces—sometimes, the simplest approach is the most powerful.
60
+ Eleva is a lightweight, no-nonsense runtime framework for frontend applications. Built with love for **pure vanilla JavaScript**, Eleva lets you create highly modular and scalable applications without the overhead of large frameworks. I built Eleva to prove that you don't need heavy libraries to build amazing user interfaces—sometimes, the simplest approach is the most powerful.
54
61
 
55
62
  **My Inspiration:**
56
- The idea and concept behind Eleva came from my deep appreciation for native JavaScript. I wanted to create a tool that stays true to the language without introducing new syntax or complexity, making it easy for you to integrate into your projects without a steep learning curve.
63
+ The idea behind Eleva comes from a deep appreciation for native JavaScript. I wanted to create a tool that stays true to the language without introducing new syntax or complexity, making it easy to integrate into your projects.
57
64
 
58
65
  **Core Principles:**
59
66
 
60
- - **🌱 Minimalism:** Only the essentials, so you can build without the clutter.
67
+ - **🌱 Minimalism:** Only the essentials, so you can build without clutter.
61
68
  - **🔌 Extensibility:** Plug in your own ideas—custom state management, routing, and more.
62
69
  - **🚀 Performance:** Fast, efficient, and designed with modern browsers in mind.
63
70
  - **🍦 Pure Vanilla:** No dependencies, no magic—just plain JavaScript.
@@ -70,30 +77,23 @@ The idea and concept behind Eleva came from my deep appreciation for native Java
70
77
 
71
78
  Unlike many frameworks that enforce a specific project structure or coding paradigm, Eleva provides a minimal core with a flexible plugin system. This means:
72
79
 
73
- - **🔄 Flexibility:** You’re free to architect your application as you see fit, without being forced into a rigid structure.
74
- - **🎯 Native JavaScript:** Eleva is built using pure vanilla JavaScript, so it integrates seamlessly with your existing code without introducing unfamiliar syntax.
75
- - **⚙️ Configurability:** With a simple API and optional plugins, you can extend Eleva's functionality to suit your project's unique requirements.
76
- - **🆓 Freedom:** You decide the best way to implement features, allowing for both simple and complex applications without unnecessary constraints.
80
+ - **🔄 Flexibility:** Architect your application your way—no rigid structure required.
81
+ - **🎯 Native JavaScript:** Built using pure vanilla JavaScript, Eleva integrates seamlessly with your existing code without unfamiliar syntax.
82
+ - **⚙️ Configurability:** Extend Eleva's functionality with a simple API and optional plugins.
83
+ - **🆓 Freedom:** Decide the best way to implement features without unnecessary constraints.
77
84
 
78
- This unopinionated approach makes Eleva versatile and ideal for developers who prefer to have full control over their application's design.
85
+ This unopinionated approach makes Eleva versatile and ideal for developers who want full control over their application's design.
79
86
 
80
87
  ---
81
88
 
82
89
  ## Handcrafted & Developer-Centric Design
83
90
 
84
- Eleva is built with a meticulous attention to detail and a deep passion for pure vanilla JavaScript. Every aspect of its design and architecture has been carefully handcrafted with the developer in mind. This approach makes Eleva not only a fresh and innovative choice but also a solid foundation for your projects.
85
-
86
- - **🎨 Craftsmanship:**
87
- Every line of code in Eleva is written with care, ensuring that the library remains lightweight, efficient, and easy to understand.
88
-
89
- - **🛠️ Developer-Centric:**
90
- Eleva is designed for you—the developer. Its intuitive API and minimalistic core mean you spend less time wrestling with the framework and more time building your application.
91
-
92
- - **🌟 Innovative & Fresh:**
93
- By sticking to pure vanilla JavaScript and avoiding unnecessary abstractions, Eleva offers a refreshing alternative to the complex and opinionated frameworks out there.
91
+ Eleva is built with meticulous attention to detail and a deep passion for pure vanilla JavaScript. Every aspect of its design and architecture is handcrafted with the developer in mind. This makes Eleva not only innovative but also a solid foundation for your projects.
94
92
 
95
- - **🏗️ Solid & Reliable:**
96
- With a focus on performance and modularity, Eleva provides a robust yet flexible platform that scales with your project's needs.
93
+ - **🎨 Craftsmanship:** Every line of code is written with care, keeping the library lightweight, efficient, and easy to understand.
94
+ - **🛠️ Developer-Centric:** Its intuitive API and minimal core mean you spend less time wrestling with the framework and more time building your application.
95
+ - **🌟 Innovative & Fresh:** Stick to pure vanilla JavaScript and avoid unnecessary abstractions.
96
+ - **🏗️ Solid & Reliable:** Focused on performance and modularity, Eleva scales with your project’s needs.
97
97
 
98
98
  This unique, developer-first approach makes Eleva a standout choice for building high-performance frontend applications without compromising on simplicity or control.
99
99
 
@@ -106,35 +106,22 @@ This unique, developer-first approach makes Eleva a standout choice for building
106
106
  - **🔔 Event Handling:** Built-in event emitter for robust inter-component communication.
107
107
  - **📝 Template Parsing:** Secure and dynamic interpolation with a custom TemplateEngine.
108
108
  - **🔄 DOM Diffing & Patching:** High-performance updates without a virtual DOM.
109
- - **📦 UMD & ES Module Builds:** Designed for the browser, with modern build tool support.
109
+ - **📦 UMD & ES Module Builds:** Supports modern build tools and browser environments.
110
110
  - **🤝 Friendly API:** A gentle learning curve for both beginners and seasoned developers.
111
- - **💎 Tiny Footprint & TypeScript Support:** At a fraction of the size of many mainstream frameworks (~4 KB minified) and with built-in TypeScript declarations, Eleva keeps your bundle lean and your codebase strongly typed.
111
+ - **💎 Tiny Footprint & TypeScript Support:** Approximately ~4 KB minified with built-in TypeScript declarations, to keep your bundle lean and your codebase strongly typed.
112
112
 
113
113
  ---
114
114
 
115
115
  ## When to Use Eleva
116
116
 
117
- Eleva is designed for developers who want a lightweight, flexible, and high-performance solution for building frontend applications. Here are some scenarios where Eleva shines:
118
-
119
- - **🚀 Small to Medium Projects:**
120
- If you're building a web app or website that doesn't require the overhead of a full-fledged framework, Eleva’s minimal footprint (~4 KB minified) keeps your project fast and efficient.
121
-
122
- - **⚡ Performance-Critical Applications:**
123
- For projects where speed and low bundle size are paramount, Eleva's optimized reactivity and DOM diffing ensure your app runs smoothly without unnecessary bloat.
124
-
125
- - **🔄 Unopinionated and Flexible Design:**
126
- Eleva is unopinionated, meaning it doesn't force you into a rigid structure. You can architect your application your way while enjoying a straightforward API and a flexible plugin system.
127
-
128
- - **🎯 Developer-Friendly & Native JavaScript:**
129
- If you prefer working with pure vanilla JavaScript without the need to learn new syntax or complex abstractions, Eleva is built with you in mind. Plus, it comes with built-in TypeScript declarations for strong type support.
130
-
131
- - **🧪 Rapid Prototyping & Experimentation:**
132
- Eleva's simplicity and ease of integration make it a great choice for prototyping ideas quickly. Its modular architecture means you can start small and extend the functionality as your project evolves.
133
-
134
- - **🔌 Extensibility through Plugins:**
135
- With a robust plugin system, Eleva can be easily extended to include features like routing, state management, or custom behaviors, making it suitable for both simple and complex applications.
117
+ Eleva is ideal for developers seeking a lightweight, flexible, and high-performance solution for building frontend applications. Here are some scenarios where Eleva shines:
136
118
 
137
- In short, if you're looking for a solid, developer-centric framework that provides high performance, simplicity, and the freedom to build your application your way, Eleva is an excellent choice.
119
+ - **🚀 Small to Medium Projects:** Perfect for web apps or websites that don’t require the overhead of a full-fledged framework.
120
+ - **⚡ Performance-Critical Applications:** Optimized reactivity and DOM diffing ensure smooth performance without bloat.
121
+ - **🔄 Unopinionated & Flexible:** Architect your application your way with a straightforward API and plugin system.
122
+ - **🎯 Developer-Friendly:** Stick to pure vanilla JavaScript with familiar syntax and built-in TypeScript support.
123
+ - **🧪 Rapid Prototyping:** Quickly prototype ideas with a minimal and extendable framework.
124
+ - **🔌 Extensible:** Easily add features like routing or state management through plugins.
138
125
 
139
126
  ---
140
127
 
@@ -142,82 +129,82 @@ In short, if you're looking for a solid, developer-centric framework that provid
142
129
 
143
130
  I believe in clear versioning that reflects the maturity of the project:
144
131
 
145
- - **Pre-release Versions (Alpha/Beta):** Early versions like `1.0.0-alpha` signal that the API is still evolving. Expect frequent updates, and please share your feedback!
146
- - **Semantic Versioning:** Once the API stabilizes, I'll follow semantic versioning strictly so that any breaking changes are clearly communicated.
147
- - **Fresh Start:** Since this is a complete overhaul and a fresh start, `1.0.0-alpha` represents my first major step forward.
132
+ - **Pre-release Versions (Alpha/Beta):** Early versions like `1.2.0-alpha` indicate the API is still evolving. Expect frequent updates and share your feedback!
133
+ - **Semantic Versioning:** Once stable, Ill follow semantic versioning strictly to clearly communicate any breaking changes.
134
+ - **Fresh Start:** This release (`1.2.0-alpha`) marks a significant update with enhanced inline documentation, improved JSDoc annotations, and a refined mounting context that now includes an `emitter` property.
148
135
 
149
136
  ---
150
137
 
151
138
  ## Version Guide
152
139
 
153
- I follow [Semantic Versioning (SemVer)](https://semver.org/) to manage Eleva's releases. Here's a quick guide to help you understand the version numbers:
140
+ I follow [Semantic Versioning (SemVer)](https://semver.org/):
154
141
 
155
- - **🔢 Major Version:**
156
- A change in the first digit (e.g., from `1.0.0` to `2.0.0`) indicates breaking changes or a major overhaul of the framework.
157
- - **🔢 Minor Version:**
158
- A change in the second digit (e.g., from `1.0.0` to `1.1.0`) signifies the addition of new features in a backward-compatible manner.
159
- - **🔢 Patch Version:**
160
- A change in the third digit (e.g., from `1.0.0` to `1.0.1`) reflects backward-compatible bug fixes and minor improvements.
161
- - **📌 Pre-release Identifiers:**
162
- Suffixes like `-alpha`, `-beta`, or `-rc` indicate that the release is not yet stable. For example, `1.0.0-alpha` means this is an experimental version of the upcoming stable `1.0.0` release.
163
-
164
- This guide is intended to help you understand what to expect with each release and how Eleva is evolving over time.
142
+ - **🔢 Major Version:** Breaking changes or major overhauls (e.g., from `1.0.0` to `2.0.0`).
143
+ - **🔢 Minor Version:** New features in a backward-compatible manner (e.g., from `1.1.0` to `1.2.0`).
144
+ - **🔢 Patch Version:** Backward-compatible bug fixes and minor improvements (e.g., `1.0.1`).
145
+ - **📌 Pre-release Identifiers:** Suffixes like `-alpha`, `-beta`, or `-rc` denote unstable releases (e.g., `1.2.0-alpha`).
165
146
 
166
147
  ---
167
148
 
168
149
  ## Performance
169
150
 
170
- Eleva is crafted with performance in mind:
151
+ Eleva is crafted for performance:
171
152
 
172
- - **Lightweight:** Designed to be ~4 KB minified so your app stays nimble.
173
- - **Efficient Reactivity:** Signal-based updates ensure only the necessary parts of the DOM are re-rendered.
174
- - **Optimized Diffing:** The Renderer efficiently patches changes without the overhead of a virtual DOM.
175
- - **No Bloat:** Pure vanilla JavaScript means no unnecessary dependencies slowing you down.
153
+ - **Lightweight:** Approximately ~4 KB minified and ~1.8 KB gzipped.
154
+ - **Efficient Reactivity:** Signal-based updates ensure only necessary DOM parts are updated.
155
+ - **Optimized Diffing:** Renderer efficiently patches changes without the overhead of a virtual DOM.
156
+ - **No Bloat:** Pure vanilla JavaScript with zero dependencies keeps your project nimble.
176
157
 
177
158
  ---
178
159
 
179
160
  ## Performance Benchmarks
180
161
 
181
- I've run some preliminary benchmarks to give you a rough idea of how Eleva stacks up against some popular frontend frameworks. These tests focus on bundle size, initial load time, and DOM update performance using a simple counter component scenario.
162
+ Preliminary benchmarks illustrate Eleva’s efficiency compared to popular frameworks:
182
163
 
183
164
  | Framework | Bundle Size (minified) | Initial Load Time | DOM Update Speed |
184
165
  | --------- | ---------------------- | ----------------- | ---------------- |
185
- | **Eleva** | ~4 KB | ~35 ms | ~2 ms |
166
+ | **Eleva** | **~4 KB** | **~35 ms** | **~2 ms** |
186
167
  | React | ~110 KB | ~100 ms | ~4 ms |
187
168
  | Vue | ~80 KB | ~80 ms | ~3 ms |
188
169
  | Angular | ~500 KB | ~250 ms | ~6 ms |
189
170
 
190
- > ⚠️ **Disclaimer:** These benchmarks are based on internal tests with a minimalistic counter component and may vary depending on project specifics and environments. They serve as a general indicator of Eleva’s lightweight and high-performance design.
171
+ > ⚠️ **Disclaimer:** Benchmarks are based on internal tests with a minimal counter component and may vary by project and environment.
191
172
 
192
173
  ---
193
174
 
194
175
  ## Eleva vs. Popular Frameworks
195
176
 
196
- While frameworks like React, Vue, and Angular are powerful, Eleva offers a refreshing alternative:
177
+ Eleva offers a refreshing alternative to frameworks like React, Vue, and Angular:
197
178
 
198
- - **Simplicity:** No virtual DOM, no JSX, and no complex state management—just plain JavaScript.
199
- - **Modularity:** Easily extend Eleva with plugins to fit your project's needs.
200
- - **Size:** At a fraction of the size of many mainstream frameworks, Eleva is perfect for projects where performance is key.
201
- - **Learning Curve:** With a familiar syntax and a clear API, Eleva is ideal for developers of all levels.
179
+ - **Simplicity:** No virtual DOM, JSX, or complex state management—just plain JavaScript.
180
+ - **Modularity:** Easily extend via plugins to suit your projects needs.
181
+ - **Size:** A fraction of the size of mainstream frameworks.
182
+ - **Learning Curve:** Familiar syntax and a clear API make it accessible to all developers.
202
183
 
203
- **Important:** Eleva is not trying to replace these giants but rather offers a lightweight option when you want to keep things simple and fast without introducing new syntax or unnecessary complexity. 🌟
184
+ _Note:_ Eleva isn’t trying to replace these giants but provides a lightweight option when you want simplicity and speed. 🌟
204
185
 
205
186
  ---
206
187
 
207
188
  ## Installation
208
189
 
209
- Eleva is available on npm. Since it's in alpha, I'm excited to have you try it out and share your thoughts!
190
+ Eleva is available on npm. Try it out and share your thoughts!
210
191
 
211
192
  ```bash
212
193
  npm install eleva
213
194
  ```
214
195
 
215
- Or include it directly in your HTML via CDN:
196
+ Or include it directly via CDN:
216
197
 
217
198
  ```html
199
+ <!-- unpkg -->
218
200
  <script src="https://unpkg.com/eleva/dist/eleva.min.js"></script>
219
201
  ```
220
202
 
203
+ ```html
204
+ <!-- jsDelivr -->
205
+ <script src="https://cdn.jsdelivr.net/npm/eleva/dist/eleva.min.js"></script>
206
+ ```
207
+
221
208
  ---
222
209
 
223
210
  ## Usage
@@ -226,13 +213,14 @@ Or include it directly in your HTML via CDN:
226
213
 
227
214
  ```js
228
215
  // Import Eleva (using ES modules)
229
- import { Eleva } from "eleva";
216
+ import Eleva from "eleva";
230
217
 
231
218
  // Create a new Eleva instance
232
219
  const app = new Eleva("MyApp");
233
220
 
234
221
  // Define a component
235
222
  app.component("HelloWorld", {
223
+ // The setup method is optional; if omitted, an empty state is used.
236
224
  setup({ signal }) {
237
225
  const count = signal(0);
238
226
  return { count };
@@ -240,19 +228,21 @@ app.component("HelloWorld", {
240
228
  template: ({ count }) => `
241
229
  <div>
242
230
  <h1>Hello, Eleva! 👋</h1>
243
- <p>Count: ${count}</p>
244
- <button @click="() => count++">Increment</button>
231
+ <p>Count: ${count.value}</p>
232
+ <button @click="() => count.value++">Increment</button>
245
233
  </div>
246
234
  `,
247
235
  });
248
236
 
249
- // Mount the component to a DOM element with the id 'app'
250
- app.mount("#app", "HelloWorld");
237
+ // Mount the component to a DOM element (not a selector).
238
+ app.mount(document.getElementById("app"), "HelloWorld");
251
239
  ```
252
240
 
241
+ Interactive Demo: [CodePen](https://codepen.io/tarekraafat/pen/GgRrxdY?editors=1010)
242
+
253
243
  ### UMD Example
254
244
 
255
- Include Eleva via a script tag, and it will be available as a global variable:
245
+ Include Eleva via a script tag and use the global variable:
256
246
 
257
247
  ```html
258
248
  <!DOCTYPE html>
@@ -272,19 +262,21 @@ Include Eleva via a script tag, and it will be available as a global variable:
272
262
  return { count };
273
263
  },
274
264
  template: ({ count }) => `
275
- <div>
276
- <h1>Hello, Eleva! 👋</h1>
277
- <p>Count: ${count}</p>
278
- <button @click="() => count++">Increment</button>
279
- </div>
280
- `,
265
+ <div>
266
+ <h1>Hello, Eleva! 👋</h1>
267
+ <p>Count: ${count.value}</p>
268
+ <button @click="() => count.value++">Increment</button>
269
+ </div>
270
+ `,
281
271
  });
282
- app.mount("#app", "HelloWorld");
272
+ app.mount(document.getElementById("app"), "HelloWorld");
283
273
  </script>
284
274
  </body>
285
275
  </html>
286
276
  ```
287
277
 
278
+ Interactive Demo: [CodePen](https://codepen.io/tarekraafat/pen/jEOyzYN?editors=1010)
279
+
288
280
  ---
289
281
 
290
282
  ## API Reference
@@ -317,11 +309,11 @@ Include Eleva via a script tag, and it will be available as a global variable:
317
309
  ### Renderer
318
310
 
319
311
  - **`patchDOM(container, newHtml)`**
320
- Efficiently update the DOM.
312
+ Efficiently updates the DOM.
321
313
  - **`diff(oldParent, newParent)`**
322
- Compare and update DOM trees.
314
+ Compares and updates DOM trees.
323
315
  - **`updateAttributes(oldEl, newEl)`**
324
- Sync element attributes.
316
+ Synchronizes element attributes.
325
317
 
326
318
  ### Eleva (Core)
327
319
 
@@ -331,16 +323,17 @@ Include Eleva via a script tag, and it will be available as a global variable:
331
323
  Install plugins.
332
324
  - **`.component(name, definition)`**
333
325
  Register a component.
334
- - **`.mount(selectorOrElement, compName, props)`**
335
- Mount a component to the DOM.
326
+ - **`.mount(container, compName, props)`**
327
+ Mount a component to the DOM.
328
+ _Note:_ The mounting context now includes an `emitter` property (the full event emitter instance) for simplified event handling. Use `context.emitter.on(...)` and `context.emitter.emit(...)` for event management.
336
329
 
337
- For detailed API documentation, please check the [docs](docs/) folder.
330
+ For detailed API documentation, please check the [docs](docs/index.md) folder.
338
331
 
339
332
  ---
340
333
 
341
334
  ## Development
342
335
 
343
- I welcome developers to dive in and play around with Eleva! Here's how you can get started locally:
336
+ I welcome developers to dive in and experiment with Eleva! Heres how to get started locally:
344
337
 
345
338
  1. **Clone the Repository:**
346
339
 
@@ -361,7 +354,7 @@ I welcome developers to dive in and play around with Eleva! Here's how you can g
361
354
  npm run dev
362
355
  ```
363
356
 
364
- 4. **Build for Production:**
357
+ 4. **Build for Production without TypeScript Declarations:**
365
358
 
366
359
  ```bash
367
360
  npm run build
@@ -374,23 +367,29 @@ I welcome developers to dive in and play around with Eleva! Here's how you can g
374
367
  npm run build:types:bundle
375
368
  ```
376
369
 
370
+ 6. **Build for Production with TypeScript Declarations:**
371
+
372
+ ```bash
373
+ npm run build:all
374
+ ```
375
+
377
376
  ---
378
377
 
379
378
  ## Testing
380
379
 
381
- I use Jest for tests. Run the test suite with:
380
+ I use Jest for testing. Run the test suite with:
382
381
 
383
382
  ```bash
384
383
  npm test
385
384
  ```
386
385
 
387
- Your contributions to tests are very welcome! 🧪
386
+ Contributions to tests are very welcome! 🧪
388
387
 
389
388
  ---
390
389
 
391
390
  ## Contributing
392
391
 
393
- I’d love to have you onboard as a contributor! Whether youre adding new features, squashing bugs, or sharing ideas, your input is invaluable. Please check out [CONTRIBUTING](CONTRIBUTING.md) for details on how to get started.
392
+ I’d love to have you onboard as a contributor! Whether you're adding new features, squashing bugs, or sharing ideas, your input is invaluable. Please check out [CONTRIBUTING](CONTRIBUTING.md) for guidelines on getting started.
394
393
 
395
394
  ---
396
395
 
@@ -412,7 +411,11 @@ Eleva is open-source and available under the [MIT License](LICENSE).
412
411
 
413
412
  ---
414
413
 
414
+ [![NPM](https://nodei.co/npm/eleva.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/eleva/)
415
+
416
+ ---
417
+
415
418
  [Documentation](/docs/index.md) |
416
419
  [Examples](/examples) |
417
- [Changelog](https://github.com/TarekRaafat/eleva/changelog) |
420
+ [Changelog](/changelog.md) |
418
421
  [GitHub Discussions](https://github.com/TarekRaafat/eleva/discussions)