Skip to content
Draft
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
649c6ce
highlighter - Replay migration
jankalthoefer Apr 8, 2026
9052446
tracking and some fixes
jankalthoefer Apr 9, 2026
9a91f85
Replay migration feature flag
jankalthoefer Apr 9, 2026
00ac3e8
fix progress
jankalthoefer Apr 9, 2026
5d2088a
renaming
jankalthoefer Apr 14, 2026
72e6529
service action and ai-toggle fixes
jankalthoefer Apr 14, 2026
21dfe02
feature flag adjustments & cleanup
jankalthoefer Apr 16, 2026
840ac42
fix hardcoded feature flag
jankalthoefer Apr 16, 2026
a20e607
fix comment
jankalthoefer Apr 16, 2026
707b95f
fix installationCancel tracking
jankalthoefer Apr 16, 2026
83c1a72
revert downloadFile changes
jankalthoefer Apr 16, 2026
9252270
fix download
jankalthoefer Apr 16, 2026
5ea1b89
added explainer text below modal cta
marvinoffers Apr 16, 2026
7395877
fix padding for modal
jankalthoefer Apr 16, 2026
12395fc
Merge branch 'highlighter/jk-replay-integration' of https://github.co…
jankalthoefer Apr 16, 2026
68ad2de
added styling to installation flow
marvinoffers Apr 17, 2026
e9f5b64
ai code from replay playground
marvinoffers Apr 20, 2026
727ca73
added styling
marvinoffers Apr 20, 2026
c269b97
re-structuring + style cleanup
marvinoffers Apr 20, 2026
efc8322
add Authenticode signature verification before running installer
Copilot Apr 21, 2026
110c0d8
tighten Authenticode subject check to match CN field specifically
Copilot Apr 21, 2026
05f82b5
Added featureItemComponent
marvinoffers Apr 22, 2026
371cb80
corrected constants
marvinoffers Apr 22, 2026
c94a43d
styling tweaks
marvinoffers Apr 23, 2026
7cf182d
adjusted recording in progress warning
marvinoffers Apr 23, 2026
7f632b7
fix svgs
marvinoffers Apr 23, 2026
df6ab6a
fix signature check
jankalthoefer Apr 23, 2026
5293a92
fix translation and variable replay name
jankalthoefer Apr 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions app/components-react/highlighter/ClipsView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ export default function ClipsView({
<PreviewExportButton streamId={streamId} setModal={setModal} />
</div>
</div>

{sortedList.length === 0 ? (
<div style={{ padding: '20px' }}>
{$t('No clips found')}
Expand Down Expand Up @@ -307,8 +308,10 @@ export default function ClipsView({
)}
</div>
<EditingControls
emitSetShowModal={(modal: TModalClipsView) => {
setModal({ modal });
emitSetShowModal={(modal: TModalClipsView | null) => {
if (modal) {
setModal({ modal });
}
}}
/>
<ClipsViewModal
Expand Down
220 changes: 220 additions & 0 deletions app/components-react/highlighter/HypeWrapper.m.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
@import '../../styles/index';

@sectionWidth: 424px;
@sectionHeight: @sectionWidth;
@padding: 16px;
@width: 1920px;
@height: 1080px;

.hype-wrapper {
--fixed-height: 504px;
--fixed-width: 441px;
position: relative;
width: 80vw;
height: 80vh;
display: grid;
border-radius: 24px;
overflow: hidden;
transition: clip-path 0.15s ease, background-color 0.3s ease;

clip-path: inset(
calc((100% - var(--fixed-height, 0px)) / 2) calc((100% - var(--fixed-width, 0px)) / 2)
calc((100% - var(--fixed-height, 0px)) / 2) calc((100% - var(--fixed-width, 0px)) / 2) round
13px
);
}

.hype-wrapper-with-import-config {
clip-path: inset(0px 0px 0px 0px round 13px);
}

.content-divider {
position: absolute;
width: 100%;
height: 100%;
display: grid;
grid-template-columns: 1fr 400px 1fr;
top: 0;
left: 0;
}

.left-wrapper {
position: relative;
display: grid;
grid-template-rows: 1fr 1fr;
padding-left: 12%;
align-self: center;
}

.header-wrapper {
display: flex;
flex-direction: column;
justify-content: end;
}

.hype-content-headline {
color: white;
font-family: 'Luckiest Guy', serif;
font-size: clamp(33px, 3vw, 73px);
margin: 0px;
width: 85%;
line-height: clamp(33px, 3vw, 63px);
rotate: -4deg;
}

.hype-content-subheadline {
color: white;
font-family: 'Luckiest Guy', serif;
font-size: 24px;
margin: 0px;
margin-top: 12px;
width: 85%;
line-height: 22px;
rotate: -4deg;
}

.plattform-icon {
position: absolute;
z-index: 10;
animation: wiggleAnimation 5s infinite ease-in-out;
}

@keyframes wiggleAnimation {
0% {
transform: rotate(0deg) scale(1);
}
25% {
transform: rotate(-3deg) scale(1.05);
}
50% {
transform: rotate(3deg) scale(1.1);
}
75% {
transform: rotate(-3deg) scale(1.05);
}
100% {
transform: rotate(0deg) scale(1);
}
}

.horizontal-video {
position: absolute;
width: calc(@width / 8);
height: calc(@height / 8);
top: 60px;
transform: rotate(-5deg);
overflow: hidden;
border-radius: 5px;
border-color: #7b7b7b;
border-style: solid;
border-width: 1px;
}

.vertical-video {
position: absolute;
height: calc(@width / 8);
width: calc(@height / 8);
top: 98px;
left: 170px;
transform: rotate(2deg);
overflow: hidden;
border-radius: 5px;
border-color: #7b7b7b;
border-style: solid;
border-width: 1px;
}

.colored-blob {
width: 130%;
position: absolute;
height: 50%;
bottom: -50px;
left: 0px;
border-radius: 120%;
opacity: 0.2;
rotate: -20deg;
filter: blur(74px);
animation: blobAnimation 8s infinite;
animation-timing-function: ease-in-out;
transition: background-color 0.3s ease;
}

@keyframes blobAnimation {
0% {
transform: scale(1);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}

.overlay {
display: none;
position: absolute;
width: 50%;
height: 100%;
background-color: var(--section);
top: 0px;
left: 0px;
}

.manual-upload-wrapper {
background-color: var(--section);
border-radius: 12px;
border: 1px solid var(--Day-Colors-Dark-4, #4f5e6550);
width: 441px;
display: flex;
flex-direction: column;
gap: 16px;
padding: 24px;

position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);

:global {
/* Hide labels */
.ant-form-item-label,
[class*='ant-col'] .ant-form-item-label {
display: none !important;
}

.ant-form-item {
margin: 0;
}
}

video {
display: block;
max-width: calc(@sectionWidth - @padding * 2);
max-height: calc(@sectionHeight - @padding * 2);
border-radius: 8px;
}
}

.hype-content {
display: flex;
justify-content: end;
align-items: center;
overflow: hidden;
}

.artwork-image {
flex-shrink: 0;
min-height: 100%;
transition: opacity 0.2s ease, transform 0.2s ease;
}

.fadeIn {
opacity: 1;
transform: translateX(0);
}

.fadeOut {
opacity: 0;
transform: translateX(900px);
}
Loading
Loading