diff --git a/modules/menus/audio/active/SelectedPlayback.ts b/modules/menus/audio/active/SelectedPlayback.ts index 29e5afd..ef1bb5c 100644 --- a/modules/menus/audio/active/SelectedPlayback.ts +++ b/modules/menus/audio/active/SelectedPlayback.ts @@ -2,6 +2,9 @@ const audio = await Service.import('audio'); import { getIcon } from '../utils.js'; import Box from 'types/widgets/box.js'; import { Attribute, Child } from 'lib/types/widget.js'; +import options from 'options'; + +const { raiseMaximumVolume } = options.menus.volume; const renderActivePlayback = (): Box[] => { return [ @@ -52,6 +55,11 @@ const renderActivePlayback = (): Box[] => { min: 0, max: 1, onChange: ({ value }) => (audio.speaker.volume = value), + setup: (self) => { + self.hook(raiseMaximumVolume, () => { + self.max = raiseMaximumVolume.value ? 1.5 : 1; + }); + }, }), ], }), diff --git a/options.ts b/options.ts index edf6e47..855351b 100644 --- a/options.ts +++ b/options.ts @@ -1054,6 +1054,9 @@ const options = mkOptions(OPTIONS, { menus: { transition: opt('crossfade'), transitionTime: opt(200), + volume: { + raiseMaximumVolume: opt(false), + }, power: { showLabel: opt(true), confirmation: opt(true), diff --git a/package.json b/package.json index a44b92b..a3380e7 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "scripts": { "lint": "eslint --config .eslintrc.js .", - "lint:fix": "eslint --config .eslintrc.js .", + "lint:fix": "eslint --config .eslintrc.js . --fix", "format": "prettier --write 'modules/**/*.ts'" }, "keywords": [], diff --git a/widget/settings/pages/config/index.ts b/widget/settings/pages/config/index.ts index 31f4fa3..db212f0 100644 --- a/widget/settings/pages/config/index.ts +++ b/widget/settings/pages/config/index.ts @@ -7,6 +7,7 @@ import { OSDSettings } from './osd/index'; import { CustomModuleSettings } from 'customModules/config'; import { PowerMenuSettings } from './menus/power'; import { GBox } from 'lib/types/widget'; +import { VolumeMenuSettings } from './menus/volume'; type Page = | 'General' @@ -14,6 +15,7 @@ type Page = | 'Clock Menu' | 'Dashboard Menu' | 'Power Menu' + | 'Volume' | 'Notifications' | 'OSD' | 'Custom Modules'; @@ -26,6 +28,7 @@ const pagerMap: Page[] = [ 'Notifications', 'OSD', 'Power Menu', + 'Volume', 'Clock Menu', 'Dashboard Menu', 'Custom Modules', @@ -57,6 +60,7 @@ export const SettingsMenu = (): GBox => { Bar: BarSettings(), Notifications: NotificationSettings(), OSD: OSDSettings(), + Volume: VolumeMenuSettings(), 'Clock Menu': ClockMenuSettings(), 'Dashboard Menu': DashboardMenuSettings(), 'Custom Modules': CustomModuleSettings(), diff --git a/widget/settings/pages/config/menus/volume.ts b/widget/settings/pages/config/menus/volume.ts new file mode 100644 index 0000000..b71cdee --- /dev/null +++ b/widget/settings/pages/config/menus/volume.ts @@ -0,0 +1,24 @@ +import { Option } from 'widget/settings/shared/Option'; +import { Header } from 'widget/settings/shared/Header'; + +import options from 'options'; +import Scrollable from 'types/widgets/scrollable'; +import { Attribute, Child } from 'lib/types/widget'; + +export const VolumeMenuSettings = (): Scrollable => { + return Widget.Scrollable({ + vscroll: 'automatic', + child: Widget.Box({ + class_name: 'bar-theme-page paged-container', + vertical: true, + children: [ + Header('Volume'), + Option({ + opt: options.menus.volume.raiseMaximumVolume, + title: 'Allow Raising Volume Above 100%', + type: 'boolean', + }), + ], + }), + }); +};