@operato/context 2.0.0-alpha.8 → 2.0.0-alpha.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +385 -0
  2. package/demo/index.html +13 -2
  3. package/dist/src/layouts/ox-context-page-toolbar.d.ts +9 -4
  4. package/dist/src/layouts/ox-context-page-toolbar.js +30 -10
  5. package/dist/src/layouts/ox-context-page-toolbar.js.map +1 -1
  6. package/dist/src/layouts/ox-context-toolbar.d.ts +2 -2
  7. package/dist/src/layouts/ox-context-toolbar.js +104 -70
  8. package/dist/src/layouts/ox-context-toolbar.js.map +1 -1
  9. package/dist/src/styles/ox-context-toolbar-overlay-style.js +2 -2
  10. package/dist/src/styles/ox-context-toolbar-overlay-style.js.map +1 -1
  11. package/dist/src/tools/ox-page-action-context-bar.d.ts +12 -5
  12. package/dist/src/tools/ox-page-action-context-bar.js +83 -44
  13. package/dist/src/tools/ox-page-action-context-bar.js.map +1 -1
  14. package/dist/src/tools/ox-page-action-overlay-template.d.ts +2 -2
  15. package/dist/src/tools/ox-page-action-overlay-template.js +28 -22
  16. package/dist/src/tools/ox-page-action-overlay-template.js.map +1 -1
  17. package/dist/src/tools/ox-page-title-bar.d.ts +2 -2
  18. package/dist/src/tools/ox-page-title-bar.js +6 -8
  19. package/dist/src/tools/ox-page-title-bar.js.map +1 -1
  20. package/dist/src/tools/ox-title-bar.d.ts +2 -2
  21. package/dist/src/tools/ox-title-bar.js +6 -8
  22. package/dist/src/tools/ox-title-bar.js.map +1 -1
  23. package/dist/stories/ox-context-page-toolbar-select-buttons.stories.d.ts +25 -0
  24. package/dist/stories/ox-context-page-toolbar-select-buttons.stories.js +127 -0
  25. package/dist/stories/ox-context-page-toolbar-select-buttons.stories.js.map +1 -0
  26. package/dist/stories/ox-context-page-toolbar-select.stories.d.ts +24 -0
  27. package/dist/stories/ox-context-page-toolbar-select.stories.js +85 -0
  28. package/dist/stories/ox-context-page-toolbar-select.stories.js.map +1 -0
  29. package/dist/stories/ox-context-page-toolbar.stories.d.ts +24 -0
  30. package/dist/stories/ox-context-page-toolbar.stories.js +90 -0
  31. package/dist/stories/ox-context-page-toolbar.stories.js.map +1 -0
  32. package/dist/stories/ox-context-toolbar-complex.stories.d.ts +19 -0
  33. package/dist/stories/ox-context-toolbar-complex.stories.js +147 -0
  34. package/dist/stories/ox-context-toolbar-complex.stories.js.map +1 -0
  35. package/dist/stories/ox-context-toolbar-empty.stories.d.ts +19 -0
  36. package/dist/stories/ox-context-toolbar-empty.stories.js +49 -0
  37. package/dist/stories/ox-context-toolbar-empty.stories.js.map +1 -0
  38. package/dist/stories/ox-context-toolbar-overflow.stories.d.ts +19 -0
  39. package/dist/stories/ox-context-toolbar-overflow.stories.js +128 -0
  40. package/dist/stories/ox-context-toolbar-overflow.stories.js.map +1 -0
  41. package/dist/stories/ox-context-toolbar.stories.d.ts +19 -0
  42. package/dist/stories/ox-context-toolbar.stories.js +83 -0
  43. package/dist/stories/ox-context-toolbar.stories.js.map +1 -0
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/package.json +20 -20
  46. package/src/layouts/ox-context-page-toolbar.ts +33 -10
  47. package/src/layouts/ox-context-toolbar.ts +104 -70
  48. package/src/styles/ox-context-toolbar-overlay-style.ts +2 -2
  49. package/src/tools/ox-page-action-context-bar.ts +111 -63
  50. package/src/tools/ox-page-action-overlay-template.ts +48 -42
  51. package/src/tools/ox-page-title-bar.ts +6 -8
  52. package/src/tools/ox-title-bar.ts +6 -8
  53. package/stories/ox-context-page-toolbar-select-buttons.stories.ts +141 -0
  54. package/stories/ox-context-page-toolbar-select.stories.ts +99 -0
  55. package/stories/ox-context-page-toolbar.stories.ts +104 -0
  56. package/stories/ox-context-toolbar-complex.stories.ts +159 -0
  57. package/stories/ox-context-toolbar-empty.stories.ts +62 -0
  58. package/stories/ox-context-toolbar-overflow.stories.ts +140 -0
  59. package/stories/ox-context-toolbar.stories.ts +95 -0
  60. package/themes/app-theme.css +162 -0
  61. package/themes/context-theme.css +74 -0
  62. package/themes/material-theme.css +38 -0
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
 
