feat: release v0.0.1

This commit is contained in:
2026-02-27 09:50:13 +03:00
parent ed30903f96
commit 8f2c799235
321 changed files with 23986 additions and 1 deletions

View File

@@ -0,0 +1,38 @@
import Component from "video.js/dist/types/component";
import Player from "video.js/dist/types/player";
import TachVideoMenu from "../tach-video-menu";
import TachVideoMenuItem from "../tach-video-menu-item";
declare const MenuButton: typeof Component;
export default class TachVideoMenuButton extends MenuButton {
private hideThreshold_;
private buttonPressed_;
private menu;
private menuButton_;
items: TachVideoMenuItem[];
/**
* Button constructor.
*
* @param {Player} player - videojs player instance
*/
constructor(player: Player, title: string, name: string);
/**
* Creates button items.
*
* @return {TachVideoMenuItem[]} - Button items
*/
createItems(): TachVideoMenuItem[];
/**
* Создаёт меню и добавляет в него все пункты.
*
* @return {Menu} - Сконструированное меню
*/
createMenu(): TachVideoMenu;
/**
* Обновление меню без его пересоздания.
*
* @return {Menu} - Обновлённое меню
*/
update(): void;
}
export {};
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu-button/index.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,+BAA+B,CAAC;AACtD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAExD,QAAA,MAAM,UAAU,kBAAqC,CAAC;AAStD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,UAAU;IAC1D,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,WAAW,CAAa;IACzB,KAAK,EAAE,iBAAiB,EAAE,CAAM;IAEvC;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAiBvD;;;;OAIG;IACH,WAAW,IAAI,iBAAiB,EAAE;IAIlC;;;;OAIG;IACH,UAAU;IAsBV;;;;OAIG;IACH,MAAM;CA6BN"}

View File

@@ -0,0 +1,90 @@
import videojs from "video.js";
import TachVideoMenu from "../tach-video-menu";
const MenuButton = videojs.getComponent("MenuButton");
const Menu = videojs.getComponent("Menu");
export default class TachVideoMenuButton extends MenuButton {
/**
* Button constructor.
*
* @param {Player} player - videojs player instance
*/
constructor(player, title, name) {
super(player, {
title: title,
name: name,
});
this.hideThreshold_ = 0;
this.buttonPressed_ = false;
this.items = [];
// Перехватываем событие 'mouseenter' на уровне захвата и предотвращаем его дальнейшее распространение
const el = this.menuButton_.el();
el.addEventListener("mouseenter", e => {
e.stopImmediatePropagation();
}, true);
}
/**
* Creates button items.
*
* @return {TachVideoMenuItem[]} - Button items
*/
createItems() {
return [];
}
/**
* Создаёт меню и добавляет в него все пункты.
*
* @return {Menu} - Сконструированное меню
*/
createMenu() {
const menu = new TachVideoMenu(this.player_, {
menuButton: this,
});
this.hideThreshold_ = 0;
this.items = this.createItems();
if (this.items) {
// Если метод updateItems присутствует, используем его для обновления списка
if (typeof menu.updateItems === "function") {
menu.updateItems(this.items);
}
else {
// Если по какой-то причине обновление недоступно, добавляем элементы по одному
this.items.forEach(item => menu.addItem(item));
}
}
return menu;
}
/**
* Обновление меню без его пересоздания.
*
* @return {Menu} - Обновлённое меню
*/
update() {
// Если меню уже создано и поддерживает updateItems, обновляем его содержимое
if (this.menu && typeof this.menu.updateItems === "function") {
this.items = this.createItems();
this.menu.updateItems(this.items);
}
else {
// Если меню ещё не создано, создаём его
this.menu = this.createMenu();
}
this.addChild(this.menu);
/**
* Track the state of the menu button
*
* @type {Boolean}
* @private
*/
this.buttonPressed_ = false;
this.menuButton_.el_.setAttribute("aria-expanded", "false");
if (this.items && this.items?.length <= this.hideThreshold_) {
this.hide();
this.menu.contentEl().removeAttribute("role");
}
else {
this.show();
this.menu.contentEl().setAttribute("role", "menu");
}
}
}
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu-button/index.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,33 @@
import Player from "video.js/dist/types/player";
import { TachPlayerMenuItemOptions, TachPlayerPlugin } from "../../types";
import TachVideoMenuButton from "../tach-video-menu-button";
declare const VideoJsMenuItemClass: typeof import("video.js/dist/types/component").default;
export interface ITachPlayerMenuItem extends TachPlayerMenuItemOptions {
onClick: () => void;
enabled?: boolean;
value?: unknown;
}
/**
* Extend vjs menu item class.
*/
export default class TachVideoMenuItem extends VideoJsMenuItemClass {
private item;
private button;
private plugin;
/**
* Menu item constructor.
*
* @param {Player} player - vjs player
* @param {ITachVideoMenuItem} item - Item object
* @param {ConcreteButton} button - The containing button.
* @param {TachPlayerPlugin} plugin - This plugin instance.
*/
constructor(player: Player, item: ITachPlayerMenuItem, button: TachVideoMenuButton, plugin: TachPlayerPlugin);
/**
* Click event for menu item.
*/
handleClick(): void;
selected(val: boolean): void;
}
export {};
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu-item/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAG5D,QAAA,MAAM,oBAAoB,wDAAmC,CAAC;AAG9D,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACrE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,oBAAoB;IAClE,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAmB;IAEjC;;;;;;;OAOG;gBAEF,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,gBAAgB;IAczB;;OAEG;IACH,WAAW;IAWX,QAAQ,CAAC,GAAG,EAAE,OAAO;CAIrB"}

