elan-ui 0.0.0-stage โ†’ 0.1.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 (279) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/LICENSE +21 -0
  3. package/README.md +236 -2
  4. package/THIRD_PARTY_LICENSES.md +1729 -0
  5. package/bin/create-elan.cjs +199 -0
  6. package/bin/elan-codemod.cjs +141 -0
  7. package/bin/elan.cjs +115 -0
  8. package/bin/site-doctor.cjs +223 -0
  9. package/dist/LICENSE +21 -0
  10. package/dist/THIRD_PARTY_LICENSES.md +1729 -0
  11. package/dist/adapters/angular.cjs +25546 -0
  12. package/dist/adapters/angular.d.cts +30 -0
  13. package/dist/adapters/angular.d.ts +30 -0
  14. package/dist/adapters/angular.global.js +25551 -0
  15. package/dist/adapters/angular.js +40 -0
  16. package/dist/adapters/index.cjs +25579 -0
  17. package/dist/adapters/index.d.cts +30 -0
  18. package/dist/adapters/index.d.ts +30 -0
  19. package/dist/adapters/index.global.js +25584 -0
  20. package/dist/adapters/index.js +40 -0
  21. package/dist/adapters/react.cjs +25550 -0
  22. package/dist/adapters/react.d.cts +421 -0
  23. package/dist/adapters/react.d.ts +421 -0
  24. package/dist/adapters/react.global.js +25555 -0
  25. package/dist/adapters/react.js +40 -0
  26. package/dist/adapters/solid.cjs +25547 -0
  27. package/dist/adapters/solid.d.cts +30 -0
  28. package/dist/adapters/solid.d.ts +30 -0
  29. package/dist/adapters/solid.global.js +25552 -0
  30. package/dist/adapters/solid.js +40 -0
  31. package/dist/adapters/svelte.cjs +955 -0
  32. package/dist/adapters/svelte.d.cts +33 -0
  33. package/dist/adapters/svelte.d.ts +33 -0
  34. package/dist/adapters/svelte.global.js +960 -0
  35. package/dist/adapters/svelte.js +11 -0
  36. package/dist/adapters/vue.cjs +25548 -0
  37. package/dist/adapters/vue.d.cts +30 -0
  38. package/dist/adapters/vue.d.ts +30 -0
  39. package/dist/adapters/vue.global.js +25553 -0
  40. package/dist/adapters/vue.js +40 -0
  41. package/dist/adapters/web-components.cjs +938 -0
  42. package/dist/adapters/web-components.d.cts +32 -0
  43. package/dist/adapters/web-components.d.ts +32 -0
  44. package/dist/adapters/web-components.global.js +943 -0
  45. package/dist/adapters/web-components.js +10 -0
  46. package/dist/blocks/index.cjs +1650 -0
  47. package/dist/blocks/index.d.cts +14 -0
  48. package/dist/blocks/index.d.ts +14 -0
  49. package/dist/blocks/index.global.js +1655 -0
  50. package/dist/blocks/index.js +1648 -0
  51. package/dist/chunk-2243O3CF.js +122 -0
  52. package/dist/chunk-4XH3F7RG.js +1198 -0
  53. package/dist/chunk-6OVXSWAX.js +226 -0
  54. package/dist/chunk-AEOCIJDU.js +837 -0
  55. package/dist/chunk-B3A7XVQZ.js +1613 -0
  56. package/dist/chunk-BEJXHSPT.js +175 -0
  57. package/dist/chunk-BWMLHUWX.js +226 -0
  58. package/dist/chunk-D2WHIODE.js +152 -0
  59. package/dist/chunk-DOZD2DBV.js +124 -0
  60. package/dist/chunk-DS2AMW7W.js +115 -0
  61. package/dist/chunk-E6GUARYB.js +3192 -0
  62. package/dist/chunk-E77GAEWG.js +320 -0
  63. package/dist/chunk-FG3BJXJ2.js +316 -0
  64. package/dist/chunk-FTUHP66J.js +146 -0
  65. package/dist/chunk-HZNKBMDR.js +96 -0
  66. package/dist/chunk-IS7PNQJQ.js +154 -0
  67. package/dist/chunk-LHGYDUMB.js +933 -0
  68. package/dist/chunk-MSCXIUWH.js +1805 -0
  69. package/dist/chunk-MVIZ2QD3.js +2190 -0
  70. package/dist/chunk-MW74LENW.js +1342 -0
  71. package/dist/chunk-NI7J3MPQ.js +212 -0
  72. package/dist/chunk-NYU4YCUZ.js +474 -0
  73. package/dist/chunk-QQMJLAUI.js +84 -0
  74. package/dist/chunk-R33SEXRS.js +29 -0
  75. package/dist/chunk-R5U7XKVJ.js +13 -0
  76. package/dist/chunk-RLELMJSX.js +4581 -0
  77. package/dist/chunk-SYGFYPYO.js +57 -0
  78. package/dist/chunk-T7J5KGMA.js +89 -0
  79. package/dist/chunk-TOGQYY3R.js +1677 -0
  80. package/dist/chunk-TQENBBGE.js +638 -0
  81. package/dist/chunk-UKTZOOJG.js +110 -0
  82. package/dist/chunk-ULDWF35U.js +201 -0
  83. package/dist/chunk-V2WB6OOD.js +76 -0
  84. package/dist/chunk-VF7KNOBL.js +1156 -0
  85. package/dist/chunk-VHY6XQXY.js +255 -0
  86. package/dist/chunk-VUBTNLJR.js +872 -0
  87. package/dist/chunk-XB5KDSZ5.js +104 -0
  88. package/dist/chunk-XWNBUFX7.js +976 -0
  89. package/dist/chunk-XZSAZ7VH.js +1099 -0
  90. package/dist/chunk-YDH5TQXG.js +632 -0
  91. package/dist/chunk-YV6UE3ZZ.js +1294 -0
  92. package/dist/commerce/index.cjs +1250 -0
  93. package/dist/commerce/index.d.cts +1 -0
  94. package/dist/commerce/index.d.ts +1 -0
  95. package/dist/commerce/index.global.js +1255 -0
  96. package/dist/commerce/index.js +3 -0
  97. package/dist/compat/index.cjs +1647 -0
  98. package/dist/compat/index.d.cts +2 -0
  99. package/dist/compat/index.d.ts +2 -0
  100. package/dist/compat/index.global.js +1652 -0
  101. package/dist/compat/index.js +4 -0
  102. package/dist/compat-CqtqGxAA.d.ts +182 -0
  103. package/dist/compat-Cv-EXdAt.d.cts +182 -0
  104. package/dist/compliance/index.cjs +740 -0
  105. package/dist/compliance/index.d.cts +1 -0
  106. package/dist/compliance/index.d.ts +1 -0
  107. package/dist/compliance/index.global.js +745 -0
  108. package/dist/compliance/index.js +9 -0
  109. package/dist/components/index.cjs +2450 -0
  110. package/dist/components/index.d.cts +1 -0
  111. package/dist/components/index.d.ts +1 -0
  112. package/dist/components/index.global.js +2455 -0
  113. package/dist/components/index.js +5 -0
  114. package/dist/consent-Cz2nIBOX.d.cts +63 -0
  115. package/dist/consent-Cz2nIBOX.d.ts +63 -0
  116. package/dist/content/index.cjs +399 -0
  117. package/dist/content/index.d.cts +1 -0
  118. package/dist/content/index.d.ts +1 -0
  119. package/dist/content/index.global.js +404 -0
  120. package/dist/content/index.js +3 -0
  121. package/dist/conversion/index.cjs +1047 -0
  122. package/dist/conversion/index.d.cts +1 -0
  123. package/dist/conversion/index.d.ts +1 -0
  124. package/dist/conversion/index.global.js +1052 -0
  125. package/dist/conversion/index.js +5 -0
  126. package/dist/core/index.cjs +934 -0
  127. package/dist/core/index.d.cts +1 -0
  128. package/dist/core/index.d.ts +1 -0
  129. package/dist/core/index.global.js +939 -0
  130. package/dist/core/index.js +8 -0
  131. package/dist/counters-DP6LPFDX.d.cts +82 -0
  132. package/dist/counters-DP6LPFDX.d.ts +82 -0
  133. package/dist/data/index.cjs +1388 -0
  134. package/dist/data/index.d.cts +1 -0
  135. package/dist/data/index.d.ts +1 -0
  136. package/dist/data/index.global.js +1393 -0
  137. package/dist/data/index.js +3 -0
  138. package/dist/devtools/index.cjs +1172 -0
  139. package/dist/devtools/index.d.cts +1 -0
  140. package/dist/devtools/index.d.ts +1 -0
  141. package/dist/devtools/index.global.js +1177 -0
  142. package/dist/devtools/index.js +4 -0
  143. package/dist/elan-native.css +197 -0
  144. package/dist/elan-polish.css +522 -0
  145. package/dist/elan.cjs +30112 -0
  146. package/dist/elan.css +3492 -0
  147. package/dist/elan.d.cts +30 -0
  148. package/dist/elan.d.ts +30 -0
  149. package/dist/elan.global.js +30117 -0
  150. package/dist/elan.js +40 -0
  151. package/dist/forms/index.cjs +1899 -0
  152. package/dist/forms/index.d.cts +1 -0
  153. package/dist/forms/index.d.ts +1 -0
  154. package/dist/forms/index.global.js +1904 -0
  155. package/dist/forms/index.js +3 -0
  156. package/dist/i18n/index.cjs +206 -0
  157. package/dist/i18n/index.d.cts +1 -0
  158. package/dist/i18n/index.d.ts +1 -0
  159. package/dist/i18n/index.global.js +211 -0
  160. package/dist/i18n/index.js +2 -0
  161. package/dist/index--NCXAsz2.d.cts +315 -0
  162. package/dist/index--NCXAsz2.d.ts +315 -0
  163. package/dist/index-1642QLT-.d.cts +747 -0
  164. package/dist/index-3_M45IlN.d.cts +133 -0
  165. package/dist/index-3_M45IlN.d.ts +133 -0
  166. package/dist/index-B-4D1rBo.d.cts +58 -0
  167. package/dist/index-B-4D1rBo.d.ts +58 -0
  168. package/dist/index-B7vucSlL.d.cts +263 -0
  169. package/dist/index-B7vucSlL.d.ts +263 -0
  170. package/dist/index-BDFudzk8.d.cts +87 -0
  171. package/dist/index-BDFudzk8.d.ts +87 -0
  172. package/dist/index-BK4tLx7x.d.cts +200 -0
  173. package/dist/index-BK4tLx7x.d.ts +200 -0
  174. package/dist/index-BLbRggVq.d.cts +49 -0
  175. package/dist/index-BLbRggVq.d.ts +49 -0
  176. package/dist/index-BO5j_yk-.d.ts +747 -0
  177. package/dist/index-Bmi79bUU.d.cts +280 -0
  178. package/dist/index-Bmi79bUU.d.ts +280 -0
  179. package/dist/index-C4evFtd9.d.cts +347 -0
  180. package/dist/index-C4evFtd9.d.ts +347 -0
  181. package/dist/index-C5n0QgUX.d.cts +136 -0
  182. package/dist/index-D3Xd20j1.d.ts +616 -0
  183. package/dist/index-D9hTKkXg.d.cts +416 -0
  184. package/dist/index-D9hTKkXg.d.ts +416 -0
  185. package/dist/index-DTxHv0Ny.d.cts +775 -0
  186. package/dist/index-DZZWK5CA.d.cts +195 -0
  187. package/dist/index-DZZWK5CA.d.ts +195 -0
  188. package/dist/index-Dt8oQRqy.d.ts +365 -0
  189. package/dist/index-DwR4h_fy.d.cts +244 -0
  190. package/dist/index-DwR4h_fy.d.ts +244 -0
  191. package/dist/index-Gv3jt7HJ.d.cts +78 -0
  192. package/dist/index-Gv3jt7HJ.d.ts +78 -0
  193. package/dist/index-LGFlj9bO.d.cts +469 -0
  194. package/dist/index-LGFlj9bO.d.ts +469 -0
  195. package/dist/index-MQVjEjif.d.cts +616 -0
  196. package/dist/index-Y6F1aQL-.d.cts +189 -0
  197. package/dist/index-Y6F1aQL-.d.ts +189 -0
  198. package/dist/index-Yk_6dpLz.d.ts +775 -0
  199. package/dist/index-cX9vjzrm.d.cts +365 -0
  200. package/dist/index-jeWqJPGg.d.ts +136 -0
  201. package/dist/index-xWaSskn9.d.cts +306 -0
  202. package/dist/index-xWaSskn9.d.ts +306 -0
  203. package/dist/marquee-CDplkRYw.d.cts +117 -0
  204. package/dist/marquee-CDplkRYw.d.ts +117 -0
  205. package/dist/media/index.cjs +1563 -0
  206. package/dist/media/index.d.cts +1 -0
  207. package/dist/media/index.d.ts +1 -0
  208. package/dist/media/index.global.js +1568 -0
  209. package/dist/media/index.js +5 -0
  210. package/dist/motion/index.cjs +5385 -0
  211. package/dist/motion/index.d.cts +2 -0
  212. package/dist/motion/index.d.ts +2 -0
  213. package/dist/motion/index.global.js +5390 -0
  214. package/dist/motion/index.js +10 -0
  215. package/dist/navigation/index.cjs +1028 -0
  216. package/dist/navigation/index.d.cts +1 -0
  217. package/dist/navigation/index.d.ts +1 -0
  218. package/dist/navigation/index.global.js +1033 -0
  219. package/dist/navigation/index.js +4 -0
  220. package/dist/performance/index.cjs +310 -0
  221. package/dist/performance/index.d.cts +1 -0
  222. package/dist/performance/index.d.ts +1 -0
  223. package/dist/performance/index.global.js +315 -0
  224. package/dist/performance/index.js +2 -0
  225. package/dist/platform/index.cjs +556 -0
  226. package/dist/platform/index.d.cts +2 -0
  227. package/dist/platform/index.d.ts +2 -0
  228. package/dist/platform/index.global.js +561 -0
  229. package/dist/platform/index.js +3 -0
  230. package/dist/polish/index.cjs +1275 -0
  231. package/dist/polish/index.d.cts +1 -0
  232. package/dist/polish/index.d.ts +1 -0
  233. package/dist/polish/index.global.js +1280 -0
  234. package/dist/polish/index.js +3 -0
  235. package/dist/positioning-AXNlolGu.d.cts +38 -0
  236. package/dist/positioning-AXNlolGu.d.ts +38 -0
  237. package/dist/privacy/consent.cjs +305 -0
  238. package/dist/privacy/consent.d.cts +1 -0
  239. package/dist/privacy/consent.d.ts +1 -0
  240. package/dist/privacy/consent.global.js +310 -0
  241. package/dist/privacy/consent.js +3 -0
  242. package/dist/pwa/index.cjs +150 -0
  243. package/dist/pwa/index.d.cts +1 -0
  244. package/dist/pwa/index.d.ts +1 -0
  245. package/dist/pwa/index.global.js +155 -0
  246. package/dist/pwa/index.js +2 -0
  247. package/dist/runtime/index.cjs +3314 -0
  248. package/dist/runtime/index.d.cts +3 -0
  249. package/dist/runtime/index.d.ts +3 -0
  250. package/dist/runtime/index.global.js +3319 -0
  251. package/dist/runtime/index.js +11 -0
  252. package/dist/runtime/jsx-dev-runtime.cjs +55 -0
  253. package/dist/runtime/jsx-dev-runtime.d.cts +9 -0
  254. package/dist/runtime/jsx-dev-runtime.d.ts +9 -0
  255. package/dist/runtime/jsx-dev-runtime.global.js +60 -0
  256. package/dist/runtime/jsx-dev-runtime.js +15 -0
  257. package/dist/runtime/jsx-runtime.cjs +47 -0
  258. package/dist/runtime/jsx-runtime.d.cts +6 -0
  259. package/dist/runtime/jsx-runtime.d.ts +6 -0
  260. package/dist/runtime/jsx-runtime.global.js +52 -0
  261. package/dist/runtime/jsx-runtime.js +3 -0
  262. package/dist/scroll/index.cjs +3798 -0
  263. package/dist/scroll/index.d.cts +2 -0
  264. package/dist/scroll/index.d.ts +2 -0
  265. package/dist/scroll/index.global.js +3803 -0
  266. package/dist/scroll/index.js +8 -0
  267. package/dist/theming/index.cjs +1331 -0
  268. package/dist/theming/index.d.cts +1 -0
  269. package/dist/theming/index.d.ts +1 -0
  270. package/dist/theming/index.global.js +1336 -0
  271. package/dist/theming/index.js +4 -0
  272. package/dist/ui/index.cjs +1883 -0
  273. package/dist/ui/index.d.cts +2 -0
  274. package/dist/ui/index.d.ts +2 -0
  275. package/dist/ui/index.global.js +1888 -0
  276. package/dist/ui/index.js +4 -0
  277. package/dist/vnode-BK5-tYYM.d.cts +112 -0
  278. package/dist/vnode-BK5-tYYM.d.ts +112 -0
  279. package/package.json +263 -4
