|
@@ -4,7 +4,6 @@ import { doVersionCheck } from "./versionCheck";
|
|
import { mode } from "../constants";
|
|
import { mode } from "../constants";
|
|
import { getFeatures } from "../config";
|
|
import { getFeatures } from "../config";
|
|
import { FeatureInfo, type ResourceKey, type SiteSelection, type SiteSelectionOrNone } from "../types";
|
|
import { FeatureInfo, type ResourceKey, type SiteSelection, type SiteSelectionOrNone } from "../types";
|
|
-import { volumeSharedBetweenTabsDisabled } from "./volume";
|
|
|
|
import { emitSiteEvent } from "../siteEvents";
|
|
import { emitSiteEvent } from "../siteEvents";
|
|
import langMapping from "../../assets/locales.json" assert { type: "json" };
|
|
import langMapping from "../../assets/locales.json" assert { type: "json" };
|
|
|
|
|
|
@@ -17,7 +16,10 @@ export * from "./songLists";
|
|
export * from "./versionCheck";
|
|
export * from "./versionCheck";
|
|
export * from "./volume";
|
|
export * from "./volume";
|
|
|
|
|
|
-type SelectOption = { value: number | string, label: string };
|
|
|
|
|
|
+interface SelectOption<TValue = number | string> {
|
|
|
|
+ value: TValue;
|
|
|
|
+ label: string;
|
|
|
|
+}
|
|
|
|
|
|
//#region dependencies
|
|
//#region dependencies
|
|
|
|
|
|
@@ -46,18 +48,18 @@ const adornments = {
|
|
advanced: async () => getAdornHtml("bytm-advanced-mode-icon", t("advanced_mode"), "icon-advanced_mode"),
|
|
advanced: async () => getAdornHtml("bytm-advanced-mode-icon", t("advanced_mode"), "icon-advanced_mode"),
|
|
experimental: async () => getAdornHtml("bytm-experimental-icon", t("experimental_feature"), "icon-experimental"),
|
|
experimental: async () => getAdornHtml("bytm-experimental-icon", t("experimental_feature"), "icon-experimental"),
|
|
globe: async () => await resourceToHTMLString("icon-globe_small") ?? "",
|
|
globe: async () => await resourceToHTMLString("icon-globe_small") ?? "",
|
|
- warning: async (title: string) => getAdornHtml("bytm-warning-icon", title, "icon-error", "role=\"alert\""),
|
|
|
|
|
|
+ alert: async (title: string) => getAdornHtml("bytm-warning-icon", title, "icon-error", "role=\"alert\""),
|
|
reloadRequired: async () => getFeatures().advancedMode ? getAdornHtml("bytm-reload-icon", t("feature_requires_reload"), "icon-reload") : undefined,
|
|
reloadRequired: async () => getFeatures().advancedMode ? getAdornHtml("bytm-reload-icon", t("feature_requires_reload"), "icon-reload") : undefined,
|
|
} satisfies Record<string, (...args: any[]) => Promise<string | undefined>>;
|
|
} satisfies Record<string, (...args: any[]) => Promise<string | undefined>>;
|
|
|
|
|
|
/** Common options for config items of type "select" */
|
|
/** Common options for config items of type "select" */
|
|
const options = {
|
|
const options = {
|
|
- siteSelection: (): { value: SiteSelection, label: string }[] => [
|
|
|
|
|
|
+ siteSelection: (): SelectOption<SiteSelection>[] => [
|
|
{ value: "all", label: t("site_selection_both_sites") },
|
|
{ value: "all", label: t("site_selection_both_sites") },
|
|
{ value: "yt", label: t("site_selection_only_yt") },
|
|
{ value: "yt", label: t("site_selection_only_yt") },
|
|
{ value: "ytm", label: t("site_selection_only_ytm") },
|
|
{ value: "ytm", label: t("site_selection_only_ytm") },
|
|
],
|
|
],
|
|
- siteSelectionOrNone: (): { value: SiteSelectionOrNone, label: string }[] => [
|
|
|
|
|
|
+ siteSelectionOrNone: (): SelectOption<SiteSelectionOrNone>[] => [
|
|
{ value: "all", label: t("site_selection_both_sites") },
|
|
{ value: "all", label: t("site_selection_both_sites") },
|
|
{ value: "yt", label: t("site_selection_only_yt") },
|
|
{ value: "yt", label: t("site_selection_only_yt") },
|
|
{ value: "ytm", label: t("site_selection_only_ytm") },
|
|
{ value: "ytm", label: t("site_selection_only_ytm") },
|
|
@@ -261,16 +263,14 @@ export const featInfo = {
|
|
type: "toggle",
|
|
type: "toggle",
|
|
category: "volume",
|
|
category: "volume",
|
|
default: false,
|
|
default: false,
|
|
- reloadRequired: false,
|
|
|
|
- enable: noop,
|
|
|
|
- disable: () => volumeSharedBetweenTabsDisabled,
|
|
|
|
|
|
+ textAdornment: adornments.reloadRequired,
|
|
},
|
|
},
|
|
setInitialTabVolume: {
|
|
setInitialTabVolume: {
|
|
type: "toggle",
|
|
type: "toggle",
|
|
category: "volume",
|
|
category: "volume",
|
|
default: false,
|
|
default: false,
|
|
textAdornment: () => getFeatures().volumeSharedBetweenTabs
|
|
textAdornment: () => getFeatures().volumeSharedBetweenTabs
|
|
- ? combineAdornments([adornments.warning(t("feature_warning_setInitialTabVolume_volumeSharedBetweenTabs_incompatible").replace(/"/g, "'")), adornments.reloadRequired])
|
|
|
|
|
|
+ ? combineAdornments([adornments.alert(t("feature_warning_setInitialTabVolume_volumeSharedBetweenTabs_incompatible").replace(/"/g, "'")), adornments.reloadRequired])
|
|
: adornments.reloadRequired(),
|
|
: adornments.reloadRequired(),
|
|
},
|
|
},
|
|
initialTabVolumeLevel: {
|
|
initialTabVolumeLevel: {
|
|
@@ -282,7 +282,7 @@ export const featInfo = {
|
|
default: 100,
|
|
default: 100,
|
|
unit: "%",
|
|
unit: "%",
|
|
textAdornment: () => getFeatures().volumeSharedBetweenTabs
|
|
textAdornment: () => getFeatures().volumeSharedBetweenTabs
|
|
- ? combineAdornments([adornments.warning(t("feature_warning_setInitialTabVolume_volumeSharedBetweenTabs_incompatible").replace(/"/g, "'")), adornments.reloadRequired])
|
|
|
|
|
|
+ ? combineAdornments([adornments.alert(t("feature_warning_setInitialTabVolume_volumeSharedBetweenTabs_incompatible").replace(/"/g, "'")), adornments.reloadRequired])
|
|
: adornments.reloadRequired(),
|
|
: adornments.reloadRequired(),
|
|
reloadRequired: false,
|
|
reloadRequired: false,
|
|
enable: noop,
|
|
enable: noop,
|