@frybynite/image-cloud 0.5.2 → 0.6.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 (89) hide show
  1. package/README.md +46 -13
  2. package/dist/composite-CtUxtN2l.js +96 -0
  3. package/dist/composite-CtUxtN2l.js.map +1 -0
  4. package/dist/google-drive-CC-qFSV1.js +260 -0
  5. package/dist/google-drive-CC-qFSV1.js.map +1 -0
  6. package/dist/image-cloud-auto-init.js +345 -759
  7. package/dist/image-cloud-auto-init.js.map +1 -1
  8. package/dist/image-cloud.js +1248 -1204
  9. package/dist/image-cloud.js.map +1 -1
  10. package/dist/image-cloud.umd.js +5 -5
  11. package/dist/image-cloud.umd.js.map +1 -1
  12. package/dist/index.d.ts +1654 -23
  13. package/dist/loaders/all.d.ts +1654 -0
  14. package/dist/loaders/all.js +496 -0
  15. package/dist/loaders/all.js.map +1 -0
  16. package/dist/loaders/composite.d.ts +1654 -0
  17. package/dist/loaders/composite.js +96 -0
  18. package/dist/loaders/composite.js.map +1 -0
  19. package/dist/loaders/google-drive.d.ts +1654 -0
  20. package/dist/loaders/google-drive.js +260 -0
  21. package/dist/loaders/google-drive.js.map +1 -0
  22. package/dist/loaders/static.d.ts +1654 -0
  23. package/dist/loaders/static.js +219 -0
  24. package/dist/loaders/static.js.map +1 -0
  25. package/dist/react.d.ts +1654 -1
  26. package/dist/react.js +434 -848
  27. package/dist/react.js.map +1 -1
  28. package/dist/static-ejylHtQ4.js +219 -0
  29. package/dist/static-ejylHtQ4.js.map +1 -0
  30. package/dist/vue.d.ts +1654 -1
  31. package/dist/vue.js +442 -856
  32. package/dist/vue.js.map +1 -1
  33. package/dist/web-component.d.ts +1654 -1
  34. package/dist/web-component.js +429 -843
  35. package/dist/web-component.js.map +1 -1
  36. package/package.json +28 -15
  37. package/dist/ImageCloud.d.ts +0 -99
  38. package/dist/ImageCloud.d.ts.map +0 -1
  39. package/dist/config/adapter.d.ts +0 -50
  40. package/dist/config/adapter.d.ts.map +0 -1
  41. package/dist/config/defaults.d.ts +0 -118
  42. package/dist/config/defaults.d.ts.map +0 -1
  43. package/dist/config/types.d.ts +0 -599
  44. package/dist/config/types.d.ts.map +0 -1
  45. package/dist/engines/AnimationEngine.d.ts +0 -82
  46. package/dist/engines/AnimationEngine.d.ts.map +0 -1
  47. package/dist/engines/EntryAnimationEngine.d.ts +0 -161
  48. package/dist/engines/EntryAnimationEngine.d.ts.map +0 -1
  49. package/dist/engines/LayoutEngine.d.ts +0 -68
  50. package/dist/engines/LayoutEngine.d.ts.map +0 -1
  51. package/dist/engines/PathAnimator.d.ts +0 -50
  52. package/dist/engines/PathAnimator.d.ts.map +0 -1
  53. package/dist/engines/SwipeEngine.d.ts +0 -53
  54. package/dist/engines/SwipeEngine.d.ts.map +0 -1
  55. package/dist/engines/ZoomEngine.d.ts +0 -139
  56. package/dist/engines/ZoomEngine.d.ts.map +0 -1
  57. package/dist/image-cloud-auto-init.d.ts +0 -14
  58. package/dist/image-cloud-auto-init.d.ts.map +0 -1
  59. package/dist/index.d.ts.map +0 -1
  60. package/dist/layouts/ClusterPlacementLayout.d.ts +0 -40
  61. package/dist/layouts/ClusterPlacementLayout.d.ts.map +0 -1
  62. package/dist/layouts/GridPlacementLayout.d.ts +0 -27
  63. package/dist/layouts/GridPlacementLayout.d.ts.map +0 -1
  64. package/dist/layouts/RadialPlacementLayout.d.ts +0 -33
  65. package/dist/layouts/RadialPlacementLayout.d.ts.map +0 -1
  66. package/dist/layouts/RandomPlacementLayout.d.ts +0 -26
  67. package/dist/layouts/RandomPlacementLayout.d.ts.map +0 -1
  68. package/dist/layouts/SpiralPlacementLayout.d.ts +0 -43
  69. package/dist/layouts/SpiralPlacementLayout.d.ts.map +0 -1
  70. package/dist/layouts/WavePlacementLayout.d.ts +0 -48
  71. package/dist/layouts/WavePlacementLayout.d.ts.map +0 -1
  72. package/dist/loaders/CompositeLoader.d.ts +0 -37
  73. package/dist/loaders/CompositeLoader.d.ts.map +0 -1
  74. package/dist/loaders/GoogleDriveLoader.d.ts +0 -90
  75. package/dist/loaders/GoogleDriveLoader.d.ts.map +0 -1
  76. package/dist/loaders/ImageFilter.d.ts +0 -26
  77. package/dist/loaders/ImageFilter.d.ts.map +0 -1
  78. package/dist/loaders/StaticImageLoader.d.ts +0 -85
  79. package/dist/loaders/StaticImageLoader.d.ts.map +0 -1
  80. package/dist/react/index.d.ts +0 -16
  81. package/dist/react/index.d.ts.map +0 -1
  82. package/dist/styles/functionalStyles.d.ts +0 -11
  83. package/dist/styles/functionalStyles.d.ts.map +0 -1
  84. package/dist/utils/styleUtils.d.ts +0 -54
  85. package/dist/utils/styleUtils.d.ts.map +0 -1
  86. package/dist/vue/index.d.ts +0 -18
  87. package/dist/vue/index.d.ts.map +0 -1
  88. package/dist/web-component/index.d.ts +0 -15
  89. package/dist/web-component/index.d.ts.map +0 -1
