mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-07 01:56:04 +00:00
This reverts commit 3b53bfd2f7.
This commit is contained in:
@@ -1,99 +0,0 @@
|
||||
<!--
|
||||
Avatar Group Hover - transitions.dev-inspired primitive for HyperFrames.
|
||||
|
||||
Paste the markup and CSS into a composition. Use the timeline integration
|
||||
note at the bottom as the starting point for deterministic GSAP animation.
|
||||
|
||||
Variables. The script reads each one, falls back to the declared default on
|
||||
anything missing or unrecognised, and writes the result as a custom property
|
||||
the CSS consumes. The timeline recipe below is untouched by them: it still
|
||||
drives one lift offset, and these decide what it lifts.
|
||||
|
||||
- size (small | standard | large, default standard): avatar diameter,
|
||||
42px, 54px or 70px. The initials scale with it.
|
||||
- overlap (tight | standard | loose, default standard): how far each
|
||||
avatar tucks under the one before it, as a share of its own diameter:
|
||||
half, a third, or barely an eighth.
|
||||
- accent (blue | violet | green, default blue): the colour the avatar
|
||||
gradient resolves into out of the shared near-black.
|
||||
|
||||
On every default the result is identical to the original: 54px avatars
|
||||
overlapping by 18px in the blue gradient.
|
||||
-->
|
||||
|
||||
<div
|
||||
class="hf-transition-avatar-group-hover"
|
||||
data-composition-variables='[
|
||||
{ "id": "size", "type": "enum", "role": "style", "label": "Size", "description": "Avatar diameter, with the initials scaling alongside it.", "default": "standard", "options": [{ "value": "small", "label": "Small" }, { "value": "standard", "label": "Standard" }, { "value": "large", "label": "Large" }] },
|
||||
{ "id": "overlap", "type": "enum", "role": "style", "label": "Overlap", "description": "How far each avatar tucks under the one before it, as a share of its own diameter.", "default": "standard", "options": [{ "value": "tight", "label": "Tight" }, { "value": "standard", "label": "Standard" }, { "value": "loose", "label": "Loose" }] },
|
||||
{ "id": "accent", "type": "enum", "role": "style", "label": "Accent", "description": "Colour the avatar gradient resolves into.", "default": "blue", "options": [{ "value": "blue", "label": "Blue" }, { "value": "violet", "label": "Violet" }, { "value": "green", "label": "Green" }] }
|
||||
]'
|
||||
>
|
||||
<span>A</span><span>B</span><span>C</span><span>D</span>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.hf-transition-avatar-group-hover {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding-left: var(--hf-avatar-overlap, 18px);
|
||||
font-family: Inter, system-ui, sans-serif;
|
||||
}
|
||||
.hf-transition-avatar-group-hover span {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
width: var(--hf-avatar-size, 54px);
|
||||
height: var(--hf-avatar-size, 54px);
|
||||
margin-left: calc(-1 * var(--hf-avatar-overlap, 18px));
|
||||
border: 3px solid #fff;
|
||||
border-radius: 999px;
|
||||
background: linear-gradient(135deg, #111827, var(--hf-avatar-accent, #0ea5e9));
|
||||
color: #fff;
|
||||
font-size: var(--hf-avatar-font, 1em);
|
||||
font-weight: 900;
|
||||
box-shadow: 0 12px 30px rgba(24, 24, 27, 0.18);
|
||||
transform: translateY(var(--hf-avatar-y, 0px));
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
var vars =
|
||||
window.__hyperframes && window.__hyperframes.getVariables
|
||||
? window.__hyperframes.getVariables()
|
||||
: {};
|
||||
|
||||
// Unrecognised overrides return to their declared defaults.
|
||||
var sizes = { small: 42, standard: 54, large: 70 };
|
||||
var fonts = { small: "0.8em", standard: "1em", large: "1.3em" };
|
||||
// Overlap is a share of the diameter, so the two knobs stay independent.
|
||||
var overlaps = { tight: 0.5, standard: 1 / 3, loose: 0.12 };
|
||||
var accents = { blue: "#0ea5e9", violet: "#a78bfa", green: "#34d399" };
|
||||
|
||||
function pick(table, value, fallback) {
|
||||
return Object.prototype.hasOwnProperty.call(table, value) ? value : fallback;
|
||||
}
|
||||
|
||||
var sizeName = pick(sizes, vars.size, "standard");
|
||||
var overlapName = pick(overlaps, vars.overlap, "standard");
|
||||
var accent = accents[pick(accents, vars.accent, "blue")];
|
||||
var diameter = sizes[sizeName];
|
||||
var overlap = Math.round(diameter * overlaps[overlapName]);
|
||||
|
||||
var roots = document.querySelectorAll(".hf-transition-avatar-group-hover");
|
||||
for (var i = 0; i < roots.length; i += 1) {
|
||||
var style = roots[i].style;
|
||||
style.setProperty("--hf-avatar-size", diameter + "px");
|
||||
style.setProperty("--hf-avatar-font", fonts[sizeName]);
|
||||
style.setProperty("--hf-avatar-overlap", overlap + "px");
|
||||
style.setProperty("--hf-avatar-accent", accent);
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
|
||||
<!--
|
||||
Timeline integration:
|
||||
tl.to('.hf-transition-avatar-group-hover span', { '--hf-avatar-y': '-18px', duration: 0.28, stagger: { each: 0.035, from: 'center' }, ease: 'back.out(1.8)' }, startTime); tl.to('.hf-transition-avatar-group-hover span', { '--hf-avatar-y': '0px', duration: 0.42, stagger: { each: 0.035, from: 'center' }, ease: 'bounce.out' }, startTime + 0.36);
|
||||
-->
|
||||
Reference in New Issue
Block a user