3
3
  import { css, html, LitElement, nothing } from 'lit'
4
4
  import { customElement, property, query, state } from 'lit/decorators.js'
@@ -14,77 +14,103 @@ export class ContextToolbar extends connect(store)(LitElement) {
14
14
  css`
15
15
  :host {
16
16
  display: flex;
17
- position: relative;
18
17
 
19
18
  background-color: var(--context-toolbar-background-color);
20
- justify-content: space-between;
21
19
  box-shadow: var(--context-toolbar-shadow-line);
22
- }
23
- #front-end {
24
- padding-left: var(--context-toolbar-side-padding);
25
- }
26
- #rear-end {
27
- padding-right: var(--context-toolbar-side-padding);
28
- }
29
- #front-end mwc-icon,
30
- #front mwc-icon {
31
- background-color: var(--context-toolbar-function-button-background-color);
32
- border: var(--context-toolbar-function-button-border);
33
- height: var(--context-toolbar-function-button-height);
34
- margin: var(--context-toolbar-button-margin);
35
- padding: var(--context-toolbar-function-button-padding);
36
- color: var(--context-toolbar-function-button-color);
37
- line-height: var(--context-toolbar-function-button-lineheight);
38
- cursor: pointer;
39
- }
40
- #front-end mwc-icon:first-child,
41
- #front mwc-icon:first-child {
42
- border-top-left-radius: var(--context-toolbar-function-button-radius);
43
- border-bottom-left-radius: var(--context-toolbar-function-button-radius);
44
- }
45
- #front-end mwc-icon:last-child,
46
- #front mwc-icon:last-child {
47
- border-top-right-radius: var(--context-toolbar-function-button-radius);
48
- border-bottom-right-radius: var(--context-toolbar-function-button-radius);
49
- }
50
20
 
51
- #front-end mwc-icon {
52
- background-color: var(--primary-color);
53
- }
54
- #front-end mwc-icon:hover {
55
- background-color: var(--context-toolbar-function-button-background-color);
56
- }
57
- #front mwc-icon:hover {
58
- background-color: var(--context-toolbar-function-button-hover-background-color);
21
+ padding: 0;
22
+
23
+ --md-icon-size: 20px;
59
24
  }
60
25
 
61
- #center {
26
+ div[container] {
62
27
  flex: 1;
63
- align-items: center;
64
- justify-content: end;
65
- }
66
28
 
67
- #center > * {
68
- align-items: center;
69
- }
70
- #rear-end > *,
71
- #rear > * {
72
- margin: var(--context-toolbar-button-margin);
73
- }
74
- #rear-end {
75
- align-items: start;
76
- }
29
+ display: flex;
30
+ position: relative;
31
+ overflow: hidden;
32
+
33
+ justify-content: space-between;
77
34
 
78
- div > * {
79
- align-items: center;
35
+ gap: 4px;
36
+ padding: 6px 10px;
37
+
38
+ &:empty {
39
+ padding: 0;
40
+ }
41
+
42
+ div {
43
+ display: flex;
44
+ flex-direction: row;
45
+ flex-wrap: nowrap;
46
+
47
+ align-items: center;
48
+ overflow: hidden;
49
+ padding: 0;
50
+ }
51
+
52
+ #front-end md-icon,
53
+ #front md-icon {
54
+ background-color: var(--context-toolbar-function-button-background-color);
55
+ border: var(--context-toolbar-function-button-border);
56
+ color: var(--context-toolbar-function-button-color);
57
+ }
58
+
59
+ #front-end md-icon {
60
+ background-color: var(--primary-color);
61
+ }
62
+ #front-end md-icon:hover {
63
+ background-color: var(--context-toolbar-function-button-background-color);
64
+ }
65
+ #front md-icon:hover {
66
+ background-color: var(--context-toolbar-function-button-hover-background-color);
67
+ }
68
+
69
+ md-icon {
70
+ background-color: var(--button-background-color, #fafbfc);
71
+ border: 1px solid rgba(var(--primary-color-rgb), 0.5);
72
+ border-radius: var(--button-border-radius);
73
+ padding: var(--iconbtn-padding, 2px);
74
+
75
+ color: var(--primary-color);
76
+
77
+ &:hover {
78
+ background-color: var(--primary-color);
79
+
80
+ color: var(--theme-white-color);
81
+ }
82
+ }
83
+
84
+ div md-icon:first-child {
85
+ border-radius: 0;
86
+ border-top-left-radius: var(--context-toolbar-function-button-radius);
87
+ border-bottom-left-radius: var(--context-toolbar-function-button-radius);
88
+ }
89
+ div md-icon:last-child {
90
+ border-radius: 0;
91
+ border-top-right-radius: var(--context-toolbar-function-button-radius);
92
+ border-bottom-right-radius: var(--context-toolbar-function-button-radius);
93
+ }
94
+
95
+ #center {
96
+ flex: 1;
97
+ justify-content: end;
98
+ }
99
+
100
+ * {
101
+ cursor: pointer;
102
+ }
80
103
  }
81
104
 
82
- div {
83
- display: flex;
84
- flex-wrap: nowrap;
85
- align-items: center;
86
- overflow: hidden;
87
- padding: 0;
105
+ @media only screen and (max-width: 460px) {
106
+ div[container] {
107
+ padding: 0;
108
+ gap: 0;
109
+ }
110
+ div[container] div md-icon{
111
+ border-radius:0;
112
+ border-right-width:0;
113
+ }
88
114
  }
89
115
  `
90
116
  ]
