@mappoh/nova 0.2.3 → 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.
- package/README.md +180 -30
- package/dist/a11y/index.d.ts +40 -0
- package/dist/a11y/index.d.ts.map +1 -0
- package/dist/a11y/index.js +162 -0
- package/dist/a11y/index.js.map +1 -0
- package/dist/alert/alert.d.ts +32 -0
- package/dist/alert/alert.d.ts.map +1 -0
- package/dist/alert/alert.js +307 -0
- package/dist/alert/alert.js.map +1 -0
- package/dist/alert/index.d.ts +3 -0
- package/dist/alert/index.d.ts.map +1 -0
- package/dist/alert/index.js +2 -0
- package/dist/alert/index.js.map +1 -0
- package/dist/animation/flip.d.ts +28 -0
- package/dist/animation/flip.d.ts.map +1 -0
- package/dist/animation/flip.js +113 -0
- package/dist/animation/flip.js.map +1 -0
- package/dist/animation/spring.d.ts +34 -0
- package/dist/animation/spring.d.ts.map +1 -0
- package/dist/animation/spring.js +86 -0
- package/dist/animation/spring.js.map +1 -0
- package/dist/animation/stagger.d.ts +43 -0
- package/dist/animation/stagger.d.ts.map +1 -0
- package/dist/animation/stagger.js +150 -0
- package/dist/animation/stagger.js.map +1 -0
- package/dist/avatar/avatar.d.ts +27 -0
- package/dist/avatar/avatar.d.ts.map +1 -0
- package/dist/avatar/avatar.js +132 -0
- package/dist/avatar/avatar.js.map +1 -0
- package/dist/avatar/index.d.ts +3 -0
- package/dist/avatar/index.d.ts.map +1 -0
- package/dist/avatar/index.js +2 -0
- package/dist/avatar/index.js.map +1 -0
- package/dist/badge/badge.d.ts +27 -0
- package/dist/badge/badge.d.ts.map +1 -0
- package/dist/badge/badge.js +118 -0
- package/dist/badge/badge.js.map +1 -0
- package/dist/badge/index.d.ts +3 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/badge/index.js +2 -0
- package/dist/badge/index.js.map +1 -0
- package/dist/cache/cache.d.ts +28 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +67 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/index.d.ts +3 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +2 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/chart/chart.d.ts +31 -0
- package/dist/chart/chart.d.ts.map +1 -0
- package/dist/chart/chart.js +372 -0
- package/dist/chart/chart.js.map +1 -0
- package/dist/chart/index.d.ts +3 -0
- package/dist/chart/index.d.ts.map +1 -0
- package/dist/chart/index.js +2 -0
- package/dist/chart/index.js.map +1 -0
- package/dist/color-picker/color-picker.d.ts +18 -0
- package/dist/color-picker/color-picker.d.ts.map +1 -0
- package/dist/color-picker/color-picker.js +243 -0
- package/dist/color-picker/color-picker.js.map +1 -0
- package/dist/color-picker/index.d.ts +3 -0
- package/dist/color-picker/index.d.ts.map +1 -0
- package/dist/color-picker/index.js +2 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/combobox/combobox.d.ts +26 -0
- package/dist/combobox/combobox.d.ts.map +1 -0
- package/dist/combobox/combobox.js +262 -0
- package/dist/combobox/combobox.js.map +1 -0
- package/dist/combobox/index.d.ts +3 -0
- package/dist/combobox/index.d.ts.map +1 -0
- package/dist/combobox/index.js +2 -0
- package/dist/combobox/index.js.map +1 -0
- package/dist/command-palette/command-palette.d.ts +31 -0
- package/dist/command-palette/command-palette.d.ts.map +1 -0
- package/dist/command-palette/command-palette.js +590 -0
- package/dist/command-palette/command-palette.js.map +1 -0
- package/dist/command-palette/index.d.ts +3 -0
- package/dist/command-palette/index.d.ts.map +1 -0
- package/dist/command-palette/index.js +2 -0
- package/dist/command-palette/index.js.map +1 -0
- package/dist/component/component.d.ts +20 -2
- package/dist/component/component.d.ts.map +1 -1
- package/dist/component/component.js +115 -5
- package/dist/component/component.js.map +1 -1
- package/dist/component/connect.d.ts +50 -0
- package/dist/component/connect.d.ts.map +1 -1
- package/dist/component/connect.js +135 -0
- package/dist/component/connect.js.map +1 -1
- package/dist/component/directives.d.ts +20 -0
- package/dist/component/directives.d.ts.map +1 -0
- package/dist/component/directives.js +42 -0
- package/dist/component/directives.js.map +1 -0
- package/dist/component/html.d.ts +8 -0
- package/dist/component/html.d.ts.map +1 -1
- package/dist/component/html.js +11 -0
- package/dist/component/html.js.map +1 -1
- package/dist/component/index.d.ts +9 -3
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/index.js +6 -2
- package/dist/component/index.js.map +1 -1
- package/dist/component/portal.d.ts +32 -0
- package/dist/component/portal.d.ts.map +1 -0
- package/dist/component/portal.js +59 -0
- package/dist/component/portal.js.map +1 -0
- package/dist/component/ref.d.ts +18 -0
- package/dist/component/ref.d.ts.map +1 -0
- package/dist/component/ref.js +17 -0
- package/dist/component/ref.js.map +1 -0
- package/dist/component/slot-styles.d.ts +18 -0
- package/dist/component/slot-styles.d.ts.map +1 -0
- package/dist/component/slot-styles.js +47 -0
- package/dist/component/slot-styles.js.map +1 -0
- package/dist/component/template.d.ts +2 -0
- package/dist/component/template.d.ts.map +1 -1
- package/dist/component/template.js +122 -4
- package/dist/component/template.js.map +1 -1
- package/dist/context/context.d.ts +39 -0
- package/dist/context/context.d.ts.map +1 -0
- package/dist/context/context.js +111 -0
- package/dist/context/context.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/data-table/data-table.d.ts +34 -0
- package/dist/data-table/data-table.d.ts.map +1 -0
- package/dist/data-table/data-table.js +256 -0
- package/dist/data-table/data-table.js.map +1 -0
- package/dist/data-table/index.d.ts +3 -0
- package/dist/data-table/index.d.ts.map +1 -0
- package/dist/data-table/index.js +2 -0
- package/dist/data-table/index.js.map +1 -0
- package/dist/date-picker/date-picker.d.ts +22 -0
- package/dist/date-picker/date-picker.d.ts.map +1 -0
- package/dist/date-picker/date-picker.js +282 -0
- package/dist/date-picker/date-picker.js.map +1 -0
- package/dist/date-picker/index.d.ts +3 -0
- package/dist/date-picker/index.d.ts.map +1 -0
- package/dist/date-picker/index.js +2 -0
- package/dist/date-picker/index.js.map +1 -0
- package/dist/devtools/devtools.d.ts +54 -0
- package/dist/devtools/devtools.d.ts.map +1 -1
- package/dist/devtools/devtools.js +86 -0
- package/dist/devtools/devtools.js.map +1 -1
- package/dist/devtools/index.d.ts +2 -2
- package/dist/devtools/index.d.ts.map +1 -1
- package/dist/devtools/index.js +1 -1
- package/dist/devtools/index.js.map +1 -1
- package/dist/editor/editor.d.ts +40 -0
- package/dist/editor/editor.d.ts.map +1 -0
- package/dist/editor/editor.js +955 -0
- package/dist/editor/editor.js.map +1 -0
- package/dist/editor/index.d.ts +3 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +2 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/event-bus/event-bus.d.ts +20 -0
- package/dist/event-bus/event-bus.d.ts.map +1 -0
- package/dist/event-bus/event-bus.js +55 -0
- package/dist/event-bus/event-bus.js.map +1 -0
- package/dist/event-bus/index.d.ts +3 -0
- package/dist/event-bus/index.d.ts.map +1 -0
- package/dist/event-bus/index.js +2 -0
- package/dist/event-bus/index.js.map +1 -0
- package/dist/file-upload/file-upload.d.ts +24 -0
- package/dist/file-upload/file-upload.d.ts.map +1 -0
- package/dist/file-upload/file-upload.js +177 -0
- package/dist/file-upload/file-upload.js.map +1 -0
- package/dist/file-upload/index.d.ts +3 -0
- package/dist/file-upload/index.d.ts.map +1 -0
- package/dist/file-upload/index.js +2 -0
- package/dist/file-upload/index.js.map +1 -0
- package/dist/forms/form-engine.d.ts +19 -6
- package/dist/forms/form-engine.d.ts.map +1 -1
- package/dist/forms/form-engine.js +97 -11
- package/dist/forms/form-engine.js.map +1 -1
- package/dist/forms/validators.d.ts +4 -0
- package/dist/forms/validators.d.ts.map +1 -1
- package/dist/forms/validators.js +6 -0
- package/dist/forms/validators.js.map +1 -1
- package/dist/forms/wasm-validators.d.ts +19 -11
- package/dist/forms/wasm-validators.d.ts.map +1 -1
- package/dist/forms/wasm-validators.js +191 -31
- package/dist/forms/wasm-validators.js.map +1 -1
- package/dist/gesture/gesture.d.ts +2 -0
- package/dist/gesture/gesture.d.ts.map +1 -1
- package/dist/gesture/gesture.js +81 -0
- package/dist/gesture/gesture.js.map +1 -1
- package/dist/http/http.d.ts +8 -0
- package/dist/http/http.d.ts.map +1 -1
- package/dist/http/http.js +18 -4
- package/dist/http/http.js.map +1 -1
- package/dist/i18n/i18n.d.ts +6 -0
- package/dist/i18n/i18n.d.ts.map +1 -1
- package/dist/i18n/i18n.js +71 -9
- package/dist/i18n/i18n.js.map +1 -1
- package/dist/machine/index.d.ts +3 -0
- package/dist/machine/index.d.ts.map +1 -0
- package/dist/machine/index.js +2 -0
- package/dist/machine/index.js.map +1 -0
- package/dist/machine/machine.d.ts +26 -0
- package/dist/machine/machine.d.ts.map +1 -0
- package/dist/machine/machine.js +79 -0
- package/dist/machine/machine.js.map +1 -0
- package/dist/modal/modal.d.ts.map +1 -1
- package/dist/modal/modal.js +13 -29
- package/dist/modal/modal.js.map +1 -1
- package/dist/notification-center/index.d.ts +3 -0
- package/dist/notification-center/index.d.ts.map +1 -0
- package/dist/notification-center/index.js +2 -0
- package/dist/notification-center/index.js.map +1 -0
- package/dist/notification-center/notification-center.d.ts +55 -0
- package/dist/notification-center/notification-center.d.ts.map +1 -0
- package/dist/notification-center/notification-center.js +941 -0
- package/dist/notification-center/notification-center.js.map +1 -0
- package/dist/pagination/index.d.ts +3 -0
- package/dist/pagination/index.d.ts.map +1 -0
- package/dist/pagination/index.js +2 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/pagination/pagination.d.ts +31 -0
- package/dist/pagination/pagination.d.ts.map +1 -0
- package/dist/pagination/pagination.js +213 -0
- package/dist/pagination/pagination.js.map +1 -0
- package/dist/progress/progress.d.ts.map +1 -1
- package/dist/progress/progress.js +5 -7
- package/dist/progress/progress.js.map +1 -1
- package/dist/query/index.d.ts +3 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +2 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/query.d.ts +31 -0
- package/dist/query/query.d.ts.map +1 -0
- package/dist/query/query.js +150 -0
- package/dist/query/query.js.map +1 -0
- package/dist/radio-group/index.d.ts +3 -0
- package/dist/radio-group/index.d.ts.map +1 -0
- package/dist/radio-group/index.js +2 -0
- package/dist/radio-group/index.js.map +1 -0
- package/dist/radio-group/radio-group.d.ts +37 -0
- package/dist/radio-group/radio-group.d.ts.map +1 -0
- package/dist/radio-group/radio-group.js +251 -0
- package/dist/radio-group/radio-group.js.map +1 -0
- package/dist/rating/index.d.ts +3 -0
- package/dist/rating/index.d.ts.map +1 -0
- package/dist/rating/index.js +2 -0
- package/dist/rating/index.js.map +1 -0
- package/dist/rating/rating.d.ts +31 -0
- package/dist/rating/rating.d.ts.map +1 -0
- package/dist/rating/rating.js +187 -0
- package/dist/rating/rating.js.map +1 -0
- package/dist/router/index.d.ts +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/router.d.ts +30 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +131 -16
- package/dist/router/router.js.map +1 -1
- package/dist/skeleton/index.d.ts +3 -0
- package/dist/skeleton/index.d.ts.map +1 -0
- package/dist/skeleton/index.js +2 -0
- package/dist/skeleton/index.js.map +1 -0
- package/dist/skeleton/skeleton.d.ts +24 -0
- package/dist/skeleton/skeleton.d.ts.map +1 -0
- package/dist/skeleton/skeleton.js +91 -0
- package/dist/skeleton/skeleton.js.map +1 -0
- package/dist/slider/index.d.ts +3 -0
- package/dist/slider/index.d.ts.map +1 -0
- package/dist/slider/index.js +2 -0
- package/dist/slider/index.js.map +1 -0
- package/dist/slider/slider.d.ts +33 -0
- package/dist/slider/slider.d.ts.map +1 -0
- package/dist/slider/slider.js +248 -0
- package/dist/slider/slider.js.map +1 -0
- package/dist/spinner/index.d.ts +3 -0
- package/dist/spinner/index.d.ts.map +1 -0
- package/dist/spinner/index.js +2 -0
- package/dist/spinner/index.js.map +1 -0
- package/dist/spinner/spinner.d.ts +23 -0
- package/dist/spinner/spinner.d.ts.map +1 -0
- package/dist/spinner/spinner.js +82 -0
- package/dist/spinner/spinner.js.map +1 -0
- package/dist/state/store.d.ts +4 -0
- package/dist/state/store.d.ts.map +1 -1
- package/dist/state/store.js +27 -7
- package/dist/state/store.js.map +1 -1
- package/dist/sw/sw.d.ts.map +1 -1
- package/dist/sw/sw.js +39 -7
- package/dist/sw/sw.js.map +1 -1
- package/dist/switch/index.d.ts +3 -0
- package/dist/switch/index.d.ts.map +1 -0
- package/dist/switch/index.js +2 -0
- package/dist/switch/index.js.map +1 -0
- package/dist/switch/switch.d.ts +27 -0
- package/dist/switch/switch.d.ts.map +1 -0
- package/dist/switch/switch.js +163 -0
- package/dist/switch/switch.js.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -0
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/scale.d.ts +40 -0
- package/dist/theme/scale.d.ts.map +1 -0
- package/dist/theme/scale.js +62 -0
- package/dist/theme/scale.js.map +1 -0
- package/dist/tree-view/index.d.ts +3 -0
- package/dist/tree-view/index.d.ts.map +1 -0
- package/dist/tree-view/index.js +2 -0
- package/dist/tree-view/index.js.map +1 -0
- package/dist/tree-view/tree-view.d.ts +29 -0
- package/dist/tree-view/tree-view.d.ts.map +1 -0
- package/dist/tree-view/tree-view.js +273 -0
- package/dist/tree-view/tree-view.js.map +1 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +114 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/websocket/index.d.ts +3 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +2 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/websocket.d.ts +31 -0
- package/dist/websocket/websocket.d.ts.map +1 -0
- package/dist/websocket/websocket.js +164 -0
- package/dist/websocket/websocket.js.map +1 -0
- package/package.json +135 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nova Engine — Stagger Animations
|
|
3
|
+
*
|
|
4
|
+
* Apply animations to a list of elements with incremental delays.
|
|
5
|
+
*/
|
|
6
|
+
import type { SpringOptions } from './spring';
|
|
7
|
+
export interface StaggerOptions {
|
|
8
|
+
/** Delay in ms between each element. Default: 50 */
|
|
9
|
+
delay?: number;
|
|
10
|
+
/** Which element starts first. Default: 'start' */
|
|
11
|
+
from?: 'start' | 'center' | 'end';
|
|
12
|
+
/** Total duration per element in ms. Default: 300 */
|
|
13
|
+
duration?: number;
|
|
14
|
+
/** CSS easing. Default: 'ease-out' */
|
|
15
|
+
easing?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Animate a list of elements with staggered delays using the Web Animations API.
|
|
19
|
+
*
|
|
20
|
+
* Each element plays the same keyframes but starts after an incremental delay
|
|
21
|
+
* determined by the `from` option.
|
|
22
|
+
*
|
|
23
|
+
* Respects `prefers-reduced-motion` — when reduced, all elements are animated
|
|
24
|
+
* instantly (duration: 0, delay: 0).
|
|
25
|
+
*/
|
|
26
|
+
export declare function stagger(elements: HTMLElement[], keyframes: Keyframe[], options?: StaggerOptions): {
|
|
27
|
+
cancel: () => void;
|
|
28
|
+
finished: Promise<void>;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Animate a list of elements with staggered spring physics.
|
|
32
|
+
*
|
|
33
|
+
* Each element's CSS property is animated toward `to` using a spring
|
|
34
|
+
* simulation, with an incremental start delay based on the `from` option.
|
|
35
|
+
*
|
|
36
|
+
* Respects `prefers-reduced-motion` — when reduced, all elements jump
|
|
37
|
+
* to the target value instantly.
|
|
38
|
+
*/
|
|
39
|
+
export declare function staggerSpring(elements: HTMLElement[], property: string, to: number, options?: StaggerOptions & SpringOptions): {
|
|
40
|
+
cancel: () => void;
|
|
41
|
+
finished: Promise<void>;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=stagger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stagger.d.ts","sourceRoot":"","sources":["../../src/animation/stagger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB;IAAE,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA0CjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EAAE,EACvB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,GACvC;IAAE,MAAM,EAAE,MAAM,IAAI,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAmEjD"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nova Engine — Stagger Animations
|
|
3
|
+
*
|
|
4
|
+
* Apply animations to a list of elements with incremental delays.
|
|
5
|
+
*/
|
|
6
|
+
import { spring } from './spring';
|
|
7
|
+
const prefersReduced = () => typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
8
|
+
/**
|
|
9
|
+
* Calculate the delay offset for each element index based on the `from` option.
|
|
10
|
+
*
|
|
11
|
+
* - 'start': element 0 has 0 delay, last element has max delay.
|
|
12
|
+
* - 'end': last element has 0 delay, first element has max delay.
|
|
13
|
+
* - 'center': middle element has 0 delay, edges have max delay.
|
|
14
|
+
*/
|
|
15
|
+
function computeDelays(count, delay, from) {
|
|
16
|
+
if (count === 0)
|
|
17
|
+
return [];
|
|
18
|
+
const delays = new Array(count);
|
|
19
|
+
if (from === 'end') {
|
|
20
|
+
for (let i = 0; i < count; i++) {
|
|
21
|
+
delays[i] = (count - 1 - i) * delay;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else if (from === 'center') {
|
|
25
|
+
const center = (count - 1) / 2;
|
|
26
|
+
for (let i = 0; i < count; i++) {
|
|
27
|
+
delays[i] = Math.abs(i - center) * delay;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// 'start' (default)
|
|
32
|
+
for (let i = 0; i < count; i++) {
|
|
33
|
+
delays[i] = i * delay;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return delays;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Animate a list of elements with staggered delays using the Web Animations API.
|
|
40
|
+
*
|
|
41
|
+
* Each element plays the same keyframes but starts after an incremental delay
|
|
42
|
+
* determined by the `from` option.
|
|
43
|
+
*
|
|
44
|
+
* Respects `prefers-reduced-motion` — when reduced, all elements are animated
|
|
45
|
+
* instantly (duration: 0, delay: 0).
|
|
46
|
+
*/
|
|
47
|
+
export function stagger(elements, keyframes, options) {
|
|
48
|
+
const { delay = 50, from = 'start', duration = 300, easing = 'ease-out', } = options ?? {};
|
|
49
|
+
const count = elements.length;
|
|
50
|
+
// Reduced motion: apply final state instantly
|
|
51
|
+
if (prefersReduced()) {
|
|
52
|
+
const animations = [];
|
|
53
|
+
for (const el of elements) {
|
|
54
|
+
const anim = el.animate(keyframes, { duration: 0, fill: 'forwards' });
|
|
55
|
+
animations.push(anim);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
cancel: () => { for (const a of animations)
|
|
59
|
+
a.cancel(); },
|
|
60
|
+
finished: Promise.all(animations.map((a) => a.finished)).then(() => { }),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const delays = computeDelays(count, delay, from);
|
|
64
|
+
const animations = [];
|
|
65
|
+
for (let i = 0; i < count; i++) {
|
|
66
|
+
const anim = elements[i].animate(keyframes, {
|
|
67
|
+
duration,
|
|
68
|
+
easing,
|
|
69
|
+
delay: delays[i],
|
|
70
|
+
fill: 'both',
|
|
71
|
+
});
|
|
72
|
+
animations.push(anim);
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
cancel() {
|
|
76
|
+
for (const a of animations)
|
|
77
|
+
a.cancel();
|
|
78
|
+
},
|
|
79
|
+
finished: Promise.all(animations.map((a) => a.finished)).then(() => { }),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Animate a list of elements with staggered spring physics.
|
|
84
|
+
*
|
|
85
|
+
* Each element's CSS property is animated toward `to` using a spring
|
|
86
|
+
* simulation, with an incremental start delay based on the `from` option.
|
|
87
|
+
*
|
|
88
|
+
* Respects `prefers-reduced-motion` — when reduced, all elements jump
|
|
89
|
+
* to the target value instantly.
|
|
90
|
+
*/
|
|
91
|
+
export function staggerSpring(elements, property, to, options) {
|
|
92
|
+
const { delay = 50, from = 'start',
|
|
93
|
+
// duration and easing are unused for spring — included for StaggerOptions compat
|
|
94
|
+
duration: _duration, easing: _easing, ...springOpts } = options ?? {};
|
|
95
|
+
void _duration;
|
|
96
|
+
void _easing;
|
|
97
|
+
const count = elements.length;
|
|
98
|
+
// Reduced motion: jump all elements instantly
|
|
99
|
+
if (prefersReduced()) {
|
|
100
|
+
for (const el of elements) {
|
|
101
|
+
el.style.setProperty(property, String(to));
|
|
102
|
+
}
|
|
103
|
+
return { cancel: () => { }, finished: Promise.resolve() };
|
|
104
|
+
}
|
|
105
|
+
const delays = computeDelays(count, delay, from);
|
|
106
|
+
const cancellers = [];
|
|
107
|
+
const promises = [];
|
|
108
|
+
for (let i = 0; i < count; i++) {
|
|
109
|
+
const el = elements[i];
|
|
110
|
+
const elementDelay = delays[i];
|
|
111
|
+
if (elementDelay === 0) {
|
|
112
|
+
// Start immediately
|
|
113
|
+
const result = spring(el, property, to, springOpts);
|
|
114
|
+
cancellers.push(result.cancel);
|
|
115
|
+
promises.push(result.finished);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// Delay start via setTimeout
|
|
119
|
+
let cancelled = false;
|
|
120
|
+
let springCancel = null;
|
|
121
|
+
const promise = new Promise((resolve) => {
|
|
122
|
+
const timerId = setTimeout(() => {
|
|
123
|
+
if (cancelled) {
|
|
124
|
+
resolve();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const result = spring(el, property, to, springOpts);
|
|
128
|
+
springCancel = result.cancel;
|
|
129
|
+
result.finished.then(resolve);
|
|
130
|
+
}, elementDelay);
|
|
131
|
+
cancellers.push(() => {
|
|
132
|
+
cancelled = true;
|
|
133
|
+
clearTimeout(timerId);
|
|
134
|
+
if (springCancel)
|
|
135
|
+
springCancel();
|
|
136
|
+
resolve();
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
promises.push(promise);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
cancel() {
|
|
144
|
+
for (const fn of cancellers)
|
|
145
|
+
fn();
|
|
146
|
+
},
|
|
147
|
+
finished: Promise.all(promises).then(() => { }),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=stagger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stagger.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nova Engine — Avatar
|
|
3
|
+
*
|
|
4
|
+
* Circular avatar with image source, initials fallback derived
|
|
5
|
+
* from a name, and deterministic background color hashing.
|
|
6
|
+
*/
|
|
7
|
+
export interface AvatarOptions {
|
|
8
|
+
/** Image URL. Falls back to initials if omitted or fails to load. */
|
|
9
|
+
src?: string;
|
|
10
|
+
/** Full name — used to generate initials fallback */
|
|
11
|
+
name?: string;
|
|
12
|
+
/** Diameter in px. Default: 40 */
|
|
13
|
+
size?: number;
|
|
14
|
+
/** Custom fallback text (overrides name-based initials) */
|
|
15
|
+
fallback?: string;
|
|
16
|
+
/** Alt text for the image. Defaults to name or 'Avatar'. */
|
|
17
|
+
alt?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AvatarInstance {
|
|
20
|
+
/** Update the image source */
|
|
21
|
+
setSrc(src: string): void;
|
|
22
|
+
/** Remove the avatar from DOM and clean up */
|
|
23
|
+
destroy(): void;
|
|
24
|
+
}
|
|
25
|
+
/** Create a circular avatar with image and initials fallback. */
|
|
26
|
+
export declare function createAvatar(container: string | HTMLElement, options?: AvatarOptions): AvatarInstance;
|
|
27
|
+
//# sourceMappingURL=avatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../src/avatar/avatar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,8CAA8C;IAC9C,OAAO,IAAI,IAAI,CAAC;CACjB;AAiED,iEAAiE;AACjE,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,OAAO,GAAE,aAAkB,GAC1B,cAAc,CA6EhB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nova Engine — Avatar
|
|
3
|
+
*
|
|
4
|
+
* Circular avatar with image source, initials fallback derived
|
|
5
|
+
* from a name, and deterministic background color hashing.
|
|
6
|
+
*/
|
|
7
|
+
const STYLE_ID = 'nova-avatar-styles';
|
|
8
|
+
function injectStyles() {
|
|
9
|
+
if (document.getElementById(STYLE_ID))
|
|
10
|
+
return;
|
|
11
|
+
const s = document.createElement('style');
|
|
12
|
+
s.id = STYLE_ID;
|
|
13
|
+
s.textContent = `
|
|
14
|
+
.nova-avatar {
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
border-radius: 50%;
|
|
19
|
+
overflow: hidden;
|
|
20
|
+
flex-shrink: 0;
|
|
21
|
+
user-select: none;
|
|
22
|
+
vertical-align: middle;
|
|
23
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
24
|
+
font-weight: 600;
|
|
25
|
+
color: var(--color-avatar-text, #fff);
|
|
26
|
+
background: var(--color-avatar-bg, rgba(255, 255, 255, 0.12));
|
|
27
|
+
}
|
|
28
|
+
.nova-avatar__img {
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: 100%;
|
|
31
|
+
object-fit: cover;
|
|
32
|
+
border-radius: inherit;
|
|
33
|
+
}`;
|
|
34
|
+
document.head.appendChild(s);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generate initials from a name string.
|
|
38
|
+
* Takes the first letter of each word (max 2).
|
|
39
|
+
*/
|
|
40
|
+
function getInitials(name) {
|
|
41
|
+
const parts = name.trim().split(/\s+/);
|
|
42
|
+
if (parts.length === 0)
|
|
43
|
+
return '';
|
|
44
|
+
if (parts.length === 1)
|
|
45
|
+
return parts[0].charAt(0).toUpperCase();
|
|
46
|
+
return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Deterministically hash a string to a hue value (0-360).
|
|
50
|
+
* Produces a consistent background color per name.
|
|
51
|
+
*/
|
|
52
|
+
function nameToHue(name) {
|
|
53
|
+
let hash = 0;
|
|
54
|
+
for (let i = 0; i < name.length; i++) {
|
|
55
|
+
hash = name.charCodeAt(i) + ((hash << 5) - hash);
|
|
56
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
57
|
+
}
|
|
58
|
+
return Math.abs(hash) % 360;
|
|
59
|
+
}
|
|
60
|
+
function resolveContainer(container) {
|
|
61
|
+
if (typeof container === 'string') {
|
|
62
|
+
const el = document.querySelector(container);
|
|
63
|
+
if (!el)
|
|
64
|
+
throw new Error(`[Nova Avatar] Container not found: ${container}`);
|
|
65
|
+
return el;
|
|
66
|
+
}
|
|
67
|
+
return container;
|
|
68
|
+
}
|
|
69
|
+
/** Create a circular avatar with image and initials fallback. */
|
|
70
|
+
export function createAvatar(container, options = {}) {
|
|
71
|
+
const { src, name = '', size = 40, fallback, alt, } = options;
|
|
72
|
+
let destroyed = false;
|
|
73
|
+
injectStyles();
|
|
74
|
+
const wrapper = document.createElement('span');
|
|
75
|
+
wrapper.className = 'nova-avatar';
|
|
76
|
+
wrapper.setAttribute('role', 'img');
|
|
77
|
+
wrapper.setAttribute('aria-label', alt || name || 'Avatar');
|
|
78
|
+
wrapper.style.width = `${size}px`;
|
|
79
|
+
wrapper.style.height = `${size}px`;
|
|
80
|
+
wrapper.style.fontSize = `${Math.round(size * 0.4)}px`;
|
|
81
|
+
// Compute deterministic background from name
|
|
82
|
+
if (name) {
|
|
83
|
+
const hue = nameToHue(name);
|
|
84
|
+
wrapper.style.backgroundColor = `hsl(${hue}, 55%, 45%)`;
|
|
85
|
+
}
|
|
86
|
+
const initialsText = fallback || getInitials(name) || '?';
|
|
87
|
+
let imgEl = null;
|
|
88
|
+
function showInitials() {
|
|
89
|
+
if (imgEl) {
|
|
90
|
+
imgEl.remove();
|
|
91
|
+
imgEl = null;
|
|
92
|
+
}
|
|
93
|
+
// Only set text if not already showing
|
|
94
|
+
if (!wrapper.textContent) {
|
|
95
|
+
wrapper.textContent = initialsText;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function loadImage(url) {
|
|
99
|
+
// Clear any initials text
|
|
100
|
+
wrapper.textContent = '';
|
|
101
|
+
imgEl = document.createElement('img');
|
|
102
|
+
imgEl.className = 'nova-avatar__img';
|
|
103
|
+
imgEl.alt = alt || name || 'Avatar';
|
|
104
|
+
imgEl.src = url;
|
|
105
|
+
imgEl.addEventListener('error', () => {
|
|
106
|
+
showInitials();
|
|
107
|
+
}, { once: true });
|
|
108
|
+
wrapper.appendChild(imgEl);
|
|
109
|
+
}
|
|
110
|
+
if (src) {
|
|
111
|
+
loadImage(src);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
showInitials();
|
|
115
|
+
}
|
|
116
|
+
const parent = resolveContainer(container);
|
|
117
|
+
parent.appendChild(wrapper);
|
|
118
|
+
return {
|
|
119
|
+
setSrc(newSrc) {
|
|
120
|
+
if (destroyed)
|
|
121
|
+
return;
|
|
122
|
+
loadImage(newSrc);
|
|
123
|
+
},
|
|
124
|
+
destroy() {
|
|
125
|
+
if (destroyed)
|
|
126
|
+
return;
|
|
127
|
+
destroyed = true;
|
|
128
|
+
wrapper.remove();
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nova Engine — Badge
|
|
3
|
+
*
|
|
4
|
+
* Inline status indicator with semantic color variants,
|
|
5
|
+
* configurable sizes, and optional pill shape.
|
|
6
|
+
*/
|
|
7
|
+
export interface BadgeOptions {
|
|
8
|
+
/** Text content displayed inside the badge */
|
|
9
|
+
text: string;
|
|
10
|
+
/** Semantic color variant. Default: 'default' */
|
|
11
|
+
variant?: 'default' | 'primary' | 'success' | 'warning' | 'error';
|
|
12
|
+
/** Badge size. Default: 'md' */
|
|
13
|
+
size?: 'sm' | 'md' | 'lg';
|
|
14
|
+
/** Use fully rounded pill shape. Default: false */
|
|
15
|
+
rounded?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface BadgeInstance {
|
|
18
|
+
/** Update the badge text */
|
|
19
|
+
setText(text: string): void;
|
|
20
|
+
/** Update the badge variant */
|
|
21
|
+
setVariant(variant: BadgeOptions['variant']): void;
|
|
22
|
+
/** Remove the badge from DOM and clean up */
|
|
23
|
+
destroy(): void;
|
|
24
|
+
}
|
|
25
|
+
/** Create an inline badge indicator. */
|
|
26
|
+
export declare function createBadge(container: string | HTMLElement, options: BadgeOptions): BadgeInstance;
|
|
27
|
+
//# sourceMappingURL=badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/badge/badge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAClE,gCAAgC;IAChC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,+BAA+B;IAC/B,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IACnD,6CAA6C;IAC7C,OAAO,IAAI,IAAI,CAAC;CACjB;AAuED,wCAAwC;AACxC,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,GAAG,WAAW,EAC/B,OAAO,EAAE,YAAY,GACpB,aAAa,CAoDf"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nova Engine — Badge
|
|
3
|
+
*
|
|
4
|
+
* Inline status indicator with semantic color variants,
|
|
5
|
+
* configurable sizes, and optional pill shape.
|
|
6
|
+
*/
|
|
7
|
+
const STYLE_ID = 'nova-badge-styles';
|
|
8
|
+
const VARIANT_COLORS = {
|
|
9
|
+
default: {
|
|
10
|
+
bg: 'var(--color-bg-elevated, rgba(255, 255, 255, 0.08))',
|
|
11
|
+
text: 'var(--color-text-primary, #e5e5e5)',
|
|
12
|
+
border: 'var(--color-border, rgba(255, 255, 255, 0.08))',
|
|
13
|
+
},
|
|
14
|
+
primary: {
|
|
15
|
+
bg: 'var(--color-badge-primary-bg, rgba(167, 139, 250, 0.15))',
|
|
16
|
+
text: 'var(--color-badge-primary-text, #a78bfa)',
|
|
17
|
+
border: 'var(--color-badge-primary-border, rgba(167, 139, 250, 0.25))',
|
|
18
|
+
},
|
|
19
|
+
success: {
|
|
20
|
+
bg: 'var(--color-badge-success-bg, rgba(34, 197, 94, 0.15))',
|
|
21
|
+
text: 'var(--color-badge-success-text, #22c55e)',
|
|
22
|
+
border: 'var(--color-badge-success-border, rgba(34, 197, 94, 0.25))',
|
|
23
|
+
},
|
|
24
|
+
warning: {
|
|
25
|
+
bg: 'var(--color-badge-warning-bg, rgba(245, 158, 11, 0.15))',
|
|
26
|
+
text: 'var(--color-badge-warning-text, #f59e0b)',
|
|
27
|
+
border: 'var(--color-badge-warning-border, rgba(245, 158, 11, 0.25))',
|
|
28
|
+
},
|
|
29
|
+
error: {
|
|
30
|
+
bg: 'var(--color-badge-error-bg, rgba(239, 68, 68, 0.15))',
|
|
31
|
+
text: 'var(--color-badge-error-text, #ef4444)',
|
|
32
|
+
border: 'var(--color-badge-error-border, rgba(239, 68, 68, 0.25))',
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
const SIZE_MAP = {
|
|
36
|
+
sm: { height: '20px', fontSize: '11px', padding: '0 6px' },
|
|
37
|
+
md: { height: '24px', fontSize: '12px', padding: '0 8px' },
|
|
38
|
+
lg: { height: '28px', fontSize: '13px', padding: '0 10px' },
|
|
39
|
+
};
|
|
40
|
+
function injectStyles() {
|
|
41
|
+
if (document.getElementById(STYLE_ID))
|
|
42
|
+
return;
|
|
43
|
+
const s = document.createElement('style');
|
|
44
|
+
s.id = STYLE_ID;
|
|
45
|
+
s.textContent = `
|
|
46
|
+
.nova-badge {
|
|
47
|
+
display: inline-flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
51
|
+
font-weight: 500;
|
|
52
|
+
line-height: 1;
|
|
53
|
+
white-space: nowrap;
|
|
54
|
+
border: 1px solid;
|
|
55
|
+
vertical-align: middle;
|
|
56
|
+
box-sizing: border-box;
|
|
57
|
+
border-radius: 6px;
|
|
58
|
+
}
|
|
59
|
+
.nova-badge--rounded {
|
|
60
|
+
border-radius: 9999px;
|
|
61
|
+
}`;
|
|
62
|
+
document.head.appendChild(s);
|
|
63
|
+
}
|
|
64
|
+
function resolveContainer(container) {
|
|
65
|
+
if (typeof container === 'string') {
|
|
66
|
+
const el = document.querySelector(container);
|
|
67
|
+
if (!el)
|
|
68
|
+
throw new Error(`[Nova Badge] Container not found: ${container}`);
|
|
69
|
+
return el;
|
|
70
|
+
}
|
|
71
|
+
return container;
|
|
72
|
+
}
|
|
73
|
+
/** Create an inline badge indicator. */
|
|
74
|
+
export function createBadge(container, options) {
|
|
75
|
+
const { text, variant = 'default', size = 'md', rounded = false, } = options;
|
|
76
|
+
let destroyed = false;
|
|
77
|
+
let currentVariant = variant;
|
|
78
|
+
injectStyles();
|
|
79
|
+
const el = document.createElement('span');
|
|
80
|
+
el.className = 'nova-badge';
|
|
81
|
+
if (rounded)
|
|
82
|
+
el.classList.add('nova-badge--rounded');
|
|
83
|
+
el.textContent = text;
|
|
84
|
+
// Apply size
|
|
85
|
+
const sizeStyles = SIZE_MAP[size] || SIZE_MAP.md;
|
|
86
|
+
el.style.height = sizeStyles.height;
|
|
87
|
+
el.style.fontSize = sizeStyles.fontSize;
|
|
88
|
+
el.style.padding = sizeStyles.padding;
|
|
89
|
+
function applyVariant(v) {
|
|
90
|
+
const colors = VARIANT_COLORS[v] || VARIANT_COLORS.default;
|
|
91
|
+
el.style.backgroundColor = colors.bg;
|
|
92
|
+
el.style.color = colors.text;
|
|
93
|
+
el.style.borderColor = colors.border;
|
|
94
|
+
}
|
|
95
|
+
applyVariant(currentVariant);
|
|
96
|
+
const parent = resolveContainer(container);
|
|
97
|
+
parent.appendChild(el);
|
|
98
|
+
return {
|
|
99
|
+
setText(newText) {
|
|
100
|
+
if (destroyed)
|
|
101
|
+
return;
|
|
102
|
+
el.textContent = newText;
|
|
103
|
+
},
|
|
104
|
+
setVariant(newVariant) {
|
|
105
|
+
if (destroyed)
|
|
106
|
+
return;
|
|
107
|
+
currentVariant = newVariant || 'default';
|
|
108
|
+
applyVariant(currentVariant);
|
|
109
|
+
},
|
|
110
|
+
destroy() {
|
|
111
|
+
if (destroyed)
|
|
112
|
+
return;
|
|
113
|
+
destroyed = true;
|
|
114
|
+
el.remove();
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA;;;;;GAKG;AAsBH,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AAErC,MAAM,cAAc,GAAiE;IACnF,OAAO,EAAE;QACP,EAAE,EAAE,qDAAqD;QACzD,IAAI,EAAE,oCAAoC;QAC1C,MAAM,EAAE,gDAAgD;KACzD;IACD,OAAO,EAAE;QACP,EAAE,EAAE,0DAA0D;QAC9D,IAAI,EAAE,0CAA0C;QAChD,MAAM,EAAE,8DAA8D;KACvE;IACD,OAAO,EAAE;QACP,EAAE,EAAE,wDAAwD;QAC5D,IAAI,EAAE,0CAA0C;QAChD,MAAM,EAAE,4DAA4D;KACrE;IACD,OAAO,EAAE;QACP,EAAE,EAAE,yDAAyD;QAC7D,IAAI,EAAE,0CAA0C;QAChD,MAAM,EAAE,6DAA6D;KACtE;IACD,KAAK,EAAE;QACL,EAAE,EAAE,sDAAsD;QAC1D,IAAI,EAAE,wCAAwC;QAC9C,MAAM,EAAE,0DAA0D;KACnE;CACF,CAAC;AAEF,MAAM,QAAQ,GAA0E;IACtF,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;IAC1D,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;IAC1D,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;CAC5D,CAAC;AAEF,SAAS,YAAY;IACnB,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;QAAE,OAAO;IAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC;IAChB,CAAC,CAAC,WAAW,GAAG;;;;;;;;;;;;;;;;EAgBhB,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,gBAAgB,CAAC,SAA+B;IACvD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAc,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC;QAC3E,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,WAAW,CACzB,SAA+B,EAC/B,OAAqB;IAErB,MAAM,EACJ,IAAI,EACJ,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,KAAK,GAChB,GAAG,OAAO,CAAC;IAEZ,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,cAAc,GAAG,OAAO,CAAC;IAE7B,YAAY,EAAE,CAAC;IAEf,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,EAAE,CAAC,SAAS,GAAG,YAAY,CAAC;IAC5B,IAAI,OAAO;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACrD,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;IAEtB,aAAa;IACb,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC;IACjD,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACpC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;IACxC,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAEtC,SAAS,YAAY,CAAC,CAAS;QAC7B,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC;QAC3D,EAAE,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC;QACrC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC7B,EAAE,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,CAAC;IAED,YAAY,CAAC,cAAc,CAAC,CAAC;IAE7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAEvB,OAAO;QACL,OAAO,CAAC,OAAe;YACrB,IAAI,SAAS;gBAAE,OAAO;YACtB,EAAE,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,CAAC;QACD,UAAU,CAAC,UAAmC;YAC5C,IAAI,SAAS;gBAAE,OAAO;YACtB,cAAc,GAAG,UAAU,IAAI,SAAS,CAAC;YACzC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO;YACL,IAAI,SAAS;gBAAE,OAAO;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":[""],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nova Engine — LRU Cache
|
|
3
|
+
*
|
|
4
|
+
* Least Recently Used cache with optional TTL (time-to-live).
|
|
5
|
+
*/
|
|
6
|
+
export interface CacheOptions {
|
|
7
|
+
/** Maximum number of entries. Defaults to 100. */
|
|
8
|
+
maxSize?: number;
|
|
9
|
+
/** Time-to-live in milliseconds. 0 means no expiry (default). */
|
|
10
|
+
ttl?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface LRUCache<T> {
|
|
13
|
+
/** Get a value by key. Returns `undefined` if missing or expired. Marks the entry as recently used. */
|
|
14
|
+
get(key: string): T | undefined;
|
|
15
|
+
/** Set a value. Evicts the least recently used entry when at capacity. */
|
|
16
|
+
set(key: string, value: T): void;
|
|
17
|
+
/** Check whether a non-expired entry exists for the key. */
|
|
18
|
+
has(key: string): boolean;
|
|
19
|
+
/** Delete an entry. Returns `true` if the entry existed. */
|
|
20
|
+
delete(key: string): boolean;
|
|
21
|
+
/** Remove all entries. */
|
|
22
|
+
clear(): void;
|
|
23
|
+
/** Current number of entries (including potentially expired ones until accessed). */
|
|
24
|
+
readonly size: number;
|
|
25
|
+
}
|
|
26
|
+
/** Create an LRU cache with optional TTL support. */
|
|
27
|
+
export declare function createCache<T>(options?: CacheOptions): LRUCache<T>;
|
|
28
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAOD,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,uGAAuG;IACvG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAChC,0EAA0E;IAC1E,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,4DAA4D;IAC5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,4DAA4D;IAC5D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,0BAA0B;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAkElE"}
|