package/CHANGELOG.md ADDED
@@ -0,0 +1,55 @@
1
+ # Changelog
2
+
3
+ All notable changes to **Elan (`elan-ui`)** are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [0.1.0] - 2026-10-24
11
+
12
+ ### ๐Ÿš€ Initial Public Release Candidate
13
+
14
+ #### Added
15
+ - **Core Motion & Physics Engine**:
16
+ - Priority queue requestAnimationFrame ticker with deterministic DOM read/write batching.
17
+ - Analytical damped spring physics engine with 6 presets (`default`, `gentle`, `wobbly`, `stiff`, `slow`, `molasses`).
18
+ - Cubic Bezier solver with all standard CSS easing curves and custom 4-point curves.
19
+ - Pooled `IntersectionObserver` and `ResizeObserver` tracking with automatic disconnect.
20
+ - Multi-theme token engine supporting `dark`, `light`, `minimal`, `neon`, `glass`, and `brutalist` themes with OS `prefers-color-scheme` synchronization.
21
+ - **Scroll Journey & Scrubber**:
22
+ - Declarative scroll reveal directives (`data-reveal="up|down|left|right|fade|zoom|blur"`).
23
+ - Multi-chapter storytelling scroll journeys (`data-journey`) with progress indicators.
24
+ - Section pin-spacers and synchronized scrub animations (`data-pin`, `data-scrub`).
25
+ - Native CSS Scroll-Driven Animations engine (`@supports (animation-timeline: scroll())`) with automated requestAnimationFrame fallback.
26
+ - **Accessible UI Components**:
27
+ - WAI-ARIA compliant Modal Dialog with focus trapping, `aria-modal="true"`, and `Escape` key capture.
28
+ - Command Palette (`Cmd/Ctrl+K`) with fuzzy query filtering, keyboard arrow navigation, and live result counts.
29
+ - Disclosure Accordion (`data-accordion`) with fluid CSS grid height transitions and full keyboard operability.
30
+ - Tab panels (`data-tabs`) with W3C roving tabindex keyboard navigation.
31
+ - Queue-managed Toast notifications with `aria-live="polite"` screen reader announcements.
32
+ - Native Popover API integration with fallback click-outside and keydown dismiss handlers.
33
+ - **Reactive JSX Runtime**:
34
+ - Fine-grained reactive signals (`signal`, `computed`, `effect`) with automatic dependency tracking.
35
+ - Sub-5KB virtual DOM runtime (`createElement`, `h`, `diff`, `Fragment`, `memo`, `forwardRef`).
36
+ - Zero-dependency Server-Side Rendering pipeline (`renderToString`) with SSR hydration support.
37
+ - **Progressive Enhancement & Fallbacks**:
38
+ - Native View Transitions API router (`document.startViewTransition`) with seamless crossfade fallback.
39
+ - Web Animations API helper (`safeAnimate`) with automatic style application when WAAPI is unsupported.
40
+ - Vestibular safety guard: Fail-safe reduced motion detection defaulting to `reduce` if `matchMedia` is unavailable.
41
+ - **Developer CLI & Diagnostics**:
42
+ - `elan doctor` / `bin/site-doctor.cjs`: Automated site auditor checking viewport meta tags, Elan bundles, `@layer elan` usage, and semantic accessibility trees.
43
+ - `create-elan` scaffolder for rapid initialization of SaaS, Portfolio, and Agency templates.
44
+
45
+ #### Security Hardening
46
+ - **Audited HTML Sanitizer**: Inert DOMParser sanitizer stripping `<script>`, `<style>`, `<iframe>`, `<object>`, `<embed>`, inline `on*` event handlers, and dangerous URI schemes.
47
+ - **W3C Trusted Types**: Automatic registration and integration with `elan-policy` for strict CSP compliance.
48
+ - **Safe URL Validator (`safeURL`)**: Strips unencoded control characters, scheme-relative `//` URLs without host allowlist, and malicious protocols (`javascript:`, `vbscript:`, `file:`, `data:`).
49
+ - **Constant-Time String Comparison (`timingSafeEqual`)**: Bitwise XOR comparison protecting tokens and signatures against timing side-channel attacks.
50
+ - **WebAuthn / Passkey Security**: Cryptographic challenge generation and Relying Party ID origin validation.
51
+ - **Realtime WebSocket Guards**: Enforced protocol allowlist (`ws://`, `wss://`), frame size limit enforcement, and safe handling of malformed frames.
52
+
53
+ #### Changed
54
+ - Wrapped all framework stylesheets (`elan.css`, `elan-native.css`, `elan-polish.css`) inside `@layer elan` for clean consumer override specificity.
55
+ - Enforced strict monorepo encapsulation with `"private": true` across all 22 workspace sub-packages.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Gaurang Agarwal (GaurangBuilds)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,237 @@
1
- # Temporary Holding Version
1
+ <p align="center">
2
+ <img src="site/assets/elan-wordmark.svg" alt="Elan UI" width="380" />
3
+ </p>
2
4
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
5
+ <p align="center"><strong>The Complete Website UI/UX, Motion Engine &amp; Reactive Component Library</strong></p>
6
+
7
+ <p align="center">
8
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT" /></a>
9
+ <img src="https://img.shields.io/badge/version-0.1.0-informational.svg" alt="Version 0.1.0" />
10
+ <img src="https://img.shields.io/badge/dependencies-0-success.svg" alt="Zero Runtime Dependencies" />
11
+ <img src="https://img.shields.io/badge/typescript-zero--any-success.svg" alt="Zero Any Types" />
12
+ <img src="https://img.shields.io/badge/tree--shaking-verified-brightgreen.svg" alt="Tree-Shaking Verified" />
13
+ <img src="https://img.shields.io/badge/a11y-tested--automated--%26--manual-success.svg" alt="Accessibility Tested" />
14
+ </p>
15
+
16
+ <p align="center">
17
+ <a href="REVIEW.md"><strong>10-Minute Reviewer Tour</strong></a> โ€ข
18
+ <a href="CLAIMS.md"><strong>Verified Claims</strong></a> โ€ข
19
+ <a href="SCORECARD.md"><strong>Architectural Scorecard</strong></a> โ€ข
20
+ <a href="THREAT_MODEL.md"><strong>Threat Model</strong></a> โ€ข
21
+ <a href="docs/a11y/conformance.md"><strong>Accessibility Conformance</strong></a>
22
+ </p>
23
+
24
+ ---
25
+
26
+ ## โšก The Master One-Command Verification
27
+
28
+ To clone and independently verify every quantitative, architectural, security, accessibility, and packaging claim in a single command:
29
+
30
+ ```bash
31
+ git clone https://github.com/GaurangBuilds/elan.git
32
+ cd elan
33
+ npm install
34
+ npm run verify
35
+ ```
36
+
37
+ ---
38
+
39
+ ## ๐ŸŒŸ The Vision & Architecture
40
+
41
+ Elan is a unified, production-ready website engine that brings together the best of modern web interactionโ€”scroll storytelling, physics-based motion, accessible interactive UI components, standards-based Autonomous Custom Elements, and progressive reactivityโ€”into a clean, zero-dependency architecture.
42
+
43
+ - **ZERO RUNTIME DEPENDENCIES**: 0 external npm dependencies in `src/`. Clean security profile, zero supply-chain risk.
44
+ - **STRICT TYPE SAFETY**: Written in 100% strict TypeScript with **0 errors and zero `any` types**.
45
+ - **ATTRIBUTE-FIRST**: Author cinematic scroll reveals, timelines, accordions, carousels, and dialogs in plain HTML with declarative `data-*` attributesโ€”zero JavaScript required for basic use.
46
+ - **AUTONOMOUS CUSTOM ELEMENTS**: W3C standards-based Web Components (`<elan-rating>`, `<elan-marquee>`, `<elan-spotlight>`, `<elan-video-player>`, `<elan-a11y-toolbar>`) usable in plain HTML or any framework.
47
+ - **ACCESSIBLE BY DESIGN**: Built for keyboard and screen-reader accessibility; tested with automated checks (`axe-core`) plus a documented manual testing plan. Known gaps and considerations are documented transparently in [docs/a11y/conformance.md](docs/a11y/conformance.md).
48
+ - **NATIVE & FAST**: Uses native CSS Scroll-Driven Animations (`animation-timeline`) and the View Transitions API when supported, falling back smoothly to performant JavaScript observers.
49
+ - **AI-READY**: Ships with a Model Context Protocol (MCP) server (`ElanMcpServer`), structured `llms.txt`, and `AGENTS.md` for AI pair-programming assistants.
50
+
51
+ ---
52
+
53
+ ## ๐Ÿ“Š Verified Real-World Measurements
54
+
55
+ > [!IMPORTANT]
56
+ > **The #1 Rule: Build Everything Real.**
57
+ > Every number in the tables below was measured by bundling real production consumer apps using `esbuild` with minification and tree-shaking enabled (`es2022`).
58
+ > **Exact Reproduction Command**: `node scripts/measure.mjs`
59
+
60
+ ### 1. Full Module Import Graphs (Complete Subsystems)
61
+
62
+ When an author imports an entire subsystem, here are the real, measured bundle sizes including all internal dependencies:
63
+
64
+ | Module / Subsystem | Raw Size | Gzip Size | Brotli Size | Scope & Capabilities |
65
+ |---|---|---|---|---|
66
+ | **Full Library (All Modules)** | 605.36 KB | **159.41 KB** | 127.38 KB | Complete umbrella import with all components, motion, forms & runtime |
67
+ | **Core Engine** | 13.78 KB | **5.46 KB** | 4.89 KB | Spring physics, easings, ticker scheduler, theme manager, plugins |
68
+ | **Scroll Module** | 48.15 KB | **12.47 KB** | 11.09 KB | Smooth scroll, reveals, parallax, pinning, scrubbers, sticky story |
69
+ | **Motion Module** | 107.92 KB | **25.58 KB** | 22.19 KB | Chained timeline engine, FLIP layout animations, draggable, magnetic, gestures |
70
+ | **Components (UI)** | 56.86 KB | **13.67 KB** | 11.74 KB | Accessible modals, carousel, tabs, accordions, tooltips, toasts |
71
+ | **Navigation Module** | 19.10 KB | **5.77 KB** | 5.10 KB | Mobile drawer, mega menu, breadcrumbs, sticky subnav, scroll restoration |
72
+ | **Conversion Module** | 23.08 KB | **6.70 KB** | 5.92 KB | Pricing table, FAQ accordion with schema, testimonials slider, exit-intent |
73
+ | **Forms Module** | 38.12 KB | **10.65 KB** | 9.48 KB | Validation engine, honeypot spam trap, submission timing, multi-step wizard |
74
+ | **Data Module** | 29.03 KB | **8.60 KB** | 7.67 KB | Sortable/filterable data table, fuzzy search, skeletons, notification center |
75
+ | **Commerce Module** | 28.34 KB | **7.81 KB** | 6.89 KB | Product gallery with zoom, cart drawer, variant & size selector, wishlist |
76
+ | **Media Module** | 34.87 KB | **10.52 KB** | 9.40 KB | Lightbox, privacy video facade, charts suite, audio mini-player |
77
+ | **Compliance Module** | 17.53 KB | **5.68 KB** | 4.72 KB | Granular cookie consent manager, WebAuthn / Passkeys, a11y toolbar |
78
+ | **i18n Module** | 4.01 KB | **1.47 KB** | 1.29 KB | RTL support, locale-aware date/number helpers, text attribute swapper |
79
+ | **Performance Module** | 5.62 KB | **1.92 KB** | 1.68 KB | Low-power / slow-network detection, Core Web Vitals & LoAF monitor |
80
+ | **Theming Module** | 33.45 KB | **10.87 KB** | 9.37 KB | 10 preset themes, i18n localization engine (10 languages + RTL auto-dir) |
81
+ | **Devtools Module** | 27.04 KB | **8.92 KB** | 7.74 KB | Visual scroll marker overlay, trigger inspector, MCP server for AI |
82
+ | **Runtime (VDOM + Signals)** | 49.08 KB | **15.66 KB** | 14.03 KB | Signals, computed, effects, JSX VDOM diffing, hooks, suspense, hydration |
83
+ | **React Compat Layer** | 21.76 KB | **7.40 KB** | 6.66 KB | Component adapter compatibility layer (`createRoot`, `useSyncExternalStore`) |
84
+ | **Stylesheet (`elan.css`)** | 100.33 KB | **18.84 KB** | 15.69 KB | Complete framework styling, themes, animations, utilities |
85
+
86
+ ---
87
+
88
+ ### 2. Individual Feature Imports (Tree-Shaking Proof)
89
+
90
+ When you import only a single specific feature for a landing page or widget, unused modules are stripped. You only pay for what you actually use:
91
+
92
+ | Isolated Feature Import | Raw Size | Gzip Size | Brotli Size | Capabilities & Feature Set |
93
+ |---|---|---|---|---|
94
+ | `Only Spring Physics` | 1.21 KB | **0.49 KB** | 0.46 KB | Damped harmonic oscillator physics with mass, stiffness, damping |
95
+ | `Only Accordion` | 2.78 KB | **0.97 KB** | 0.83 KB | Accessible keyboard disclosure with ARIA controls |
96
+ | `Only Signals (Reactivity)` | 2.14 KB | **1.09 KB** | 0.95 KB | Fine-grained reactive state container with atomic subscriptions |
97
+ | `Only Reveal` | 3.39 KB | **1.24 KB** | 1.11 KB | IntersectionObserver-driven viewport entry triggers |
98
+ | `Only Smooth Scroll` | 4.03 KB | **1.42 KB** | 1.26 KB | Inertial momentum scroll with pointer normalization |
99
+ | `Only Magnetic Effect` | 5.21 KB | **1.74 KB** | 1.56 KB | Cursor magnetic snap and spring return |
100
+ | `Only Lightbox` | 5.35 KB | **1.80 KB** | 1.53 KB | Accessible modal media viewer with gestures |
101
+ | `Only Form Validator` | 5.23 KB | **1.81 KB** | 1.55 KB | Async & sync schema validation engine |
102
+ | `Only Tooltip` | 5.63 KB | **2.05 KB** | 1.76 KB | Floating positioning with arrow alignment |
103
+ | `Only Tilt Effect` | 5.92 KB | **2.06 KB** | 1.85 KB | 3D perspective card rotation on pointer move |
104
+ | `Only FLIP Layout Transitions`| 5.03 KB | **2.10 KB** | 1.91 KB | Automatic layout reordering with bounding rect inversion |
105
+ | `Only Draggable Gestures` | 7.53 KB | **2.27 KB** | 2.03 KB | Pointer drag with inertia and boundary clamping |
106
+ | `Only Toast Notifications` | 6.38 KB | **2.29 KB** | 1.96 KB | Animated dismissible notifications with live region |
107
+ | `Only Cookie Consent` | 7.74 KB | **2.37 KB** | 1.92 KB | Granular consent manager with category controls |
108
+ | `Only Modal Dialog` | 6.99 KB | **2.40 KB** | 2.07 KB | Focus-trapped accessible dialog with backdrop |
109
+ | `Only Theme Switcher` | 7.61 KB | **2.82 KB** | 2.41 KB | Design-token CSS custom property theme manager |
110
+ | `Only Carousel Pro` | 10.15 KB | **3.08 KB** | 2.69 KB | Touch-friendly slide track with pagination and autoplay |
111
+ | `Only Data Table` | 10.08 KB | **3.35 KB** | 2.95 KB | Sortable, filterable table with accessible headers |
112
+ | `Only Timeline Animator` | 11.74 KB | **4.04 KB** | 3.67 KB | Chained multi-track keyframe sequencer |
113
+ | `Only JSX/VDOM Render` | 12.86 KB | **4.75 KB** | 4.28 KB | Virtual DOM createElement and double-ended diffing |
114
+
115
+ ---
116
+
117
+ ## ๐Ÿ› ๏ธ The Feature Suites
118
+
119
+ ### 1. Unified Elan CLI (`elan`)
120
+ A unified command-line tool for scaffolding, auditing, and adding components:
121
+ ```bash
122
+ # Scaffold a new site from templates
123
+ npx elan create my-site --template saas
124
+
125
+ # Audit a site for accessibility, performance, and security
126
+ npx elan audit ./dist
127
+
128
+ # Add a block or layout
129
+ npx elan add pricing-table
130
+ ```
131
+
132
+ ### 2. Accessible SVG Charts Suite
133
+ Lightweight, zero-dependency data visualizations with screen-reader data table fallbacks:
134
+ ```ts
135
+ import { Charts } from 'elan-ui';
136
+
137
+ const svg = Charts.renderLineChart({
138
+ data: [{ label: 'Q1', value: 120 }, { label: 'Q2', value: 240 }],
139
+ title: 'Revenue Growth',
140
+ curved: true
141
+ });
142
+ ```
143
+
144
+ ### 3. In-Memory Fuzzy Search Indexer
145
+ Typo-tolerant, fast search with multi-field weighted scoring:
146
+ ```ts
147
+ import { createFuzzySearch } from 'elan-ui';
148
+
149
+ const searcher = createFuzzySearch(products, { keys: ['title', 'category'] });
150
+ const results = searcher.search('crosel'); // Matches "Carousel"
151
+ ```
152
+
153
+ ### 4. Real-Time WebSocket Client
154
+ Resilient WebSocket connections with exponential backoff and offline queue:
155
+ ```ts
156
+ import { createRealtimeClient } from 'elan-ui';
157
+
158
+ const client = createRealtimeClient({ url: 'wss://api.example.com/live' });
159
+ client.on('metric', (data) => console.log(data));
160
+ client.connect();
161
+ ```
162
+
163
+ ### 5. WebAuthn & Passkey Authentication
164
+ Passwordless biometric authentication with binary-safe Base64URL helpers:
165
+ ```ts
166
+ import { PasskeyHelper } from 'elan-ui';
167
+
168
+ if (await PasskeyHelper.isSupported()) {
169
+ const credential = await PasskeyHelper.authenticate({ challenge: serverChallenge });
170
+ }
171
+ ```
172
+
173
+ ### 6. Mobile Touch & Gesture Kit
174
+ Multi-directional swipe recognition, pull-to-refresh, and bottom sheets:
175
+ ```ts
176
+ import { SwipeRecognizer, BottomSheet } from 'elan-ui';
177
+
178
+ new SwipeRecognizer(myCard, {
179
+ onSwipeLeft: () => console.log('Dismissed'),
180
+ onSwipeRight: () => console.log('Saved')
181
+ });
182
+ ```
183
+
184
+ ### 7. End-User Accessibility Toolbar
185
+ Interactive floating widget allowing users to toggle high contrast, dyslexia fonts, and text scaling:
186
+ ```ts
187
+ import { initA11yToolbar } from 'elan-ui';
188
+
189
+ initA11yToolbar();
190
+ ```
191
+
192
+ ---
193
+
194
+ ## ๐Ÿงช Verification Standard
195
+
196
+ ```bash
197
+ # Run the master verification suite (all 11 gates)
198
+ npm run verify
199
+
200
+ # Individual checks:
201
+ npm run typecheck # tsc --noEmit
202
+ npm run test:unit # Vitest unit test suite (36 suites, 374 tests)
203
+ npm run check:old-name # Zero former brand references
204
+ npm run check:denylist # Zero competitor references
205
+ npm run measure # Real production bundle sizes
206
+ ```
207
+
208
+ ---
209
+
210
+ ## ๐Ÿ“„ License & Legal Notice
211
+
212
+ This project is licensed under the terms of the standard **MIT License**.
213
+ See the full text in the [LICENSE](LICENSE) file.
214
+
215
+ ```text
216
+ MIT License
217
+
218
+ Copyright (c) 2026 Gaurang Agarwal (GaurangBuilds)
219
+
220
+ Permission is hereby granted, free of charge, to any person obtaining a copy
221
+ of this software and associated documentation files (the "Software"), to deal
222
+ in the Software without restriction, including without limitation the rights
223
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
224
+ copies of the Software, and to permit persons to whom the Software is
225
+ furnished to do so, subject to the following conditions:
226
+
227
+ The above copyright notice and this permission notice shall be included in all
228
+ copies or substantial portions of the Software.
229
+
230
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
231
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
232
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
233
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
234
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
235
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
236
+ SOFTWARE.
237
+ ```