feat: add skip bar

This commit is contained in:
Kentai Radiquum 2025-04-10 16:46:44 +05:00
parent ad6aba06d3
commit 50b9f5b918
Signed by: Radiquum
GPG key ID: 858E8EE696525EED
5 changed files with 73 additions and 5 deletions

View file

@ -38,11 +38,20 @@
position: absolute; position: absolute;
height: calc(2 * var(--base)); height: calc(2 * var(--base));
line-height: calc(2 * var(--base)); line-height: calc(2 * var(--base));
bottom: calc(1 * var(--base)); bottom: calc(2 * var(--base));
left: var(--base); left: var(--base);
right: var(--base); right: var(--base);
} }
.media-skip-bar {
position: absolute;
height: calc(1 * var(--base));
line-height: calc(2 * var(--base));
bottom: calc(1 * var(--base));
left: calc(1.25 * var(--base));
right: var(--base);
}
.media-button { .media-button {
--media-control-hover-background: var(--_secondary-color); --media-control-hover-background: var(--_secondary-color);
--media-tooltip-background: rgb(28 28 28 / 0.24); --media-tooltip-background: rgb(28 28 28 / 0.24);
@ -56,6 +65,11 @@
transition: opacity 0.1s cubic-bezier(0.4, 0, 1, 1); transition: opacity 0.1s cubic-bezier(0.4, 0, 1, 1);
} }
.media-skip-bar .media-button {
width: calc(1.5 * var(--base));
height: calc(1.5 * var(--base));
}
.svg { .svg {
fill: none; fill: none;
stroke: var(--_primary-color, #fff); stroke: var(--_primary-color, #fff);
@ -122,7 +136,7 @@
min-height: var(--media-settings-menu-min-height, 170px); min-height: var(--media-settings-menu-min-height, 170px);
position: absolute; position: absolute;
right: 10px; right: 10px;
bottom: calc(3 * var(--base)); bottom: calc(4 * var(--base));
padding: 0; padding: 0;
padding-block: calc(0.15 * var(--base)); padding-block: calc(0.15 * var(--base));
padding-inline: calc(0.6 * var(--base)); padding-inline: calc(0.6 * var(--base));

View file

@ -20,6 +20,7 @@ import {
MediaChromeDialog, MediaChromeDialog,
MediaLoadingIndicator, MediaLoadingIndicator,
MediaPosterImage, MediaPosterImage,
MediaSeekBackwardButton,
} from "media-chrome/react"; } from "media-chrome/react";
import { import {
MediaPlaybackRateMenu, MediaPlaybackRateMenu,
@ -400,7 +401,10 @@ export const ReleasePlayerCustom = (props: {
className={`${Styles["media-preview-time-display"]}`} className={`${Styles["media-preview-time-display"]}`}
></MediaPreviewTimeDisplay> ></MediaPreviewTimeDisplay>
</MediaTimeRange> </MediaTimeRange>
<MediaSeekForwardButton className={`${Styles["media-button"]}`} seekOffset={90}> <MediaSeekForwardButton
className={`${Styles["media-button"]}`}
seekOffset={90}
>
<div slot="tooltip-content">Пропустить 1.5 минуты</div> <div slot="tooltip-content">Пропустить 1.5 минуты</div>
<svg <svg
{...({ slot: "icon" } as any)} {...({ slot: "icon" } as any)}
@ -581,6 +585,46 @@ export const ReleasePlayerCustom = (props: {
</svg> </svg>
</MediaFullscreenButton> </MediaFullscreenButton>
</MediaControlBar> </MediaControlBar>
<div className={`flex gap-2 ${Styles["media-skip-bar"]}`}>
<MediaSeekBackwardButton
className={`${Styles["media-button"]}`}
noTooltip
seekOffset={10}
>
<div
slot="icon"
className="w-[var(--base)] h-[var(--base)] iconify hugeicons--go-backward-10-sec"
></div>
</MediaSeekBackwardButton>
<MediaSeekBackwardButton
className={`${Styles["media-button"]}`}
noTooltip
>
<div
slot="icon"
className="w-[var(--base)] h-[var(--base)] iconify hugeicons--go-backward-30-sec"
></div>
</MediaSeekBackwardButton>
<MediaSeekForwardButton
className={`${Styles["media-button"]}`}
noTooltip
>
<div
slot="icon"
className="w-[var(--base)] h-[var(--base)] iconify hugeicons--go-forward-30-sec"
></div>
</MediaSeekForwardButton>
<MediaSeekForwardButton
className={`${Styles["media-button"]}`}
noTooltip
seekOffset={10}
>
<div
slot="icon"
className="w-[var(--base)] h-[var(--base)] iconify hugeicons--go-forward-10-sec"
></div>
</MediaSeekForwardButton>
</div>
</MediaController> </MediaController>
</div> </div>
</Card> </Card>

11
package-lock.json generated
View file

@ -9,6 +9,7 @@
"version": "0.1.0", "version": "0.1.0",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@iconify-json/hugeicons": "^1.2.4",
"apexcharts": "^3.52.0", "apexcharts": "^3.52.0",
"deepmerge-ts": "^7.1.0", "deepmerge-ts": "^7.1.0",
"flowbite": "^2.4.1", "flowbite": "^2.4.1",
@ -261,6 +262,15 @@
"@iconify/types": "*" "@iconify/types": "*"
} }
}, },
"node_modules/@iconify-json/hugeicons": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@iconify-json/hugeicons/-/hugeicons-1.2.4.tgz",
"integrity": "sha512-Rx1I42/wwqNiWx7rdQxtFWWOF1/DT1IMPrNReBVJiZe7NIdGT6Zv6Jw5gayqUtv7lDmE8eRmgd6MYRoVJrbuoA==",
"license": "MIT",
"dependencies": {
"@iconify/types": "*"
}
},
"node_modules/@iconify-json/material-symbols": { "node_modules/@iconify-json/material-symbols": {
"version": "1.2.17", "version": "1.2.17",
"resolved": "https://registry.npmjs.org/@iconify-json/material-symbols/-/material-symbols-1.2.17.tgz", "resolved": "https://registry.npmjs.org/@iconify-json/material-symbols/-/material-symbols-1.2.17.tgz",
@ -308,7 +318,6 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
"integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@isaacs/cliui": { "node_modules/@isaacs/cliui": {

View file

@ -10,6 +10,7 @@
"postinstall": "flowbite-react patch" "postinstall": "flowbite-react patch"
}, },
"dependencies": { "dependencies": {
"@iconify-json/hugeicons": "^1.2.4",
"apexcharts": "^3.52.0", "apexcharts": "^3.52.0",
"deepmerge-ts": "^7.1.0", "deepmerge-ts": "^7.1.0",
"flowbite": "^2.4.1", "flowbite": "^2.4.1",

View file

@ -14,7 +14,7 @@ module.exports = {
".flowbite-react\\class-list.json" ".flowbite-react\\class-list.json"
], ],
plugins: [ plugins: [
addIconSelectors(["mdi", "material-symbols", "twemoji", "fa6-brands"]), addIconSelectors(["mdi", "material-symbols", "twemoji", "fa6-brands", "hugeicons"]),
flowbiteReact, flowbiteReact,
require("tailwind-scrollbar") require("tailwind-scrollbar")
], ],