@mappoh/nova 0.3.0 → 0.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 (252) hide show
  1. package/README.md +180 -30
  2. package/dist/alert/alert.d.ts +32 -0
  3. package/dist/alert/alert.d.ts.map +1 -0
  4. package/dist/alert/alert.js +307 -0
  5. package/dist/alert/alert.js.map +1 -0
  6. package/dist/alert/index.d.ts +3 -0
  7. package/dist/alert/index.d.ts.map +1 -0
  8. package/dist/alert/index.js +2 -0
  9. package/dist/alert/index.js.map +1 -0
  10. package/dist/animation/flip.d.ts.map +1 -1
  11. package/dist/animation/flip.js +19 -12
  12. package/dist/animation/flip.js.map +1 -1
  13. package/dist/animation/stagger.d.ts +43 -0
  14. package/dist/animation/stagger.d.ts.map +1 -0
  15. package/dist/animation/stagger.js +150 -0
  16. package/dist/animation/stagger.js.map +1 -0
  17. package/dist/avatar/avatar.d.ts +27 -0
  18. package/dist/avatar/avatar.d.ts.map +1 -0
  19. package/dist/avatar/avatar.js +132 -0
  20. package/dist/avatar/avatar.js.map +1 -0
  21. package/dist/avatar/index.d.ts +3 -0
  22. package/dist/avatar/index.d.ts.map +1 -0
  23. package/dist/avatar/index.js +2 -0
  24. package/dist/avatar/index.js.map +1 -0
  25. package/dist/badge/badge.d.ts +27 -0
  26. package/dist/badge/badge.d.ts.map +1 -0
  27. package/dist/badge/badge.js +118 -0
  28. package/dist/badge/badge.js.map +1 -0
  29. package/dist/badge/index.d.ts +3 -0
  30. package/dist/badge/index.d.ts.map +1 -0
  31. package/dist/badge/index.js +2 -0
  32. package/dist/badge/index.js.map +1 -0
  33. package/dist/cache/cache.d.ts +28 -0
  34. package/dist/cache/cache.d.ts.map +1 -0
  35. package/dist/cache/cache.js +67 -0
  36. package/dist/cache/cache.js.map +1 -0
  37. package/dist/cache/index.d.ts +3 -0
  38. package/dist/cache/index.d.ts.map +1 -0
  39. package/dist/cache/index.js +2 -0
  40. package/dist/cache/index.js.map +1 -0
  41. package/dist/chart/chart.d.ts +4 -0
  42. package/dist/chart/chart.d.ts.map +1 -1
  43. package/dist/chart/chart.js +89 -6
  44. package/dist/chart/chart.js.map +1 -1
  45. package/dist/command-palette/command-palette.d.ts +31 -0
  46. package/dist/command-palette/command-palette.d.ts.map +1 -0
  47. package/dist/command-palette/command-palette.js +590 -0
  48. package/dist/command-palette/command-palette.js.map +1 -0
  49. package/dist/command-palette/index.d.ts +3 -0
  50. package/dist/command-palette/index.d.ts.map +1 -0
  51. package/dist/command-palette/index.js +2 -0
  52. package/dist/command-palette/index.js.map +1 -0
  53. package/dist/component/component.d.ts +20 -2
  54. package/dist/component/component.d.ts.map +1 -1
  55. package/dist/component/component.js +115 -5
  56. package/dist/component/component.js.map +1 -1
  57. package/dist/component/connect.d.ts +50 -0
  58. package/dist/component/connect.d.ts.map +1 -1
  59. package/dist/component/connect.js +135 -0
  60. package/dist/component/connect.js.map +1 -1
  61. package/dist/component/directives.d.ts +20 -0
  62. package/dist/component/directives.d.ts.map +1 -0
  63. package/dist/component/directives.js +42 -0
  64. package/dist/component/directives.js.map +1 -0
  65. package/dist/component/html.d.ts +8 -0
  66. package/dist/component/html.d.ts.map +1 -1
  67. package/dist/component/html.js +11 -0
  68. package/dist/component/html.js.map +1 -1
  69. package/dist/component/index.d.ts +9 -3
  70. package/dist/component/index.d.ts.map +1 -1
  71. package/dist/component/index.js +6 -2
  72. package/dist/component/index.js.map +1 -1
  73. package/dist/component/portal.d.ts +32 -0
  74. package/dist/component/portal.d.ts.map +1 -0
  75. package/dist/component/portal.js +59 -0
  76. package/dist/component/portal.js.map +1 -0
  77. package/dist/component/ref.d.ts +18 -0
  78. package/dist/component/ref.d.ts.map +1 -0
  79. package/dist/component/ref.js +17 -0
  80. package/dist/component/ref.js.map +1 -0
  81. package/dist/component/slot-styles.d.ts +18 -0
  82. package/dist/component/slot-styles.d.ts.map +1 -0
  83. package/dist/component/slot-styles.js +47 -0
  84. package/dist/component/slot-styles.js.map +1 -0
  85. package/dist/component/template.d.ts +2 -0
  86. package/dist/component/template.d.ts.map +1 -1
  87. package/dist/component/template.js +122 -4
  88. package/dist/component/template.js.map +1 -1
  89. package/dist/context/context.d.ts +39 -0
  90. package/dist/context/context.d.ts.map +1 -0
  91. package/dist/context/context.js +111 -0
  92. package/dist/context/context.js.map +1 -0
  93. package/dist/context/index.d.ts +3 -0
  94. package/dist/context/index.d.ts.map +1 -0
  95. package/dist/context/index.js +2 -0
  96. package/dist/context/index.js.map +1 -0
  97. package/dist/devtools/devtools.d.ts +54 -0
  98. package/dist/devtools/devtools.d.ts.map +1 -1
  99. package/dist/devtools/devtools.js +86 -0
  100. package/dist/devtools/devtools.js.map +1 -1
  101. package/dist/devtools/index.d.ts +2 -2
  102. package/dist/devtools/index.d.ts.map +1 -1
  103. package/dist/devtools/index.js +1 -1
  104. package/dist/devtools/index.js.map +1 -1
  105. package/dist/editor/editor.d.ts +40 -0
  106. package/dist/editor/editor.d.ts.map +1 -0
  107. package/dist/editor/editor.js +955 -0
  108. package/dist/editor/editor.js.map +1 -0
  109. package/dist/editor/index.d.ts +3 -0
  110. package/dist/editor/index.d.ts.map +1 -0
  111. package/dist/editor/index.js +2 -0
  112. package/dist/editor/index.js.map +1 -0
  113. package/dist/event-bus/event-bus.d.ts +20 -0
  114. package/dist/event-bus/event-bus.d.ts.map +1 -0
  115. package/dist/event-bus/event-bus.js +55 -0
  116. package/dist/event-bus/event-bus.js.map +1 -0
  117. package/dist/event-bus/index.d.ts +3 -0
  118. package/dist/event-bus/index.d.ts.map +1 -0
  119. package/dist/event-bus/index.js +2 -0
  120. package/dist/event-bus/index.js.map +1 -0
  121. package/dist/forms/form-engine.d.ts +1 -1
  122. package/dist/forms/form-engine.d.ts.map +1 -1
  123. package/dist/forms/wasm-validators.d.ts +19 -11
  124. package/dist/forms/wasm-validators.d.ts.map +1 -1
  125. package/dist/forms/wasm-validators.js +191 -31
  126. package/dist/forms/wasm-validators.js.map +1 -1
  127. package/dist/gesture/gesture.d.ts +2 -0
  128. package/dist/gesture/gesture.d.ts.map +1 -1
  129. package/dist/gesture/gesture.js +81 -0
  130. package/dist/gesture/gesture.js.map +1 -1
  131. package/dist/http/http.d.ts +8 -0
  132. package/dist/http/http.d.ts.map +1 -1
  133. package/dist/http/http.js +18 -4
  134. package/dist/http/http.js.map +1 -1
  135. package/dist/i18n/i18n.d.ts +6 -0
  136. package/dist/i18n/i18n.d.ts.map +1 -1
  137. package/dist/i18n/i18n.js +71 -9
  138. package/dist/i18n/i18n.js.map +1 -1
  139. package/dist/machine/index.d.ts +3 -0
  140. package/dist/machine/index.d.ts.map +1 -0
  141. package/dist/machine/index.js +2 -0
  142. package/dist/machine/index.js.map +1 -0
  143. package/dist/machine/machine.d.ts +26 -0
  144. package/dist/machine/machine.d.ts.map +1 -0
  145. package/dist/machine/machine.js +79 -0
  146. package/dist/machine/machine.js.map +1 -0
  147. package/dist/modal/modal.d.ts.map +1 -1
  148. package/dist/modal/modal.js +13 -29
  149. package/dist/modal/modal.js.map +1 -1
  150. package/dist/notification-center/index.d.ts +3 -0
  151. package/dist/notification-center/index.d.ts.map +1 -0
  152. package/dist/notification-center/index.js +2 -0
  153. package/dist/notification-center/index.js.map +1 -0
  154. package/dist/notification-center/notification-center.d.ts +55 -0
  155. package/dist/notification-center/notification-center.d.ts.map +1 -0
  156. package/dist/notification-center/notification-center.js +941 -0
  157. package/dist/notification-center/notification-center.js.map +1 -0
  158. package/dist/pagination/index.d.ts +3 -0
  159. package/dist/pagination/index.d.ts.map +1 -0
  160. package/dist/pagination/index.js +2 -0
  161. package/dist/pagination/index.js.map +1 -0
  162. package/dist/pagination/pagination.d.ts +31 -0
  163. package/dist/pagination/pagination.d.ts.map +1 -0
  164. package/dist/pagination/pagination.js +213 -0
  165. package/dist/pagination/pagination.js.map +1 -0
  166. package/dist/progress/progress.d.ts.map +1 -1
  167. package/dist/progress/progress.js +5 -7
  168. package/dist/progress/progress.js.map +1 -1
  169. package/dist/query/index.d.ts +3 -0
  170. package/dist/query/index.d.ts.map +1 -0
  171. package/dist/query/index.js +2 -0
  172. package/dist/query/index.js.map +1 -0
  173. package/dist/query/query.d.ts +31 -0
  174. package/dist/query/query.d.ts.map +1 -0
  175. package/dist/query/query.js +150 -0
  176. package/dist/query/query.js.map +1 -0
  177. package/dist/radio-group/index.d.ts +3 -0
  178. package/dist/radio-group/index.d.ts.map +1 -0
  179. package/dist/radio-group/index.js +2 -0
  180. package/dist/radio-group/index.js.map +1 -0
  181. package/dist/radio-group/radio-group.d.ts +37 -0
  182. package/dist/radio-group/radio-group.d.ts.map +1 -0
  183. package/dist/radio-group/radio-group.js +251 -0
  184. package/dist/radio-group/radio-group.js.map +1 -0
  185. package/dist/rating/index.d.ts +3 -0
  186. package/dist/rating/index.d.ts.map +1 -0
  187. package/dist/rating/index.js +2 -0
  188. package/dist/rating/index.js.map +1 -0
  189. package/dist/rating/rating.d.ts +31 -0
  190. package/dist/rating/rating.d.ts.map +1 -0
  191. package/dist/rating/rating.js +187 -0
  192. package/dist/rating/rating.js.map +1 -0
  193. package/dist/router/router.d.ts +16 -1
  194. package/dist/router/router.d.ts.map +1 -1
  195. package/dist/router/router.js +88 -11
  196. package/dist/router/router.js.map +1 -1
  197. package/dist/skeleton/index.d.ts +3 -0
  198. package/dist/skeleton/index.d.ts.map +1 -0
  199. package/dist/skeleton/index.js +2 -0
  200. package/dist/skeleton/index.js.map +1 -0
  201. package/dist/skeleton/skeleton.d.ts +24 -0
  202. package/dist/skeleton/skeleton.d.ts.map +1 -0
  203. package/dist/skeleton/skeleton.js +91 -0
  204. package/dist/skeleton/skeleton.js.map +1 -0
  205. package/dist/slider/index.d.ts +3 -0
  206. package/dist/slider/index.d.ts.map +1 -0
  207. package/dist/slider/index.js +2 -0
  208. package/dist/slider/index.js.map +1 -0
  209. package/dist/slider/slider.d.ts +33 -0
  210. package/dist/slider/slider.d.ts.map +1 -0
  211. package/dist/slider/slider.js +248 -0
  212. package/dist/slider/slider.js.map +1 -0
  213. package/dist/spinner/index.d.ts +3 -0
  214. package/dist/spinner/index.d.ts.map +1 -0
  215. package/dist/spinner/index.js +2 -0
  216. package/dist/spinner/index.js.map +1 -0
  217. package/dist/spinner/spinner.d.ts +23 -0
  218. package/dist/spinner/spinner.d.ts.map +1 -0
  219. package/dist/spinner/spinner.js +82 -0
  220. package/dist/spinner/spinner.js.map +1 -0
  221. package/dist/sw/sw.d.ts.map +1 -1
  222. package/dist/sw/sw.js +39 -7
  223. package/dist/sw/sw.js.map +1 -1
  224. package/dist/switch/index.d.ts +3 -0
  225. package/dist/switch/index.d.ts.map +1 -0
  226. package/dist/switch/index.js +2 -0
  227. package/dist/switch/index.js.map +1 -0
  228. package/dist/switch/switch.d.ts +27 -0
  229. package/dist/switch/switch.d.ts.map +1 -0
  230. package/dist/switch/switch.js +163 -0
  231. package/dist/switch/switch.js.map +1 -0
  232. package/dist/theme/index.d.ts +2 -0
  233. package/dist/theme/index.d.ts.map +1 -1
  234. package/dist/theme/index.js +1 -0
  235. package/dist/theme/index.js.map +1 -1
  236. package/dist/theme/scale.d.ts +40 -0
  237. package/dist/theme/scale.d.ts.map +1 -0
  238. package/dist/theme/scale.js +62 -0
  239. package/dist/theme/scale.js.map +1 -0
  240. package/dist/utils/index.d.ts +29 -0
  241. package/dist/utils/index.d.ts.map +1 -0
  242. package/dist/utils/index.js +114 -0
  243. package/dist/utils/index.js.map +1 -0
  244. package/dist/websocket/index.d.ts +3 -0
  245. package/dist/websocket/index.d.ts.map +1 -0
  246. package/dist/websocket/index.js +2 -0
  247. package/dist/websocket/index.js.map +1 -0
  248. package/dist/websocket/websocket.d.ts +31 -0
  249. package/dist/websocket/websocket.d.ts.map +1 -0
  250. package/dist/websocket/websocket.js +164 -0
  251. package/dist/websocket/websocket.js.map +1 -0
  252. package/package.json +85 -1
