@operato/styles 2.0.0-alpha.0 → 2.0.0-alpha.100
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.
- package/.storybook/main.js +3 -0
- package/.storybook/server.mjs +8 -0
- package/CHANGELOG.md +172 -0
- package/dist/src/button-container-styles.js +76 -7
- package/dist/src/button-container-styles.js.map +1 -1
- package/dist/src/common-grist-styles.js +36 -13
- package/dist/src/common-grist-styles.js.map +1 -1
- package/dist/src/common-header-styles.js +97 -96
- package/dist/src/common-header-styles.js.map +1 -1
- package/dist/stories/button-container-styles.stories.d.ts +17 -0
- package/dist/stories/button-container-styles.stories.js +54 -0
- package/dist/stories/button-container-styles.stories.js.map +1 -0
- package/dist/stories/common-header-styles-actions.stories.d.ts +22 -0
- package/dist/stories/common-header-styles-actions.stories.js +83 -0
- package/dist/stories/common-header-styles-actions.stories.js.map +1 -0
- package/dist/stories/common-header-styles-pure.stories.d.ts +21 -0
- package/dist/stories/common-header-styles-pure.stories.js +60 -0
- package/dist/stories/common-header-styles-pure.stories.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -5
- package/src/button-container-styles.ts +76 -7
- package/src/common-grist-styles.ts +36 -13
- package/src/common-header-styles.ts +97 -96
- package/stories/button-container-styles.stories.ts +67 -0
- package/stories/common-header-styles-actions.stories.ts +97 -0
- package/stories/common-header-styles-pure.stories.ts +73 -0
- package/themes/app-theme.css +161 -0
- package/themes/form-theme.css +75 -0
@@ -15,23 +15,31 @@ export const CommonGristStyles = css`
|
|
15
15
|
[slot='headroom'] {
|
16
16
|
display: flex;
|
17
17
|
flex-direction: row;
|
18
|
+
gap: 0 10px;
|
18
19
|
align-items: center;
|
19
20
|
padding: var(--padding-default) var(--padding-wide);
|
20
|
-
background-color: var(--theme-white-color);
|
21
|
-
box-shadow: var(--box-shadow);
|
22
21
|
|
23
|
-
--
|
22
|
+
--md-icon-size: 24px;
|
24
23
|
}
|
25
24
|
|
26
25
|
[slot='headroom']:empty {
|
27
26
|
padding: 0;
|
28
27
|
}
|
29
28
|
|
30
|
-
#sorters
|
31
|
-
#modes
|
32
|
-
--
|
29
|
+
#sorters md-icon,
|
30
|
+
#modes md-icon {
|
31
|
+
--md-icon-size: 18px;
|
32
|
+
}
|
33
|
+
|
34
|
+
[slot='setting'] {
|
35
|
+
position: absolute;
|
36
|
+
right: 0;
|
33
37
|
}
|
38
|
+
|
34
39
|
#sorters {
|
40
|
+
display: flex;
|
41
|
+
flex-wrap: nowrap;
|
42
|
+
align-items: center;
|
35
43
|
margin-left: auto;
|
36
44
|
margin-right: var(--margin-default);
|
37
45
|
padding-left: var(--padding-narrow);
|
@@ -54,7 +62,7 @@ export const CommonGristStyles = css`
|
|
54
62
|
cursor: pointer;
|
55
63
|
}
|
56
64
|
|
57
|
-
#modes >
|
65
|
+
#modes > md-icon[active] {
|
58
66
|
border-radius: 9px;
|
59
67
|
background-color: rgba(var(--primary-color-rgb), 0.05);
|
60
68
|
opacity: 1;
|
@@ -62,23 +70,27 @@ export const CommonGristStyles = css`
|
|
62
70
|
cursor: default;
|
63
71
|
}
|
64
72
|
|
65
|
-
#modes >
|
73
|
+
#modes > md-icon:hover {
|
66
74
|
opacity: 1;
|
67
75
|
color: var(--secondary-text-color);
|
68
76
|
}
|
69
77
|
|
70
78
|
#add {
|
71
|
-
width: 50px;
|
72
79
|
text-align: right;
|
73
80
|
}
|
74
81
|
|
75
82
|
#add button {
|
83
|
+
display: flex;
|
84
|
+
align-items: center;
|
85
|
+
justify-content: center;
|
86
|
+
gap: 0px 10px;
|
87
|
+
|
76
88
|
background-color: var(--primary-color);
|
77
89
|
border: 0;
|
78
90
|
border-radius: 50%;
|
79
91
|
padding: 5px;
|
80
|
-
width:
|
81
|
-
height:
|
92
|
+
width: 30px;
|
93
|
+
height: 30px;
|
82
94
|
cursor: pointer;
|
83
95
|
}
|
84
96
|
|
@@ -87,8 +99,8 @@ export const CommonGristStyles = css`
|
|
87
99
|
box-shadow: var(--box-shadow);
|
88
100
|
}
|
89
101
|
|
90
|
-
#add button
|
91
|
-
font-size:
|
102
|
+
#add button md-icon {
|
103
|
+
font-size: 1.5em;
|
92
104
|
color: var(--theme-white-color);
|
93
105
|
}
|
94
106
|
|
@@ -104,8 +116,19 @@ export const CommonGristStyles = css`
|
|
104
116
|
}
|
105
117
|
|
106
118
|
@media only screen and (max-width: 460px) {
|
119
|
+
[slot='headroom'] {
|
120
|
+
box-shadow: var(--box-shadow);
|
121
|
+
padding: 0;
|
122
|
+
}
|
123
|
+
|
107
124
|
#modes {
|
108
125
|
display: none;
|
109
126
|
}
|
127
|
+
|
128
|
+
#add {
|
129
|
+
position: absolute;
|
130
|
+
top: 10px;
|
131
|
+
right: 10px;
|
132
|
+
}
|
110
133
|
}
|
111
134
|
`
|
@@ -8,117 +8,118 @@ export const CommonHeaderStyles = css`
|
|
8
8
|
'filters filters';
|
9
9
|
gap: var(--padding-narrow) var(--padding-default);
|
10
10
|
padding: calc(var(--padding-default) / 2) var(--padding-default);
|
11
|
-
background-color: transparent;
|
12
|
-
box-shadow: none;
|
13
|
-
font-size: 0.9em;
|
14
11
|
|
15
12
|
align-items: center;
|
16
|
-
--mdc-icon-size: 24px;
|
17
|
-
--mdc-theme-primary: var(--primary-color);
|
18
|
-
}
|
19
|
-
|
20
|
-
.header:empty {
|
21
|
-
padding: 0;
|
22
|
-
}
|
23
|
-
|
24
|
-
.header .filters {
|
25
|
-
grid-area: filters;
|
26
|
-
border: 1px solid rgba(var(--primary-color-rgb), 0.3);
|
27
|
-
background-color: rgba(var(--primary-color-rgb), 0.1);
|
28
|
-
padding: var(--padding-default);
|
29
|
-
|
30
|
-
display: flex;
|
31
|
-
flex-direction: row;
|
32
|
-
align-items: center;
|
33
|
-
gap: var(--gap-inter-filter, 10px);
|
34
|
-
}
|
35
|
-
|
36
|
-
.header .filters:empty {
|
37
|
-
display: none;
|
38
|
-
}
|
39
|
-
|
40
|
-
.header .filter {
|
41
|
-
display: flex;
|
42
|
-
flex-direction: row;
|
43
13
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
font-size: var(--fontsize-default);
|
51
|
-
color: var(--primary-text-color);
|
52
|
-
}
|
53
|
-
|
54
|
-
.header .title {
|
55
|
-
grid-area: title;
|
14
|
+
.title {
|
15
|
+
grid-area: title;
|
16
|
+
display: flex;
|
17
|
+
flex-direction: row;
|
18
|
+
align-items: center;
|
19
|
+
gap: var(--padding-narrow);
|
56
20
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
font-weight: bold;
|
63
|
-
font-size: var(--fontsize-default);
|
64
|
-
color: var(--primary-text-color);
|
65
|
-
}
|
66
|
-
|
67
|
-
.header .title mwc-icon {
|
68
|
-
color: var(--primary-color);
|
69
|
-
font-size: var(--fontsize-large);
|
70
|
-
}
|
71
|
-
|
72
|
-
.header .actions {
|
73
|
-
grid-area: actions;
|
74
|
-
margin-left: auto;
|
75
|
-
|
76
|
-
display: flex;
|
77
|
-
flex-direction: row-reverse;
|
78
|
-
align-items: center;
|
79
|
-
gap: var(--gap-inter-action, 6px);
|
80
|
-
}
|
81
|
-
|
82
|
-
.header .actions * {
|
83
|
-
cursor: pointer;
|
84
|
-
}
|
85
|
-
|
86
|
-
.header .textbtn {
|
87
|
-
background-color: var(--button-primary-background-color);
|
88
|
-
border: 0;
|
89
|
-
border-radius: 2px;
|
21
|
+
font: var(--subtitle-font);
|
22
|
+
color: var(--primary-text-color);
|
23
|
+
text-transform: capitalize;
|
24
|
+
}
|
90
25
|
|
91
|
-
|
92
|
-
|
93
|
-
|
26
|
+
.filters {
|
27
|
+
grid-area: filters;
|
28
|
+
border: 1px solid rgba(var(--primary-color-rgb), 0.2);
|
29
|
+
border-radius: var(--border-radius);
|
30
|
+
background-color: rgba(var(--primary-color-rgb), 0.1);
|
31
|
+
padding: var(--padding-default);
|
32
|
+
display: flex;
|
33
|
+
flex-direction: row;
|
34
|
+
align-items: center;
|
35
|
+
gap: var(--padding-wide);
|
36
|
+
|
37
|
+
.filter {
|
38
|
+
display: flex;
|
39
|
+
flex-direction: row;
|
40
|
+
|
41
|
+
align-items: center;
|
42
|
+
gap: var(--padding-narrow);
|
43
|
+
}
|
44
|
+
|
45
|
+
label {
|
46
|
+
font: 600 var(--fontsize-default) var(--theme-font);
|
47
|
+
color: var(--label-color);
|
48
|
+
}
|
49
|
+
}
|
94
50
|
|
95
|
-
|
96
|
-
|
97
|
-
|
51
|
+
.filters:empty {
|
52
|
+
display: none;
|
53
|
+
}
|
98
54
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
55
|
+
.actions {
|
56
|
+
grid-area: actions;
|
57
|
+
margin-left: auto;
|
58
|
+
display: flex;
|
59
|
+
flex-direction: row-reverse;
|
60
|
+
align-items: center;
|
61
|
+
gap: var(--padding-narrow);
|
62
|
+
|
63
|
+
* {
|
64
|
+
cursor: pointer;
|
65
|
+
}
|
66
|
+
|
67
|
+
.textbtn,
|
68
|
+
.iconbtn {
|
69
|
+
background-color: var(--button-background-color);
|
70
|
+
border: var(--button-border);
|
71
|
+
border-radius: var(--button-border-radius);
|
72
|
+
padding: var(--button-padding);
|
73
|
+
|
74
|
+
color: var(--button-color);
|
75
|
+
font: var(--button-font);
|
76
|
+
|
77
|
+
&:hover {
|
78
|
+
border: var(--button-activ-border);
|
79
|
+
background-color: var(--button-activ-background-color);
|
80
|
+
box-shadow: var(--button-active-box-shadow);
|
81
|
+
|
82
|
+
color: var(--button-activ-color);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
.iconbtn {
|
86
|
+
padding: var(--iconbtn-padding);
|
87
|
+
line-height: 0.9;
|
88
|
+
|
89
|
+
md-icon {
|
90
|
+
--md-icon-size: var(--iconbtn-size);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
106
94
|
|
107
|
-
|
108
|
-
|
109
|
-
|
95
|
+
:empty {
|
96
|
+
padding: 0;
|
97
|
+
}
|
110
98
|
}
|
111
99
|
|
112
100
|
@media only screen and (max-width: 460px) {
|
113
101
|
.header {
|
102
|
+
padding: 0;
|
103
|
+
gap: 0;
|
104
|
+
|
114
105
|
grid-template-areas:
|
115
|
-
'
|
106
|
+
'actions'
|
116
107
|
'filters';
|
117
|
-
}
|
118
108
|
|
119
|
-
|
120
|
-
|
121
|
-
|
109
|
+
.title {
|
110
|
+
display: none;
|
111
|
+
}
|
112
|
+
|
113
|
+
.filters {
|
114
|
+
flex-wrap: wrap;
|
115
|
+
gap: var(--padding-default);
|
116
|
+
border: none;
|
117
|
+
}
|
118
|
+
|
119
|
+
.actions {
|
120
|
+
background-color: rgba(var(--primary-color-rgb), 0.1);
|
121
|
+
margin: 0;
|
122
|
+
}
|
122
123
|
}
|
123
124
|
}
|
124
125
|
`
|
@@ -0,0 +1,67 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
2
|
+
import { ButtonContainerStyles } from '../src/button-container-styles.js'
|
3
|
+
|
4
|
+
import { css, html, render, TemplateResult } from 'lit'
|
5
|
+
|
6
|
+
export default {
|
7
|
+
title: 'button-container-styles-pure',
|
8
|
+
component: 'div',
|
9
|
+
argTypes: {}
|
10
|
+
}
|
11
|
+
|
12
|
+
interface Story<T> {
|
13
|
+
(args: T): TemplateResult
|
14
|
+
args?: Partial<T>
|
15
|
+
argTypes?: Record<string, unknown>
|
16
|
+
}
|
17
|
+
|
18
|
+
interface ArgTypes {
|
19
|
+
label?: string
|
20
|
+
}
|
21
|
+
|
22
|
+
const Template: Story<ArgTypes> = ({ label = '' }: ArgTypes) => html`
|
23
|
+
<link href="/themes/app-theme.css" rel="stylesheet" />
|
24
|
+
<link href="/themes/form-theme.css" rel="stylesheet" />
|
25
|
+
<link
|
26
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
|
27
|
+
rel="stylesheet"
|
28
|
+
/>
|
29
|
+
<link
|
30
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
|
31
|
+
rel="stylesheet"
|
32
|
+
/>
|
33
|
+
<link
|
34
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
|
35
|
+
rel="stylesheet"
|
36
|
+
/>
|
37
|
+
|
38
|
+
<style>
|
39
|
+
body {
|
40
|
+
background-color: white;
|
41
|
+
}
|
42
|
+
|
43
|
+
${ButtonContainerStyles.cssText}
|
44
|
+
</style>
|
45
|
+
<div style="height:400px; background-color: black; padding: 10px; display: flex; flex-direction: column;gap: 10px;">
|
46
|
+
<div class="button-container" style="background-color: white;">
|
47
|
+
<button raised><md-icon>save</md-icon>save</button>
|
48
|
+
<button outlined><md-icon>launch</md-icon>remove</button>
|
49
|
+
<button danger><md-icon>delete</md-icon>delete</button>
|
50
|
+
</div>
|
51
|
+
|
52
|
+
<div class="button-container" style="background-color: white;">
|
53
|
+
<button danger><md-icon>cancel</md-icon>cancel</button>
|
54
|
+
<button><md-icon>done</md-icon>confirm</button>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<div class="button-container" style="background-color: white;margin-left: unset;">
|
58
|
+
<button danger><md-icon>restart_alt</md-icon>reset</button>
|
59
|
+
<div filler></div>
|
60
|
+
<button danger><md-icon>cancel</md-icon>cancel</button>
|
61
|
+
<button><md-icon>done</md-icon>confirm</button>
|
62
|
+
</div>
|
63
|
+
</div>
|
64
|
+
`
|
65
|
+
|
66
|
+
export const Regular = Template.bind({})
|
67
|
+
Regular.args = {}
|
@@ -0,0 +1,97 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
2
|
+
import '@operato/context/ox-context-page-toolbar.js'
|
3
|
+
|
4
|
+
import { CommonHeaderStyles } from '../src/common-header-styles.js'
|
5
|
+
|
6
|
+
import { css, html, render, TemplateResult } from 'lit'
|
7
|
+
|
8
|
+
export default {
|
9
|
+
title: 'common-header-styles-actions',
|
10
|
+
component: 'div',
|
11
|
+
argTypes: {
|
12
|
+
label: { control: 'string' }
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
interface Story<T> {
|
17
|
+
(args: T): TemplateResult
|
18
|
+
args?: Partial<T>
|
19
|
+
argTypes?: Record<string, unknown>
|
20
|
+
}
|
21
|
+
|
22
|
+
interface ArgTypes {
|
23
|
+
label?: string
|
24
|
+
}
|
25
|
+
|
26
|
+
const Template: Story<ArgTypes> = ({ label = '' }: ArgTypes) => html`
|
27
|
+
<link href="/themes/app-theme.css" rel="stylesheet" />
|
28
|
+
<link href="/themes/form-theme.css" rel="stylesheet" />
|
29
|
+
<link
|
30
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
|
31
|
+
rel="stylesheet"
|
32
|
+
/>
|
33
|
+
<link
|
34
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
|
35
|
+
rel="stylesheet"
|
36
|
+
/>
|
37
|
+
<link
|
38
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
|
39
|
+
rel="stylesheet"
|
40
|
+
/>
|
41
|
+
|
42
|
+
|
43
|
+
<style>
|
44
|
+
body {
|
45
|
+
background-color: white;
|
46
|
+
}
|
47
|
+
|
48
|
+
${CommonHeaderStyles.cssText}
|
49
|
+
</style>
|
50
|
+
|
51
|
+
<div style="height:600px;">
|
52
|
+
<div class="header">
|
53
|
+
<div class="title">
|
54
|
+
${label}
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<div class="filters">
|
58
|
+
<label>Filter</label><input type="text"></input>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<ox-context-page-toolbar class="actions" .context=${{
|
62
|
+
exportable: {
|
63
|
+
// name: i18next.t('title.data-set list'),
|
64
|
+
// data: this.exportHandler.bind(this)
|
65
|
+
},
|
66
|
+
importable: {
|
67
|
+
// handler: this.importHandler.bind(this)
|
68
|
+
},
|
69
|
+
actions: [
|
70
|
+
{
|
71
|
+
title: 'save',
|
72
|
+
// action: this._updateDataSet.bind(this),
|
73
|
+
icon: 'save'
|
74
|
+
},
|
75
|
+
{
|
76
|
+
title: 'copy',
|
77
|
+
// action: this._copyDataSet.bind(this),
|
78
|
+
icon: 'content_copy'
|
79
|
+
},
|
80
|
+
{
|
81
|
+
title: 'delete',
|
82
|
+
// action: this._deleteDataSet.bind(this),
|
83
|
+
icon: 'delete'
|
84
|
+
}
|
85
|
+
],
|
86
|
+
toolbar: false
|
87
|
+
}}
|
88
|
+
|
89
|
+
}> </ox-context-page-toolbar>
|
90
|
+
</div>
|
91
|
+
</div>
|
92
|
+
`
|
93
|
+
|
94
|
+
export const Regular = Template.bind({})
|
95
|
+
Regular.args = {
|
96
|
+
label: 'common header styles'
|
97
|
+
}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
2
|
+
import { CommonHeaderStyles } from '../src/common-header-styles.js'
|
3
|
+
|
4
|
+
import { css, html, render, TemplateResult } from 'lit'
|
5
|
+
|
6
|
+
export default {
|
7
|
+
title: 'common-header-styles-pure',
|
8
|
+
component: 'div',
|
9
|
+
argTypes: {
|
10
|
+
label: { control: 'string' }
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
interface Story<T> {
|
15
|
+
(args: T): TemplateResult
|
16
|
+
args?: Partial<T>
|
17
|
+
argTypes?: Record<string, unknown>
|
18
|
+
}
|
19
|
+
|
20
|
+
interface ArgTypes {
|
21
|
+
label?: string
|
22
|
+
}
|
23
|
+
|
24
|
+
const Template: Story<ArgTypes> = ({ label = '' }: ArgTypes) => html`
|
25
|
+
<link href="/themes/app-theme.css" rel="stylesheet" />
|
26
|
+
<link href="/themes/form-theme.css" rel="stylesheet" />
|
27
|
+
<link
|
28
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
|
29
|
+
rel="stylesheet"
|
30
|
+
/>
|
31
|
+
<link
|
32
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
|
33
|
+
rel="stylesheet"
|
34
|
+
/>
|
35
|
+
<link
|
36
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
|
37
|
+
rel="stylesheet"
|
38
|
+
/>
|
39
|
+
|
40
|
+
|
41
|
+
<style>
|
42
|
+
body {
|
43
|
+
background-color: white;
|
44
|
+
}
|
45
|
+
|
46
|
+
${CommonHeaderStyles.cssText}
|
47
|
+
</style>
|
48
|
+
|
49
|
+
<div style="height:600px;">
|
50
|
+
<div class="header">
|
51
|
+
<div class="title">
|
52
|
+
${label}
|
53
|
+
</div>
|
54
|
+
|
55
|
+
<div class="filters">
|
56
|
+
<div class="filter"><label>Filter</label><input type="text"></input></div>
|
57
|
+
<div class="filter"><label>Filter</label><input type="text"></input></div>
|
58
|
+
<div class="filter"><label>Filter</label><input type="text"></input></div>
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<div class="actions">
|
62
|
+
<div class="textbtn">Action</div>
|
63
|
+
<div class="iconbtn"><md-icon>save</md-icon></div>
|
64
|
+
<div class="iconbtn"><md-icon>delete</md-icon></div>
|
65
|
+
</div>
|
66
|
+
</div>
|
67
|
+
</div>
|
68
|
+
`
|
69
|
+
|
70
|
+
export const Regular = Template.bind({})
|
71
|
+
Regular.args = {
|
72
|
+
label: 'common header styles'
|
73
|
+
}
|