@coherent.js/performance 1.0.0-beta.5 → 1.0.0-beta.7

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.
@@ -0,0 +1,332 @@
1
+ // src/lazy-loading.js
2
+ var LazyLoader = class {
3
+ constructor(options = {}) {
4
+ this.options = {
5
+ rootMargin: "50px",
6
+ threshold: 0.01,
7
+ ...options
8
+ };
9
+ this.observer = null;
10
+ this.observed = /* @__PURE__ */ new Set();
11
+ this.loaded = /* @__PURE__ */ new Set();
12
+ this.initObserver();
13
+ }
14
+ /**
15
+ * Initialize Intersection Observer
16
+ */
17
+ initObserver() {
18
+ if (typeof IntersectionObserver === "undefined") {
19
+ return;
20
+ }
21
+ this.observer = new IntersectionObserver(
22
+ (entries) => this.handleIntersection(entries),
23
+ {
24
+ rootMargin: this.options.rootMargin,
25
+ threshold: this.options.threshold
26
+ }
27
+ );
28
+ }
29
+ /**
30
+ * Handle intersection
31
+ */
32
+ handleIntersection(entries) {
33
+ entries.forEach((entry) => {
34
+ if (entry.isIntersecting) {
35
+ this.loadElement(entry.target);
36
+ }
37
+ });
38
+ }
39
+ /**
40
+ * Observe an element
41
+ */
42
+ observe(element) {
43
+ if (!this.observer || this.observed.has(element)) {
44
+ return;
45
+ }
46
+ this.observer.observe(element);
47
+ this.observed.add(element);
48
+ }
49
+ /**
50
+ * Unobserve an element
51
+ */
52
+ unobserve(element) {
53
+ if (!this.observer) {
54
+ return;
55
+ }
56
+ this.observer.unobserve(element);
57
+ this.observed.delete(element);
58
+ }
59
+ /**
60
+ * Load an element
61
+ */
62
+ loadElement(element) {
63
+ if (this.loaded.has(element)) {
64
+ return;
65
+ }
66
+ if (element.tagName === "IMG") {
67
+ this.loadImage(element);
68
+ } else if (element.tagName === "SCRIPT") {
69
+ this.loadScript(element);
70
+ } else if (element.tagName === "IFRAME") {
71
+ this.loadIframe(element);
72
+ }
73
+ this.loaded.add(element);
74
+ this.unobserve(element);
75
+ }
76
+ /**
77
+ * Load image
78
+ */
79
+ loadImage(img) {
80
+ const src = img.dataset.src;
81
+ const srcset = img.dataset.srcset;
82
+ if (src) {
83
+ img.src = src;
84
+ }
85
+ if (srcset) {
86
+ img.srcset = srcset;
87
+ }
88
+ img.classList.add("loaded");
89
+ }
90
+ /**
91
+ * Load script
92
+ */
93
+ loadScript(script) {
94
+ const src = script.dataset.src;
95
+ if (src) {
96
+ script.src = src;
97
+ }
98
+ }
99
+ /**
100
+ * Load iframe
101
+ */
102
+ loadIframe(iframe) {
103
+ const src = iframe.dataset.src;
104
+ if (src) {
105
+ iframe.src = src;
106
+ }
107
+ }
108
+ /**
109
+ * Disconnect observer
110
+ */
111
+ disconnect() {
112
+ if (this.observer) {
113
+ this.observer.disconnect();
114
+ }
115
+ this.observed.clear();
116
+ }
117
+ };
118
+ var ImageLazyLoader = class {
119
+ constructor(options = {}) {
120
+ this.options = {
121
+ placeholder: 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"%3E%3C/svg%3E',
122
+ loadingClass: "lazy-loading",
123
+ loadedClass: "lazy-loaded",
124
+ errorClass: "lazy-error",
125
+ ...options
126
+ };
127
+ this.loader = new LazyLoader(options);
128
+ }
129
+ /**
130
+ * Create lazy image component
131
+ */
132
+ createImage(src, options = {}) {
133
+ return {
134
+ img: {
135
+ src: this.options.placeholder,
136
+ "data-src": src,
137
+ "data-srcset": options.srcset,
138
+ alt: options.alt || "",
139
+ className: this.options.loadingClass,
140
+ loading: "lazy",
141
+ onload: `this.classList.add("${this.options.loadedClass}")`,
142
+ onerror: `this.classList.add("${this.options.errorClass}")`
143
+ }
144
+ };
145
+ }
146
+ /**
147
+ * Observe images
148
+ */
149
+ observe(selector = "img[data-src]") {
150
+ if (typeof document === "undefined") {
151
+ return;
152
+ }
153
+ const images = document.querySelectorAll(selector);
154
+ images.forEach((img) => this.loader.observe(img));
155
+ }
156
+ /**
157
+ * Load all images immediately
158
+ */
159
+ loadAll() {
160
+ this.observed.forEach((element) => {
161
+ this.loader.loadElement(element);
162
+ });
163
+ }
164
+ };
165
+ var ResourcePreloader = class {
166
+ constructor() {
167
+ this.preloaded = /* @__PURE__ */ new Set();
168
+ this.preloading = /* @__PURE__ */ new Map();
169
+ }
170
+ /**
171
+ * Preload an image
172
+ */
173
+ async preloadImage(src) {
174
+ if (this.preloaded.has(src)) {
175
+ return;
176
+ }
177
+ if (this.preloading.has(src)) {
178
+ return this.preloading.get(src);
179
+ }
180
+ const promise = new Promise((resolve, reject) => {
181
+ const img = new Image();
182
+ img.onload = () => {
183
+ this.preloaded.add(src);
184
+ this.preloading.delete(src);
185
+ resolve(img);
186
+ };
187
+ img.onerror = () => {
188
+ this.preloading.delete(src);
189
+ reject(new Error(`Failed to preload image: ${src}`));
190
+ };
191
+ img.src = src;
192
+ });
193
+ this.preloading.set(src, promise);
194
+ return promise;
195
+ }
196
+ /**
197
+ * Preload multiple images
198
+ */
199
+ async preloadImages(sources) {
200
+ return Promise.all(sources.map((src) => this.preloadImage(src)));
201
+ }
202
+ /**
203
+ * Preload a script
204
+ */
205
+ async preloadScript(src) {
206
+ if (this.preloaded.has(src)) {
207
+ return;
208
+ }
209
+ if (this.preloading.has(src)) {
210
+ return this.preloading.get(src);
211
+ }
212
+ const promise = new Promise((resolve, reject) => {
213
+ const link = document.createElement("link");
214
+ link.rel = "preload";
215
+ link.as = "script";
216
+ link.href = src;
217
+ link.onload = () => {
218
+ this.preloaded.add(src);
219
+ this.preloading.delete(src);
220
+ resolve();
221
+ };
222
+ link.onerror = () => {
223
+ this.preloading.delete(src);
224
+ reject(new Error(`Failed to preload script: ${src}`));
225
+ };
226
+ document.head.appendChild(link);
227
+ });
228
+ this.preloading.set(src, promise);
229
+ return promise;
230
+ }
231
+ /**
232
+ * Prefetch a resource
233
+ */
234
+ prefetch(href, options = {}) {
235
+ if (typeof document === "undefined") {
236
+ return;
237
+ }
238
+ const link = document.createElement("link");
239
+ link.rel = "prefetch";
240
+ link.href = href;
241
+ if (options.as) {
242
+ link.as = options.as;
243
+ }
244
+ document.head.appendChild(link);
245
+ }
246
+ /**
247
+ * Check if resource is preloaded
248
+ */
249
+ isPreloaded(src) {
250
+ return this.preloaded.has(src);
251
+ }
252
+ /**
253
+ * Clear preload cache
254
+ */
255
+ clear() {
256
+ this.preloaded.clear();
257
+ this.preloading.clear();
258
+ }
259
+ };
260
+ var ProgressiveImageLoader = class {
261
+ /**
262
+ * Create progressive image component
263
+ */
264
+ createImage(lowResSrc, highResSrc, options = {}) {
265
+ return {
266
+ div: {
267
+ className: "progressive-image",
268
+ style: options.style || {},
269
+ children: [
270
+ {
271
+ img: {
272
+ src: lowResSrc,
273
+ className: "progressive-image-low",
274
+ alt: options.alt || "",
275
+ style: "filter: blur(10px); transition: opacity 0.3s;"
276
+ }
277
+ },
278
+ {
279
+ img: {
280
+ "data-src": highResSrc,
281
+ className: "progressive-image-high",
282
+ alt: options.alt || "",
283
+ style: "opacity: 0; transition: opacity 0.3s;",
284
+ onload: "this.style.opacity = 1; this.previousElementSibling.style.opacity = 0;"
285
+ }
286
+ }
287
+ ]
288
+ }
289
+ };
290
+ }
291
+ };
292
+ function createLazyLoader(options = {}) {
293
+ return new LazyLoader(options);
294
+ }
295
+ function createImageLazyLoader(options = {}) {
296
+ return new ImageLazyLoader(options);
297
+ }
298
+ function createPreloader() {
299
+ return new ResourcePreloader();
300
+ }
301
+ function lazyImage(src, options = {}) {
302
+ const loader = new ImageLazyLoader();
303
+ return loader.createImage(src, options);
304
+ }
305
+ function progressiveImage(lowRes, highRes, options = {}) {
306
+ const loader = new ProgressiveImageLoader();
307
+ return loader.createImage(lowRes, highRes, options);
308
+ }
309
+ var lazy_loading_default = {
310
+ LazyLoader,
311
+ ImageLazyLoader,
312
+ ResourcePreloader,
313
+ ProgressiveImageLoader,
314
+ createLazyLoader,
315
+ createImageLazyLoader,
316
+ createPreloader,
317
+ lazyImage,
318
+ progressiveImage
319
+ };
320
+ export {
321
+ ImageLazyLoader,
322
+ LazyLoader,
323
+ ProgressiveImageLoader,
324
+ ResourcePreloader,
325
+ createImageLazyLoader,
326
+ createLazyLoader,
327
+ createPreloader,
328
+ lazy_loading_default as default,
329
+ lazyImage,
330
+ progressiveImage
331
+ };
332
+ //# sourceMappingURL=lazy-loading.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lazy-loading.js"],
4
+ "sourcesContent": ["/**\n * Coherent.js Lazy Loading\n * \n * Utilities for lazy loading resources\n * \n * @module performance/lazy-loading\n */\n\n/**\n * Lazy Loader\n * Manages lazy loading of images, scripts, and other resources\n */\nexport class LazyLoader {\n constructor(options = {}) {\n this.options = {\n rootMargin: '50px',\n threshold: 0.01,\n ...options\n };\n \n this.observer = null;\n this.observed = new Set();\n this.loaded = new Set();\n \n this.initObserver();\n }\n\n /**\n * Initialize Intersection Observer\n */\n initObserver() {\n if (typeof IntersectionObserver === 'undefined') {\n return;\n }\n\n this.observer = new IntersectionObserver(\n (entries) => this.handleIntersection(entries),\n {\n rootMargin: this.options.rootMargin,\n threshold: this.options.threshold\n }\n );\n }\n\n /**\n * Handle intersection\n */\n handleIntersection(entries) {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.loadElement(entry.target);\n }\n });\n }\n\n /**\n * Observe an element\n */\n observe(element) {\n if (!this.observer || this.observed.has(element)) {\n return;\n }\n\n this.observer.observe(element);\n this.observed.add(element);\n }\n\n /**\n * Unobserve an element\n */\n unobserve(element) {\n if (!this.observer) {\n return;\n }\n\n this.observer.unobserve(element);\n this.observed.delete(element);\n }\n\n /**\n * Load an element\n */\n loadElement(element) {\n if (this.loaded.has(element)) {\n return;\n }\n\n // Load based on element type\n if (element.tagName === 'IMG') {\n this.loadImage(element);\n } else if (element.tagName === 'SCRIPT') {\n this.loadScript(element);\n } else if (element.tagName === 'IFRAME') {\n this.loadIframe(element);\n }\n\n this.loaded.add(element);\n this.unobserve(element);\n }\n\n /**\n * Load image\n */\n loadImage(img) {\n const src = img.dataset.src;\n const srcset = img.dataset.srcset;\n\n if (src) {\n img.src = src;\n }\n\n if (srcset) {\n img.srcset = srcset;\n }\n\n img.classList.add('loaded');\n }\n\n /**\n * Load script\n */\n loadScript(script) {\n const src = script.dataset.src;\n \n if (src) {\n script.src = src;\n }\n }\n\n /**\n * Load iframe\n */\n loadIframe(iframe) {\n const src = iframe.dataset.src;\n \n if (src) {\n iframe.src = src;\n }\n }\n\n /**\n * Disconnect observer\n */\n disconnect() {\n if (this.observer) {\n this.observer.disconnect();\n }\n this.observed.clear();\n }\n}\n\n/**\n * Image lazy loader\n */\nexport class ImageLazyLoader {\n constructor(options = {}) {\n this.options = {\n placeholder: 'data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1 1\"%3E%3C/svg%3E',\n loadingClass: 'lazy-loading',\n loadedClass: 'lazy-loaded',\n errorClass: 'lazy-error',\n ...options\n };\n \n this.loader = new LazyLoader(options);\n }\n\n /**\n * Create lazy image component\n */\n createImage(src, options = {}) {\n return {\n img: {\n src: this.options.placeholder,\n 'data-src': src,\n 'data-srcset': options.srcset,\n alt: options.alt || '',\n className: this.options.loadingClass,\n loading: 'lazy',\n onload: `this.classList.add(\"${ this.options.loadedClass }\")`,\n onerror: `this.classList.add(\"${ this.options.errorClass }\")`\n }\n };\n }\n\n /**\n * Observe images\n */\n observe(selector = 'img[data-src]') {\n if (typeof document === 'undefined') {\n return;\n }\n\n const images = document.querySelectorAll(selector);\n images.forEach(img => this.loader.observe(img));\n }\n\n /**\n * Load all images immediately\n */\n loadAll() {\n this.observed.forEach(element => {\n this.loader.loadElement(element);\n });\n }\n}\n\n/**\n * Resource preloader\n */\nexport class ResourcePreloader {\n constructor() {\n this.preloaded = new Set();\n this.preloading = new Map();\n }\n\n /**\n * Preload an image\n */\n async preloadImage(src) {\n if (this.preloaded.has(src)) {\n return;\n }\n\n if (this.preloading.has(src)) {\n return this.preloading.get(src);\n }\n\n const promise = new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n this.preloaded.add(src);\n this.preloading.delete(src);\n resolve(img);\n };\n img.onerror = () => {\n this.preloading.delete(src);\n reject(new Error(`Failed to preload image: ${src}`));\n };\n img.src = src;\n });\n\n this.preloading.set(src, promise);\n return promise;\n }\n\n /**\n * Preload multiple images\n */\n async preloadImages(sources) {\n return Promise.all(sources.map(src => this.preloadImage(src)));\n }\n\n /**\n * Preload a script\n */\n async preloadScript(src) {\n if (this.preloaded.has(src)) {\n return;\n }\n\n if (this.preloading.has(src)) {\n return this.preloading.get(src);\n }\n\n const promise = new Promise((resolve, reject) => {\n const link = document.createElement('link');\n link.rel = 'preload';\n link.as = 'script';\n link.href = src;\n link.onload = () => {\n this.preloaded.add(src);\n this.preloading.delete(src);\n resolve();\n };\n link.onerror = () => {\n this.preloading.delete(src);\n reject(new Error(`Failed to preload script: ${src}`));\n };\n document.head.appendChild(link);\n });\n\n this.preloading.set(src, promise);\n return promise;\n }\n\n /**\n * Prefetch a resource\n */\n prefetch(href, options = {}) {\n if (typeof document === 'undefined') {\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'prefetch';\n link.href = href;\n \n if (options.as) {\n link.as = options.as;\n }\n\n document.head.appendChild(link);\n }\n\n /**\n * Check if resource is preloaded\n */\n isPreloaded(src) {\n return this.preloaded.has(src);\n }\n\n /**\n * Clear preload cache\n */\n clear() {\n this.preloaded.clear();\n this.preloading.clear();\n }\n}\n\n/**\n * Progressive image loader\n */\nexport class ProgressiveImageLoader {\n /**\n * Create progressive image component\n */\n createImage(lowResSrc, highResSrc, options = {}) {\n return {\n div: {\n className: 'progressive-image',\n style: options.style || {},\n children: [\n {\n img: {\n src: lowResSrc,\n className: 'progressive-image-low',\n alt: options.alt || '',\n style: 'filter: blur(10px); transition: opacity 0.3s;'\n }\n },\n {\n img: {\n 'data-src': highResSrc,\n className: 'progressive-image-high',\n alt: options.alt || '',\n style: 'opacity: 0; transition: opacity 0.3s;',\n onload: 'this.style.opacity = 1; this.previousElementSibling.style.opacity = 0;'\n }\n }\n ]\n }\n };\n }\n}\n\n/**\n * Create a lazy loader\n */\nexport function createLazyLoader(options = {}) {\n return new LazyLoader(options);\n}\n\n/**\n * Create an image lazy loader\n */\nexport function createImageLazyLoader(options = {}) {\n return new ImageLazyLoader(options);\n}\n\n/**\n * Create a resource preloader\n */\nexport function createPreloader() {\n return new ResourcePreloader();\n}\n\n/**\n * Quick lazy image helper\n */\nexport function lazyImage(src, options = {}) {\n const loader = new ImageLazyLoader();\n return loader.createImage(src, options);\n}\n\n/**\n * Quick progressive image helper\n */\nexport function progressiveImage(lowRes, highRes, options = {}) {\n const loader = new ProgressiveImageLoader();\n return loader.createImage(lowRes, highRes, options);\n}\n\nexport default {\n LazyLoader,\n ImageLazyLoader,\n ResourcePreloader,\n ProgressiveImageLoader,\n createLazyLoader,\n createImageLazyLoader,\n createPreloader,\n lazyImage,\n progressiveImage\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coherent.js/performance",
3
- "version": "1.0.0-beta.5",
3
+ "version": "1.0.0-beta.7",
4
4
  "description": "Performance optimization utilities for Coherent.js",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -20,17 +20,25 @@
20
20
  "author": "Coherent.js Team",
21
21
  "license": "MIT",
22
22
  "peerDependencies": {
23
- "@coherent.js/core": "1.0.0-beta.5"
23
+ "@coherent.js/core": "1.0.0-beta.7"
24
24
  },
25
25
  "repository": {
26
26
  "type": "git",
27
27
  "url": "git+https://github.com/Tomdrouv1/coherent.js.git"
28
28
  },
29
+ "homepage": "https://github.com/Tomdrouv1/coherent.js",
30
+ "bugs": {
31
+ "url": "https://github.com/Tomdrouv1/coherent.js/issues"
32
+ },
29
33
  "publishConfig": {
30
34
  "access": "public"
31
35
  },
36
+ "engines": {
37
+ "node": ">=20.0.0"
38
+ },
32
39
  "types": "./types/index.d.ts",
33
40
  "files": [
41
+ "dist/",
34
42
  "LICENSE",
35
43
  "README.md",
36
44
  "types/"
@@ -38,6 +46,8 @@
38
46
  "sideEffects": false,
39
47
  "scripts": {
40
48
  "build": "node build.mjs",
41
- "clean": "rm -rf dist"
49
+ "clean": "rm -rf dist",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest"
42
52
  }
43
53
  }