package/README.md CHANGED
@@ -1,46 +1,196 @@
1
- # Nova v0.2.0
1
+ # Nova
2
2
 
3
- ## What's New
3
+ A lightweight web engine built on Web Components. Zero dependencies.
4
4
 
5
- ### 9 TypeScript Modules
5
+ ```
6
+ npm install @mappoh/nova
7
+ ```
8
+
9
+ ## Modules
10
+
11
+ ### Core
6
12
 
7
13
  | Module | Import | Description |
8
14
  |--------|--------|-------------|
9
- | Clipboard | `@mappoh/nova/clipboard` | Copy/read text and HTML via Clipboard API with `execCommand` fallback |
10
- | Accordion | `@mappoh/nova/accordion` | Collapsible panels with ARIA, keyboard nav, single/multiple mode |
11
- | Breadcrumb | `@mappoh/nova/breadcrumb` | Navigation breadcrumbs with JSON-LD structured data |
12
- | Progress | `@mappoh/nova/progress` | Linear and circular (SVG) progress bars, determinate/indeterminate |
13
- | Infinite Scroll | `@mappoh/nova/infinite-scroll` | IntersectionObserver-based loading with idle/loading/done states |
14
- | Popover | `@mappoh/nova/popover` | Positioned popovers with flip/shift, click/hover/focus triggers |
15
- | Stepper | `@mappoh/nova/stepper` | Multi-step wizard with async validation, horizontal/vertical layout |
16
- | Carousel | `@mappoh/nova/carousel` | CSS scroll-snap carousel with pointer drag, auto-play, dots, arrows |
17
- | Virtual List | `@mappoh/nova/virtual-list` | DOM-recycling virtual scroller with fixed or variable row heights |
15
+ | Component | `@mappoh/nova/component` | Web Components base class with reactive state, props, lifecycle hooks, and template engine |
16
+ | Router | `@mappoh/nova/router` | SPA router with path params, guards, layouts, loaders, and view transitions |
17
+ | Store | `@mappoh/nova/store` | Reactive signals, computed values, effects, and batched updates |
18
+ | Theme | `@mappoh/nova/theme` | CSS custom property management with dark/light mode switching |
19
+
20
+ ### Component Utilities
21
+
22
+ All utilities auto-cleanup when the component disconnects.
23
+
24
+ ```ts
25
+ import {
26
+ classMap, styleMap, // template helpers
27
+ createRef, // DOM refs
28
+ useComputed, // memoization
29
+ useInterval, // non-pausing interval
30
+ useScroll, // Shadow DOM scroll fix
31
+ afterRender, // post-paint callback
32
+ createPortal, usePortal,// render outside shadow root
33
+ slotStyles, // deep slot styling
34
+ } from '@mappoh/nova/component';
35
+ ```
36
+
37
+ | Utility | Description |
38
+ |---------|-------------|
39
+ | `classMap({ active: true })` | Build class strings from boolean maps |
40
+ | `styleMap({ fontSize: 16 })` | Build style strings with auto `px` and kebab-case |
41
+ | `createRef()` | DOM element ref that survives re-renders |
42
+ | `useComputed(this, fn, deps)` | Memoize expensive render calculations |
43
+ | `useInterval(this, fn, ms)` | Interval that keeps running when tab is hidden |
44
+ | `useScroll(this, selector)` | Fix wheel events for Shadow DOM scroll containers |
45
+ | `afterRender(this, fn)` | Callback after browser paint (via rAF) |
46
+ | `this.on(event, selector, handler)` | Declarative event delegation with auto-cleanup |
47
+ | `createPortal(content)` | Render outside shadow root (tooltips, dropdowns) |
48
+ | `slotStyles(this, css)` | Deep slot styling beyond `::slotted()` |
49
+
50
+ ### Component Static Flags
51
+
52
+ ```ts
53
+ class MyComponent extends Component {
54
+ static tag = 'my-component';
55
+ static scrollFix = true; // auto-fix wheel events in Shadow DOM
56
+ static debugRender = true; // log render triggers to console
57
+ }
58
+ ```
59
+
60
+ ### Data & State
18
61
 