View File

@@ -0,0 +1,45 @@
import videojs from "video.js";
// Concrete classes
const VideoJsMenuItemClass = videojs.getComponent("MenuItem");
/**
* Extend vjs menu item class.
*/
export default class TachVideoMenuItem extends VideoJsMenuItemClass {
/**
* Menu item constructor.
*
* @param {Player} player - vjs player
* @param {ITachVideoMenuItem} item - Item object
* @param {ConcreteButton} button - The containing button.
* @param {TachPlayerPlugin} plugin - This plugin instance.
*/
constructor(player, item, button, plugin) {
super(player, {
label: item.label,
selectable: item.selectable || true,
selected: item.selected || false,
});
this.item = item;
this.button = button;
this.plugin = plugin;
item.className && this.addClass(item.className);
}
/**
* Click event for menu item.
*/
handleClick() {
if (this.item.onClick) {
// Reset other menu items selected status.
for (let i = 0; i < this.button.items?.length; ++i) {
this.button.items[i].selected(false);
}
this.selected(true);
return this.item.onClick();
}
}
selected(val) {
//@ts-expect-error // getComponent reduant
super.selected(val);
}
}
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu-item/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAC;AAM/B,mBAAmB;AACnB,MAAM,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAS9D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,oBAAoB;IAKlE;;;;;;;OAOG;IACH,YACC,MAAc,EACd,IAAyB,EACzB,MAA2B,EAC3B,MAAwB;QAExB,KAAK,CAAC,MAAM,EAAE;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;SACzB,CAAC,CAAC;QACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,WAAW;QACV,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,0CAA0C;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,QAAQ,CAAC,GAAY;QACpB,0CAA0C;QAC1C,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;CACD"}

View File

