@kongyo2/cards-css 0.2.1 → 0.3.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 +8 -1
- package/dist/dom.js +2 -0
- package/dist/dom.js.map +1 -1
- package/dist/holo-card.js +150 -8
- package/dist/holo-card.js.map +1 -1
- package/dist/holo-cards.css +78 -70
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/palette.js +189 -0
- package/dist/palette.js.map +1 -0
- package/dist-types/dom.d.ts +2 -0
- package/dist-types/dom.d.ts.map +1 -1
- package/dist-types/holo-card.d.ts +21 -1
- package/dist-types/holo-card.d.ts.map +1 -1
- package/dist-types/index.d.ts +2 -1
- package/dist-types/index.d.ts.map +1 -1
- package/dist-types/palette.d.ts +10 -0
- package/dist-types/palette.d.ts.map +1 -0
- package/dist-types/types.d.ts +90 -1
- package/dist-types/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/dom.ts +2 -0
- package/src/holo-card.ts +194 -16
- package/src/index.ts +6 -0
- package/src/palette.ts +195 -0
- package/src/styles/base.css +47 -7
- package/src/styles/effects/cosmos.css +51 -41
- package/src/styles/effects/glitter.css +17 -11
- package/src/styles/effects/holo.css +1 -1
- package/src/styles/effects/reverse.css +8 -5
- package/src/types.ts +95 -1
package/src/styles/base.css
CHANGED
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
.holo-card__translater,
|
|
124
124
|
.holo-card__rotator {
|
|
125
125
|
display: grid;
|
|
126
|
-
perspective: 600px;
|
|
126
|
+
perspective: var(--card-perspective, 600px);
|
|
127
127
|
will-change: transform, box-shadow;
|
|
128
128
|
transform-origin: center;
|
|
129
129
|
transform-style: preserve-3d;
|
|
@@ -270,14 +270,21 @@ button.holo-card__rotator {
|
|
|
270
270
|
.holo-card__glare {
|
|
271
271
|
transform: translateZ(1.41px);
|
|
272
272
|
overflow: hidden;
|
|
273
|
-
background-image:
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
273
|
+
background-image: var(
|
|
274
|
+
--glare-image,
|
|
275
|
+
radial-gradient(
|
|
276
|
+
farthest-corner circle at var(--pointer-x) var(--pointer-y),
|
|
277
|
+
hsla(0, 0%, 100%, 0.8) 10%,
|
|
278
|
+
hsla(0, 0%, 100%, 0.65) 20%,
|
|
279
|
+
hsla(0, 0%, 0%, 0.5) 90%
|
|
280
|
+
)
|
|
278
281
|
);
|
|
279
282
|
opacity: calc(var(--card-opacity) * var(--hc-glare-opacity));
|
|
280
|
-
mix-blend-mode: overlay;
|
|
283
|
+
mix-blend-mode: var(--glare-blend, overlay);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.holo-card--custom-glare .holo-card__glare::after {
|
|
287
|
+
display: none !important;
|
|
281
288
|
}
|
|
282
289
|
|
|
283
290
|
.holo-card--masked .holo-card__shine,
|
|
@@ -349,3 +356,36 @@ button.holo-card__rotator {
|
|
|
349
356
|
.holo-card__overlay--interactive * {
|
|
350
357
|
pointer-events: auto;
|
|
351
358
|
}
|
|
359
|
+
|
|
360
|
+
.holo-card--depth .holo-card__shine {
|
|
361
|
+
transform: translateZ(calc(1px + var(--hc-depth, 0px)));
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
.holo-card--depth .holo-card__glare {
|
|
365
|
+
transform: translateZ(calc(1.41px + var(--hc-depth, 0px)));
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.holo-card--depth .holo-card__overlay {
|
|
369
|
+
transform: translateZ(calc(2px + var(--hc-depth, 0px)));
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.holo-card--depth .holo-card__layer {
|
|
373
|
+
transform: translate3d(
|
|
374
|
+
calc(var(--pointer-dx) * var(--layer-parallax) * 1px),
|
|
375
|
+
calc(var(--pointer-dy) * var(--layer-parallax) * 1px),
|
|
376
|
+
calc(0.02px + var(--layer-parallax) * var(--hc-depth-layer-scale, 1) * 1px)
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.holo-card--depth .holo-card__translater::before {
|
|
381
|
+
content: "";
|
|
382
|
+
position: absolute;
|
|
383
|
+
inset: 0;
|
|
384
|
+
z-index: -1;
|
|
385
|
+
border-radius: var(--card-radius);
|
|
386
|
+
background: transparent;
|
|
387
|
+
transform: translateZ(-1px);
|
|
388
|
+
pointer-events: none;
|
|
389
|
+
box-shadow: calc(var(--tilt-x, 0) * -0.6px) calc(var(--hc-depth, 0px) * 0.5 + var(--tilt-y, 0) * 0.6px)
|
|
390
|
+
calc(var(--hc-depth, 0px) * 1.2 + 14px) calc(var(--hc-depth, 0px) * 0.2) rgba(0, 0, 0, var(--hc-depth-shadow, 0));
|
|
391
|
+
}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
.holo-card[data-effect="cosmos"] {
|
|
2
2
|
--space: 4%;
|
|
3
3
|
--angle: 82deg;
|
|
4
|
+
|
|
5
|
+
--cosmos-clr-1: hsl(53, 65%, 60%);
|
|
6
|
+
--cosmos-clr-2: hsl(93, 56%, 50%);
|
|
7
|
+
--cosmos-clr-3: hsl(176, 54%, 49%);
|
|
8
|
+
--cosmos-clr-4: hsl(228, 59%, 55%);
|
|
9
|
+
--cosmos-clr-5: hsl(283, 60%, 55%);
|
|
10
|
+
--cosmos-clr-6: hsl(326, 59%, 51%);
|
|
4
11
|
}
|
|
5
12
|
|
|
6
13
|
.holo-card[data-effect="cosmos"] .holo-card__shine {
|
|
@@ -8,18 +15,18 @@
|
|
|
8
15
|
var(--hc-cosmos-bottom),
|
|
9
16
|
repeating-linear-gradient(
|
|
10
17
|
var(--angle),
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
var(--cosmos-clr-1) calc(var(--space) * 1),
|
|
19
|
+
var(--cosmos-clr-2) calc(var(--space) * 2),
|
|
20
|
+
var(--cosmos-clr-3) calc(var(--space) * 3),
|
|
21
|
+
var(--cosmos-clr-4) calc(var(--space) * 4),
|
|
22
|
+
var(--cosmos-clr-5) calc(var(--space) * 5),
|
|
23
|
+
var(--cosmos-clr-6) calc(var(--space) * 6),
|
|
24
|
+
var(--cosmos-clr-6) calc(var(--space) * 7),
|
|
25
|
+
var(--cosmos-clr-5) calc(var(--space) * 8),
|
|
26
|
+
var(--cosmos-clr-4) calc(var(--space) * 9),
|
|
27
|
+
var(--cosmos-clr-3) calc(var(--space) * 10),
|
|
28
|
+
var(--cosmos-clr-2) calc(var(--space) * 11),
|
|
29
|
+
var(--cosmos-clr-1) calc(var(--space) * 12)
|
|
23
30
|
),
|
|
24
31
|
radial-gradient(
|
|
25
32
|
farthest-corner circle at var(--pointer-x) var(--pointer-y),
|
|
@@ -52,18 +59,18 @@
|
|
|
52
59
|
var(--hc-cosmos-middle),
|
|
53
60
|
repeating-linear-gradient(
|
|
54
61
|
var(--angle),
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
var(--cosmos-clr-1) calc(var(--space) * 1),
|
|
63
|
+
var(--cosmos-clr-2) calc(var(--space) * 2),
|
|
64
|
+
var(--cosmos-clr-3) calc(var(--space) * 3),
|
|
65
|
+
var(--cosmos-clr-4) calc(var(--space) * 4),
|
|
66
|
+
var(--cosmos-clr-5) calc(var(--space) * 5),
|
|
67
|
+
var(--cosmos-clr-6) calc(var(--space) * 6),
|
|
68
|
+
var(--cosmos-clr-6) calc(var(--space) * 7),
|
|
69
|
+
var(--cosmos-clr-5) calc(var(--space) * 8),
|
|
70
|
+
var(--cosmos-clr-4) calc(var(--space) * 9),
|
|
71
|
+
var(--cosmos-clr-3) calc(var(--space) * 10),
|
|
72
|
+
var(--cosmos-clr-2) calc(var(--space) * 11),
|
|
73
|
+
var(--cosmos-clr-1) calc(var(--space) * 12)
|
|
67
74
|
);
|
|
68
75
|
|
|
69
76
|
background-blend-mode: lighten, multiply;
|
|
@@ -90,18 +97,18 @@
|
|
|
90
97
|
var(--hc-cosmos-top),
|
|
91
98
|
repeating-linear-gradient(
|
|
92
99
|
var(--angle),
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
100
|
+
var(--cosmos-clr-1) calc(var(--space) * 1),
|
|
101
|
+
var(--cosmos-clr-2) calc(var(--space) * 2),
|
|
102
|
+
var(--cosmos-clr-3) calc(var(--space) * 3),
|
|
103
|
+
var(--cosmos-clr-4) calc(var(--space) * 4),
|
|
104
|
+
var(--cosmos-clr-5) calc(var(--space) * 5),
|
|
105
|
+
var(--cosmos-clr-6) calc(var(--space) * 6),
|
|
106
|
+
var(--cosmos-clr-6) calc(var(--space) * 7),
|
|
107
|
+
var(--cosmos-clr-5) calc(var(--space) * 8),
|
|
108
|
+
var(--cosmos-clr-4) calc(var(--space) * 9),
|
|
109
|
+
var(--cosmos-clr-3) calc(var(--space) * 10),
|
|
110
|
+
var(--cosmos-clr-2) calc(var(--space) * 11),
|
|
111
|
+
var(--cosmos-clr-1) calc(var(--space) * 12)
|
|
105
112
|
);
|
|
106
113
|
|
|
107
114
|
background-blend-mode: multiply, multiply;
|
|
@@ -121,13 +128,16 @@
|
|
|
121
128
|
}
|
|
122
129
|
|
|
123
130
|
.holo-card[data-effect="cosmos"] .holo-card__glare {
|
|
124
|
-
background-image:
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
131
|
+
background-image: var(
|
|
132
|
+
--glare-image,
|
|
133
|
+
radial-gradient(
|
|
134
|
+
farthest-corner circle at var(--pointer-x) var(--pointer-y),
|
|
135
|
+
hsla(204, 100%, 95%, 0.8) 5%,
|
|
136
|
+
hsla(250, 15%, 20%, 1) 150%
|
|
137
|
+
)
|
|
128
138
|
);
|
|
129
139
|
filter: brightness(0.75) contrast(2) saturate(2);
|
|
130
|
-
mix-blend-mode: overlay;
|
|
140
|
+
mix-blend-mode: var(--glare-blend, overlay);
|
|
131
141
|
opacity: calc(var(--card-opacity) * (0.25 + var(--pointer-from-center)) * var(--hc-glare-opacity));
|
|
132
142
|
}
|
|
133
143
|
|
|
@@ -66,21 +66,27 @@
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
.holo-card[data-effect="glitter"]:not(.holo-card--masked) .holo-card__glare {
|
|
69
|
-
background-image:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
background-image: var(
|
|
70
|
+
--glare-image,
|
|
71
|
+
radial-gradient(
|
|
72
|
+
farthest-corner circle at var(--pointer-x) var(--pointer-y),
|
|
73
|
+
hsla(0, 0%, 100%, 1) 10%,
|
|
74
|
+
hsla(0, 0%, 100%, 0.85) 20%,
|
|
75
|
+
hsla(0, 0%, 0%, 0.35) 90%
|
|
76
|
+
)
|
|
74
77
|
);
|
|
75
|
-
mix-blend-mode: multiply;
|
|
78
|
+
mix-blend-mode: var(--glare-blend, multiply);
|
|
76
79
|
}
|
|
77
80
|
|
|
78
81
|
.holo-card--masked[data-effect="glitter"] .holo-card__glare {
|
|
79
|
-
background-image:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
background-image: var(
|
|
83
|
+
--glare-image,
|
|
84
|
+
radial-gradient(
|
|
85
|
+
farthest-corner circle at var(--pointer-x) var(--pointer-y),
|
|
86
|
+
hsla(50, 20%, 90%, 0.45) 0%,
|
|
87
|
+
hsla(150, 20%, 30%, 0.45) 45%,
|
|
88
|
+
hsla(0, 0%, 0%, 0.9) 120%
|
|
89
|
+
)
|
|
84
90
|
);
|
|
85
91
|
filter: brightness(0.9) contrast(2);
|
|
86
92
|
}
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
.holo-card[data-effect="holo"] .holo-card__glare {
|
|
111
111
|
opacity: calc(var(--card-opacity) * 0.8 * var(--hc-glare-opacity));
|
|
112
112
|
filter: brightness(0.8) contrast(1.5);
|
|
113
|
-
mix-blend-mode: overlay;
|
|
113
|
+
mix-blend-mode: var(--glare-blend, overlay);
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
.holo-card[data-effect="holo"] .holo-card__glare::after {
|
|
@@ -27,11 +27,14 @@
|
|
|
27
27
|
.holo-card[data-effect="reverse"] .holo-card__glare {
|
|
28
28
|
opacity: calc(var(--card-opacity) * var(--hc-glare-opacity));
|
|
29
29
|
|
|
30
|
-
background-image:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
background-image: var(
|
|
31
|
+
--glare-image,
|
|
32
|
+
radial-gradient(
|
|
33
|
+
farthest-corner circle at var(--pointer-x) var(--pointer-y),
|
|
34
|
+
hsla(0, 0%, 100%, 0.8) 10%,
|
|
35
|
+
hsla(0, 0%, 100%, 0.5) 20%,
|
|
36
|
+
hsla(0, 0%, 0%, 0.75) 90%
|
|
37
|
+
)
|
|
35
38
|
);
|
|
36
39
|
|
|
37
40
|
filter: brightness(0.7) contrast(1.5);
|
package/src/types.ts
CHANGED
|
@@ -65,6 +65,93 @@ export interface ShowcaseOptions {
|
|
|
65
65
|
spring?: SpringTuning;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
/** Built-in foil colour schemes for {@link PaletteOptions.preset}. */
|
|
69
|
+
export type PalettePreset = "rainbow" | "gold" | "aurora" | "ruby" | "sapphire" | "mono";
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Foil colour-palette / theming. Every field maps onto the foil CSS custom
|
|
73
|
+
* properties, so a palette can be supplied up front or swapped at runtime with
|
|
74
|
+
* `card.setPalette(...)`. Colours accept any CSS colour string.
|
|
75
|
+
*/
|
|
76
|
+
export interface PaletteOptions {
|
|
77
|
+
/** A built-in scheme used as the base; the explicit fields below override it. */
|
|
78
|
+
preset?: PalettePreset;
|
|
79
|
+
/** Holographic spectrum stops (`--sunpillar-1…6`). 1–6 colours; fewer are cycled to fill the ramp. */
|
|
80
|
+
sunpillars?: string[];
|
|
81
|
+
/** Rainbow stops for the `holo` foil sweep (`--red` / `--yellow` / `--green` / `--blue` / `--violet`). 1–5 colours, cycled. */
|
|
82
|
+
spectrum?: string[];
|
|
83
|
+
/** Ramp stops for the `cosmos` foil (`--cosmos-clr-1…6`). 1–6 colours, cycled. */
|
|
84
|
+
cosmos?: string[];
|
|
85
|
+
/** Card edge highlight colour (`--card-edge`). */
|
|
86
|
+
edge?: string;
|
|
87
|
+
/** Card back fill colour (`--card-back`). */
|
|
88
|
+
back?: string;
|
|
89
|
+
/** Card glow colour (`--card-glow`); equivalent to the top-level `glow` option. */
|
|
90
|
+
glow?: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Custom dynamic glare (reflected light). Supply a full `image` for total
|
|
95
|
+
* control, or compose the built-in pointer-tracking radial gradient from
|
|
96
|
+
* `shape` / `extent` / `size` / `stops`. Applies across every effect and can be
|
|
97
|
+
* updated at runtime with `card.setGlare(...)`.
|
|
98
|
+
*/
|
|
99
|
+
export interface GlareOptions {
|
|
100
|
+
/**
|
|
101
|
+
* Full `background-image` for the glare layer, overriding the built-in
|
|
102
|
+
* gradient on every effect. `var(--pointer-x)` / `var(--pointer-y)` are
|
|
103
|
+
* available for pointer tracking.
|
|
104
|
+
*/
|
|
105
|
+
image?: string;
|
|
106
|
+
/** Radial-gradient shape when composing the gradient (default `circle`). */
|
|
107
|
+
shape?: "circle" | "ellipse";
|
|
108
|
+
/** Radial-gradient extent keyword, e.g. `farthest-corner` / `closest-side` (default `farthest-corner`). */
|
|
109
|
+
extent?: string;
|
|
110
|
+
/** Explicit gradient size — two values imply an ellipse (e.g. `60% 40%`), a single value a circle radius (e.g. `120px`); overrides `extent` when set. */
|
|
111
|
+
size?: string;
|
|
112
|
+
/** Colour stops, e.g. `["hsla(0,0%,100%,.8) 10%", "hsla(0,0%,0%,.5) 90%"]`. */
|
|
113
|
+
stops?: string[];
|
|
114
|
+
/** `mix-blend-mode` for the glare layer. */
|
|
115
|
+
blend?: string;
|
|
116
|
+
/** Glare opacity multiplier (mirrors `visual.glareOpacity`). */
|
|
117
|
+
opacity?: number;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Physical-behaviour tuning for the device-orientation (gyroscope) response.
|
|
122
|
+
* Passing `true` keeps the defaults; `false` disables gyroscope tilt.
|
|
123
|
+
*/
|
|
124
|
+
export interface GyroscopeOptions {
|
|
125
|
+
/** Master switch (default true); `false` matches `gyroscope: false`. */
|
|
126
|
+
enabled?: boolean;
|
|
127
|
+
/** Device tilt (deg) on the X axis (gamma) that reaches the full effect (default 16). Lower is more sensitive. */
|
|
128
|
+
rangeX?: number;
|
|
129
|
+
/** Device tilt (deg) on the Y axis (beta) that reaches the full effect (default 18). */
|
|
130
|
+
rangeY?: number;
|
|
131
|
+
/** Sensitivity multiplier applied to the raw tilt before clamping (default 1). */
|
|
132
|
+
sensitivity?: number;
|
|
133
|
+
/** Flip the horizontal response. */
|
|
134
|
+
invertX?: boolean;
|
|
135
|
+
/** Flip the vertical response. */
|
|
136
|
+
invertY?: boolean;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Foil 3D depth / extrusion simulation. Lifts the foil stack above the artwork
|
|
141
|
+
* in true 3D so it parallaxes as the card tilts, with a tilt-reactive contact
|
|
142
|
+
* shadow. Passing `true` enables it with the defaults.
|
|
143
|
+
*/
|
|
144
|
+
export interface DepthOptions {
|
|
145
|
+
/** Foil extrusion height in px — how far the foil floats above the artwork (default 14). */
|
|
146
|
+
strength?: number;
|
|
147
|
+
/** Perspective in px for the card's 3D space; lower exaggerates the depth (default 600). */
|
|
148
|
+
perspective?: number;
|
|
149
|
+
/** Contact-shadow opacity beneath the lifted card, 0–1 (default 0.35). */
|
|
150
|
+
shadow?: number;
|
|
151
|
+
/** Multiplier turning each extra layer's `parallax` into Z-lift, so stacked layers extrude in depth (default 1). */
|
|
152
|
+
layerScale?: number;
|
|
153
|
+
}
|
|
154
|
+
|
|
68
155
|
/** Fine-grained visual / effect control. Numeric fields are multipliers (1 = unchanged). */
|
|
69
156
|
export interface VisualOptions {
|
|
70
157
|
/** Foil brightness multiplier. */
|
|
@@ -133,13 +220,20 @@ export interface HoloCardOptions {
|
|
|
133
220
|
effect?: HoloEffect;
|
|
134
221
|
interactive?: boolean;
|
|
135
222
|
activateOnClick?: boolean;
|
|
136
|
-
|
|
223
|
+
/** Device-orientation tilt: `true`/`false`, or an object for physical-behaviour tuning. */
|
|
224
|
+
gyroscope?: boolean | GyroscopeOptions;
|
|
137
225
|
showcase?: boolean | ShowcaseOptions;
|
|
138
226
|
glow?: string;
|
|
139
227
|
aspectRatio?: number;
|
|
140
228
|
textureSeed?: number;
|
|
141
229
|
mask?: string | MaskOptions;
|
|
142
230
|
foil?: string;
|
|
231
|
+
/** Foil colour palette / theming. */
|
|
232
|
+
palette?: PaletteOptions;
|
|
233
|
+
/** Custom dynamic glare (reflected light). */
|
|
234
|
+
glare?: GlareOptions;
|
|
235
|
+
/** Foil 3D depth / extrusion: `true` for the defaults, or an object to tune it. */
|
|
236
|
+
depth?: boolean | DepthOptions;
|
|
143
237
|
/** Interaction & physics adjustments. */
|
|
144
238
|
physics?: PhysicsOptions;
|
|
145
239
|
/** Fine-grained visual control. */
|