19
- ### 7 WASM Accelerators
62
+ | Module | Import | Description |
63
+ |--------|--------|-------------|
64
+ | Query | `@mappoh/nova/query` | SWR-style data fetching with stale-while-revalidate |
65
+ | State Machine | `@mappoh/nova/machine` | Finite state machine with enter/exit actions |
66
+ | WebSocket | `@mappoh/nova/websocket` | Reconnecting WebSocket with heartbeat and backoff |
67
+ | Event Bus | `@mappoh/nova/event-bus` | Typed publish/subscribe |
68
+ | Cache | `@mappoh/nova/cache` | LRU cache with optional TTL |
69
+ | Context | `@mappoh/nova/context` | Dependency injection via DOM events |
70
+ | HTTP | `@mappoh/nova/http` | Fetch wrapper with interceptors, retries, timeout |
71
+ | Persistent State | `@mappoh/nova/persistent-state` | IndexedDB-backed persistent store |
72
+
73
+ ### UI Components
74
+
75
+ | Component | Import | Description |
76
+ |-----------|--------|-------------|
77
+ | Modal | `@mappoh/nova/modal` | Accessible dialog with focus trap and scroll lock |
78
+ | Toast | `@mappoh/nova/toast` | Notification toasts with auto-dismiss |
79
+ | Tooltip | `@mappoh/nova/tooltip` | Positioned tooltips with flip/shift |
80
+ | Popover | `@mappoh/nova/popover` | Positioned popovers with click/hover/focus triggers |
81
+ | Dropdown | `@mappoh/nova/dropdown` | Accessible dropdown menu |
82
+ | Accordion | `@mappoh/nova/accordion` | Collapsible panels with ARIA |
83
+ | Tabs | `@mappoh/nova/tabs` | Tab panel switcher with keyboard nav |
84
+ | Stepper | `@mappoh/nova/stepper` | Multi-step wizard with validation |
85
+ | Carousel | `@mappoh/nova/carousel` | CSS scroll-snap carousel with drag |
86
+ | Pagination | `@mappoh/nova/pagination` | Page navigation with ellipsis |
87
+ | Switch | `@mappoh/nova/switch` | Toggle switch |
88
+ | Radio Group | `@mappoh/nova/radio-group` | Radio group with roving tabindex |
89
+ | Slider | `@mappoh/nova/slider` | Custom slider with pointer drag |
90
+ | Rating | `@mappoh/nova/rating` | Star rating |
91
+ | Alert | `@mappoh/nova/alert` | Alert/banner with variants |
92
+ | Badge | `@mappoh/nova/badge` | Inline badge |
93
+ | Avatar | `@mappoh/nova/avatar` | Image with initials fallback |
94
+ | Progress | `@mappoh/nova/progress` | Linear and circular progress bars |
95
+ | Skeleton | `@mappoh/nova/skeleton` | Shimmer loading placeholder |
96
+ | Spinner | `@mappoh/nova/spinner` | Loading spinner |
97
+ | Breadcrumb | `@mappoh/nova/breadcrumb` | Navigation breadcrumbs |
98
+ | Command Palette | `@mappoh/nova/command-palette` | Cmd+K searchable command overlay |
99
+ | Editor | `@mappoh/nova/editor` | Markdown editor with split/write/preview modes |
100
+ | Notification Center | `@mappoh/nova/notification-center` | Notification drawer with badge count |
101
+
102
+ ### Forms
103
+
104
+ | Module | Import | Description |
105
+ |--------|--------|-------------|
106
+ | Form Engine | `@mappoh/nova/forms` | Schema-driven forms with validation and touched/dirty tracking |
107
+ | WASM Validators | `@mappoh/nova/forms/wasm-validators` | Email, URL, credit card, IBAN validation (WASM + TS fallback) |
20
108
 