@@ -112,15 +138,23 @@ export class ContextToolbar extends connect(store)(LitElement) {
112
138
  let rearEndTools = tools.filter(tool => tool.position == TOOL_POSITION.REAR_END)
113
139
 
114
140
  return html`
115
- <div id="front-end">${frontEndTools.map(tool => html` ${tool.template} `)}</div>
116
-
117
- <div id="front">${frontTools.map(tool => html` ${tool.template} `)}</div>
118
-
119
- <div id="center">${centerTools.map(tool => html` ${tool.template} `)}</div>
120
-
121
- <div id="rear">${rearTools.map(tool => html` ${tool.template} `)}</div>
122
-
123
- <div id="rear-end">${rearEndTools.map(tool => html` ${tool.template} `)}</div>
141
+ <div container>
142
+ ${frontEndTools.length > 0
143
+ ? html`<div id="front-end">${frontEndTools.map(tool => html` ${tool.template} `)}</div>`
144
+ : nothing}
145
+ ${frontTools.length > 0
146
+ ? html`<div id="front">${frontTools.map(tool => html` ${tool.template} `)}</div>`
147
+ : nothing}
148
+ ${centerTools.length > 0
149
+ ? html`<div id="center">${centerTools.map(tool => html` ${tool.template} `)}</div>`
150
+ : nothing}
151
+ ${rearTools.length > 0
152
+ ? html`<div id="rear">${rearTools.map(tool => html` ${tool.template} `)}</div>`
153
+ : nothing}
154
+ ${rearEndTools.length > 0
155
+ ? html`<div id="rear-end">${rearEndTools.map(tool => html` ${tool.template} `)}</div>`
156
+ : nothing}
157
+ </div>
124
158
  `
125
159
  }
