@kongyo2/cards-css 0.1.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 (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +86 -0
  3. package/dist/active-registry.js +10 -0
  4. package/dist/active-registry.js.map +1 -0
  5. package/dist/dom.js +66 -0
  6. package/dist/dom.js.map +1 -0
  7. package/dist/holo-card.js +450 -0
  8. package/dist/holo-card.js.map +1 -0
  9. package/dist/holo-cards.css +601 -0
  10. package/dist/index.js +15 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/math.js +4 -0
  13. package/dist/math.js.map +1 -0
  14. package/dist/orientation.js +64 -0
  15. package/dist/orientation.js.map +1 -0
  16. package/dist/spring.js +123 -0
  17. package/dist/spring.js.map +1 -0
  18. package/dist/subscribers.js +26 -0
  19. package/dist/subscribers.js.map +1 -0
  20. package/dist/textures.js +178 -0
  21. package/dist/textures.js.map +1 -0
  22. package/dist/ticker.js +32 -0
  23. package/dist/ticker.js.map +1 -0
  24. package/dist/types.js +2 -0
  25. package/dist/types.js.map +1 -0
  26. package/dist-types/active-registry.d.ts +6 -0
  27. package/dist-types/active-registry.d.ts.map +1 -0
  28. package/dist-types/dom.d.ts +18 -0
  29. package/dist-types/dom.d.ts.map +1 -0
  30. package/dist-types/holo-card.d.ts +58 -0
  31. package/dist-types/holo-card.d.ts.map +1 -0
  32. package/dist-types/index.d.ts +13 -0
  33. package/dist-types/index.d.ts.map +1 -0
  34. package/dist-types/math.d.ts +4 -0
  35. package/dist-types/math.d.ts.map +1 -0
  36. package/dist-types/orientation.d.ts +13 -0
  37. package/dist-types/orientation.d.ts.map +1 -0
  38. package/dist-types/spring.d.ts +32 -0
  39. package/dist-types/spring.d.ts.map +1 -0
  40. package/dist-types/subscribers.d.ts +10 -0
  41. package/dist-types/subscribers.d.ts.map +1 -0
  42. package/dist-types/textures.d.ts +23 -0
  43. package/dist-types/textures.d.ts.map +1 -0
  44. package/dist-types/ticker.d.ts +7 -0
  45. package/dist-types/ticker.d.ts.map +1 -0
  46. package/dist-types/types.d.ts +21 -0
  47. package/dist-types/types.d.ts.map +1 -0
  48. package/package.json +75 -0
  49. package/src/active-registry.ts +15 -0
  50. package/src/dom.ts +79 -0
  51. package/src/holo-card.ts +525 -0
  52. package/src/index.ts +35 -0
  53. package/src/math.ts +6 -0
  54. package/src/orientation.ts +83 -0
  55. package/src/spring.ts +158 -0
  56. package/src/styles/base.css +262 -0
  57. package/src/styles/effects/cosmos.css +143 -0
  58. package/src/styles/effects/glitter.css +103 -0
  59. package/src/styles/effects/holo.css +127 -0
  60. package/src/styles/effects/reverse.css +55 -0
  61. package/src/styles/index.css +5 -0
  62. package/src/subscribers.ts +30 -0
  63. package/src/textures.ts +310 -0
  64. package/src/ticker.ts +46 -0
  65. package/src/types.ts +22 -0
@@ -0,0 +1,64 @@
1
+ import { Subscribers } from "./subscribers.js";
2
+ const rawOrientation = (event) => {
3
+ if (!event) {
4
+ return { alpha: 0, beta: 0, gamma: 0 };
5
+ }
6
+ return { alpha: event.alpha ?? 0, beta: event.beta ?? 0, gamma: event.gamma ?? 0 };
7
+ };
8
+ let firstReading = true;
9
+ let baseOrientation = rawOrientation();
10
+ export const resetBaseOrientation = () => {
11
+ firstReading = true;
12
+ baseOrientation = rawOrientation();
13
+ };
14
+ const toRelative = (event) => {
15
+ const o = rawOrientation(event);
16
+ return {
17
+ absolute: o,
18
+ relative: {
19
+ alpha: o.alpha - baseOrientation.alpha,
20
+ beta: o.beta - baseOrientation.beta,
21
+ gamma: o.gamma - baseOrientation.gamma,
22
+ },
23
+ };
24
+ };
25
+ const subscribers = new Subscribers(() => toRelative());
26
+ let listening = false;
27
+ const handleOrientation = (event) => {
28
+ if (firstReading) {
29
+ firstReading = false;
30
+ baseOrientation = rawOrientation(event);
31
+ }
32
+ subscribers.emit(toRelative(event));
33
+ };
34
+ export const subscribeOrientation = (fn) => {
35
+ const unsubscribe = subscribers.subscribe(fn);
36
+ if (!listening && typeof window !== "undefined") {
37
+ listening = true;
38
+ window.addEventListener("deviceorientation", handleOrientation, true);
39
+ }
40
+ return () => {
41
+ unsubscribe();
42
+ if (subscribers.size === 0 && listening && typeof window !== "undefined") {
43
+ listening = false;
44
+ window.removeEventListener("deviceorientation", handleOrientation, true);
45
+ }
46
+ };
47
+ };
48
+ export const requestOrientationPermission = async () => {
49
+ if (typeof DeviceOrientationEvent === "undefined") {
50
+ return false;
51
+ }
52
+ const requester = DeviceOrientationEvent;
53
+ if (typeof requester.requestPermission !== "function") {
54
+ return true;
55
+ }
56
+ try {
57
+ const result = await requester.requestPermission();
58
+ return result === "granted";
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ };
64
+ //# sourceMappingURL=orientation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orientation.js","sourceRoot":"","sources":["../src/orientation.ts"],"names":[],"mappings":"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"}
package/dist/spring.js ADDED
@@ -0,0 +1,123 @@
1
+ import { loop, now } from "./ticker.js";
2
+ import { Subscribers } from "./subscribers.js";
3
+ const tickScalar = (ctx, lastValue, currentValue, targetValue) => {
4
+ const delta = targetValue - currentValue;
5
+ const velocity = (currentValue - lastValue) / (ctx.dt || 1 / 60);
6
+ const spring = ctx.stiffness * delta;
7
+ const damper = ctx.damping * velocity;
8
+ const acceleration = (spring - damper) * ctx.invMass;
9
+ const d = (velocity + acceleration) * ctx.dt;
10
+ if (Math.abs(d) < ctx.precision && Math.abs(delta) < ctx.precision) {
11
+ return targetValue;
12
+ }
13
+ ctx.settled = false;
14
+ return currentValue + d;
15
+ };
16
+ const tick = (ctx, last, current, target) => {
17
+ if (typeof current === "number") {
18
+ return tickScalar(ctx, last, current, target);
19
+ }
20
+ const cur = current;
21
+ const lst = last;
22
+ const tgt = target;
23
+ const result = {};
24
+ for (const key in cur) {
25
+ const c = cur[key] ?? 0;
26
+ result[key] = tickScalar(ctx, lst[key] ?? c, c, tgt[key] ?? c);
27
+ }
28
+ return result;
29
+ };
30
+ export class Spring {
31
+ stiffness;
32
+ damping;
33
+ precision;
34
+ value;
35
+ lastValue;
36
+ targetValue;
37
+ invMass = 1;
38
+ invMassRecoveryRate = 0;
39
+ cancelTask = false;
40
+ task = null;
41
+ lastTime = 0;
42
+ currentToken = null;
43
+ subscribers = new Subscribers(() => this.value);
44
+ constructor(value, opts = {}) {
45
+ this.value = value;
46
+ this.lastValue = value;
47
+ this.targetValue = value;
48
+ this.stiffness = opts.stiffness ?? 0.15;
49
+ this.damping = opts.damping ?? 0.8;
50
+ this.precision = opts.precision ?? 0.01;
51
+ }
52
+ get current() {
53
+ return this.value;
54
+ }
55
+ subscribe(fn) {
56
+ return this.subscribers.subscribe(fn);
57
+ }
58
+ notify() {
59
+ this.subscribers.emit(this.value);
60
+ }
61
+ set(newValue, opts = {}) {
62
+ this.targetValue = newValue;
63
+ const token = (this.currentToken = {});
64
+ if (opts.hard || (this.stiffness >= 1 && this.damping >= 1)) {
65
+ this.cancelTask = true;
66
+ if (this.task) {
67
+ this.task.abort();
68
+ this.task = null;
69
+ }
70
+ this.lastTime = now();
71
+ this.lastValue = newValue;
72
+ this.value = newValue;
73
+ this.notify();
74
+ return Promise.resolve();
75
+ }
76
+ if (opts.soft) {
77
+ const rate = opts.soft === true ? 0.5 : opts.soft;
78
+ this.invMassRecoveryRate = 1 / (rate * 60);
79
+ this.invMass = 0;
80
+ }
81
+ let handle = this.task;
82
+ if (!handle) {
83
+ this.lastTime = now();
84
+ this.cancelTask = false;
85
+ handle = loop((time) => {
86
+ if (this.cancelTask) {
87
+ this.cancelTask = false;
88
+ this.task = null;
89
+ return false;
90
+ }
91
+ this.invMass = Math.min(this.invMass + this.invMassRecoveryRate, 1);
92
+ const ctx = {
93
+ invMass: this.invMass,
94
+ stiffness: this.stiffness,
95
+ damping: this.damping,
96
+ precision: this.precision,
97
+ settled: true,
98
+ dt: ((time - this.lastTime) * 60) / 1000,
99
+ };
100
+ const next = tick(ctx, this.lastValue, this.value, this.targetValue);
101
+ this.lastTime = time;
102
+ this.lastValue = this.value;
103
+ this.value = next;
104
+ this.notify();
105
+ if (ctx.settled) {
106
+ this.task = null;
107
+ }
108
+ return !ctx.settled;
109
+ });
110
+ this.task = handle;
111
+ }
112
+ return new Promise((fulfil) => {
113
+ void handle.promise.then(() => (token === this.currentToken ? fulfil() : undefined));
114
+ });
115
+ }
116
+ destroy() {
117
+ this.cancelTask = true;
118
+ this.task?.abort();
119
+ this.task = null;
120
+ this.subscribers.clear();
121
+ }
122
+ }
123
+ //# sourceMappingURL=spring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spring.js","sourceRoot":"","sources":["../src/spring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export class Subscribers {
2
+ fns = new Set();
3
+ getCurrent;
4
+ constructor(getCurrent) {
5
+ this.getCurrent = getCurrent;
6
+ }
7
+ subscribe(fn) {
8
+ this.fns.add(fn);
9
+ fn(this.getCurrent());
10
+ return () => {
11
+ this.fns.delete(fn);
12
+ };
13
+ }
14
+ emit(value) {
15
+ for (const fn of this.fns) {
16
+ fn(value);
17
+ }
18
+ }
19
+ get size() {
20
+ return this.fns.size;
21
+ }
22
+ clear() {
23
+ this.fns.clear();
24
+ }
25
+ }
26
+ //# sourceMappingURL=subscribers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribers.js","sourceRoot":"","sources":["../src/subscribers.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IACL,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;IACpC,UAAU,CAAU;IAErC,YAAY,UAAmB;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,SAAS,CAAC,EAAsB;QAC9B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAQ;QACX,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,EAAE,CAAC,KAAK,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,178 @@
1
+ export const DEFAULT_TEXTURE_SEED = 0x9e3779b9;
2
+ const mulberry32 = (seed) => {
3
+ let a = seed >>> 0;
4
+ return () => {
5
+ a = (a + 0x6d2b79f5) | 0;
6
+ let t = Math.imul(a ^ (a >>> 15), 1 | a);
7
+ t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
8
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
9
+ };
10
+ };
11
+ const svgToDataUri = (svg) => {
12
+ const cleaned = svg
13
+ .replace(/>\s+</g, "><")
14
+ .replace(/\s{2,}/g, " ")
15
+ .trim();
16
+ const encoded = cleaned
17
+ .replace(/%/g, "%25")
18
+ .replace(/</g, "%3C")
19
+ .replace(/>/g, "%3E")
20
+ .replace(/#/g, "%23")
21
+ .replace(/&/g, "%26")
22
+ .replace(/"/g, "'")
23
+ .replace(/\n/g, "%0A");
24
+ return `data:image/svg+xml,${encoded}`;
25
+ };
26
+ const svgDocument = (width, height, defs, body) => svgToDataUri(`<svg xmlns='http://www.w3.org/2000/svg' width='${width}' height='${height}' viewBox='0 0 ${width} ${height}'>` +
27
+ (defs ? `<defs>${defs}</defs>` : "") +
28
+ body +
29
+ `</svg>`);
30
+ const pick = (rng, items) => {
31
+ const value = items[Math.floor(rng() * items.length)];
32
+ return value ?? items[0];
33
+ };
34
+ const rand = (rng, min, max) => min + rng() * (max - min);
35
+ const circle = (x, y, r, fill, opacity, opts = {}) => {
36
+ const filter = opts.filter ? ` filter='url(${opts.filter})'` : "";
37
+ return `<circle cx='${x.toFixed(1)}' cy='${y.toFixed(1)}' r='${r.toFixed(opts.rDigits ?? 2)}' fill='${fill}' opacity='${opacity.toFixed(2)}'${filter}/>`;
38
+ };
39
+ const gaussianBlurFilter = (id, std, margin, size) => `<filter id='${id}' x='${margin}' y='${margin}' width='${size}' height='${size}'><feGaussianBlur stdDeviation='${std}'/></filter>`;
40
+ const discreteTable = (keep, steps = 32) => {
41
+ const ones = Math.min(steps, Math.max(1, Math.round(steps * keep)));
42
+ const cells = [];
43
+ for (let i = 0; i < steps - ones; i += 1) {
44
+ cells.push("0");
45
+ }
46
+ for (let i = 0; i < ones; i += 1) {
47
+ cells.push("1");
48
+ }
49
+ return cells.join(" ");
50
+ };
51
+ const speckleField = (idBase, seed, layers, stitch = true) => {
52
+ let defs = "";
53
+ let body = "";
54
+ const stitchTiles = stitch ? "stitch" : "noStitch";
55
+ layers.forEach((layer, index) => {
56
+ const id = `${idBase}${index}`;
57
+ defs +=
58
+ `<filter id='${id}' x='0%' y='0%' width='100%' height='100%'>` +
59
+ `<feTurbulence type='fractalNoise' baseFrequency='${layer.freq}' numOctaves='1' seed='${(seed + index * 37) % 9973}' stitchTiles='${stitchTiles}' result='n'/>` +
60
+ `<feColorMatrix in='n' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0' result='a'/>` +
61
+ `<feComponentTransfer in='a' result='m'><feFuncA type='discrete' tableValues='${discreteTable(layer.keep)}'/></feComponentTransfer>` +
62
+ `<feComposite in='SourceGraphic' in2='m' operator='in'/>` +
63
+ `</filter>`;
64
+ body += `<rect width='100%' height='100%' fill='${layer.color}' filter='url(#${id})' opacity='${layer.opacity}'/>`;
65
+ });
66
+ return { defs, body };
67
+ };
68
+ const clusterBlobs = (rng, width, height, count, palette, blurId, radius, opacity) => {
69
+ let blobs = "";
70
+ for (let i = 0; i < count; i += 1) {
71
+ blobs += circle(rng() * width, rng() * height, rand(rng, radius[0], radius[1]), pick(rng, palette), rand(rng, opacity[0], opacity[1]), { rDigits: 1 });
72
+ }
73
+ return `<g filter='url(${blurId})'>${blobs}</g>`;
74
+ };
75
+ const brightStars = (rng, width, height, count, glowId) => {
76
+ let stars = "";
77
+ for (let i = 0; i < count; i += 1) {
78
+ const x = rng() * width;
79
+ const y = rng() * height;
80
+ const r = rand(rng, 1.1, 2.6);
81
+ stars +=
82
+ circle(x, y, r * 2.6, "#ffffff", 0.14, { rDigits: 1, filter: glowId }) +
83
+ circle(x, y, r, "#ffffff", rand(rng, 0.75, 1));
84
+ }
85
+ return stars;
86
+ };
87
+ const ringClusters = (rng, width, height, count, color) => {
88
+ let out = "";
89
+ for (let i = 0; i < count; i += 1) {
90
+ const cx = rng() * width;
91
+ const cy = rng() * height;
92
+ const radius = rand(rng, 14, 30);
93
+ const dots = 26 + Math.floor(rng() * 22);
94
+ for (let k = 0; k < dots; k += 1) {
95
+ const angle = rng() * Math.PI * 2;
96
+ const rr = radius * rand(rng, 0.78, 1.28);
97
+ out += circle(cx + Math.cos(angle) * rr, cy + Math.sin(angle) * rr * 1.05, rand(rng, 0.5, 1.5), color, rand(rng, 0.4, 0.9));
98
+ }
99
+ }
100
+ return out;
101
+ };
102
+ const COSMOS_W = 512;
103
+ const COSMOS_H = 716;
104
+ const cosmosDefs = (extraDefs) => gaussianBlurFilter("blur", 2.6, "-30%", "160%") + gaussianBlurFilter("glow", 2.4, "-200%", "500%") + extraDefs;
105
+ export const grainTexture = (seed) => svgDocument(200, 200, `<filter id='grain' x='0%' y='0%' width='100%' height='100%'>` +
106
+ `<feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' seed='${seed % 9973}' stitchTiles='stitch' result='n'/>` +
107
+ `<feColorMatrix in='n' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0' result='a'/>` +
108
+ `<feComponentTransfer in='a' result='m'><feFuncA type='discrete' tableValues='${discreteTable(0.28)}'/></feComponentTransfer>` +
109
+ `<feFlood flood-color='#ffffff' result='w'/>` +
110
+ `<feComposite in='w' in2='m' operator='in'/>` +
111
+ `</filter>`, `<rect width='100%' height='100%' fill='#000000'/>` +
112
+ `<rect width='100%' height='100%' filter='url(#grain)' opacity='0.4'/>`);
113
+ export const glitterTexture = (seed) => {
114
+ const { defs, body } = speckleField("gl", seed, [
115
+ { freq: 0.82, keep: 0.42, color: "#8f8f8f", opacity: 0.85 },
116
+ { freq: 0.7, keep: 0.22, color: "#dcdcdc", opacity: 1 },
117
+ { freq: 0.6, keep: 0.08, color: "#ffffff", opacity: 1 },
118
+ ]);
119
+ const rng = mulberry32(seed + 99);
120
+ const flares = brightStars(rng, 240, 240, 16, "#glow");
121
+ return svgDocument(240, 240, `${gaussianBlurFilter("glow", 1.5, "-200%", "500%")}${defs}`, `<rect width='100%' height='100%' fill='#050505'/>${body}${flares}`);
122
+ };
123
+ const cosmosLayer = (idBase, seed, layers, paint) => {
124
+ const rng = mulberry32(seed);
125
+ const { defs, body } = speckleField(idBase, seed, layers, false);
126
+ return svgDocument(COSMOS_W, COSMOS_H, cosmosDefs(defs), paint(rng, body));
127
+ };
128
+ const cosmosBottom = (seed) => cosmosLayer("csb", seed, [
129
+ { freq: 0.85, keep: 0.32, color: "#97a3c8", opacity: 0.8 },
130
+ { freq: 0.72, keep: 0.13, color: "#ffffff", opacity: 0.95 },
131
+ { freq: 0.76, keep: 0.05, color: "#9fb6ff", opacity: 0.85 },
132
+ { freq: 0.78, keep: 0.04, color: "#ffc2d8", opacity: 0.8 },
133
+ ], (rng, body) => {
134
+ const clusters = clusterBlobs(rng, COSMOS_W, COSMOS_H, 26, ["#465777", "#6d6088", "#9a7790", "#aab3cc", "#566f9e"], "#blur", [5, 14], [0.18, 0.4]);
135
+ const stars = brightStars(rng, COSMOS_W, COSMOS_H, 24, "#glow");
136
+ return `<rect width='100%' height='100%' fill='#04030c'/>${clusters}${body}${stars}`;
137
+ });
138
+ const cosmosMiddle = (seed) => cosmosLayer("csm", seed, [
139
+ { freq: 0.66, keep: 0.2, color: "#241a4e", opacity: 0.95 },
140
+ { freq: 0.58, keep: 0.11, color: "#4a2168", opacity: 0.9 },
141
+ { freq: 0.52, keep: 0.055, color: "#7a1f6b", opacity: 0.85 },
142
+ { freq: 0.5, keep: 0.03, color: "#c87a3a", opacity: 0.85 },
143
+ ], (rng, body) => {
144
+ const clusters = clusterBlobs(rng, COSMOS_W, COSMOS_H, 16, ["#241a4e", "#3a2168", "#1a1430"], "#blur", [7, 18], [0.45, 0.8]);
145
+ return `${clusters}${body}`;
146
+ });
147
+ const cosmosTop = (seed) => cosmosLayer("cst", seed, [
148
+ { freq: 0.62, keep: 0.06, color: "#6a6a76", opacity: 0.85 },
149
+ { freq: 0.52, keep: 0.035, color: "#42424c", opacity: 0.9 },
150
+ ], (rng, body) => {
151
+ const rings = ringClusters(rng, COSMOS_W, COSMOS_H, 7, "#54545f");
152
+ return `${body}${rings}`;
153
+ });
154
+ export const generateTextures = (options = {}) => {
155
+ const seed = options.seed ?? DEFAULT_TEXTURE_SEED;
156
+ return {
157
+ grain: grainTexture(seed),
158
+ glitter: glitterTexture(seed + 1),
159
+ cosmosBottom: cosmosBottom(seed + 2),
160
+ cosmosMiddle: cosmosMiddle(seed + 3),
161
+ cosmosTop: cosmosTop(seed + 4),
162
+ };
163
+ };
164
+ export const TEXTURE_VARIABLES = {
165
+ grain: "--hc-grain",
166
+ glitter: "--hc-glitter",
167
+ cosmosBottom: "--hc-cosmos-bottom",
168
+ cosmosMiddle: "--hc-cosmos-middle",
169
+ cosmosTop: "--hc-cosmos-top",
170
+ };
171
+ export const texturesToCssVariables = (textures) => {
172
+ const vars = {};
173
+ for (const key of Object.keys(TEXTURE_VARIABLES)) {
174
+ vars[TEXTURE_VARIABLES[key]] = `url("${textures[key]}")`;
175
+ }
176
+ return vars;
177
+ };
178
+ //# sourceMappingURL=textures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textures.js","sourceRoot":"","sources":["../src/textures.ts"],"names":[],"mappings":"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"}
package/dist/ticker.js ADDED
@@ -0,0 +1,32 @@
1
+ export const now = () => (typeof performance !== "undefined" ? performance.now() : Date.now());
2
+ const raf = typeof requestAnimationFrame !== "undefined"
3
+ ? (cb) => requestAnimationFrame(cb)
4
+ : (cb) => setTimeout(() => cb(now()), 1000 / 60);
5
+ const tasks = new Set();
6
+ const runTasks = (time) => {
7
+ tasks.forEach((task) => {
8
+ if (!task.c(time)) {
9
+ tasks.delete(task);
10
+ task.f();
11
+ }
12
+ });
13
+ if (tasks.size !== 0) {
14
+ raf(runTasks);
15
+ }
16
+ };
17
+ export const loop = (callback) => {
18
+ let task;
19
+ if (tasks.size === 0) {
20
+ raf(runTasks);
21
+ }
22
+ return {
23
+ promise: new Promise((fulfil) => {
24
+ task = { c: callback, f: fulfil };
25
+ tasks.add(task);
26
+ }),
27
+ abort: () => {
28
+ tasks.delete(task);
29
+ },
30
+ };
31
+ };
32
+ //# sourceMappingURL=ticker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticker.js","sourceRoot":"","sources":["../src/ticker.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,GAAW,EAAE,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAEvG,MAAM,GAAG,GACP,OAAO,qBAAqB,KAAK,WAAW;IAC1C,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAYrD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;AAE9B,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;IACtC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,CAAC,CAAC,EAAE,CAAC;QACX,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,QAAmC,EAAc,EAAE;IACtE,IAAI,IAAU,CAAC;IACf,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,IAAI,OAAO,CAAO,CAAC,MAAM,EAAE,EAAE;YACpC,IAAI,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;YAClC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,KAAK,EAAE,GAAG,EAAE;YACV,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ type ActiveToken = object | null;
2
+ export declare const getActiveCard: () => ActiveToken;
3
+ export declare const setActiveCard: (card: ActiveToken) => void;
4
+ export declare const subscribeActiveCard: (fn: (active: ActiveToken) => void) => (() => void);
5
+ export {};
6
+ //# sourceMappingURL=active-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-registry.d.ts","sourceRoot":"","sources":["../src/active-registry.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC;AAKjC,eAAO,MAAM,aAAa,QAAO,WAAyB,CAAC;AAE3D,eAAO,MAAM,aAAa,GAAI,MAAM,WAAW,KAAG,IAGjD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAA8B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { CreateHoloCardOptions } from "./types.js";
2
+ export declare const CLASS: {
3
+ readonly root: "holo-card";
4
+ readonly translater: "holo-card__translater";
5
+ readonly rotator: "holo-card__rotator";
6
+ readonly front: "holo-card__front";
7
+ readonly back: "holo-card__back";
8
+ readonly image: "holo-card__image";
9
+ readonly shine: "holo-card__shine";
10
+ readonly glare: "holo-card__glare";
11
+ readonly interactive: "holo-card--interactive";
12
+ readonly active: "holo-card--active";
13
+ readonly interacting: "holo-card--interacting";
14
+ readonly loading: "holo-card--loading";
15
+ readonly masked: "holo-card--masked";
16
+ };
17
+ export declare const buildHoloCardElement: (options: CreateHoloCardOptions) => HTMLElement;
18
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,KAAK;;;;;;;;;;;;;;CAcR,CAAC;AASX,eAAO,MAAM,oBAAoB,GAAI,SAAS,qBAAqB,KAAG,WAqDrE,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { HoloCardOptions } from "./types.js";
2
+ export declare class HoloCard {
3
+ readonly element: HTMLElement;
4
+ private readonly rotator;
5
+ private readonly options;
6
+ private readonly springRotate;
7
+ private readonly springGlare;
8
+ private readonly springBackground;
9
+ private readonly springRotateDelta;
10
+ private readonly springTranslate;
11
+ private readonly springScale;
12
+ private isInteracting;
13
+ private firstPop;
14
+ private isVisible;
15
+ private destroyed;
16
+ private renderScheduled;
17
+ private interactRaf;
18
+ private pendingUpdate;
19
+ private repositionTimer;
20
+ private endTimer;
21
+ private showcaseStart;
22
+ private showcaseEnd;
23
+ private showcaseInterval;
24
+ private showcaseRunning;
25
+ private readonly cleanups;
26
+ private unsubscribeOrientation;
27
+ constructor(element: HTMLElement, options?: HoloCardOptions);
28
+ private applyStaticStyles;
29
+ private enableInteractive;
30
+ private interact;
31
+ private interactEnd;
32
+ private setSpringDynamics;
33
+ private settle;
34
+ private updateSprings;
35
+ private setInteracting;
36
+ get interacting(): boolean;
37
+ private scheduleRender;
38
+ private applyStyles;
39
+ private onActiveChange;
40
+ private popover;
41
+ private retreat;
42
+ private reset;
43
+ private setCenter;
44
+ private reposition;
45
+ private startGyroscope;
46
+ private stopGyroscope;
47
+ private orientate;
48
+ private onVisibilityChange;
49
+ private startShowcase;
50
+ private endShowcase;
51
+ private toggleActive;
52
+ activate(): void;
53
+ deactivate(): void;
54
+ setEffect(effect: HoloCardOptions["effect"]): void;
55
+ get active(): boolean;
56
+ destroy(): void;
57
+ }
58
+ //# sourceMappingURL=holo-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holo-card.d.ts","sourceRoot":"","sources":["../src/holo-card.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA4BlD,qBAAa,QAAQ;IACnB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAEtB;IAEF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqD;IAClF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8D;IAC1F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuD;IACxF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoD;IACtF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoD;IACpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;IAErE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,SAAS,CAAmF;IACpG,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAiE;IAEtF,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,gBAAgB,CAA+C;IACvE,OAAO,CAAC,eAAe,CAAU;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,sBAAsB,CAA6B;gBAE/C,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,eAAoB;IAmE/D,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,QAAQ;IA6ChB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAKtB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,YAAY;IAUpB,QAAQ,IAAI,IAAI;IAQhB,UAAU,IAAI,IAAI;IAOlB,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,IAAI;IAIlD,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,OAAO,IAAI,IAAI;CAmChB"}
@@ -0,0 +1,13 @@
1
+ import { HoloCard } from "./holo-card.js";
2
+ import type { CreateHoloCardOptions, HoloCardOptions } from "./types.js";
3
+ export { HoloCard } from "./holo-card.js";
4
+ export { buildHoloCardElement, CLASS } from "./dom.js";
5
+ export { generateTextures, texturesToCssVariables, grainTexture, glitterTexture, TEXTURE_VARIABLES, DEFAULT_TEXTURE_SEED, type Textures, type TextureOptions, } from "./textures.js";
6
+ export { subscribeOrientation, requestOrientationPermission, resetBaseOrientation, type Orientation, type RelativeOrientation, } from "./orientation.js";
7
+ export { getActiveCard, setActiveCard, subscribeActiveCard } from "./active-registry.js";
8
+ export { Spring, type SpringValue, type SpringOpts, type SpringSetOpts } from "./spring.js";
9
+ export { round, clamp, adjust } from "./math.js";
10
+ export type { HoloEffect, HoloCardOptions, CreateHoloCardOptions } from "./types.js";
11
+ export declare const createHoloCard: (options: CreateHoloCardOptions) => HoloCard;
12
+ export declare const attachHoloCard: (element: HTMLElement, options?: HoloCardOptions) => HoloCard;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,QAAQ,EACb,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAErF,eAAO,MAAM,cAAc,GAAI,SAAS,qBAAqB,KAAG,QAG/D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,EAAE,UAAS,eAAoB,KAAG,QACrD,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const round: (value: number, precision?: number) => number;
2
+ export declare const clamp: (value: number, min?: number, max?: number) => number;
3
+ export declare const adjust: (value: number, fromMin: number, fromMax: number, toMin: number, toMax: number) => number;
4
+ //# sourceMappingURL=math.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,kBAAa,KAAG,MAA8C,CAAC;AAEpG,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,YAAO,EAAE,YAAS,KAAG,MAA6C,CAAC;AAExG,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,EAAE,SAAS,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,KAAG,MAC3B,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface Orientation {
2
+ alpha: number;
3
+ beta: number;
4
+ gamma: number;
5
+ }
6
+ export interface RelativeOrientation {
7
+ absolute: Orientation;
8
+ relative: Orientation;
9
+ }
10
+ export declare const resetBaseOrientation: () => void;
11
+ export declare const subscribeOrientation: (fn: (orientation: RelativeOrientation) => void) => (() => void);
12
+ export declare const requestOrientationPermission: () => Promise<boolean>;
13
+ //# sourceMappingURL=orientation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orientation.d.ts","sourceRoot":"","sources":["../src/orientation.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAYD,eAAO,MAAM,oBAAoB,QAAO,IAGvC,CAAC;AAyBF,eAAO,MAAM,oBAAoB,GAAI,IAAI,CAAC,WAAW,EAAE,mBAAmB,KAAK,IAAI,KAAG,CAAC,MAAM,IAAI,CAahG,CAAC;AAIF,eAAO,MAAM,4BAA4B,QAAa,OAAO,CAAC,OAAO,CAcpE,CAAC"}