diff --git a/shared/css/static/modal-newcomer.scss b/shared/css/static/modal-newcomer.scss
index 03632a1b..b6da49eb 100644
--- a/shared/css/static/modal-newcomer.scss
+++ b/shared/css/static/modal-newcomer.scss
@@ -14,7 +14,7 @@ html:root {
padding: 0!important;
min-width: 20em;
- width: 50em;
+ width: 60em;
@include user-select(none);
@@ -70,6 +70,8 @@ html:root {
@include chat-scrollbar-horizontal();
@include chat-scrollbar-vertical();
+ background-color: #19191b;
+
.body {
display: flex;
flex-direction: column;
@@ -86,7 +88,7 @@ html:root {
&.step-welcome, &.step-finish {
display: flex;
flex-direction: row;
- justify-content: stretch;
+ justify-content: center;
.text {
align-self: center;
@@ -119,7 +121,7 @@ html:root {
}
/* for step-identity or step-microphone */
- .container-settings-identity-profile, .container-settings-audio-microphone {
+ .container-settings-identity-profile {
padding: .5em;
.left .body {
@@ -136,8 +138,6 @@ html:root {
&.step-identity { }
- &.step-microphone { }
-
&.hidden {
display: none;
}
diff --git a/shared/html/templates/modal/newcomer.html b/shared/html/templates/modal/newcomer.html
index 005cd09d..5ae1f1cf 100644
--- a/shared/html/templates/modal/newcomer.html
+++ b/shared/html/templates/modal/newcomer.html
@@ -37,9 +37,7 @@
{{tr "It is save to exit this guide at any point and directly jump ahead using the client." /}}
-
- {{include tmpl="tmpl_settings-microphone" /}}
-
+
{{include tmpl="tmpl_settings-profiles" /}}
diff --git a/shared/js/ui/modal/ModalNewcomer.ts b/shared/js/ui/modal/ModalNewcomer.tsx
similarity index 64%
rename from shared/js/ui/modal/ModalNewcomer.ts
rename to shared/js/ui/modal/ModalNewcomer.tsx
index cefea293..4da7189a 100644
--- a/shared/js/ui/modal/ModalNewcomer.ts
+++ b/shared/js/ui/modal/ModalNewcomer.tsx
@@ -5,6 +5,10 @@ import { modal as emodal } from "tc-shared/events";
import {modal_settings} from "tc-shared/ui/modal/ModalSettings";
import {profiles} from "tc-shared/profiles/ConnectionProfile";
import {spawnYesNo} from "tc-shared/ui/modal/ModalYesNo";
+import {initialize_audio_microphone_controller, MicrophoneSettingsEvents} from "tc-shared/ui/modal/settings/Microphone";
+import {MicrophoneSettings} from "tc-shared/ui/modal/settings/MicrophoneRenderer";
+import * as React from "react";
+import * as ReactDOM from "react-dom";
const next_step: {[key: string]:string} = {
"welcome": "microphone",
@@ -69,7 +73,7 @@ function initializeBasicFunctionality(tag: JQuery, event_registry: Registry {
+ button_last_step.on('click', () => {
if(last_step[current_step])
event_registry.fire("show_step", { step: last_step[current_step] as any });
else
@@ -100,8 +104,8 @@ function initializeBasicFunctionality(tag: JQuery, event_registry: Registry button_next_step.prop("disabled", true));
- event_registry.on("show_step", event => button_last_step.prop("disabled", true));
+ event_registry.on("show_step", () => button_next_step.prop("disabled", true));
+ event_registry.on("show_step", () => button_last_step.prop("disabled", true));
event_registry.on("step-status", event => button_next_step.prop("disabled", !event.next_button));
event_registry.on("step-status", event => button_last_step.prop("disabled", !event.previous_button));
@@ -292,145 +296,28 @@ function initializeStepIdentity(tag: JQuery, event_registry: Registry, modal: Modal) {
- const microphone_events = new Registry();
- //microphone_events.enable_debug("settings-microphone");
- //modal_settings.initialize_audio_microphone_controller(microphone_events);
- //modal_settings.initialize_audio_microphone_view(tag, microphone_events);
- modal.close_listener.push(() => microphone_events.fire_async("deinitialize"));
+ let helpStep = 0;
- let help_animation_done = false;
- const update_step_status = () => event_registry.fire_async("step-status", { next_button: help_animation_done, previous_button: help_animation_done });
- event_registry.on("show_step", e => {
- if(e.step !== "microphone") return;
+ const settingEvents = new Registry();
+ settingEvents.on("query_help", () => settingEvents.fire_async("notify_highlight", { field: helpStep <= 2 ? ("hs-" + helpStep) as any : undefined }));
+ settingEvents.on("action_help_click", () => {
+ helpStep++;
+ settingEvents.fire("query_help");
- update_step_status();
+ event_registry.fire_async("step-status", { next_button: helpStep > 2, previous_button: helpStep > 2 })
});
- /* the help sequence */
- {
- const container = tag.find(".container-settings-audio-microphone");
- const container_help_text = tag.find(".container-help-text");
+ initialize_audio_microphone_controller(settingEvents);
+ ReactDOM.render(, tag[0]);
- const container_profile_list = tag.find(".highlight-microphone-list");
- const container_profile_settings = tag.find(".highlight-microphone-settings");
+ modal.close_listener.push(() => {
+ settingEvents.fire("notify_destroy");
+ ReactDOM.unmountComponentAtNode(tag[0]);
+ });
- let is_first_show = true;
- event_registry.on("show_step", event => {
- if(!is_first_show || event.step !== "microphone") return;
- is_first_show = false;
- container.addClass("help-shown");
- const text = tr( /* @tr-ignore */
- "Firstly we need to setup a microphone.\n" +
- "Let me guide you thru the basic UI elements.\n" +
- "\n" +
- "To continue click anywhere on the screen."
- );
- set_help_text(text);
- $("body").one('mousedown', event => show_microphone_list_help());
- });
-
- const set_help_text = text => {
- container_help_text.empty();
- text.split("\n").forEach(e => container_help_text.append(e == "" ? $.spawn("br") : $.spawn("a").text(e)));
- };
-
- const show_microphone_list_help = () => {
- container.find(".highlighted").removeClass("highlighted");
- container_profile_list.addClass("highlighted");
-
- const update_position = () => {
- const font_size = parseFloat(getComputedStyle(container_help_text[0]).fontSize);
-
- const offset = container_profile_list.offset();
- const abs = container.offset();
-
- container_help_text.css({
- top: offset.top - abs.top,
- left: ((offset.left - abs.left) + container_profile_list.outerWidth() + font_size) + "px",
- right: "1em",
- bottom: "1em"
- });
- };
- update_position();
- container_help_text.off('resize').on('resize', update_position);
-
- const text = tr( /* @tr-ignore */
- "All your available microphones are listed within this box.\n" +
- "\n" +
- "The currently selected microphone\n" +
- "is marked with a green checkmark. To change the selected microphone\n" +
- "just click on the new one.\n" +
- "\n" +
- "To continue click anywhere on the screen."
- );
- set_help_text(text);
- $("body").one('mousedown', event => show_microphone_settings_help());
- };
-
- const show_microphone_settings_help = () => {
- container.find(".highlighted").removeClass("highlighted");
- container_profile_settings.addClass("highlighted");
-
- const update_position = () => {
- const font_size = parseFloat(getComputedStyle(container_help_text[0]).fontSize);
- const container_settings_offset = container_profile_settings.offset();
- const right = container_profile_settings.outerWidth() + font_size * 2;
- container_help_text.css({
- top: container_settings_offset.top - container.offset().top,
- left: "1em",
- right: right + "px",
- bottom: "1em"
- });
- };
-
- container_help_text.empty();
- container_help_text.append($.spawn("div").addClass("help-microphone-settings").append(
- $.spawn("a").text(tr("On the right side you'll find all microphone settings.")),
- $.spawn("br"),
- $.spawn("a").text("TeaSpeak has three voice activity detection types:"),
- $.spawn("ol").append(
- $.spawn("li").addClass("vad-type").append(
- $.spawn("a").addClass("title").text(tr("Push to Talk")),
- $.spawn("a").addClass("description").html(tr( /* @tr-ignore */
- "To transmit audio data you'll have to
" +
- "press a key. The key could be selected " +
- "via the button right to the radio button."
- ))
- ),
- $.spawn("li").addClass("vad-type").append(
- $.spawn("a").addClass("title").text(tr("Voice activity detection")),
- $.spawn("a").addClass("description").html(tr( /* @tr-ignore */
- "In this mode, TeaSpeak will continuously analyze your microphone input. " +
- "If the audio level is grater than a certain threshold, " +
- "the audio will be transmitted. " +
- "The threshold is changeable via the \"Sensitivity Settings\" slider."
- ))
- ),
- $.spawn("li").addClass("vad-type").append(
- $.spawn("a").addClass("title").html(tr("Always active")),
- $.spawn("a").addClass("description").text(tr( /* @tr-ignore */
- "Continuously transmit any audio data.\n"
- ))
- )
- ),
- $.spawn("br"),
- $.spawn("a").text(tr("Now you're ready to configure your microphone. Just click anywhere on the screen."))
- ));
- update_position();
- container_help_text.off('resize').on('resize', update_position);
-
- $("body").one('mousedown', event => hide_help());
- };
-
- const hide_help = () => {
- container.find(".highlighted").removeClass("highlighted");
- container.addClass("hide-help");
- setTimeout(() => container.removeClass("help-shown"), 1000);
- container_help_text.off('resize');
-
- help_animation_done = true;
- update_step_status();
- };
- }
+ event_registry.on("show_step", event => {
+ if(event.step !== "microphone") return;
+ event_registry.fire_async("step-status", { next_button: helpStep > 2, previous_button: helpStep > 2 });
+ });
}
\ No newline at end of file
diff --git a/shared/js/ui/modal/settings/Heighlight.scss b/shared/js/ui/modal/settings/Heighlight.scss
new file mode 100644
index 00000000..9a3a0ef7
--- /dev/null
+++ b/shared/js/ui/modal/settings/Heighlight.scss
@@ -0,0 +1,115 @@
+@import "../../../../css/static/mixin.scss";
+@import "../../../../css/static/properties.scss";
+
+.container {
+ $highlight-time: .5s;
+ $backdrop-color: rgba(0, 0, 0, .9);
+
+ display: flex;
+ position: relative;
+
+ padding: .5em;
+
+ background-color: inherit;
+
+ .background {
+ position: absolute;
+
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+
+ display: none;
+ background-color: $backdrop-color;
+ border-radius: .15em;
+
+ padding: .5em;
+ }
+
+ /*
+ .highlightable {
+ display: flex;
+ }
+ */
+
+ .helpText {
+ opacity: 0;
+ z-index: 20;
+
+ pointer-events: none;
+
+ display: block;
+
+ overflow: auto;
+ @include chat-scrollbar();
+ @include transition($highlight-time ease-in-out);
+
+ a {
+ display: block;
+ }
+
+ ol {
+ margin-top: .5em;
+ margin-bottom: 0;
+ }
+
+ li {
+ margin-bottom: .5em;
+
+ .title {
+ font-weight: bold;
+ }
+ }
+
+ &.shown {
+ opacity: 1;
+ pointer-events: initial;
+
+ @include transition($highlight-time ease-in-out);
+ }
+ }
+
+ &.shown {
+ .background {
+ display: flex;
+ z-index: 1;
+
+ opacity: 1;
+ }
+
+ .highlightable {
+ border-radius: .1em;
+ position: relative;
+ z-index: 10;
+
+ background-color: inherit;
+
+ @include transition($highlight-time ease-in-out);
+
+ &::after {
+ content: ' ';
+
+ z-index: 5;
+ position: absolute;
+
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+
+ background-color: $backdrop-color;
+
+ @include transition($highlight-time ease-in-out);
+ }
+
+ &.highlighted {
+ padding: .5em;
+
+ &::after {
+ background-color: #00000000;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/shared/js/ui/modal/settings/Heighlight.tsx b/shared/js/ui/modal/settings/Heighlight.tsx
new file mode 100644
index 00000000..3f7da0e2
--- /dev/null
+++ b/shared/js/ui/modal/settings/Heighlight.tsx
@@ -0,0 +1,38 @@
+import * as React from "react";
+import {useContext} from "react";
+
+const cssStyle = require("./Heighlight.scss");
+
+const HighlightContext = React.createContext(undefined);
+export const HighlightContainer = (props: { children: React.ReactNode | React.ReactNode[], highlightedId?: string, onClick?: () => void }) => {
+ return (
+
+
+
+ );
+};
+
+export const HighlightRegion = (props: React.HTMLProps & { highlightId: string } ) => {
+ const wProps = Object.assign({}, props);
+ delete wProps["highlightId"];
+
+ const highlightedId = useContext(HighlightContext);
+ const highlighted = highlightedId === props.highlightId;
+
+ wProps.className = (props.className || "") + " " + cssStyle.highlightable + " " + (highlighted ? cssStyle.highlighted : "");
+ return React.createElement("div", wProps);
+};
+
+export const HighlightText = (props: { highlightId: string, className?: string, children?: React.ReactNode | React.ReactNode[] } ) => {
+ const highlightedId = useContext(HighlightContext);
+ const highlighted = highlightedId === props.highlightId;
+
+ return (
+
+ {props.children}
+
+ )
+};
\ No newline at end of file
diff --git a/shared/js/ui/modal/settings/Microphone.scss b/shared/js/ui/modal/settings/Microphone.scss
index d1b4446e..317a7343 100644
--- a/shared/js/ui/modal/settings/Microphone.scss
+++ b/shared/js/ui/modal/settings/Microphone.scss
@@ -11,6 +11,7 @@
min-width: 43em;
min-height: 41em;
+ background-color: inherit;
position: relative;
.left, .right {
@@ -588,6 +589,20 @@
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#70407e', endColorstr='#45407e',GradientType=1 ); /* IE6-9 */
}
+/* The help overlays */
+.help {
+ position: absolute;
+
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+
+ &.paddingTop {
+ padding-top: 3.6em;
+ }
+}
+
@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } }
@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }
@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } }
\ No newline at end of file
diff --git a/shared/js/ui/modal/settings/Microphone.tsx b/shared/js/ui/modal/settings/Microphone.tsx
index d6afcc79..bf98037d 100644
--- a/shared/js/ui/modal/settings/Microphone.tsx
+++ b/shared/js/ui/modal/settings/Microphone.tsx
@@ -24,11 +24,12 @@ export type MicrophoneDevice = {
export interface MicrophoneSettingsEvents {
"query_devices": { refresh_list: boolean },
-
+ "query_help": {},
"query_setting": {
setting: MicrophoneSetting
},
+ "action_help_click": {},
"action_request_permissions": {},
"action_set_selected_device": { deviceId: string },
"action_set_selected_device_result": {
@@ -70,6 +71,10 @@ export interface MicrophoneSettingsEvents {
status: Exclude
},
+ notify_highlight: {
+ field: "hs-0" | "hs-1" | "hs-2" | undefined
+ }
+
notify_destroy: {}
}
@@ -310,7 +315,6 @@ export function initialize_audio_microphone_controller(events: Registry {
@@ -341,5 +345,4 @@ loader.register_task(Stage.LOADED, {
});
},
priority: -2
-})
-*/
\ No newline at end of file
+})
\ No newline at end of file
diff --git a/shared/js/ui/modal/settings/MicrophoneRenderer.tsx b/shared/js/ui/modal/settings/MicrophoneRenderer.tsx
index 2ad2fb7c..ce7bd58a 100644
--- a/shared/js/ui/modal/settings/MicrophoneRenderer.tsx
+++ b/shared/js/ui/modal/settings/MicrophoneRenderer.tsx
@@ -1,7 +1,7 @@
import * as React from "react";
import {Translatable} from "tc-shared/ui/react-elements/i18n";
import {Button} from "tc-shared/ui/react-elements/Button";
-import {modal, Registry} from "tc-shared/events";
+import {Registry} from "tc-shared/events";
import {MicrophoneDevice, MicrophoneSettingsEvents} from "tc-shared/ui/modal/settings/Microphone";
import {useEffect, useRef, useState} from "react";
import {ClientIconRenderer} from "tc-shared/ui/react-elements/Icons";
@@ -16,6 +16,7 @@ import {spawnKeySelect} from "tc-shared/ui/modal/ModalKeySelect";
import {Checkbox} from "tc-shared/ui/react-elements/Checkbox";
import {BoxedInputField} from "tc-shared/ui/react-elements/InputField";
import {IDevice} from "tc-shared/audio/recorder";
+import {HighlightContainer, HighlightRegion, HighlightText} from "./Heighlight";
const cssStyle = require("./Microphone.scss");
@@ -157,7 +158,6 @@ const MicrophoneList = (props: { events: Registry }) =
});
const [ selectedDevice, setSelectedDevice ] = useState<{ deviceId: string, mode: "selected" | "selecting" }>();
const [ deviceList, setDeviceList ] = useState([]);
- const [ error, setError ] = useState(undefined);
props.events.reactUse("notify_devices", event => {
setSelectedDevice(undefined);
@@ -202,7 +202,7 @@ const MicrophoneList = (props: { events: Registry }) =
Please grant access to your microphone.
@@ -506,37 +506,109 @@ const ThresholdSelector = (props: { events: Registry
}
)
};
-export const MicrophoneSettings = (props: { events: Registry }) => (
-
-
-
-
Select your Microphone Device
-
+const HelpText0 = () => (
+
+
+ Firstly we need to setup a microphone.
+ Let me guide you thru the basic UI elements.
+
+ To continue click anywhere on the screen.
+
+
+);
+
+const HelpText1 = () => (
+
+
+ All your available microphones are listed within this box.
+
+ The currently selected microphone
+ is marked with a green checkmark. To change the selected microphone
+ just click on the new one.
+
+ To continue click anywhere on the screen.
+
+
+);
+
+const HelpText2 = () => (
+
+
+ TeaSpeak has three voice activity detection types:
+
+
+ -
+
+ To transmit audio data you'll have to
+ press a key. The key could be selected via the button right to the radio button
+
+
+ -
+
+ In this mode, TeaSpeak will continuously analyze your microphone input.
+ If the audio level is grater than a certain threshold,
+ the audio will be transmitted.
+ The threshold is changeable via the "Sensitivity Settings" slider
+
+
+ -
+ Continuously transmit any audio data.
+
+
+
+
+ Now you're ready to configure your microphone.
+ Just click anywhere on the screen.
+
+
+
+);
+
+export const MicrophoneSettings = (props: { events: Registry
}) => {
+ const [ highlighted, setHighlighted ] = useState(() => {
+ props.events.fire("query_help");
+ return undefined;
+ });
+
+ props.events.reactUse("notify_highlight", event => setHighlighted(event.field));
+
+ return (
+ props.events.fire("action_help_click")}>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-)
\ No newline at end of file
+
+ );
+}
\ No newline at end of file
diff --git a/shared/svg-sprites/client-icons.d.ts b/shared/svg-sprites/client-icons.d.ts
index 78ef4593..d6d53744 100644
--- a/shared/svg-sprites/client-icons.d.ts
+++ b/shared/svg-sprites/client-icons.d.ts
@@ -3,9 +3,9 @@
*
* This file has been auto generated by the svg-sprite generator.
* Sprite source directory: D:\TeaSpeak\web\shared\img\client-icons
- * Sprite count: 203
+ * Sprite count: 202
*/
-export type ClientIconClass = "client-about" | "client-activate_microphone" | "client-add" | "client-add_foe" | "client-add_folder" | "client-add_friend" | "client-addon-collection" | "client-addon" | "client-apply" | "client-arrow_down" | "client-arrow_left" | "client-arrow_right" | "client-arrow_up" | "client-away" | "client-ban_client" | "client-ban_list" | "client-bookmark_add" | "client-bookmark_add_folder" | "client-bookmark_duplicate" | "client-bookmark_manager" | "client-bookmark_remove" | "client-broken_image" | "client-browse-addon-online" | "client-capture-denied" | "client-capture" | "client-change_nickname" | "client-changelog" | "client-channel_chat" | "client-channel_collapse_all" | "client-channel_commander" | "client-channel_create" | "client-channel_create_sub" | "client-channel_default" | "client-channel_delete" | "client-channel_edit" | "client-channel_expand_all" | "client-channel_green" | "client-channel_green_subscribed" | "client-channel_green_subscribed2" | "client-channel_private" | "client-channel_red" | "client-channel_red_subscribed" | "client-channel_switch" | "client-channel_unsubscribed" | "client-channel_yellow" | "client-channel_yellow_subscribed" | "client-check_update" | "client-client_hide" | "client-client_show" | "client-close_button" | "client-complaint_list" | "client-conflict-icon" | "client-connect" | "client-contact" | "client-copy" | "client-copy_url" | "client-d_sound" | "client-d_sound_me" | "client-d_sound_user" | "client-default" | "client-default_for_all_bookmarks" | "client-delete" | "client-delete_avatar" | "client-disconnect" | "client-down" | "client-download" | "client-edit" | "client-edit_friend_foe_status" | "client-emoticon" | "client-error" | "client-file_home" | "client-file_refresh" | "client-filetransfer" | "client-find" | "client-folder" | "client-folder_up" | "client-group_100" | "client-group_200" | "client-group_300" | "client-group_500" | "client-group_600" | "client-guisetup" | "client-hardware_input_muted" | "client-hardware_output_muted" | "client-home" | "client-hoster_button" | "client-hotkeys" | "client-icon-pack" | "client-iconsview" | "client-iconviewer" | "client-identity_default" | "client-identity_export" | "client-identity_import" | "client-identity_manager" | "client-info" | "client-input_muted" | "client-input_muted_local" | "client-invite_buddy" | "client-is_talker" | "client-kick_channel" | "client-kick_server" | "client-listview" | "client-loading_image" | "client-message_incoming" | "client-message_info" | "client-message_outgoing" | "client-messages" | "client-microphone_broken" | "client-minimize_button" | "client-moderated" | "client-move_client_to_own_channel" | "client-music" | "client-new_chat" | "client-notifications" | "client-offline_messages" | "client-on_whisperlist" | "client-output_muted" | "client-permission_channel" | "client-permission_client" | "client-permission_overview" | "client-permission_server_groups" | "client-phoneticsnickname" | "client-ping_1" | "client-ping_2" | "client-ping_3" | "client-ping_4" | "client-ping_calculating" | "client-ping_disconnected" | "client-play" | "client-player_chat" | "client-player_commander_off" | "client-player_commander_on" | "client-player_off" | "client-player_on" | "client-player_whisper" | "client-plugins" | "client-poke" | "client-present" | "client-recording_start" | "client-recording_stop" | "client-refresh" | "client-register" | "client-reload" | "client-remove_foe" | "client-remove_friend" | "client-security" | "client-selectfolder" | "client-send_complaint" | "client-server_green" | "client-server_log" | "client-server_query" | "client-settings" | "client-sort_by_name" | "client-sound-pack" | "client-soundpack" | "client-stop" | "client-subscribe_mode" | "client-subscribe_to_all_channels" | "client-subscribe_to_channel" | "client-subscribe_to_channel_family" | "client-switch_advanced" | "client-switch_standard" | "client-sync-disable" | "client-sync-enable" | "client-sync-icon" | "client-tab_close_button" | "client-talk_power_grant" | "client-talk_power_grant_next" | "client-talk_power_request" | "client-talk_power_request_cancel" | "client-talk_power_revoke" | "client-talk_power_revoke_all_grant_next" | "client-temp_server_password" | "client-temp_server_password_add" | "client-textformat" | "client-textformat_bold" | "client-textformat_foreground" | "client-textformat_italic" | "client-textformat_underline" | "client-theme" | "client-toggle_server_query_clients" | "client-toggle_whisper" | "client-token" | "client-token_use" | "client-translation" | "client-unsubscribe_from_all_channels" | "client-unsubscribe_from_channel_family" | "client-unsubscribe_mode" | "client-up" | "client-upload" | "client-upload_avatar" | "client-urlcatcher" | "client-user-account" | "client-virtualserver_edit" | "client-volume" | "client-w2g" | "client-warning" | "client-warning_external_link" | "client-warning_info" | "client-warning_question" | "client-weblist" | "client-whisper" | "client-whisperlists";
+export type ClientIconClass = "client-about" | "client-activate_microphone" | "client-add" | "client-add_foe" | "client-add_folder" | "client-add_friend" | "client-addon-collection" | "client-addon" | "client-apply" | "client-arrow_down" | "client-arrow_left" | "client-arrow_right" | "client-arrow_up" | "client-away" | "client-ban_client" | "client-ban_list" | "client-bookmark_add" | "client-bookmark_add_folder" | "client-bookmark_duplicate" | "client-bookmark_manager" | "client-bookmark_remove" | "client-broken_image" | "client-browse-addon-online" | "client-capture" | "client-change_nickname" | "client-changelog" | "client-channel_chat" | "client-channel_collapse_all" | "client-channel_commander" | "client-channel_create" | "client-channel_create_sub" | "client-channel_default" | "client-channel_delete" | "client-channel_edit" | "client-channel_expand_all" | "client-channel_green" | "client-channel_green_subscribed" | "client-channel_green_subscribed2" | "client-channel_private" | "client-channel_red" | "client-channel_red_subscribed" | "client-channel_switch" | "client-channel_unsubscribed" | "client-channel_yellow" | "client-channel_yellow_subscribed" | "client-check_update" | "client-client_hide" | "client-client_show" | "client-close_button" | "client-complaint_list" | "client-conflict-icon" | "client-connect" | "client-contact" | "client-copy" | "client-copy_url" | "client-d_sound" | "client-d_sound_me" | "client-d_sound_user" | "client-default" | "client-default_for_all_bookmarks" | "client-delete" | "client-delete_avatar" | "client-disconnect" | "client-down" | "client-download" | "client-edit" | "client-edit_friend_foe_status" | "client-emoticon" | "client-error" | "client-file_home" | "client-file_refresh" | "client-filetransfer" | "client-find" | "client-folder" | "client-folder_up" | "client-group_100" | "client-group_200" | "client-group_300" | "client-group_500" | "client-group_600" | "client-guisetup" | "client-hardware_input_muted" | "client-hardware_output_muted" | "client-home" | "client-hoster_button" | "client-hotkeys" | "client-icon-pack" | "client-iconsview" | "client-iconviewer" | "client-identity_default" | "client-identity_export" | "client-identity_import" | "client-identity_manager" | "client-info" | "client-input_muted" | "client-input_muted_local" | "client-invite_buddy" | "client-is_talker" | "client-kick_channel" | "client-kick_server" | "client-listview" | "client-loading_image" | "client-message_incoming" | "client-message_info" | "client-message_outgoing" | "client-messages" | "client-microphone_broken" | "client-minimize_button" | "client-moderated" | "client-move_client_to_own_channel" | "client-music" | "client-new_chat" | "client-notifications" | "client-offline_messages" | "client-on_whisperlist" | "client-output_muted" | "client-permission_channel" | "client-permission_client" | "client-permission_overview" | "client-permission_server_groups" | "client-phoneticsnickname" | "client-ping_1" | "client-ping_2" | "client-ping_3" | "client-ping_4" | "client-ping_calculating" | "client-ping_disconnected" | "client-play" | "client-player_chat" | "client-player_commander_off" | "client-player_commander_on" | "client-player_off" | "client-player_on" | "client-player_whisper" | "client-plugins" | "client-poke" | "client-present" | "client-recording_start" | "client-recording_stop" | "client-refresh" | "client-register" | "client-reload" | "client-remove_foe" | "client-remove_friend" | "client-security" | "client-selectfolder" | "client-send_complaint" | "client-server_green" | "client-server_log" | "client-server_query" | "client-settings" | "client-sort_by_name" | "client-sound-pack" | "client-soundpack" | "client-stop" | "client-subscribe_mode" | "client-subscribe_to_all_channels" | "client-subscribe_to_channel" | "client-subscribe_to_channel_family" | "client-switch_advanced" | "client-switch_standard" | "client-sync-disable" | "client-sync-enable" | "client-sync-icon" | "client-tab_close_button" | "client-talk_power_grant" | "client-talk_power_grant_next" | "client-talk_power_request" | "client-talk_power_request_cancel" | "client-talk_power_revoke" | "client-talk_power_revoke_all_grant_next" | "client-temp_server_password" | "client-temp_server_password_add" | "client-textformat" | "client-textformat_bold" | "client-textformat_foreground" | "client-textformat_italic" | "client-textformat_underline" | "client-theme" | "client-toggle_server_query_clients" | "client-toggle_whisper" | "client-token" | "client-token_use" | "client-translation" | "client-unsubscribe_from_all_channels" | "client-unsubscribe_from_channel_family" | "client-unsubscribe_mode" | "client-up" | "client-upload" | "client-upload_avatar" | "client-urlcatcher" | "client-user-account" | "client-virtualserver_edit" | "client-volume" | "client-w2g" | "client-warning" | "client-warning_external_link" | "client-warning_info" | "client-warning_question" | "client-weblist" | "client-whisper" | "client-whisperlists";
export enum ClientIcon {
About = "client-about",
@@ -31,7 +31,6 @@ export enum ClientIcon {
BookmarkRemove = "client-bookmark_remove",
BrokenImage = "client-broken_image",
BrowseAddonOnline = "client-browse-addon-online",
- CaptureDenied = "client-capture-denied",
Capture = "client-capture",
ChangeNickname = "client-change_nickname",
Changelog = "client-changelog",