@@ -0,0 +1,33 @@
import Player from "video.js/dist/types/player";
import TachVideoMenuButton from "../tach-video-menu-button";
import TachVideoMenuItem from "../tach-video-menu-item";
declare const VideoJsMenuClass: typeof import("video.js/dist/types/component").default;
type BaseMenuOptions = ConstructorParameters<typeof VideoJsMenuClass>[1];
interface TachMenuOptions extends NonNullable<BaseMenuOptions> {
menuButton: TachVideoMenuButton;
}
/**
* Extend vjs menu item class.
*/
export default class TachVideoMenu extends VideoJsMenuClass {
private menuOpened_;
/**
* Menu item constructor.
*
* @param {Player} player - vjs player
* @param {TachPlayerMenuItemOptions} item - Item object
* @param {ConcreteButton} button - The containing button.
* @param {TachPlayerPlugin} plugin - This plugin instance.
*/
constructor(player: Player, options: TachMenuOptions);
hide(): void;
show(): void;
addItem(item: TachVideoMenuItem): void;
/**
* Обновляет пункты меню.
* @param {Array<Object|string>} newItems - Массив новых компонентов или их имён, которые будут добавлены в меню.
*/
updateItems(newItems: TachVideoMenuItem[]): void;
}
export {};
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu/index.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD,OAAO,mBAAmB,MAAM,2BAA2B,CAAC;AAC5D,OAAO,iBAAiB,MAAM,yBAAyB,CAAC;AAGxD,QAAA,MAAM,gBAAgB,wDAA+B,CAAC;AAMtD,KAAK,eAAe,GAAG,qBAAqB,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,UAAU,eAAgB,SAAQ,WAAW,CAAC,eAAe,CAAC;IAC7D,UAAU,EAAE,mBAAmB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,gBAAgB;IAC1D,OAAO,CAAC,WAAW,CAAkB;IACrC;;;;;;;OAOG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;IAUpD,IAAI;IAMJ,IAAI;IAMJ,OAAO,CAAC,IAAI,EAAE,iBAAiB;IAK/B;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,iBAAiB,EAAE;CAczC"}

View File

@@ -0,0 +1,56 @@
import videojs from "video.js";
// Concrete classes
const VideoJsMenuClass = videojs.getComponent("Menu");
/**
* Extend vjs menu item class.
*/
export default class TachVideoMenu extends VideoJsMenuClass {
/**
* Menu item constructor.
*
* @param {Player} player - vjs player
* @param {TachPlayerMenuItemOptions} item - Item object
* @param {ConcreteButton} button - The containing button.
* @param {TachPlayerPlugin} plugin - This plugin instance.
*/
constructor(player, options) {
super(player, options);
this.menuOpened_ = false;
player.on("userinactive", () => {
if (this.menuOpened_) {
player.userActive(true);
}
});
}
hide() {
this.menuOpened_ = false;
// Вызов родительского метода скрытия
super.hide();
}
show() {
this.menuOpened_ = true;
// Вызов родительского метода скрытия
super.show();
}
addItem(item) {
//@ts-expect-error getComponent reduant method
super.addItem(item);
}
/**
* Обновляет пункты меню.
* @param {Array<Object|string>} newItems - Массив новых компонентов или их имён, которые будут добавлены в меню.
*/
updateItems(newItems) {
// Получаем текущих потомков
const currentChildren = this.children().slice();
// Удаляем все остальные дочерние компоненты.
currentChildren.forEach(child => {
this.removeChild(child);
});
// Добавляем новые пункты меню.
newItems.forEach(item => {
this.addItem(item);
});
}
}
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/core/plugins/settings/components/tach-video-menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,UAAU,CAAC;AAM/B,mBAAmB;AACnB,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAWtD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,gBAAgB;IAE1D;;;;;;;OAOG;IACH,YAAY,MAAc,EAAE,OAAwB;QACnD,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAVhB,gBAAW,GAAY,KAAK,CAAC;QAYpC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,IAAI;QACH,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,qCAAqC;QACrC,KAAK,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,IAAI;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,qCAAqC;QACrC,KAAK,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,OAAO,CAAC,IAAuB;QAC9B,8CAA8C;QAC9C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAA6B;QACxC,4BAA4B;QAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC;QAEhD,6CAA6C;QAC7C,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,+BAA+B;QAC/B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}