126
160
 
@@ -23,7 +23,7 @@ export const ContextToolbarOverlayStyle = css`
23
23
  padding: var(--context-ui-list-padding);
24
24
  }
25
25
 
26
- li > mwc-icon {
26
+ li > md-icon {
27
27
  font-size: 1em;
28
28
 
29
29
  padding: var(--context-ui-padding);
@@ -37,7 +37,7 @@ export const ContextToolbarOverlayStyle = css`
37
37
  color: var(--context-ui-list-color);
38
38
  }
39
39
 
40
- li:hover mwc-icon,
40
+ li:hover md-icon,
41
41
  li:hover span {
42
42
  color: #fff;
43
43
  }
@@ -1,5 +1,4 @@
1
- import '@material/mwc-button'
2
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
3
2
  import './ox-page-action-overlay-template.js'
4
3
 
5
4
  import { css, html, LitElement, PropertyValues } from 'lit'
@@ -19,55 +18,90 @@ export class PageActionContextBar extends connect(store)(LitElement) {
19
18
  :host {
20
19
  display: flex;
21
20
  overflow: hidden;
22
- position: relative;
21
+ gap: var(--padding-narrow);
23
22
  }
24
23
 
25
24
  :host *:focus {
26
25
  outline: none;
27
26
  }
28
27
 
29
- mwc-button {
30
- white-space: nowrap;
31
- margin: var(--context-action-bar-button-margin);
32
- border-radius: var(--context-action-bar-more-button-border-radius);
28
+ button {
29
+ display: flex;
30
+ align-items: center;
31
+ background-color: var(--button-background-color, #fafbfc);
32
+ border: 1px solid rgba(var(--primary-color-rgb), 0.5);
33
+ border-radius: var(--button-border-radius);
34
+
35
+ font-size: var(--fontsize-default);
36
+ color: var(--secondary-color);
37
+
38
+ md-icon {
39
+ margin: 4px 1px;
40
+
41
+ --md-icon-size: 18px;
42
+ color: var(--primary-color);
43
+ }
44
+ &:hover {
45
+ background-color: var(--primary-color);
46
+
47
+ color: var(--theme-white-color);
48
+
49
+ md-icon {
50
+ color: var(--white-theme-color);
51
+ }
52
+ }
53
+ }
54
+
55
+ [filled] {
56
+ font-variation-settings: 'FILL' 1;
33
57
  }
34
58
 
35
59
  [danger] {
36
- --mdc-theme-primary: var(--mdc-danger-button-primary-color);
37
- --mdc-button-outline-color: var(--mdc-danger-button-outline-color);
60
+ color: var(--md-danger-button-primary-color);
61
+ border-color: var(--md-danger-button-outline-color);
62
+
63
+ md-icon {
64
+ color: var(--md-danger-button-primary-color);
65
+ }
66
+ &:hover {
67
+ background-color: var(--md-danger-button-primary-color);
68
+ }
38
69
  }
39
70
 
40
71
  [more] {
41
72
  position: absolute;
42
73
  top: 0;
43
- right: 38px;
74
+ right: 0;
44
75
  background-color: var(--context-action-bar-more-button-background-color);
45
76
  box-shadow: -2px 0px 2px 1px rgba(0, 0, 0, 0.2);
46
77
  padding: var(--context-action-bar-more-button-padding);
47
78
  color: var(--context-action-bar-more-button-color);
79
+ padding: 11px 10px;
48
80
  font-size: 2rem;
49
81
  }
50
82
 
51
- mwc-icon {
52
- background-color: var(--theme-white-color);
83
+ select,input[type="text"]{
84
+ background-color: var(--button-background-color, #fafbfc);
53
85
  border: 1px solid rgba(var(--primary-color-rgb), 0.5);
54
- padding: 1px 2px;
55
- color: var(--primary-color);
86
+ border-radius: var(--button-border-radius);
87
+ padding:0 var(--padding-narrow);
88
+
89
+ font-size: var(--fontsize-default);
90
+ color: var(--secondary-color);
56
91
  }
57
92
 
58
93
  @media screen and (max-width: 460px) {
59
- mwc-button {
60
- --mdc-button-horizontal-padding: var(--padding-default);
61
- --mdc-shape-small: var(--context-action-bar-more-button-border-radius);
94
+ :host{
95
+ gap:0;
96
+ }
97
+ button,md-icon{
98
+ border-radius:0;
99
+ border-right-width:0;
62
100
  }
63
-
64
101
  [more] {
65
- position: absolute;
66
- margin-top: -10px;
67
- right: 0px;
68
- padding: var(--padding-default);
69
- font-size: 2rem;
102
+ margin-top: -7px;
70
103
  }
104
+
71
105
  }
72
106
 
73
107
  @keyframes rotate {
@@ -82,7 +116,15 @@ export class PageActionContextBar extends connect(store)(LitElement) {
82
116
  ]
83
117
  }
84
118
 
85
- @state() actions: any[] = []
119
+ @property({ type: Array }) actions: {
120
+ title: string
121
+ action: () => void
122
+ icon: string
123
+ type: string
124
+ select: string[]
125
+ href?: string
126
+ emphasis?: boolean
127
+ }[] = []
86
128
  @state() private overflown: boolean = false
87
129
 
88
130
  private overflownUpdaterThrottle: any
@@ -115,7 +157,7 @@ export class PageActionContextBar extends connect(store)(LitElement) {
115
157
  render() {
116
158
  return html`
117
159
  ${this.renderActions()}
118
- ${this.overflown ? html` <mwc-icon more @click=${this.showMore.bind(this)}>more_horiz</mwc-icon> ` : html``}
160
+ ${this.overflown ? html` <md-icon more @click=${this.showMore.bind(this)}>more_horiz</md-icon> ` : html``}
119
161
  `
120
162
  }
121
163
 
@@ -123,47 +165,49 @@ export class PageActionContextBar extends connect(store)(LitElement) {
123
165
  return html`
124
166
  ${this.actions.map(($action, idx) => {
125
167
  let { type, title, icon, action, select, href, emphasis } = $action as any
126
- let { outlined, raised, dense, danger } = emphasis || {}
168
+ let { outlined, raised, dense, danger, filled } = emphasis || {}
127
169
 
128
170
  return type == 'text'
129
171
  ? html` <span @click=${action}>${title}</span> `
130
172
  : type == 'select' || (select && select.length > 0)
131
- ? html`
132
- <select @change=${action}>
133
- ${select.map((option: any) => html` <option>${option}</option> `)}
134
- </select>
135
- `
136
- : type == 'link'
137
- ? html` <a href=${href}>${title}</a> `
138
- : type == 'icon'
139
- ? html`<mwc-icon @click=${action}>${icon}</mwc-icon>`
140
- : html`
141
- <mwc-button
142
- label=${title}
143
- icon=${icon || 'done_all'}
144
- ?dense=${dense}
145
- ?raised=${raised}
146
- ?outlined=${outlined}
147
- ?danger=${danger}
148
- @click=${async (e: MouseEvent) => {
149
- /* all actions should be bloked for a second */
150
- const button = e.currentTarget as any
151
- button.icon = 'rotate_right'
152
- button.setAttribute('working', true)
153
- button.disabled = true
154
-
155
- try {
156
- await action()
157
- } finally {
158
- await sleep(1000)
159
- button.disabled = false
160
- /* because icon can be changed after sleep, don't use closure 'icon'. */
161
- button.icon = this.actions[idx]?.icon || 'done_all'
162
- button.removeAttribute('working')
163
- }
164
- }}
165
- ></mwc-button>
166
- `
173
+ ? html`
174
+ <select @change=${action}>
175
+ ${select.map((option: any) => html` <option>${option}</option> `)}
176
+ </select>
177
+ `
178
+ : type == 'link'
179
+ ? html` <a href=${href}>${title}</a> `
180
+ : type == 'icon'
181
+ ? html`<md-icon @click=${action}>${icon}</md-icon>`
182
+ : html`
183
+ <button
184
+ ?dense=${dense}
185
+ ?raised=${raised}
186
+ ?outlined=${outlined}
187
+ ?danger=${danger}
188
+ ?filled=${filled}
189
+ @click=${async (e: MouseEvent) => {
190
+ /* all actions should be bloked for a second */
191
+ const button = e.currentTarget as any
192
+ button.icon = 'rotate_right'
193
+ button.setAttribute('working', true)
194
+ button.disabled = true
195
+
196
+ try {
197
+ await action()
198
+ } finally {
199
+ await sleep(1000)
200
+ button.disabled = false
201
+ /* because icon can be changed after sleep, don't use closure 'icon'. */
202
+ button.icon = this.actions[idx]?.icon || 'done_all'
203
+ button.removeAttribute('working')
204
+ }
205
+ }}
206
+ >
207
+ <md-icon>${icon || 'done_all'}</md-icon>
208
+ ${title}
209
+ </button>
210
+ `
167
211
  })}
168
212
  `
169
213
  }
@@ -175,7 +219,11 @@ export class PageActionContextBar extends connect(store)(LitElement) {
175
219
  }
176
220
 
177
221
  stateChanged(state: any) {
178
- this.actions = state.route?.context?.actions?.filter((action: any) => !!action) || []
222
+ const { actions } = state.route?.context || {}
223
+
224
+ if (actions) {
225
+ this.actions = actions.filter((action: any) => !!action)
226
+ }
179
227
  }
180
228
 
181
229
  showMore() {
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
 
3
3
  import { css, html, LitElement } from 'lit'
4
4
  import { customElement, property, query, state } from 'lit/decorators.js'
@@ -20,25 +20,29 @@ export class PageActionOverlayTemplate extends connect(store)(LitElement) {
20
20
  :host {
21
21
  display: flex;
22
22
  flex-wrap: wrap;
23
- gap: var(--margin-narrow);
23
+ gap: var(--padding-narrow);
24
24
  }
25
25
  :host *:focus {
26
26
  outline: none;
27
27
  }
28
28
 
29
- mwc-button {
29
+ button {
30
30
  background-color: var(--main-section-background-color);
31
31
  border-radius: var(--context-action-bar-more-button-border-radius);
32
32
  }
33
33
 
34
34
  [danger] {
35
- --mdc-theme-primary: var(--mdc-danger-button-primary-color);
36
- --mdc-button-outline-color: var(--mdc-danger-button-outline-color);
35
+ --md-theme-primary: var(--md-danger-button-primary-color);
36
+ --md-button-outline-color: var(--md-danger-button-outline-color);
37
+ }
38
+
39
+ [filled] {
40
+ font-variation-settings: 'FILL' 1;
37
41
  }
38
42
 
39
43
  @media screen and (max-width: 460px) {
40
- mwc-button {
41
- --mdc-button-horizontal-padding: var(--padding-default);
44
+ button {
45
+ --md-button-horizontal-padding: var(--padding-default);
42
46
  border-radius: 4px;
43
47
  }
44
48
  }
@@ -61,47 +65,49 @@ export class PageActionOverlayTemplate extends connect(store)(LitElement) {
61
65
  return html`
62
66
  ${this.actions.map(($action, idx) => {
63
67
  let { type, title, icon, action, select, href, emphasis } = $action as any
64
- let { outlined, raised, dense, danger } = emphasis || {}
68
+ let { outlined, raised, dense, danger, filled } = emphasis || {}
65
69
 
66
70
  return type == 'text'
67
71
  ? html` <span>${title}</span> `
68
72
  : type == 'select' || (select && select.length > 0)
69
- ? html`
70
- <select @change=${action}>
71
- ${select.map((option: any) => html` <option>${option}</option> `)}
72
- </select>
73
- `
74
- : type == 'link'
75
- ? html` <a href=${href}>${title}</a> `
76
- : html`
77
- <mwc-button
78
- label=${title}
79
- icon=${icon || 'done_all'}
80
- ?dense=${dense}
81
- ?raised=${raised}
82
- ?outlined=${outlined}
83
- ?danger=${danger}
84
- @click=${async (e: MouseEvent) => {
85
- /* all actions should be bloked for a second */
86
- const button = e.currentTarget as any
87
- button.icon = 'rotate_right'
88
- button.setAttribute('working', true)
89
- button.disabled = true
73
+ ? html`
74
+ <select @change=${action}>
75
+ ${select.map((option: any) => html` <option>${option}</option> `)}
76
+ </select>
77
+ `
78
+ : type == 'link'
79
+ ? html` <a href=${href}>${title}</a> `
80
+ : html`
81
+ <button
82
+ ?dense=${dense}
83
+ ?raised=${raised}
84
+ ?outlined=${outlined}
85
+ ?danger=${danger}
86
+ ?filled=${filled}
87
+ @click=${async (e: MouseEvent) => {
88
+ /* all actions should be bloked for a second */
89
+ const button = e.currentTarget as any
90
+ button.icon = 'rotate_right'
91
+ button.setAttribute('working', true)
92
+ button.disabled = true
90
93
 
91
- try {
92
- action()
93
- } finally {
94
- await sleep(1000)
95
- button.disabled = false
96
- /* because icon can be changed after sleep, don't use closure 'icon'. */
97
- button.icon = this.actions[idx]?.icon || 'done_all'
98
- button.removeAttribute('working')
94
+ try {
95
+ action()
96
+ } finally {
97
+ await sleep(1000)
98
+ button.disabled = false
99
+ /* because icon can be changed after sleep, don't use closure 'icon'. */
100
+ button.icon = this.actions[idx]?.icon || 'done_all'
101
+ button.removeAttribute('working')
99
102
 
100
- window.history.back()
101
- }
102
- }}
103
- ></mwc-button>
104
- `
103
+ window.history.back()
104
+ }
105
+ }}
106
+ >
107
+ <md-icon>${icon || 'done_all'}</md-icon>
108
+ ${title}
109
+ </button>
110
+ `
105
111
  })}
106
112
  `
107
113
  }
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
  import '@operato/input/ox-input-search.js'
3
3
 
4
4
  import { css, html, LitElement } from 'lit'
@@ -22,7 +22,7 @@ export class PageTitleBar extends connect(store)(LitElement) {
22
22
  --help-icon-opacity: 0.2;
23
23
  --help-icon-size: 20px;
24
24
 
25
- --mdc-icon-size: 20px;
25
+ --md-icon-size: 20px;
26
26
 
27
27
  --input-search-padding: var(--padding-narrow);
28
28
  --input-search-font: normal 14px var(--theme-font);
@@ -92,10 +92,8 @@ export class PageTitleBar extends connect(store)(LitElement) {
92
92
  }
93
93
 
94
94
  return html`
95
- ${title ? html` <div titler>${icon ? html`<mwc-icon>${icon}</mwc-icon>&nbsp;` : html``}${text}</div> ` : html``}
96
- ${help && title
97
- ? html` &nbsp;<mwc-icon @click=${(e: MouseEvent) => openHelp(help)} help>help</mwc-icon> `
98
- : html``}
95
+ ${title ? html` <div titler>${icon ? html`<md-icon>${icon}</md-icon>&nbsp;` : html``}${text}</div> ` : html``}
96
+ ${help && title ? html` &nbsp;<md-icon @click=${(e: MouseEvent) => openHelp(help)} help>help</md-icon> ` : html``}
99
97
  ${searchable || filterable
100
98
  ? html`
101
99
  <div search>
@@ -110,9 +108,9 @@ export class PageTitleBar extends connect(store)(LitElement) {
110
108
  ></ox-input-search>`
111
109
  : html``}
112
110
  ${!title && help && searchable
113
- ? html`<mwc-icon @click=${(e: MouseEvent) => openHelp(help)} help>help</mwc-icon>`
111
+ ? html`<md-icon @click=${(e: MouseEvent) => openHelp(help)} help>help</md-icon>`
114
112
  : html``}
115
- ${filterable ? html`<mwc-icon @click=${(e: MouseEvent) => filterHandler()}>unfold_more</mwc-icon>` : html``}
113
+ ${filterable ? html`<md-icon @click=${(e: MouseEvent) => filterHandler()}>unfold_more</md-icon>` : html``}
116
114
  </div>
117
115
  `
118
116
  : html``}
@@ -1,4 +1,4 @@
1
- import '@material/mwc-icon'
1
+ import '@material/web/icon/icon.js'
2
2
  import '@operato/input/ox-input-search.js'
3
3
 
4
4
  import { css, html, LitElement } from 'lit'
@@ -21,7 +21,7 @@ export class TitleBar extends connect(store)(LitElement) {
21
21
  --help-icon-opacity: 0.2;
22
22
  --help-icon-size: 20px;
23
23
 
24
- --mdc-icon-size: 20px;
24
+ --md-icon-size: 20px;
25
25
 
26
26
  --input-search-padding: 7px;
27
27
  --input-search-border-bottom: none;
@@ -88,10 +88,8 @@ export class TitleBar extends connect(store)(LitElement) {
88
88
  }
89
89
 
90
90
  return html`
91
- ${title ? html` <div titler>${icon ? html`<mwc-icon>${icon}</mwc-icon>&nbsp;` : html``}${text}</div> ` : html``}
92
- ${help && title
93
- ? html` &nbsp;<mwc-icon @click=${(e: MouseEvent) => openHelp(help)} help>help</mwc-icon> `
94
- : html``}
91
+ ${title ? html` <div titler>${icon ? html`<md-icon>${icon}</md-icon>&nbsp;` : html``}${text}</div> ` : html``}
92
+ ${help && title ? html` &nbsp;<md-icon @click=${(e: MouseEvent) => openHelp(help)} help>help</md-icon> ` : html``}
95
93
  ${searchable || filterable
96
94
  ? html`
97
95
  <div search>
@@ -106,9 +104,9 @@ export class TitleBar extends connect(store)(LitElement) {
106
104
  ></ox-input-search>`
107
105
  : html``}
108
106
  ${!title && help && searchable
109
- ? html`<mwc-icon @click=${(e: MouseEvent) => openHelp(help)} help>help</mwc-icon>`
107
+ ? html`<md-icon @click=${(e: MouseEvent) => openHelp(help)} help>help</md-icon>`
110
108
  : html``}
111
- ${filterable ? html`<mwc-icon @click=${(e: MouseEvent) => filterHandler()}>tune</mwc-icon>` : html``}
109
+ ${filterable ? html`<md-icon @click=${(e: MouseEvent) => filterHandler()}>tune</md-icon>` : html``}
112
110
  </div>
113
111
  `
114
112
  : html``}