21
- Optional Rust-compiled modules for performance-critical paths. Each has a pure TypeScript fallback.
109
+ ### Animation & Canvas
110
+
111
+ | Module | Import | Description |
112
+ |--------|--------|-------------|
113
+ | Spring | `@mappoh/nova/animation/spring` | Physics-based spring animation |
114
+ | Stagger | `@mappoh/nova/animation/stagger` | Staggered animations across element arrays |
115
+ | FLIP | `@mappoh/nova/animation/flip` | First-Last-Invert-Play layout transitions |
116
+ | Scroll Animate | `@mappoh/nova/animation/scroll-animate` | CSS `animation-timeline` with fallback |
117
+ | Parallax | `@mappoh/nova/animation/parallax` | Scroll-driven parallax layers |
118
+ | Text Reveal | `@mappoh/nova/text-reveal` | Staggered word/line entrance |
119
+ | Particles | `@mappoh/nova/canvas/particles` | 2D particle system |
120
+ | Dot Grid | `@mappoh/nova/canvas/dot-grid` | Interactive dot grid |
121
+ | Noise | `@mappoh/nova/canvas/noise` | Simplex/Perlin noise rendering |
122
+ | Virtual List | `@mappoh/nova/virtual-list` | DOM-recycling virtual scroller |
123
+
124
+ ### i18n
125
+
126
+ | Module | Import | Description |
127
+ |--------|--------|-------------|
128
+ | i18n | `@mappoh/nova/i18n` | Reactive i18n with ICU pluralization, `formatNumber`, `formatDate`, `formatRelative` |
129
+
130
+ ### Utilities
131
+
132
+ | Module | Import | Description |
133
+ |--------|--------|-------------|
134
+ | Utils | `@mappoh/nova/utils` | `debounce`, `throttle`, `deepEqual`, `clamp`, `lerp`, `remap`, `uniqueId` |
135
+ | A11y | `@mappoh/nova/a11y` | `trapFocus`, `rovingTabIndex`, `announce`, `skipLink` |
136
+ | Clipboard | `@mappoh/nova/clipboard` | Copy/read text and HTML |
137
+ | Search | `@mappoh/nova/search` | Full-text search with WASM fuzzy matching |
138
+ | Gesture | `@mappoh/nova/gesture` | Swipe, pinch, pan, long-press, tap with Pointer Events |
139
+ | Drag | `@mappoh/nova/drag` | Sortable lists with keyboard support |
140
+ | Shortcuts | `@mappoh/nova/shortcuts` | Keyboard shortcut registry |
141
+ | Lazy Load | `@mappoh/nova/lazy` | IntersectionObserver lazy loading |
142
+ | Infinite Scroll | `@mappoh/nova/infinite-scroll` | Infinite scroll loading |
143
+ | Scale | `@mappoh/nova/theme` | Mathematical type scale via CSS custom properties |
144
+ | Service Worker | `@mappoh/nova/sw` | SW generation with caching strategies |
145
+ | Devtools | `@mappoh/nova/devtools` | Component inspector and render debugging |
146
+
147
+ ### WASM Accelerators
148
+
149
+ Optional Rust-compiled modules. Each has a pure TypeScript fallback.
22
150
 
