fix(deps): update dependency @material/web to v1
This CL also fixes many things necessary for the update.
It also changes the entire md3 theme, since there have been a lot of
breaking changes and this is the easiest way to have a working theme
again (it is also an improvement).
Change-Id: I4a412e0c0ca4345084c724fcaba000293521e907
diff --git a/src/ccDarkTheme/abstracts/_variables.scss b/src/ccDarkTheme/abstracts/_variables.scss
index 6a9182c..b34670f 100644
--- a/src/ccDarkTheme/abstracts/_variables.scss
+++ b/src/ccDarkTheme/abstracts/_variables.scss
@@ -1,3 +1,5 @@
+@use '../../md3/theme' as md3-theme;
+
:root {
--TWPT-primary-text: #e8eaed;
--TWPT-primary-text-alt: var(--TWPT-primary-text);
@@ -11,6 +13,7 @@
--TWPT-highlighted-item-background: rgba(255, 255, 255, .08);
--TWPT-thread-read-background: var(--TWPT-highlighted-item-background);
--TWPT-drawer-background: #2d2e30;
+ --TWPT-drawer-text: #d2cecb;
--TWPT-button-background: #3c3e42;
--TWPT-subtle-button-background: rgba(255, 255, 255, .54);
--TWPT-input-underline: rgba(255, 255, 255, .28);
@@ -27,17 +30,7 @@
--TWPT-interop-success: #37be5f;
--TWPT-interop-blue: #7cacf8;
- /* MD3 dark theme variables */
- --TWPT-md-sys-color-primary: #bda5ff;
- --TWPT-md-sys-color-on-primary: #000;
- --TWPT-md-sys-color-surface: var(--TWPT-drawer-background);
- --TWPT-md-sys-color-on-surface: var(--TWPT-primary-text);
- --TWPT-md-sys-color-on-surface-rgb: 154, 160, 166;
- --TWPT-md-sys-color-on-surface-variant: var(--TWPT-secondary-text);
- --TWPT-md-list-list-divider-color: var(--TWPT-subtle-border);
- --TWPT-md-ripple-hover-state-layer-color: white;
- --TWPT-md-ripple-pressed-state-layer-color: white;
- --TWPT-custom-md-icon-color: var(--TWPT-subtle-button-background);
+ @include md3-theme.dark-theme('TWPT-');
/* Overrides for variables used by the Community Console styles */
--gm-outlinedtextfield-outline-color: var(--TWPT-card-border);
diff --git a/src/ccDarkTheme/components/_drawer.scss b/src/ccDarkTheme/components/_drawer.scss
index 973b7f8..35fefdd 100644
--- a/src/ccDarkTheme/components/_drawer.scss
+++ b/src/ccDarkTheme/components/_drawer.scss
@@ -25,7 +25,7 @@
material-drawer material-list-item,
material-drawer material-list-item .title {
- color: #d2cecb!important;
+ color: var(--TWPT-drawer-text)!important;
}
material-drawer ec-forum-drawer-item material-checkbox material-icon {
diff --git a/src/ccDarkTheme/layout/_header.scss b/src/ccDarkTheme/layout/_header.scss
index abad975..abfca60 100644
--- a/src/ccDarkTheme/layout/_header.scss
+++ b/src/ccDarkTheme/layout/_header.scss
@@ -30,5 +30,5 @@
// Header menus
.popup material-list-item {
- color: #d2cecb!important;
+ color: var(--TWPT-drawer-text)!important;
}
diff --git a/src/common/components/FormField.js b/src/common/components/FormField.js
new file mode 100644
index 0000000..aa32732
--- /dev/null
+++ b/src/common/components/FormField.js
@@ -0,0 +1,53 @@
+import {css, html, LitElement} from 'lit';
+
+/**
+ * Lite component inspired in the now removed material-web's Formfield.
+ * https://github.com/material-components/material-web/commit/753a03be963f7b5242e98b73d1309abbe9f5bf51
+ */
+export default class TwptFormField extends LitElement {
+ static styles = [
+ css`
+ .formfield {
+ align-items: center;
+ display: inline-flex;
+ vertical-align: middle;
+ }
+
+ label {
+ margin-inline: 0px auto;
+ order: 0;
+ padding-inline: 4px 0px;
+ }
+ `,
+ ];
+
+ render() {
+ return html`
+ <span class="formfield">
+ <slot></slot>
+ <label @click="${this._labelClick}">
+ <slot name="label"></slot>
+ </label>
+ </span>
+ `;
+ }
+
+ _labelClick() {
+ const input = this._input;
+ if (!input || !this.shadowRoot) return;
+
+ input.focus();
+ input.click();
+ }
+
+ get _input() {
+ return this._slottedChildren?.[0] ?? null;
+ }
+
+ get _slottedChildren() {
+ if (!this.shadowRoot) return null;
+ const slot = this.shadowRoot.querySelector('slot');
+ return slot.assignedElements({flatten: true});
+ }
+}
+window.customElements.define('twpt-form-field', TwptFormField);
diff --git a/src/common/styles/md3.js b/src/common/styles/md3.js
index a634fb2..45f6507 100644
--- a/src/common/styles/md3.js
+++ b/src/common/styles/md3.js
@@ -4,23 +4,66 @@
// theme color scheme (it's defined in variables prefixed with --TWPT).
export const SHARED_MD3_STYLES = css`
:host {
- --md-sys-color-primary: var(--TWPT-md-sys-color-primary, #6750a4);
- --md-sys-color-on-primary: var(--TWPT-md-sys-color-on-primary, #fff);
- --md-sys-color-surface: var(--TWPT-md-sys-color-surface, rgb(227, 255, 251));
- --md-sys-color-on-surface: var(--TWPT-md-sys-color-on-surface);
- --md-sys-color-on-surface-rgb: var(--TWPT-md-sys-color-on-surface-rgb);
- --md-sys-color-on-surface-variant: var(--TWPT-md-sys-color-on-surface-variant);
- --md-list-list-divider-color: var(--TWPT-md-list-list-divider-color);
- --md-ripple-hover-state-layer-color: var(--TWPT-md-ripple-hover-state-layer-color);
- --md-ripple-pressed-state-layer-color: var(--TWPT-md-ripple-pressed-state-layer-color);
- --md-icon-button-unselected-icon-color: var(--TWPT-custom-md-icon-color);
- --md-icon-button-unselected-hover-icon-color: var(--TWPT-custom-md-icon-color);
- --md-icon-button-unselected-focus-icon-color: var(--TWPT-custom-md-icon-color);
- --md-icon-button-unselected-pressed-icon-color: var(--TWPT-custom-md-icon-color);
+ /* Adapted from //src/md3/theme.scss */
+ --md-sys-color-primary: var(--TWPT-md-sys-color-primary, rgb(0 106 96));
+ --md-sys-color-surface-tint: var(--TWPT-md-sys-color-surface-tint, rgb(0 106 96));
+ --md-sys-color-on-primary: var(--TWPT-md-sys-color-on-primary, rgb(255 255 255));
+ --md-sys-color-primary-container: var(--TWPT-md-sys-color-primary-container, rgb(158 242 228));
+ --md-sys-color-on-primary-container: var(--TWPT-md-sys-color-on-primary-container, rgb(0 32 28));
+ --md-sys-color-secondary: var(--TWPT-md-sys-color-secondary, rgb(74 99 95));
+ --md-sys-color-on-secondary: var(--TWPT-md-sys-color-on-secondary, rgb(255 255 255));
+ --md-sys-color-secondary-container: var(--TWPT-md-sys-color-secondary-container, rgb(204 232 226));
+ --md-sys-color-on-secondary-container: var(--TWPT-md-sys-color-on-secondary-container, rgb(5 32 28));
+ --md-sys-color-tertiary: var(--TWPT-md-sys-color-tertiary, rgb(69 97 121));
+ --md-sys-color-on-tertiary: var(--TWPT-md-sys-color-on-tertiary, rgb(255 255 255));
+ --md-sys-color-tertiary-container: var(--TWPT-md-sys-color-tertiary-container, rgb(204 229 255));
+ --md-sys-color-on-tertiary-container: var(--TWPT-md-sys-color-on-tertiary-container, rgb(0 30 49));
+ --md-sys-color-error: var(--TWPT-md-sys-color-error, rgb(186 26 26));
+ --md-sys-color-on-error: var(--TWPT-md-sys-color-on-error, rgb(255 255 255));
+ --md-sys-color-error-container: var(--TWPT-md-sys-color-error-container, rgb(255 218 214));
+ --md-sys-color-on-error-container: var(--TWPT-md-sys-color-on-error-container, rgb(65 0 2));
+ --md-sys-color-background: var(--TWPT-md-sys-color-background, rgb(244 251 248));
+ --md-sys-color-on-background: var(--TWPT-md-sys-color-on-background, rgb(22 29 28));
+ --md-sys-color-surface: var(--TWPT-md-sys-color-surface, rgb(244 251 248));
+ --md-sys-color-on-surface: var(--TWPT-md-sys-color-on-surface, rgb(22 29 28));
+ --md-sys-color-surface-variant: var(--TWPT-md-sys-color-surface-variant, rgb(218 229 225));
+ --md-sys-color-on-surface-variant: var(--TWPT-md-sys-color-on-surface-variant, rgb(63 73 71));
+ --md-sys-color-outline: var(--TWPT-md-sys-color-outline, rgb(111 121 119));
+ --md-sys-color-outline-variant: var(--TWPT-md-sys-color-outline-variant, rgb(190 201 198));
+ --md-sys-color-shadow: var(--TWPT-md-sys-color-shadow, rgb(0 0 0));
+ --md-sys-color-scrim: var(--TWPT-md-sys-color-scrim, rgb(0 0 0));
+ --md-sys-color-inverse-surface: var(--TWPT-md-sys-color-inverse-surface, rgb(43 50 48));
+ --md-sys-color-inverse-on-surface: var(--TWPT-md-sys-color-inverse-on-surface, rgb(236 242 239));
+ --md-sys-color-inverse-primary: var(--TWPT-md-sys-color-inverse-primary, rgb(130 213 200));
+ --md-sys-color-primary-fixed: var(--TWPT-md-sys-color-primary-fixed, rgb(158 242 228));
+ --md-sys-color-on-primary-fixed: var(--TWPT-md-sys-color-on-primary-fixed, rgb(0 32 28));
+ --md-sys-color-primary-fixed-dim: var(--TWPT-md-sys-color-primary-fixed-dim, rgb(130 213 200));
+ --md-sys-color-on-primary-fixed-variant: var(--TWPT-md-sys-color-on-primary-fixed-variant, rgb(0 80 72));
+ --md-sys-color-secondary-fixed: var(--TWPT-md-sys-color-secondary-fixed, rgb(204 232 226));
+ --md-sys-color-on-secondary-fixed: var(--TWPT-md-sys-color-on-secondary-fixed, rgb(5 32 28));
+ --md-sys-color-secondary-fixed-dim: var(--TWPT-md-sys-color-secondary-fixed-dim, rgb(177 204 198));
+ --md-sys-color-on-secondary-fixed-variant: var(--TWPT-md-sys-color-on-secondary-fixed-variant, rgb(51 75 71));
+ --md-sys-color-tertiary-fixed: var(--TWPT-md-sys-color-tertiary-fixed, rgb(204 229 255));
+ --md-sys-color-on-tertiary-fixed: var(--TWPT-md-sys-color-on-tertiary-fixed, rgb(0 30 49));
+ --md-sys-color-tertiary-fixed-dim: var(--TWPT-md-sys-color-tertiary-fixed-dim, rgb(173 202 230));
+ --md-sys-color-on-tertiary-fixed-variant: var(--TWPT-md-sys-color-on-tertiary-fixed-variant, rgb(45 73 97));
+ --md-sys-color-surface-dim: var(--TWPT-md-sys-color-surface-dim, rgb(213 219 217));
+ --md-sys-color-surface-bright: var(--TWPT-md-sys-color-surface-bright, rgb(244 251 248));
+ --md-sys-color-surface-container-lowest: var(--TWPT-md-sys-color-surface-container-lowest, rgb(255 255 255));
+ --md-sys-color-surface-container-low: var(--TWPT-md-sys-color-surface-container-low, rgb(239 245 242));
+ --md-sys-color-surface-container: var(--TWPT-md-sys-color-surface-container, rgb(233 239 237));
+ --md-sys-color-surface-container-high: var(--TWPT-md-sys-color-surface-container-high, rgb(227 234 231));
+ --md-sys-color-surface-container-highest: var(--TWPT-md-sys-color-surface-container-highest, rgb(221 228 225));
+
+ /* Material Design 2 theme */
--mdc-theme-surface: var(--TWPT-primary-background, #fff);
--mdc-theme-on-surface: var(--TWPT-primary-text, #000);
- --mdc-theme-primary: var(--TWPT-md-sys-color-primary, #6750a4);
- --mdc-theme-on-primary: var(--TWPT-md-sys-color-on-primary, #fff);
+ --mdc-theme-primary: var(--TWPT-md-sys-color-primary, rgb(0 106 96));
+ --mdc-theme-on-primary: var(--TWPT-md-sys-color-on-primary, rgb(255 255 255));
--mdc-dialog-heading-ink-color: var(--TWPT-primary-text);
}
+
+ md-icon[filled] {
+ font-variation-settings: 'FILL' 1;
+ }
`;
diff --git a/src/contentScripts/communityConsole/flattenThreads/components/QuoteAuthor.js b/src/contentScripts/communityConsole/flattenThreads/components/QuoteAuthor.js
index 59bc6b6..7f93e9a 100644
--- a/src/contentScripts/communityConsole/flattenThreads/components/QuoteAuthor.js
+++ b/src/contentScripts/communityConsole/flattenThreads/components/QuoteAuthor.js
@@ -1,5 +1,5 @@
import '@material/web/icon/icon.js';
-import '@material/web/iconbutton/standard-icon-button.js';
+import '@material/web/iconbutton/icon-button.js';
import {css, html, LitElement} from 'lit';
@@ -47,10 +47,10 @@
return html`
<md-icon class="reply-icon">reply</md-icon>
<span class="name">${this.prevMessage?.author?.[1]?.[1]}</span>
- <md-standard-icon-button
- icon="arrow_upward"
+ <md-icon-button
@click=${this.focusParent}>
- </md-standard-icon-button>
+ <md-icon>arrow_upward</md-icon>
+ </md-icon-button>
`;
}
diff --git a/src/contentScripts/communityConsole/flattenThreads/components/ReplyButton.js b/src/contentScripts/communityConsole/flattenThreads/components/ReplyButton.js
index 6a35b10..73a4cc1 100644
--- a/src/contentScripts/communityConsole/flattenThreads/components/ReplyButton.js
+++ b/src/contentScripts/communityConsole/flattenThreads/components/ReplyButton.js
@@ -32,10 +32,10 @@
render() {
return html`
<md-outlined-button
- label="${msg('Reply', {
- desc: 'Button which is used to open the reply box.',
- })}"
@click=${this.openReplyEditor}>
+ ${msg('Reply', {
+ desc: 'Button which is used to open the reply box.',
+ })}
</md-outlined-button>
`;
}
diff --git a/src/contentScripts/communityConsole/flattenThreads/components/index.js b/src/contentScripts/communityConsole/flattenThreads/components/index.js
index 39e8310..f1da3b0 100644
--- a/src/contentScripts/communityConsole/flattenThreads/components/index.js
+++ b/src/contentScripts/communityConsole/flattenThreads/components/index.js
@@ -1,5 +1,5 @@
-import '@material/web/button/tonal-button.js';
-
+import '@material/web/button/filled-tonal-button.js';
+import '@material/web/icon/icon.js';
import './QuoteAuthor.js';
// Other components imported so they are also injected:
@@ -49,8 +49,7 @@
.payload-container twpt-flatten-thread-quote-author {
float: right;
margin-left: 12px;
- margin-top: -12px;
- shape-outside: inset(0 10px 10px 0);
+ margin-top: -8px;
}
.payload {
@@ -86,16 +85,16 @@
}
}
- .buttons-row md-tonal-button {
- --md-tonal-button-container-color: var(--TWPT-dark-flatten-replies-more-bg, rgba(222, 222, 222, 0.9));
- --md-tonal-button-label-text-color: var(--TWPT-md-sys-color-on-surface);
- --md-tonal-button-hover-label-text-color: var(--TWPT-md-sys-color-on-surface);
- --md-tonal-button-focus-label-text-color: var(--TWPT-md-sys-color-on-surface);
- --md-tonal-button-pressed-label-text-color: var(--TWPT-md-sys-color-on-surface);
- --md-tonal-button-with-icon-icon-color: var(--TWPT-md-sys-color-on-surface);
- --md-tonal-button-with-icon-hover-icon-color: var(--TWPT-md-sys-color-on-surface);
- --md-tonal-button-with-icon-focus-icon-color: var(--TWPT-md-sys-color-on-surface);
- --md-tonal-button-with-icon-pressed-icon-color: var(--TWPT-md-sys-color-on-surface);
+ .buttons-row md-filled-tonal-button {
+ --md-filled-tonal-button-container-color: var(--TWPT-dark-flatten-replies-more-bg, rgba(222, 222, 222, 0.9));
+ --md-filled-tonal-button-label-text-color: var(--TWPT-md-sys-color-on-surface);
+ --md-filled-tonal-button-hover-label-text-color: var(--TWPT-md-sys-color-on-surface);
+ --md-filled-tonal-button-focus-label-text-color: var(--TWPT-md-sys-color-on-surface);
+ --md-filled-tonal-button-pressed-label-text-color: var(--TWPT-md-sys-color-on-surface);
+ --md-filled-tonal-button-icon-color: var(--TWPT-md-sys-color-on-surface);
+ --md-filled-tonal-button-hover-icon-color: var(--TWPT-md-sys-color-on-surface);
+ --md-filled-tonal-button-focus-icon-color: var(--TWPT-md-sys-color-on-surface);
+ --md-filled-tonal-button-pressed-icon-color: var(--TWPT-md-sys-color-on-surface);
}
`,
];
@@ -116,10 +115,12 @@
'quote-container--expanded': this._expanded,
});
const lessMsg = msg('Less', {
- desc: 'Button to collapse the quote message (used in the flatten threads feature).',
+ desc:
+ 'Button to collapse the quote message (used in the flatten threads feature).',
});
const moreMsg = msg('More', {
- desc: 'Button to expand the quote message (used in the flatten threads feature).',
+ desc:
+ 'Button to expand the quote message (used in the flatten threads feature).',
});
return html`
<div class=${containerClasses}>
@@ -132,11 +133,13 @@
</div>
</div>
<div class="buttons-row">
- <md-tonal-button
- icon="${this._expanded ? 'expand_less' : 'expand_more'}"
- label="${this._expanded ? lessMsg : moreMsg}"
+ <md-filled-tonal-button
@click=${this.toggleExpanded}>
- </md-tonal-button>
+ <md-icon slot="icon">
+ ${this._expanded ? 'expand_less' : 'expand_more'}
+ </md-icon>
+ ${this._expanded ? lessMsg : moreMsg}
+ </md-filled-tonal-button>
</div>
</div>
`;
diff --git a/src/contentScripts/communityConsole/threadToolbar/components/index.js b/src/contentScripts/communityConsole/threadToolbar/components/index.js
index bbaa20d..8e1bcd9 100644
--- a/src/contentScripts/communityConsole/threadToolbar/components/index.js
+++ b/src/contentScripts/communityConsole/threadToolbar/components/index.js
@@ -1,6 +1,6 @@
-import '@material/web/formfield/formfield.js';
import '@material/web/icon/icon.js';
import '@material/web/switch/switch.js';
+import '../../../../common/components/FormField.js';
import consoleCommonStyles from '!!raw-loader!../../../../static/css/common/console.css';
import {msg} from '@lit/localize';
@@ -70,11 +70,15 @@
'Label for the switch which lets users enable/disable the nested view in a thread.',
});
return html`
- <md-formfield label="${nestedViewMsg}">
+ <twpt-form-field>
<md-switch ${ref(this.nestedViewRef)}
?selected=${!this.options?.flattenthreads_switch_enabled}
- @click=${this._flattenThreadsChanged}>
- </md-formfield>
+ @change=${this._flattenThreadsChanged}>
+ </md-switch>
+ <span slot="label">
+ ${nestedViewMsg}
+ </span>
+ </twpt-form-field>
`;
}
diff --git a/src/contentScripts/communityConsole/updateHandler/banner/components/index.js b/src/contentScripts/communityConsole/updateHandler/banner/components/index.js
index 81bd20c..c181a56 100644
--- a/src/contentScripts/communityConsole/updateHandler/banner/components/index.js
+++ b/src/contentScripts/communityConsole/updateHandler/banner/components/index.js
@@ -94,8 +94,8 @@
<div class="mdc-banner__actions">
<md-text-button
class="mdc-banner__primary-action"
- label="${reloadMsg}"
@click=${this._reloadPage}>
+ ${reloadMsg}
</md-text-button>
</div>
</div>
diff --git a/src/contentScripts/communityConsole/workflows/components/TwptCRImportButton.js b/src/contentScripts/communityConsole/workflows/components/TwptCRImportButton.js
index 935926f..222416f 100644
--- a/src/contentScripts/communityConsole/workflows/components/TwptCRImportButton.js
+++ b/src/contentScripts/communityConsole/workflows/components/TwptCRImportButton.js
@@ -1,4 +1,5 @@
import '@material/web/button/outlined-button.js';
+import '@material/web/icon/icon.js';
import {html, LitElement} from 'lit';
@@ -20,10 +21,10 @@
return html`
<md-outlined-button
- icon=${icon}
- label=${label}
?disabled=${this.selected}
@click=${this._importCR}>
+ <md-icon slot="icon">${icon}</md-icon>
+ ${label}
</md-outlined-button>
`;
}
diff --git a/src/contentScripts/communityConsole/workflows/components/TwptConfirmDialog.js b/src/contentScripts/communityConsole/workflows/components/TwptConfirmDialog.js
index 38d3420..b219b75 100644
--- a/src/contentScripts/communityConsole/workflows/components/TwptConfirmDialog.js
+++ b/src/contentScripts/communityConsole/workflows/components/TwptConfirmDialog.js
@@ -45,13 +45,13 @@
</p>
<md-filled-button
slot="primaryAction"
- label="Run workflow"
@click=${this._dispatchConfirmEvent}>
+ Run workflow
</md-filled-button>
<md-text-button
slot="secondaryAction"
- dialogAction="cancel"
- label="Cancel">
+ dialogAction="cancel">
+ Cancel
</md-text-button>
</mwc-dialog>
`;
diff --git a/src/contentScripts/communityConsole/workflows/components/TwptWorkflowDialog.js b/src/contentScripts/communityConsole/workflows/components/TwptWorkflowDialog.js
index c6c9a7f..1d38707 100644
--- a/src/contentScripts/communityConsole/workflows/components/TwptWorkflowDialog.js
+++ b/src/contentScripts/communityConsole/workflows/components/TwptWorkflowDialog.js
@@ -54,8 +54,8 @@
<md-text-button
?disabled=${this._runner?.status !== 'finished'}
slot="primaryAction"
- dialogAction="cancel"
- label="Close">
+ dialogAction="cancel">
+ Close
</md-text-button>
</mwc-dialog>
`;
diff --git a/src/contentScripts/communityConsole/workflows/components/TwptWorkflowsMenu.js b/src/contentScripts/communityConsole/workflows/components/TwptWorkflowsMenu.js
index 71782f3..db7359c 100644
--- a/src/contentScripts/communityConsole/workflows/components/TwptWorkflowsMenu.js
+++ b/src/contentScripts/communityConsole/workflows/components/TwptWorkflowsMenu.js
@@ -1,8 +1,7 @@
+import '@material/web/divider/divider.js';
import '@material/web/icon/icon.js';
-import '@material/web/iconbutton/standard-icon-button.js';
-import '@material/web/list/list-divider.js';
+import '@material/web/iconbutton/icon-button.js';
import '@material/web/menu/menu.js';
-import '@material/web/menu/menu-button.js';
import '@material/web/menu/menu-item.js';
import consoleCommonStyles from '!!raw-loader!../../../../static/css/common/console.css';
@@ -22,17 +21,24 @@
SHARED_MD3_STYLES,
css`${unsafeCSS(consoleCommonStyles)}`,
css`
+ .workflows-menu {
+ --md-menu-item-label-text-size: 14px;
+ }
+
.workflow-item {
- padding-inline: 1em;
+ --md-menu-item-one-line-container-height: 48px;
+
+ min-width: 250px;
}
/* Custom styles to override the common button with badge styles */
.TWPT-btn--with-badge {
- padding-bottom: 0!important;
+ padding-bottom: 0;
}
.TWPT-btn--with-badge .TWPT-badge {
- bottom: 8px!important;
+ bottom: 4px;
+ right: 2px;
}
`,
];
@@ -51,8 +57,9 @@
`;
return map(this.workflows, w => html`
<md-menu-item
+ class="workflow-item"
@click="${() => this._dispatchSelectEvent(w.uuid)}">
- <span class="workflow-item" slot="start">
+ <span slot="start">
${w.proto.getName()}
</span>
</md-menu-item>
@@ -63,10 +70,11 @@
return [
this.renderWorkflowItems(),
html`
- <md-list-divider></md-list-divider>
+ <md-divider></md-divider>
<md-menu-item
+ class="workflow-item"
@click="${() => this._openWorkflowManager()}">
- <span class="workflow-item" slot="start">
+ <span slot="start">
Manage workflows...
</span>
</md-menu-item>
@@ -85,15 +93,22 @@
render() {
return html`
- <md-menu-button>
- <div slot="button" class="TWPT-btn--with-badge">
- <md-standard-icon-button icon="more_vert"></md-standard-icon-button>
+ <span style="position: relative;">
+ <div
+ id="workflows-menu-anchor"
+ class="TWPT-btn--with-badge"
+ @click="${this._toggleMenu}">
+ <md-icon-button>
+ <md-icon>more_vert</md-icon>
+ </md-icon-button>
${this.renderBadge()}
</div>
- <md-menu ${ref(this.menuRef)} slot="menu">
+ <md-menu ${ref(this.menuRef)}
+ class="workflows-menu"
+ anchor="workflows-menu-anchor">
${this.renderMenuItems()}
</md-menu>
- </md-menu-button>
+ </span>
`;
}
@@ -107,6 +122,10 @@
this.menuRef.value.open = false;
}
+ _toggleMenu() {
+ this.menuRef.value.open = !this.menuRef.value.open;
+ }
+
_openWorkflowManager() {
const e = new Event('twpt-open-workflow-manager');
document.dispatchEvent(e);
diff --git a/src/injections/litComponentsInject.js b/src/injections/litComponentsInject.js
index 09e8ec8..3154681 100644
--- a/src/injections/litComponentsInject.js
+++ b/src/injections/litComponentsInject.js
@@ -9,7 +9,6 @@
import {injectStylesheet} from '../common/contentScriptsUtils.js';
-// Also, we import Material Icons since the Community Console uses "Google
-// Material Icons" instead of "Material Icons". This is necessary for the MD3
-// components.
-injectStylesheet('https://fonts.googleapis.com/icon?family=Material+Icons');
+// Also, we import Material Symbols Outlined since the Community Console uses
+// "Google Material Icons" instead. This is necessary for the MD3 components.
+injectStylesheet('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@0..1');
diff --git a/src/injections/updateHandlerLitComponents.js b/src/injections/updateHandlerLitComponents.js
index 9b82ee2..e6449f5 100644
--- a/src/injections/updateHandlerLitComponents.js
+++ b/src/injections/updateHandlerLitComponents.js
@@ -5,4 +5,4 @@
// This is necessary for the MD3 components. It is also done in
// litComponentsInject.js, but when installing the extension
// litComponentsInject.js hasn't been injected yet.
-injectStylesheet('https://fonts.googleapis.com/icon?family=Material+Icons');
+injectStylesheet('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@0..1');
diff --git a/src/md3/theme.scss b/src/md3/theme.scss
new file mode 100644
index 0000000..c06c226
--- /dev/null
+++ b/src/md3/theme.scss
@@ -0,0 +1,105 @@
+// Generated with https://material-foundation.github.io/material-theme-builder/.
+
+@mixin dark-theme($var-prefix: '') {
+ --#{$var-prefix}md-sys-color-primary: rgb(130 213 200);
+ --#{$var-prefix}md-sys-color-surface-tint: rgb(130 213 200);
+ --#{$var-prefix}md-sys-color-on-primary: rgb(0 55 49);
+ --#{$var-prefix}md-sys-color-primary-container: rgb(0 80 72);
+ --#{$var-prefix}md-sys-color-on-primary-container: rgb(158 242 228);
+ --#{$var-prefix}md-sys-color-secondary: rgb(177 204 198);
+ --#{$var-prefix}md-sys-color-on-secondary: rgb(28 53 49);
+ --#{$var-prefix}md-sys-color-secondary-container: rgb(51 75 71);
+ --#{$var-prefix}md-sys-color-on-secondary-container: rgb(204 232 226);
+ --#{$var-prefix}md-sys-color-tertiary: rgb(173 202 230);
+ --#{$var-prefix}md-sys-color-on-tertiary: rgb(21 51 73);
+ --#{$var-prefix}md-sys-color-tertiary-container: rgb(45 73 97);
+ --#{$var-prefix}md-sys-color-on-tertiary-container: rgb(204 229 255);
+ --#{$var-prefix}md-sys-color-error: rgb(255 180 171);
+ --#{$var-prefix}md-sys-color-on-error: rgb(105 0 5);
+ --#{$var-prefix}md-sys-color-error-container: rgb(147 0 10);
+ --#{$var-prefix}md-sys-color-on-error-container: rgb(255 218 214);
+ --#{$var-prefix}md-sys-color-background: rgb(14 21 19);
+ --#{$var-prefix}md-sys-color-on-background: rgb(221 228 225);
+ --#{$var-prefix}md-sys-color-surface: rgb(14 21 19);
+ --#{$var-prefix}md-sys-color-on-surface: rgb(221 228 225);
+ --#{$var-prefix}md-sys-color-surface-variant: rgb(63 73 71);
+ --#{$var-prefix}md-sys-color-on-surface-variant: rgb(190 201 198);
+ --#{$var-prefix}md-sys-color-outline: rgb(137 147 144);
+ --#{$var-prefix}md-sys-color-outline-variant: rgb(63 73 71);
+ --#{$var-prefix}md-sys-color-shadow: rgb(0 0 0);
+ --#{$var-prefix}md-sys-color-scrim: rgb(0 0 0);
+ --#{$var-prefix}md-sys-color-inverse-surface: rgb(221 228 225);
+ --#{$var-prefix}md-sys-color-inverse-on-surface: rgb(43 50 48);
+ --#{$var-prefix}md-sys-color-inverse-primary: rgb(0 106 96);
+ --#{$var-prefix}md-sys-color-primary-fixed: rgb(158 242 228);
+ --#{$var-prefix}md-sys-color-on-primary-fixed: rgb(0 32 28);
+ --#{$var-prefix}md-sys-color-primary-fixed-dim: rgb(130 213 200);
+ --#{$var-prefix}md-sys-color-on-primary-fixed-variant: rgb(0 80 72);
+ --#{$var-prefix}md-sys-color-secondary-fixed: rgb(204 232 226);
+ --#{$var-prefix}md-sys-color-on-secondary-fixed: rgb(5 32 28);
+ --#{$var-prefix}md-sys-color-secondary-fixed-dim: rgb(177 204 198);
+ --#{$var-prefix}md-sys-color-on-secondary-fixed-variant: rgb(51 75 71);
+ --#{$var-prefix}md-sys-color-tertiary-fixed: rgb(204 229 255);
+ --#{$var-prefix}md-sys-color-on-tertiary-fixed: rgb(0 30 49);
+ --#{$var-prefix}md-sys-color-tertiary-fixed-dim: rgb(173 202 230);
+ --#{$var-prefix}md-sys-color-on-tertiary-fixed-variant: rgb(45 73 97);
+ --#{$var-prefix}md-sys-color-surface-dim: rgb(14 21 19);
+ --#{$var-prefix}md-sys-color-surface-bright: rgb(52 59 57);
+ --#{$var-prefix}md-sys-color-surface-container-lowest: rgb(9 15 14);
+ --#{$var-prefix}md-sys-color-surface-container-low: rgb(22 29 28);
+ --#{$var-prefix}md-sys-color-surface-container: rgb(26 33 32);
+ --#{$var-prefix}md-sys-color-surface-container-high: rgb(37 43 42);
+ --#{$var-prefix}md-sys-color-surface-container-highest: rgb(48 54 53);
+}
+
+@mixin light-theme {
+ --md-sys-color-primary: rgb(0 106 96);
+ --md-sys-color-surface-tint: rgb(0 106 96);
+ --md-sys-color-on-primary: rgb(255 255 255);
+ --md-sys-color-primary-container: rgb(158 242 228);
+ --md-sys-color-on-primary-container: rgb(0 32 28);
+ --md-sys-color-secondary: rgb(74 99 95);
+ --md-sys-color-on-secondary: rgb(255 255 255);
+ --md-sys-color-secondary-container: rgb(204 232 226);
+ --md-sys-color-on-secondary-container: rgb(5 32 28);
+ --md-sys-color-tertiary: rgb(69 97 121);
+ --md-sys-color-on-tertiary: rgb(255 255 255);
+ --md-sys-color-tertiary-container: rgb(204 229 255);
+ --md-sys-color-on-tertiary-container: rgb(0 30 49);
+ --md-sys-color-error: rgb(186 26 26);
+ --md-sys-color-on-error: rgb(255 255 255);
+ --md-sys-color-error-container: rgb(255 218 214);
+ --md-sys-color-on-error-container: rgb(65 0 2);
+ --md-sys-color-background: rgb(244 251 248);
+ --md-sys-color-on-background: rgb(22 29 28);
+ --md-sys-color-surface: rgb(244 251 248);
+ --md-sys-color-on-surface: rgb(22 29 28);
+ --md-sys-color-surface-variant: rgb(218 229 225);
+ --md-sys-color-on-surface-variant: rgb(63 73 71);
+ --md-sys-color-outline: rgb(111 121 119);
+ --md-sys-color-outline-variant: rgb(190 201 198);
+ --md-sys-color-shadow: rgb(0 0 0);
+ --md-sys-color-scrim: rgb(0 0 0);
+ --md-sys-color-inverse-surface: rgb(43 50 48);
+ --md-sys-color-inverse-on-surface: rgb(236 242 239);
+ --md-sys-color-inverse-primary: rgb(130 213 200);
+ --md-sys-color-primary-fixed: rgb(158 242 228);
+ --md-sys-color-on-primary-fixed: rgb(0 32 28);
+ --md-sys-color-primary-fixed-dim: rgb(130 213 200);
+ --md-sys-color-on-primary-fixed-variant: rgb(0 80 72);
+ --md-sys-color-secondary-fixed: rgb(204 232 226);
+ --md-sys-color-on-secondary-fixed: rgb(5 32 28);
+ --md-sys-color-secondary-fixed-dim: rgb(177 204 198);
+ --md-sys-color-on-secondary-fixed-variant: rgb(51 75 71);
+ --md-sys-color-tertiary-fixed: rgb(204 229 255);
+ --md-sys-color-on-tertiary-fixed: rgb(0 30 49);
+ --md-sys-color-tertiary-fixed-dim: rgb(173 202 230);
+ --md-sys-color-on-tertiary-fixed-variant: rgb(45 73 97);
+ --md-sys-color-surface-dim: rgb(213 219 217);
+ --md-sys-color-surface-bright: rgb(244 251 248);
+ --md-sys-color-surface-container-lowest: rgb(255 255 255);
+ --md-sys-color-surface-container-low: rgb(239 245 242);
+ --md-sys-color-surface-container: rgb(233 239 237);
+ --md-sys-color-surface-container-high: rgb(227 234 231);
+ --md-sys-color-surface-container-highest: rgb(221 228 225);
+}
diff --git a/src/static/options/workflows.html b/src/static/options/workflows.html
index c00dcda..72cfe41 100644
--- a/src/static/options/workflows.html
+++ b/src/static/options/workflows.html
@@ -4,7 +4,7 @@
<meta charset="utf-8">
<title>Workflow manager</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
- <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@0..1">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
<style>
body {
diff --git a/src/workflows/manager/components/AddDialog.js b/src/workflows/manager/components/AddDialog.js
index 42bfc74..bcd582c 100644
--- a/src/workflows/manager/components/AddDialog.js
+++ b/src/workflows/manager/components/AddDialog.js
@@ -37,13 +37,13 @@
</wf-workflow-editor>
<md-filled-button
slot="primaryAction"
- label="Add"
@click=${this._save}>
+ Add
</md-filled-button>
<md-text-button
slot="secondaryAction"
- dialogAction="cancel"
- label="Cancel">
+ dialogAction="cancel">
+ Cancel
</md-text-button>
</mwc-dialog>
`;
diff --git a/src/workflows/manager/components/List.js b/src/workflows/manager/components/List.js
index d18571f..9f7ed5f 100644
--- a/src/workflows/manager/components/List.js
+++ b/src/workflows/manager/components/List.js
@@ -1,6 +1,7 @@
import '@material/web/list/list.js';
import '@material/web/list/list-item.js';
-import '@material/web/iconbutton/standard-icon-button.js';
+import '@material/web/icon/icon.js';
+import '@material/web/iconbutton/icon-button.js';
import './WorkflowDialog.js';
import {css, html, LitElement, nothing} from 'lit';
@@ -37,13 +38,14 @@
renderListItems() {
return map(this.workflows, w => html`
<md-list-item
- headline=${w.proto?.getName?.()}
+ type="button"
@click=${() => this._show(w)}>
+ <div slot="headline">${w.proto?.getName?.()}</div>
<div slot="end" class="end">
- <md-standard-icon-button
- icon="delete"
+ <md-icon-button
@click=${e => this._showDelete(w.uuid, e)}>
- </md-standard-icon-button>
+ <md-icon>delete</md-icon>
+ </md-icon-button>
</div>
</md-list-item>
`);
diff --git a/src/workflows/manager/components/WorkflowDialog.js b/src/workflows/manager/components/WorkflowDialog.js
index 19ff796..e990246 100644
--- a/src/workflows/manager/components/WorkflowDialog.js
+++ b/src/workflows/manager/components/WorkflowDialog.js
@@ -40,13 +40,13 @@
</wf-workflow-editor>
<md-filled-button
slot="primaryAction"
- label="Save"
@click=${this._save}>
+ Save
</md-filled-button>
<md-text-button
slot="secondaryAction"
- dialogAction="cancel"
- label="Cancel">
+ dialogAction="cancel">
+ Cancel
</md-text-button>
</mwc-dialog>
`;
diff --git a/src/workflows/manager/components/WorkflowEditor.js b/src/workflows/manager/components/WorkflowEditor.js
index 33c9224..1818ea7 100644
--- a/src/workflows/manager/components/WorkflowEditor.js
+++ b/src/workflows/manager/components/WorkflowEditor.js
@@ -1,4 +1,5 @@
import '@material/web/button/outlined-button.js';
+import '@material/web/icon/icon.js';
import '@material/web/textfield/filled-text-field.js';
import './ActionEditor.js';
@@ -58,9 +59,9 @@
if (this.readOnly) return nothing;
return html`
<md-outlined-button
- icon="add"
- label="Add another action"
@click=${this._addAction}>
+ <md-icon slot="icon">add</md-icon>
+ Add another action
</md-outlined-button>
`;
}
diff --git a/src/workflows/manager/components/actions/ReplyWithCR.js b/src/workflows/manager/components/actions/ReplyWithCR.js
index e3deee7..40a6b9c 100644
--- a/src/workflows/manager/components/actions/ReplyWithCR.js
+++ b/src/workflows/manager/components/actions/ReplyWithCR.js
@@ -1,11 +1,12 @@
-import '@material/web/formfield/formfield.js';
+import '@material/web/icon/icon.js';
import '@material/web/switch/switch.js';
import '@material/web/textfield/outlined-text-field.js';
+import '../../../../common/components/FormField.js';
import {css, html, LitElement, nothing} from 'lit';
import {createRef, ref} from 'lit/directives/ref.js';
-import {CCApi} from '../../../../common/api.js';
+import {SHARED_MD3_STYLES} from '../../../../common/styles/md3.js';
import * as pb from '../../../proto/main_pb.js';
export default class WFActionReplyWithCR extends LitElement {
@@ -15,15 +16,22 @@
_importerWindow: {type: Object, state: true},
};
- static styles = css`
- .form-line {
- display: flex;
- flex-direction: row;
- align-items: center;
- margin-block: 1em;
- gap: .5rem;
- }
- `;
+ static styles = [
+ SHARED_MD3_STYLES,
+ css`
+ .form-line {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ margin-block: 1em;
+ gap: .5rem;
+ }
+
+ .select-cr-btn {
+ --md-outlined-button-icon-size: 24px;
+ }
+ `,
+ ];
cannedResponseRef = createRef();
subscribeRef = createRef();
@@ -56,27 +64,36 @@
</md-outlined-text-field>
${this.readOnly ? nothing : html`
<md-outlined-button
- icon="more"
- label="Select CR"
+ class="select-cr-btn"
@click=${this._openCRImporter}>
+ <md-icon slot="icon" filled>more</md-icon>
+ Select CR
</md-outlined-button>
`}
</div>
<div class="form-line">
- <md-formfield label="Subscribe to thread">
+ <twpt-form-field>
<md-switch ${ref(this.subscribeRef)}
?selected=${this.subscribe}
?disabled=${this.readOnly}
- @click=${this._subscribeChanged}/>
- </md-formfield>
+ @change=${this._subscribeChanged}/>
+ </md-switch>
+ <span slot="label">
+ Subscribe to thread
+ </span>
+ </twpt-form-field>
</div>
<div class="form-line">
- <md-formfield label="Mark as answer">
+ <twpt-form-field>
<md-switch ${ref(this.markAsAnswerRef)}
?selected=${this.markAsAnswer}
?disabled=${this.readOnly}
- @click=${this._markAsAnswerChanged}/>
- </md-formfield>
+ @change=${this._markAsAnswerChanged}/>
+ </md-switch>
+ <span slot="label">
+ Mark as answer
+ </span>
+ </twpt-form-field>
</div>
`;
}
diff --git a/src/workflows/manager/index.js b/src/workflows/manager/index.js
index 113177c..b3b08d2 100644
--- a/src/workflows/manager/index.js
+++ b/src/workflows/manager/index.js
@@ -1,4 +1,5 @@
import '@material/web/fab/fab.js';
+import '@material/web/icon/icon.js';
import './components/List.js';
import './components/AddDialog.js';
import './components/WorkflowDialog.js';
@@ -50,8 +51,8 @@
<p>Workflows allow you to run a customized list of actions on a thread easily.</p>
<wf-list .workflows=${this._workflows}></wf-list>
<md-fab ${ref(this.addFabRef)}
- icon="add"
@click=${this._showAddDialog}>
+ <md-icon slot="icon">add</md-icon>
</md-fab>
<wf-add-dialog ${ref(this.addDialog)}>
</wf-add-dialog>