@lisergia/core 24.0.0 → 26.0.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/dist/Page.js ADDED
@@ -0,0 +1,128 @@
1
+ import Lenis from 'lenis';
2
+ import Tempus from 'tempus';
3
+ import { Component } from './Component.js';
4
+ export class Page extends Component {
5
+ datasets = [];
6
+ scroll = 0;
7
+ scrollEnabled = true;
8
+ scrollOptions = {};
9
+ constructor({ application, classes, datasets, element, elements, scrollEnabled = true, scrollOptions = {}, }) {
10
+ super({
11
+ autoMount: false,
12
+ autoListeners: false,
13
+ classes,
14
+ element,
15
+ elements,
16
+ });
17
+ this.application = application;
18
+ this.datasets = datasets;
19
+ this.scrollEnabled = scrollEnabled;
20
+ this.scrollOptions = scrollOptions;
21
+ }
22
+ create() {
23
+ super.create();
24
+ this.createResizeObserver();
25
+ this.createComponents();
26
+ this.createScroll();
27
+ this.addEventListeners();
28
+ }
29
+ createResizeObserver() {
30
+ this.resizeObserver = new ResizeObserver(() => {
31
+ this.onResize();
32
+ });
33
+ this.resizeObserver.observe(this.elements.wrapper);
34
+ }
35
+ destroyResizeObserver() {
36
+ this.resizeObserver.disconnect();
37
+ }
38
+ //
39
+ // Components.
40
+ //
41
+ components = new Set();
42
+ createComponents() {
43
+ this.datasets.forEach(({ component: Component, selector }) => {
44
+ const elements = this.element.querySelectorAll(selector);
45
+ const components = Array.from(elements).map((element) => {
46
+ const component = new Component({
47
+ application: this.application,
48
+ element: element,
49
+ });
50
+ return component;
51
+ });
52
+ components.forEach((component) => {
53
+ this.application.addComponent(component);
54
+ this.components.add(component);
55
+ });
56
+ });
57
+ }
58
+ destroyComponents() {
59
+ this.components.forEach((component) => {
60
+ this.application.removeComponent(component);
61
+ });
62
+ this.components.clear();
63
+ }
64
+ createScroll() {
65
+ if (!this.scrollEnabled) {
66
+ this.element.addEventListener('scroll', this.onScrollFallback);
67
+ return;
68
+ }
69
+ this.lenis = new Lenis({
70
+ content: this.elements.wrapper,
71
+ wrapper: this.element,
72
+ ...this.scrollOptions,
73
+ });
74
+ this.lenis.on('scroll', this.onLenisScroll);
75
+ }
76
+ onLenisScroll(event) {
77
+ this.onScroll(event.scroll);
78
+ this.emitter.emit('scroll', event);
79
+ }
80
+ destroyScroll() {
81
+ if (!this.scrollEnabled) {
82
+ this.element.removeEventListener('scroll', this.onScrollFallback);
83
+ return;
84
+ }
85
+ this.lenis.off('scroll', this.onLenisScroll);
86
+ this.lenis?.destroy();
87
+ this.lenis = undefined;
88
+ }
89
+ //
90
+ // Events.
91
+ //
92
+ onResize() {
93
+ this.lenis?.resize();
94
+ this.application.fire('resize');
95
+ }
96
+ onRAF({ time }) {
97
+ this.lenis?.raf(time);
98
+ }
99
+ onScroll(scroll) {
100
+ this.scroll = scroll;
101
+ this.application.fire('scroll', scroll);
102
+ }
103
+ onScrollFallback() {
104
+ this.onScroll(this.element.scrollTop);
105
+ this.emitter.emit('scroll', { scroll: this.scroll });
106
+ }
107
+ //
108
+ // Events.
109
+ //
110
+ addEventListeners() {
111
+ super.addEventListeners();
112
+ this.unsubscribeRaf = Tempus.add(this.onRAF);
113
+ }
114
+ removeEventListeners() {
115
+ super.removeEventListeners();
116
+ this.unsubscribeRaf?.();
117
+ this.unsubscribeRaf = undefined;
118
+ }
119
+ //
120
+ // Destroy.
121
+ //
122
+ destroy() {
123
+ this.destroyResizeObserver();
124
+ this.destroyComponents();
125
+ this.destroyScroll();
126
+ super.destroy();
127
+ }
128
+ }
package/dist/index.d.ts CHANGED
@@ -1,187 +1,8 @@
1
- import { IArrayDidChange, IValueDidChange } from 'mobx';
2
- import { Emitter, Unsubscribe } from 'nanoevents';
3
- import Lenis, { LenisOptions } from 'lenis';
4
- export { default as Tempus } from 'tempus';
5
-
6
- declare class EventEmitter {
7
- emitter: Emitter;
8
- entries: Map<Function, Unsubscribe>;
9
- constructor();
10
- on(event: string, callback: (...args: any) => void): void | Unsubscribe;
11
- off(event: string, callback: (...args: any) => void): void;
12
- fire(event: string, ...args: any[]): void;
13
- destroy(): void;
14
- }
15
-
16
- interface ComponentClasses {
17
- [key: string]: string;
18
- }
19
- interface ComponentElements {
20
- [key: string]: Array<any> | Element | Array<Element> | HTMLElement | Array<HTMLElement> | NodeList | Window | null;
21
- }
22
- type ComponentSelector = string | HTMLElement;
23
- interface ComponentSelectors {
24
- [key: string]: string | Element | Array<Element> | HTMLElement | Array<HTMLElement> | NodeList | Window;
25
- }
26
- interface ComponentParameters {
27
- application?: ApplicationManager;
28
- autoListeners?: boolean;
29
- autoMount?: boolean;
30
- classes?: ComponentClasses;
31
- element?: ComponentSelector;
32
- elements?: ComponentSelectors;
33
- id?: string;
34
- }
35
- declare class Component extends EventEmitter {
36
- application?: ApplicationManager;
37
- autoListeners: boolean;
38
- autoMount: boolean;
39
- classes?: ComponentClasses;
40
- selector?: ComponentSelector;
41
- selectors?: ComponentSelectors;
42
- id?: string;
43
- element?: HTMLElement;
44
- elements: ComponentElements;
45
- constructor({ application, autoListeners, autoMount, classes, element, elements, id, }: ComponentParameters);
46
- create(): void;
47
- initElement(selector: ComponentSelector): void;
48
- destroyElement(): void;
49
- initElements(selectors?: ComponentSelectors): void;
50
- destroyElements(): void;
51
- addEventListeners(): void;
52
- removeEventListeners(): void;
53
- destroy(): void;
54
- }
55
-
56
- declare class Link extends Component {
57
- element: HTMLLinkElement;
58
- constructor({ element }: {
59
- element: HTMLAnchorElement;
60
- });
61
- onClick(event: MouseEvent): void;
62
- addEventListeners(): void;
63
- removeEventListeners(): void;
64
- }
65
-
66
- declare class Links extends EventEmitter {
67
- application: ApplicationManager;
68
- links: Array<Link>;
69
- constructor(application: ApplicationManager);
70
- addEventListeners(): void;
71
- onLinkClick(href: string): void;
72
- refresh(): void;
73
- }
74
-
75
- interface PageParameters {
76
- application: ApplicationManager;
77
- classes?: ComponentClasses;
78
- datasets: Array<{
79
- component: typeof Component;
80
- selector: string;
81
- }>;
82
- element?: HTMLElement | string;
83
- elements?: ComponentSelectors;
84
- scrollEnabled?: boolean;
85
- scrollOptions?: LenisOptions;
86
- }
87
- declare class Page extends Component {
88
- element: HTMLElement;
89
- elements: {
90
- wrapper: HTMLElement;
91
- };
92
- application: ApplicationManager;
93
- datasets: Array<{
94
- component: typeof Component;
95
- selector: string;
96
- }>;
97
- scroll: number;
98
- scrollEnabled: boolean;
99
- scrollOptions: LenisOptions;
100
- unsubscribeRaf: (() => void) | undefined;
101
- constructor({ application, classes, datasets, element, elements, scrollEnabled, scrollOptions, }: PageParameters);
102
- create(): void;
103
- resizeObserver: ResizeObserver;
104
- createResizeObserver(): void;
105
- destroyResizeObserver(): void;
106
- components: Set<Component>;
107
- createComponents(): void;
108
- destroyComponents(): void;
109
- lenis: Lenis;
110
- createScroll(): void;
111
- onGSAPTicker(time: number): void;
112
- onLenisScroll(event: {
113
- scroll: number;
114
- }): void;
115
- destroyScroll(): void;
116
- onResize(): void;
117
- onRAF(time: number): void;
118
- onScroll(scroll: number): void;
119
- onScrollFallback(): void;
120
- addEventListeners(): void;
121
- removeEventListeners(): void;
122
- destroy(): void;
123
- }
124
-
125
- interface ApplicationComponentData {
126
- component: new (params?: ComponentParameters) => Component;
127
- }
128
- interface ApplicationComponentDatasetData extends ApplicationComponentData {
129
- selector: string;
130
- }
131
- interface ApplicationRoute {
132
- component: new (params?: PageParameters) => Page;
133
- template: string;
134
- }
135
- declare class ApplicationManager extends Component {
136
- element: HTMLElement;
137
- template: string;
138
- constructor();
139
- onTitleUpdate(): void;
140
- onTemplateUpdate(): void;
141
- canvas?: Component;
142
- components: Array<Component>;
143
- transition?: Component & {
144
- onTransition?: (args: any) => Promise<void>;
145
- };
146
- initComponents(components: Array<ApplicationComponentData>): void;
147
- addComponent(component: Component): void;
148
- removeComponent(component: Component): void;
149
- onComponentChange(event: IArrayDidChange<Component>): void;
150
- datasets: Array<ApplicationComponentDatasetData>;
151
- initDatasets(datasets: Array<ApplicationComponentDatasetData>): void;
152
- pages: Map<string, new (args: PageParameters) => Page>;
153
- initRoutes(routes: Array<ApplicationRoute>): void;
154
- initSprites(url?: string): Promise<void>;
155
- IS_LINKS_ENABLED: boolean;
156
- links: Links;
157
- initPage(): void;
158
- createLinks(): void;
159
- currentPage?: Page;
160
- createPage(template?: string): void;
161
- destroyPage(): void;
162
- route: string;
163
- routeHistory: Array<string>;
164
- routePushState: boolean;
165
- onRouteChange({ oldValue, newValue }: IValueDidChange<string>): void;
166
- onRouteChangeRequest({ href, pushState }: {
167
- href: string;
168
- pushState: boolean;
169
- }): Promise<void>;
170
- nextPage: {
171
- element?: Element;
172
- template?: string;
173
- title?: string;
174
- };
175
- onRequest({ href, response, pushState }: {
176
- href: string;
177
- response: string;
178
- pushState: boolean;
179
- }): Promise<void>;
180
- onPopState(event: PopStateEvent): void;
181
- get scroll(): number;
182
- addEventListeners(): void;
183
- removeEventListeners(): void;
184
- }
185
- declare const Application: ApplicationManager;
186
-
187
- export { Application, type ApplicationComponentData, type ApplicationComponentDatasetData, ApplicationManager, type ApplicationRoute, Component, type ComponentClasses, type ComponentElements, type ComponentParameters, type ComponentSelector, type ComponentSelectors, EventEmitter, Link, Links, Page, type PageParameters };
1
+ export * from './App.js';
2
+ export * from './Component.js';
3
+ export * from './EventEmitter.js';
4
+ export * from './Link.js';
5
+ export * from './Links.js';
6
+ export * from './Page.js';
7
+ import Tempus from 'tempus';
8
+ export { Tempus };