@@ -0,0 +1,219 @@
1
+ const n = class a {
2
+ /**
3
+ * Register a loader implementation with the registry
4
+ * @param name - Loader identifier (e.g., 'static', 'google-drive', 'composite')
5
+ * @param Loader - Loader class constructor to register
6
+ */
7
+ static registerLoader(r, t) {
8
+ a.registry.set(r, t);
9
+ }
10
+ /**
11
+ * Get a registered loader implementation
12
+ * @param name - Loader identifier
13
+ * @returns Loader class constructor
14
+ * @throws Error if loader is not registered
15
+ */
16
+ static getLoader(r) {
17
+ const t = a.registry.get(r);
18
+ if (!t)
19
+ throw new Error(
20
+ `Loader "${r}" is not registered. Import "@frybynite/image-cloud/loaders/${r}" or "@frybynite/image-cloud/loaders/all".`
21
+ );
22
+ return t;
23
+ }
24
+ /**
25
+ * Check if a loader is registered
26
+ * @param name - Loader identifier
27
+ * @returns True if the loader is registered, false otherwise
28
+ */
29
+ static isRegistered(r) {
30
+ return a.registry.has(r);
31
+ }
32
+ };
33
+ n.registry = /* @__PURE__ */ new Map();
34
+ let l = n;
35
+ class c {
36
+ constructor(r) {
37
+ if (this._prepared = !1, this._discoveredUrls = [], this.validateUrls = r.validateUrls !== !1, this.validationTimeout = r.validationTimeout ?? 5e3, this.validationMethod = r.validationMethod ?? "head", this.debugLogging = r.debugLogging ?? !1, this.sources = r.sources ?? [], !this.sources || this.sources.length === 0)
38
+ throw new Error("StaticImageLoader requires at least one source to be configured");
39
+ this.log("StaticImageLoader initialized with config:", r);
40
+ }
41
+ /**
42
+ * Prepare the loader by discovering all images from configured sources
43
+ * @param filter - Filter to apply to discovered images
44
+ */
45
+ async prepare(r) {
46
+ this._discoveredUrls = [], this.log(`Processing ${this.sources.length} source(s)`);
47
+ for (const t of this.sources)
48
+ try {
49
+ const i = await this.processSource(t, r);
50
+ this._discoveredUrls.push(...i);
51
+ } catch (i) {
52
+ console.warn("Failed to process source:", t, i);
53
+ }
54
+ this._prepared = !0, this.log(`Successfully loaded ${this._discoveredUrls.length} image(s)`);
55
+ }
56
+ /**
57
+ * Get the number of discovered images
58
+ * @throws Error if called before prepare()
59
+ */
60
+ imagesLength() {
61
+ if (!this._prepared)
62
+ throw new Error("StaticImageLoader.imagesLength() called before prepare()");
63
+ return this._discoveredUrls.length;
64
+ }
65
+ /**
66
+ * Get the ordered list of image URLs
67
+ * @throws Error if called before prepare()
68
+ */
69
+ imageURLs() {
70
+ if (!this._prepared)
71
+ throw new Error("StaticImageLoader.imageURLs() called before prepare()");
72
+ return [...this._discoveredUrls];
73
+ }
74
+ /**
75
+ * Check if the loader has been prepared
76
+ */
77
+ isPrepared() {
78
+ return this._prepared;
79
+ }
80
+ /**
81
+ * Process a single source object using shape-based detection
82
+ * @param source - Source configuration detected by key presence
83
+ * @param filter - Filter to apply to discovered images
84
+ * @returns Promise resolving to array of valid URLs from this source
85
+ */
86
+ async processSource(r, t) {
87
+ return r ? "urls" in r ? await this.processUrls(r.urls, t) : "path" in r ? await this.processPath(r.path, r.files, t) : "json" in r ? await this.processJson(r.json, t) : (console.warn("Unknown source shape:", r), []) : (console.warn("Invalid source object:", r), []);
88
+ }
89
+ /**
90
+ * Process a list of direct URLs
91
+ * @param urls - Array of image URLs
92
+ * @param filter - Filter to apply to discovered images
93
+ * @returns Promise resolving to array of validated URLs
94
+ */
95
+ async processUrls(r, t) {
96
+ if (!Array.isArray(r))
97
+ return console.warn("URLs must be an array:", r), [];
98
+ const i = [];
99
+ for (const s of r) {
100
+ const e = s.split("/").pop() || s;
101
+ if (!t.isAllowed(e)) {
102
+ this.log(`Skipping filtered URL: ${s}`);
103
+ continue;
104
+ }
105
+ this.validateUrls ? await this.validateUrl(s) ? i.push(s) : console.warn(`Skipping invalid/missing URL: ${s}`) : i.push(s);
106
+ }
107
+ return i;
108
+ }
109
+ /**
110
+ * Process a path-based source
111
+ * @param basePath - Base path (relative or absolute)
112
+ * @param files - Array of filenames
113
+ * @param filter - Filter to apply to discovered images
114
+ * @returns Promise resolving to array of validated URLs
115
+ */
116
+ async processPath(r, t, i) {
117
+ if (!Array.isArray(t))
118
+ return console.warn("files must be an array:", t), [];
119
+ const s = [];
120
+ for (const e of t) {
121
+ if (!i.isAllowed(e)) {
122
+ this.log(`Skipping filtered file: ${e}`);
123
+ continue;
124
+ }
125
+ const o = this.constructUrl(r, e);
126
+ this.validateUrls ? await this.validateUrl(o) ? s.push(o) : console.warn(`Skipping invalid/missing file: ${o}`) : s.push(o);
127
+ }
128
+ return s;
129
+ }
130
+ /**
131
+ * Process a JSON endpoint source
132
+ * Fetches a JSON endpoint that returns { images: string[] }
133
+ * @param url - JSON endpoint URL
134
+ * @param filter - Filter to apply to discovered images
135
+ * @returns Promise resolving to array of validated URLs
136
+ */
137
+ async processJson(r, t) {
138
+ this.log(`Fetching JSON endpoint: ${r}`);
139
+ const i = new AbortController(), s = setTimeout(() => i.abort(), 1e4);
140
+ try {
141
+ const e = await fetch(r, { signal: i.signal });
142
+ if (clearTimeout(s), !e.ok)
143
+ throw new Error(`HTTP ${e.status} fetching ${r}`);
144
+ const o = await e.json();
145
+ if (!o || !Array.isArray(o.images))
146
+ throw new Error('JSON source must return JSON with shape { "images": ["url1", "url2", ...] }');
147
+ return this.log(`JSON endpoint returned ${o.images.length} image(s)`), await this.processUrls(o.images, t);
148
+ } catch (e) {
149
+ throw clearTimeout(s), e instanceof Error && e.name === "AbortError" ? new Error(`Timeout fetching JSON endpoint: ${r}`) : e;
150
+ }
151
+ }
152
+ /**
153
+ * Validate a single URL using HEAD request
154
+ * @param url - URL to validate
155
+ * @returns Promise resolving to true if valid and accessible
156
+ */
157
+ async validateUrl(r) {
158
+ if (this.validationMethod === "none")
159
+ return !0;
160
+ if (this.validationMethod === "simple")
161
+ try {
162
+ return typeof window < "u" ? new URL(r, window.location.origin) : new URL(r), !0;
163
+ } catch {
164
+ return !1;
165
+ }
166
+ if (typeof window > "u")
167
+ return !0;
168
+ if (!(r.startsWith(window.location.origin) || r.startsWith("/")))
169
+ return this.log(`Skipping validation for cross-origin URL: ${r}`), !0;
170
+ try {
171
+ const t = new AbortController(), i = setTimeout(() => t.abort(), this.validationTimeout), s = await fetch(r, {
172
+ method: "HEAD",
173
+ signal: t.signal
174
+ });
175
+ return clearTimeout(i), s.ok ? !0 : (this.log(`Validation failed for ${r}: HTTP ${s.status}`), !1);
176
+ } catch (t) {
177
+ return t instanceof Error && (t.name === "AbortError" ? this.log(`Validation timeout for ${r}`) : this.log(`Validation failed for ${r}:`, t.message)), !1;
178
+ }
179
+ }
180
+ /**
181
+ * Construct full URL from basePath and filename
182
+ * @param basePath - Base path (relative or absolute)
183
+ * @param filename - Filename to append
184
+ * @returns Complete URL
185
+ */
186
+ constructUrl(r, t) {
187
+ const i = r.replace(/\/$/, "");
188
+ if (this.isAbsoluteUrl(r))
189
+ return `${i}/${t}`;
190
+ if (typeof window > "u")
191
+ return `${i}/${t}`;
192
+ const s = window.location.origin, e = (r.startsWith("/") ? r : "/" + r).replace(/\/$/, "");
193
+ return `${s}${e}/${t}`;
194
+ }
195
+ /**
196
+ * Check if URL is absolute (contains protocol)
197
+ * @param url - URL to check
198
+ * @returns True if absolute URL
199
+ */
200
+ isAbsoluteUrl(r) {
201
+ try {
202
+ return new URL(r), !0;
203
+ } catch {
204
+ return !1;
205
+ }
206
+ }
207
+ /**
208
+ * Debug logging helper
209
+ * @param args - Arguments to log
210
+ */
211
+ log(...r) {
212
+ this.debugLogging && typeof console < "u" && console.log(...r);
213
+ }
214
+ }
215
+ l.registerLoader("static", c);
216
+ export {
217
+ c as StaticImageLoader
218
+ };
219
+ //# sourceMappingURL=static-ejylHtQ4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-ejylHtQ4.js","sources":["loaders/static.js"],"sourcesContent":["const a = class a {\n /**\n * Register a loader implementation with the registry\n * @param name - Loader identifier (e.g., 'static', 'google-drive', 'composite')\n * @param Loader - Loader class constructor to register\n */\n static registerLoader(e, t) {\n a.registry.set(e, t);\n }\n /**\n * Get a registered loader implementation\n * @param name - Loader identifier\n * @returns Loader class constructor\n * @throws Error if loader is not registered\n */\n static getLoader(e) {\n const t = a.registry.get(e);\n if (!t)\n throw new Error(\n `Loader \"${e}\" is not registered. Import \"@frybynite/image-cloud/loaders/${e}\" or \"@frybynite/image-cloud/loaders/all\".`\n );\n return t;\n }\n /**\n * Check if a loader is registered\n * @param name - Loader identifier\n * @returns True if the loader is registered, false otherwise\n */\n static isRegistered(e) {\n return a.registry.has(e);\n }\n};\na.registry = /* @__PURE__ */ new Map();\nlet n = a;\nclass l {\n constructor(e) {\n if (this._prepared = !1, this._discoveredUrls = [], this.validateUrls = e.validateUrls !== !1, this.validationTimeout = e.validationTimeout ?? 5e3, this.validationMethod = e.validationMethod ?? \"head\", this.debugLogging = e.debugLogging ?? !1, this.sources = e.sources ?? [], !this.sources || this.sources.length === 0)\n throw new Error(\"StaticImageLoader requires at least one source to be configured\");\n this.log(\"StaticImageLoader initialized with config:\", e);\n }\n /**\n * Prepare the loader by discovering all images from configured sources\n * @param filter - Filter to apply to discovered images\n */\n async prepare(e) {\n this._discoveredUrls = [], this.log(`Processing ${this.sources.length} source(s)`);\n for (const t of this.sources)\n try {\n const r = await this.processSource(t, e);\n this._discoveredUrls.push(...r);\n } catch (r) {\n console.warn(\"Failed to process source:\", t, r);\n }\n this._prepared = !0, this.log(`Successfully loaded ${this._discoveredUrls.length} image(s)`);\n }\n /**\n * Get the number of discovered images\n * @throws Error if called before prepare()\n */\n imagesLength() {\n if (!this._prepared)\n throw new Error(\"StaticImageLoader.imagesLength() called before prepare()\");\n return this._discoveredUrls.length;\n }\n /**\n * Get the ordered list of image URLs\n * @throws Error if called before prepare()\n */\n imageURLs() {\n if (!this._prepared)\n throw new Error(\"StaticImageLoader.imageURLs() called before prepare()\");\n return [...this._discoveredUrls];\n }\n /**\n * Check if the loader has been prepared\n */\n isPrepared() {\n return this._prepared;\n }\n /**\n * Process a single source object using shape-based detection\n * @param source - Source configuration detected by key presence\n * @param filter - Filter to apply to discovered images\n * @returns Promise resolving to array of valid URLs from this source\n */\n async processSource(e, t) {\n return e ? \"urls\" in e ? await this.processUrls(e.urls, t) : \"path\" in e ? await this.processPath(e.path, e.files, t) : \"json\" in e ? await this.processJson(e.json, t) : (console.warn(\"Unknown source shape:\", e), []) : (console.warn(\"Invalid source object:\", e), []);\n }\n /**\n * Process a list of direct URLs\n * @param urls - Array of image URLs\n * @param filter - Filter to apply to discovered images\n * @returns Promise resolving to array of validated URLs\n */\n async processUrls(e, t) {\n if (!Array.isArray(e))\n return console.warn(\"URLs must be an array:\", e), [];\n const r = [];\n for (const i of e) {\n const s = i.split(\"/\").pop() || i;\n if (!t.isAllowed(s)) {\n this.log(`Skipping filtered URL: ${i}`);\n continue;\n }\n this.validateUrls ? await this.validateUrl(i) ? r.push(i) : console.warn(`Skipping invalid/missing URL: ${i}`) : r.push(i);\n }\n return r;\n }\n /**\n * Process a path-based source\n * @param basePath - Base path (relative or absolute)\n * @param files - Array of filenames\n * @param filter - Filter to apply to discovered images\n * @returns Promise resolving to array of validated URLs\n */\n async processPath(e, t, r) {\n if (!Array.isArray(t))\n return console.warn(\"files must be an array:\", t), [];\n const i = [];\n for (const s of t) {\n if (!r.isAllowed(s)) {\n this.log(`Skipping filtered file: ${s}`);\n continue;\n }\n const o = this.constructUrl(e, s);\n this.validateUrls ? await this.validateUrl(o) ? i.push(o) : console.warn(`Skipping invalid/missing file: ${o}`) : i.push(o);\n }\n return i;\n }\n /**\n * Process a JSON endpoint source\n * Fetches a JSON endpoint that returns { images: string[] }\n * @param url - JSON endpoint URL\n * @param filter - Filter to apply to discovered images\n * @returns Promise resolving to array of validated URLs\n */\n async processJson(e, t) {\n this.log(`Fetching JSON endpoint: ${e}`);\n const r = new AbortController(), i = setTimeout(() => r.abort(), 1e4);\n try {\n const s = await fetch(e, { signal: r.signal });\n if (clearTimeout(i), !s.ok)\n throw new Error(`HTTP ${s.status} fetching ${e}`);\n const o = await s.json();\n if (!o || !Array.isArray(o.images))\n throw new Error('JSON source must return JSON with shape { \"images\": [\"url1\", \"url2\", ...] }');\n return this.log(`JSON endpoint returned ${o.images.length} image(s)`), await this.processUrls(o.images, t);\n } catch (s) {\n throw clearTimeout(i), s instanceof Error && s.name === \"AbortError\" ? new Error(`Timeout fetching JSON endpoint: ${e}`) : s;\n }\n }\n /**\n * Validate a single URL using HEAD request\n * @param url - URL to validate\n * @returns Promise resolving to true if valid and accessible\n */\n async validateUrl(e) {\n if (this.validationMethod === \"none\")\n return !0;\n if (this.validationMethod === \"simple\")\n try {\n return typeof window < \"u\" ? new URL(e, window.location.origin) : new URL(e), !0;\n } catch {\n return !1;\n }\n if (typeof window > \"u\")\n return !0;\n if (!(e.startsWith(window.location.origin) || e.startsWith(\"/\")))\n return this.log(`Skipping validation for cross-origin URL: ${e}`), !0;\n try {\n const r = new AbortController(), i = setTimeout(() => r.abort(), this.validationTimeout), s = await fetch(e, {\n method: \"HEAD\",\n signal: r.signal\n });\n return clearTimeout(i), s.ok ? !0 : (this.log(`Validation failed for ${e}: HTTP ${s.status}`), !1);\n } catch (r) {\n return r instanceof Error && (r.name === \"AbortError\" ? this.log(`Validation timeout for ${e}`) : this.log(`Validation failed for ${e}:`, r.message)), !1;\n }\n }\n /**\n * Construct full URL from basePath and filename\n * @param basePath - Base path (relative or absolute)\n * @param filename - Filename to append\n * @returns Complete URL\n */\n constructUrl(e, t) {\n const r = e.replace(/\\/$/, \"\");\n if (this.isAbsoluteUrl(e))\n return `${r}/${t}`;\n if (typeof window > \"u\")\n return `${r}/${t}`;\n const i = window.location.origin, o = (e.startsWith(\"/\") ? e : \"/\" + e).replace(/\\/$/, \"\");\n return `${i}${o}/${t}`;\n }\n /**\n * Check if URL is absolute (contains protocol)\n * @param url - URL to check\n * @returns True if absolute URL\n */\n isAbsoluteUrl(e) {\n try {\n return new URL(e), !0;\n } catch {\n return !1;\n }\n }\n /**\n * Debug logging helper\n * @param args - Arguments to log\n */\n log(...e) {\n this.debugLogging && typeof console < \"u\" && console.log(...e);\n }\n}\nn.registerLoader(\"static\", l);\nexport {\n l as StaticImageLoader\n};\n//# sourceMappingURL=static.js.map\n"],"names":["a","e","n","l","r","i","s","o"],"mappings":"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"}