23
151
  | Module | Import | Description |
24
152
  |--------|--------|-------------|
25
153
  | Markdown | `@mappoh/nova/markdown/wasm` | CommonMark + GFM parser |
26
- | Noise | `@mappoh/nova/canvas/noise-wasm` | Batch simplex/Perlin/Worley noise with FBM buffer fill |
27
- | Validation | `@mappoh/nova/forms/wasm-validators` | RFC 5322 email, Luhn credit card, IBAN, password strength |
28
- | Image | `@mappoh/nova/image/wasm` | Pixel-level grayscale, sepia, blur, sharpen, crop, rotate, resize |
29
- | Physics | `@mappoh/nova/canvas/physics-wasm` | 2D particle dynamics with Verlet integration and spatial hashing |
30
- | Crypto | `@mappoh/nova/security/wasm-crypto` | Argon2id, bcrypt, PBKDF2-SHA256 password hashing |
31
- | Diff | `@mappoh/nova/component/diff-wasm` | LIS-based keyed list reconciliation for minimal DOM ops |
154
+ | Noise | `@mappoh/nova/canvas/noise-wasm` | Batch noise with FBM |
155
+ | Validation | `@mappoh/nova/forms/wasm-validators` | Email, credit card, IBAN, password strength |
156
+ | Image | `@mappoh/nova/image/wasm` | Grayscale, blur, sharpen, crop, rotate, resize |
157
+ | Physics | `@mappoh/nova/canvas/physics-wasm` | 2D particle dynamics |
158
+ | Crypto | `@mappoh/nova/security/wasm-crypto` | Argon2id, bcrypt, PBKDF2-SHA256 |
159
+ | Diff | `@mappoh/nova/component/diff-wasm` | LIS-based keyed list reconciliation |
160
+
161
+ ## Quick Start
162
+
163
+ ```ts
164
+ import { Component, html, classMap, createRef } from '@mappoh/nova/component';
165
+ import { createNovaStore } from '@mappoh/nova/store';
166
+
167
+ const { signal } = createNovaStore();
168
+ const count = signal(0);
32
169
 
33
- ### Infrastructure
170
+ class Counter extends Component {
171
+ static tag = 'my-counter';
172
+ static styles = `
173
+ button { padding: 8px 16px; border-radius: 6px; background: #333; color: #fff; }
174
+ .active { background: #0066ff; }
175
+ `;
34
176
 
35
- - **Cargo workspace** — `wasm/` is now a workspace with 8 crates sharing deps and release profile
36
- - **Build scripts** — `npm run build:all` compiles WASM + TypeScript in one step
37
- - **17 new package exports** — every module has a dedicated entry point
177
+ private ref = createRef<HTMLButtonElement>();
38
178
 
39
- ## Security Hardening
179
+ render() {
180
+ const value = count();
181
+ return html`
182
+ <button
183
+ ref=${this.ref}
184
+ class=${classMap({ active: value > 0 })}
185
+ @click=${() => count.update(n => n + 1)}
186
+ >
187
+ Count: ${value}
188
+ </button>
189
+ `;
190
+ }
191
+ }
40
192
 
41
- - **Modal** — HTML string content is sanitized (scripts and `on*` handlers stripped)
42
- - **Markdown** — URL attributes are escaped; `javascript:`/`vbscript:` URIs blocked
43
- - **Breadcrumb** — `href` sanitized against dangerous URIs; `icon` renders as text
44
- - **Crypto WASM** — CSPRNG for salt generation; minimum parameter bounds on verify; defaults raised to OWASP recommendations
193
+ Counter.define();
194
+ ```
45
195
 
46
- See [CHANGELOG.md](./CHANGELOG.md) for the full release notes and breaking changes.
196
+ See [CHANGELOG.md](./CHANGELOG.md) for release notes.
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Nova Engine — Alert / Banner
3
+ *
4
+ * Accessible notification banners with type-based colour coding,
5
+ * inline SVG icons, optional auto-dismiss, and slide-in animation.
6
+ */
7
+ export type AlertType = 'info' | 'success' | 'warning' | 'error';
8
+ export interface AlertOptions {
9
+ /** Alert variant. Default: 'info' */
10
+ type?: AlertType;
11
+ /** Main message text */
12
+ message: string;
13
+ /** Optional title / heading */
14
+ title?: string;
15
+ /** Show a dismiss button. Default: true */
16
+ dismissible?: boolean;
17
+ /** Callback when dismissed */
18
+ onDismiss?: () => void;
19
+ /** Show a type icon. Default: true */
20
+ icon?: boolean;
21
+ /** Auto-dismiss duration in ms. 0 = manual only. Default: 0 */
22
+ duration?: number;
23
+ }
24
+ export interface AlertInstance {
25
+ /** Dismiss the alert (with exit animation) */
26
+ dismiss(): void;
27
+ /** Remove from DOM and clean up immediately */
28
+ destroy(): void;
29
+ }
30
+ /** Create an accessible alert banner. */
31
+ export declare function createAlert(container: string | HTMLElement, options: AlertOptions): AlertInstance;
32
+ //# sourceMappingURL=alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../src/alert/alert.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,sCAAsC;IACtC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,OAAO,IAAI,IAAI,CAAC;IAChB,+CAA+C;IAC/C,OAAO,IAAI,IAAI,CAAC;CACjB;AA4MD,yCAAyC;AACzC,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,OAAO,EAAE,YAAY,GACpB,aAAa,CAoHf"}
@@ -0,0 +1,307 @@
1
+ /**
2
+ * Nova Engine — Alert / Banner
3
+ *
4
+ * Accessible notification banners with type-based colour coding,
5
+ * inline SVG icons, optional auto-dismiss, and slide-in animation.
6
+ */
7
+ /* ---- Type colours ---- */
8
+ const COLORS = {
9
+ info: 'var(--color-alert-info, #3b82f6)',
10
+ success: 'var(--color-alert-success, #22c55e)',
11
+ warning: 'var(--color-alert-warning, #f59e0b)',
12
+ error: 'var(--color-alert-error, #ef4444)',
13
+ };
14
+ const BG_COLORS = {
15
+ info: 'var(--color-alert-info-bg, rgba(59, 130, 246, 0.08))',
16
+ success: 'var(--color-alert-success-bg, rgba(34, 197, 94, 0.08))',
17
+ warning: 'var(--color-alert-warning-bg, rgba(245, 158, 11, 0.08))',
18
+ error: 'var(--color-alert-error-bg, rgba(239, 68, 68, 0.08))',
19
+ };
20
+ /* ---- SVG icons (inline, no external deps) ---- */
21
+ function createIcon(type) {
22
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
23
+ svg.setAttribute('width', '20');
24
+ svg.setAttribute('height', '20');
25
+ svg.setAttribute('viewBox', '0 0 24 24');
26
+ svg.setAttribute('fill', 'none');
27
+ svg.setAttribute('stroke', 'currentColor');
28
+ svg.setAttribute('stroke-width', '2');
29
+ svg.setAttribute('stroke-linecap', 'round');
30
+ svg.setAttribute('stroke-linejoin', 'round');
31
+ svg.setAttribute('aria-hidden', 'true');
32
+ if (type === 'info') {
33
+ // Circle with i
34
+ const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
35
+ circle.setAttribute('cx', '12');
36
+ circle.setAttribute('cy', '12');
37
+ circle.setAttribute('r', '10');
38
+ svg.appendChild(circle);
39
+ const line1 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
40
+ line1.setAttribute('x1', '12');
41
+ line1.setAttribute('y1', '16');
42
+ line1.setAttribute('x2', '12');
43
+ line1.setAttribute('y2', '12');
44
+ svg.appendChild(line1);
45
+ const line2 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
46
+ line2.setAttribute('x1', '12');
47
+ line2.setAttribute('y1', '8');
48
+ line2.setAttribute('x2', '12.01');
49
+ line2.setAttribute('y2', '8');
50
+ svg.appendChild(line2);
51
+ }
52
+ else if (type === 'success') {
53
+ // Checkmark in circle
54
+ const path1 = document.createElementNS('http://www.w3.org/2000/svg', 'path');
55
+ path1.setAttribute('d', 'M22 11.08V12a10 10 0 1 1-5.93-9.14');
56
+ svg.appendChild(path1);
57
+ const polyline = document.createElementNS('http://www.w3.org/2000/svg', 'polyline');
58
+ polyline.setAttribute('points', '22 4 12 14.01 9 11.01');
59
+ svg.appendChild(polyline);
60
+ }
61
+ else if (type === 'warning') {
62
+ // Triangle with exclamation
63
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
64
+ path.setAttribute('d', 'M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z');
65
+ svg.appendChild(path);
66
+ const line1 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
67
+ line1.setAttribute('x1', '12');
68
+ line1.setAttribute('y1', '9');
69
+ line1.setAttribute('x2', '12');
70
+ line1.setAttribute('y2', '13');
71
+ svg.appendChild(line1);
72
+ const line2 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
73
+ line2.setAttribute('x1', '12');
74
+ line2.setAttribute('y1', '17');
75
+ line2.setAttribute('x2', '12.01');
76
+ line2.setAttribute('y2', '17');
77
+ svg.appendChild(line2);
78
+ }
79
+ else {
80
+ // X in circle (error)
81
+ const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
82
+ circle.setAttribute('cx', '12');
83
+ circle.setAttribute('cy', '12');
84
+ circle.setAttribute('r', '10');
85
+ svg.appendChild(circle);
86
+ const line1 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
87
+ line1.setAttribute('x1', '15');
88
+ line1.setAttribute('y1', '9');
89
+ line1.setAttribute('x2', '9');
90
+ line1.setAttribute('y2', '15');
91
+ svg.appendChild(line1);
92
+ const line2 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
93
+ line2.setAttribute('x1', '9');
94
+ line2.setAttribute('y1', '9');
95
+ line2.setAttribute('x2', '15');
96
+ line2.setAttribute('y2', '15');
97
+ svg.appendChild(line2);
98
+ }
99
+ return svg;
100
+ }
101
+ /* ---- Dismiss X icon ---- */
102
+ function createCloseIcon() {
103
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
104
+ svg.setAttribute('width', '16');
105
+ svg.setAttribute('height', '16');
106
+ svg.setAttribute('viewBox', '0 0 24 24');
107
+ svg.setAttribute('fill', 'none');
108
+ svg.setAttribute('stroke', 'currentColor');
109
+ svg.setAttribute('stroke-width', '2');
110
+ svg.setAttribute('stroke-linecap', 'round');
111
+ svg.setAttribute('stroke-linejoin', 'round');
112
+ svg.setAttribute('aria-hidden', 'true');
113
+ const line1 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
114
+ line1.setAttribute('x1', '18');
115
+ line1.setAttribute('y1', '6');
116
+ line1.setAttribute('x2', '6');
117
+ line1.setAttribute('y2', '18');
118
+ svg.appendChild(line1);
119
+ const line2 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
120
+ line2.setAttribute('x1', '6');
121
+ line2.setAttribute('y1', '6');
122
+ line2.setAttribute('x2', '18');
123
+ line2.setAttribute('y2', '18');
124
+ svg.appendChild(line2);
125
+ return svg;
126
+ }
127
+ /* ---- Injected styles ---- */
128
+ const STYLE_ID = 'nova-alert-styles';
129
+ function injectStyles() {
130
+ if (document.getElementById(STYLE_ID))
131
+ return;
132
+ const s = document.createElement('style');
133
+ s.id = STYLE_ID;
134
+ s.textContent = `
135
+ .nova-alert {
136
+ display: flex;
137
+ align-items: flex-start;
138
+ gap: 12px;
139
+ padding: 12px 16px;
140
+ border-radius: 8px;
141
+ border: 1px solid var(--color-border, rgba(255, 255, 255, 0.08));
142
+ font: 14px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
143
+ color: var(--color-text-primary, #e5e5e5);
144
+ position: relative;
145
+ overflow: hidden;
146
+ transform: translateY(-8px);
147
+ opacity: 0;
148
+ transition: transform 0.25s ease-out, opacity 0.25s ease-out;
149
+ }
150
+ .nova-alert--visible {
151
+ transform: translateY(0);
152
+ opacity: 1;
153
+ }
154
+ .nova-alert--exiting {
155
+ transform: translateY(-8px);
156
+ opacity: 0;
157
+ transition: transform 0.2s ease-in, opacity 0.2s ease-in;
158
+ }
159
+ .nova-alert__icon {
160
+ flex-shrink: 0;
161
+ margin-top: 1px;
162
+ }
163
+ .nova-alert__body {
164
+ flex: 1;
165
+ min-width: 0;
166
+ }
167
+ .nova-alert__title {
168
+ font-weight: 600;
169
+ margin-bottom: 2px;
170
+ }
171
+ .nova-alert__message {
172
+ color: var(--color-text-secondary, rgba(255, 255, 255, 0.7));
173
+ }
174
+ .nova-alert__close {
175
+ flex-shrink: 0;
176
+ background: none;
177
+ border: none;
178
+ cursor: pointer;
179
+ padding: 2px;
180
+ border-radius: 4px;
181
+ color: var(--color-text-secondary, rgba(255, 255, 255, 0.4));
182
+ transition: color 0.15s ease, background 0.15s ease;
183
+ display: inline-flex;
184
+ align-items: center;
185
+ justify-content: center;
186
+ }
187
+ .nova-alert__close:hover {
188
+ color: var(--color-text-primary, #e5e5e5);
189
+ background: rgba(255, 255, 255, 0.06);
190
+ }
191
+ .nova-alert__close:focus-visible {
192
+ outline: 2px solid var(--color-accent, #a78bfa);
193
+ outline-offset: 1px;
194
+ }
195
+ @media (prefers-reduced-motion: reduce) {
196
+ .nova-alert,
197
+ .nova-alert--exiting { transition: none; }
198
+ }`;
199
+ document.head.appendChild(s);
200
+ }
201
+ /* ---- Resolve container ---- */
202
+ function resolveContainer(container) {
203
+ if (typeof container === 'string') {
204
+ const el = document.querySelector(container);
205
+ if (!el)
206
+ throw new Error(`[Nova Alert] Container not found: ${container}`);
207
+ return el;
208
+ }
209
+ return container;
210
+ }
211
+ /* ---- Factory ---- */
212
+ /** Create an accessible alert banner. */
213
+ export function createAlert(container, options) {
214
+ const { type = 'info', message, title, dismissible = true, onDismiss, icon: showIcon = true, duration = 0, } = options;
215
+ const root = resolveContainer(container);
216
+ let destroyed = false;
217
+ let dismissTimer;
218
+ injectStyles();
219
+ // --- DOM construction ---
220
+ const el = document.createElement('div');
221
+ el.className = 'nova-alert';
222
+ el.style.background = BG_COLORS[type];
223
+ el.style.borderLeftWidth = '3px';
224
+ el.style.borderLeftColor = COLORS[type];
225
+ // Use role="alert" for urgent types (error/warning), role="status" for info/success
226
+ if (type === 'error' || type === 'warning') {
227
+ el.setAttribute('role', 'alert');
228
+ }
229
+ else {
230
+ el.setAttribute('role', 'status');
231
+ }
232
+ // Icon
233
+ if (showIcon) {
234
+ const iconWrapper = document.createElement('div');
235
+ iconWrapper.className = 'nova-alert__icon';
236
+ iconWrapper.style.color = COLORS[type];
237
+ iconWrapper.appendChild(createIcon(type));
238
+ el.appendChild(iconWrapper);
239
+ }
240
+ // Body (title + message)
241
+ const body = document.createElement('div');
242
+ body.className = 'nova-alert__body';
243
+ if (title) {
244
+ const titleEl = document.createElement('div');
245
+ titleEl.className = 'nova-alert__title';
246
+ titleEl.textContent = title;
247
+ body.appendChild(titleEl);
248
+ }
249
+ const messageEl = document.createElement('div');
250
+ messageEl.className = 'nova-alert__message';
251
+ messageEl.textContent = message;
252
+ body.appendChild(messageEl);
253
+ el.appendChild(body);
254
+ // Close button
255
+ if (dismissible) {
256
+ const closeBtn = document.createElement('button');
257
+ closeBtn.className = 'nova-alert__close';
258
+ closeBtn.setAttribute('aria-label', 'Dismiss');
259
+ closeBtn.setAttribute('type', 'button');
260
+ closeBtn.appendChild(createCloseIcon());
261
+ closeBtn.addEventListener('click', () => dismiss());
262
+ el.appendChild(closeBtn);
263
+ }
264
+ root.appendChild(el);
265
+ // Slide-in animation
266
+ requestAnimationFrame(() => {
267
+ el.classList.add('nova-alert--visible');
268
+ });
269
+ // Auto-dismiss
270
+ if (duration > 0) {
271
+ dismissTimer = setTimeout(() => dismiss(), duration);
272
+ }
273
+ // --- Dismiss logic ---
274
+ function dismiss() {
275
+ if (destroyed)
276
+ return;
277
+ if (dismissTimer)
278
+ clearTimeout(dismissTimer);
279
+ el.classList.remove('nova-alert--visible');
280
+ el.classList.add('nova-alert--exiting');
281
+ const remove = () => {
282
+ if (!destroyed) {
283
+ destroyed = true;
284
+ el.remove();
285
+ }
286
+ };
287
+ el.addEventListener('transitionend', remove, { once: true });
288
+ // Fallback in case transitionend doesn't fire
289
+ setTimeout(remove, 300);
290
+ onDismiss?.();
291
+ }
292
+ // --- Instance ---
293
+ return {
294
+ dismiss() {
295
+ dismiss();
296
+ },
297
+ destroy() {
298
+ if (destroyed)
299
+ return;
300
+ destroyed = true;
301
+ if (dismissTimer)
302
+ clearTimeout(dismissTimer);
303
+ el.remove();
304
+ },
305
+ };
306
+ }
307
+ //# sourceMappingURL=alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { createAlert } from './alert';
2
+ export type { AlertType, AlertOptions, AlertInstance } from './alert';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createAlert } from './alert';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"flip.d.ts","sourceRoot":"","sources":["../../src/animation/flip.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;;GAOG;AACH,wBAAsB,IAAI,CACxB,QAAQ,EAAE,WAAW,GAAG,WAAW,EAAE,EACrC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACpC,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,WAAW,EACtB,OAAO,GAAE,WAAgB,GACxB,MAAM,IAAI,CA8DZ"}
1
+ {"version":3,"file":"flip.d.ts","sourceRoot":"","sources":["../../src/animation/flip.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;;GAOG;AACH,wBAAsB,IAAI,CACxB,QAAQ,EAAE,WAAW,GAAG,WAAW,EAAE,EACrC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACpC,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,WAAW,EACtB,OAAO,GAAE,WAAgB,GACxB,MAAM,IAAI,CAsEZ"}