@operato/styles 2.0.0-alpha.0 → 2.0.0-alpha.102

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 (31) hide show
  1. package/.storybook/main.js +3 -0
  2. package/.storybook/server.mjs +8 -0
  3. package/CHANGELOG.md +181 -0
  4. package/dist/src/button-container-styles.js +76 -7
  5. package/dist/src/button-container-styles.js.map +1 -1
  6. package/dist/src/common-grist-styles.js +36 -13
  7. package/dist/src/common-grist-styles.js.map +1 -1
  8. package/dist/src/common-header-styles.js +97 -96
  9. package/dist/src/common-header-styles.js.map +1 -1
  10. package/dist/src/spinner-styles.js +1 -0
  11. package/dist/src/spinner-styles.js.map +1 -1
  12. package/dist/stories/button-container-styles.stories.d.ts +17 -0
  13. package/dist/stories/button-container-styles.stories.js +54 -0
  14. package/dist/stories/button-container-styles.stories.js.map +1 -0
  15. package/dist/stories/common-header-styles-actions.stories.d.ts +22 -0
  16. package/dist/stories/common-header-styles-actions.stories.js +83 -0
  17. package/dist/stories/common-header-styles-actions.stories.js.map +1 -0
  18. package/dist/stories/common-header-styles-pure.stories.d.ts +21 -0
  19. package/dist/stories/common-header-styles-pure.stories.js +60 -0
  20. package/dist/stories/common-header-styles-pure.stories.js.map +1 -0
  21. package/dist/tsconfig.tsbuildinfo +1 -1
  22. package/package.json +18 -5
  23. package/src/button-container-styles.ts +76 -7
  24. package/src/common-grist-styles.ts +36 -13
  25. package/src/common-header-styles.ts +97 -96
  26. package/src/spinner-styles.ts +1 -0
  27. package/stories/button-container-styles.stories.ts +67 -0
  28. package/stories/common-header-styles-actions.stories.ts +97 -0
  29. package/stories/common-header-styles-pure.stories.ts +73 -0
  30. package/themes/app-theme.css +161 -0
  31. 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
- --mdc-icon-size: 24px;
22
+ --md-icon-size: 24px;
24
23
  }
25
24
 
26
25
  [slot='headroom']:empty {
27
26
  padding: 0;
28
27
  }
29
28
 
30
- #sorters mwc-icon,
31
- #modes mwc-icon {
32
- --mdc-icon-size: 18px;
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 > mwc-icon[active] {
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 > mwc-icon:hover {
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: 36px;
81
- height: 36px;
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 mwc-icon {
91
- font-size: 2em;
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
- align-items: center;
45
- gap: var(--gap-intra-filter, 4px);
46
- }
47
-
48
- .header label {
49
- font-weight: bold;
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
- display: flex;
58
- flex-direction: row;
59
- align-items: center;
60
- gap: var(--gap-intra-title, 4px);
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
- color: var(--button-primary-color);
92
- font-size: var(--fontsize-default);
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
- .header .textbtn:hover {
96
- background-color: var(--button-primary-active-background-color);
97
- }
51
+ .filters:empty {
52
+ display: none;
53
+ }
98
54
 
99
- .header .iconbtn {
100
- --mdc-icon-size: 20px;
101
- background-color: var(--theme-white-color);
102
- border: 1px solid rgba(var(--primary-color-rgb), 0.5);
103
- padding: 1px;
104
- color: var(--primary-color);
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
- .header .iconbtn:hover {
108
- background-color: var(--button-primary-active-background-color);
109
- color: var(--theme-white-color);
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
- 'title actions'
106
+ 'actions'
116
107
  'filters';
117
- }
118
108
 
119
- .header .filters {
120
- flex-direction: column;
121
- align-items: start;
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
  `
@@ -14,6 +14,7 @@ export const SpinnerStyles = css`
14
14
  background: var(--oops-spinner-image) 0 0 no-repeat;
15
15
  background-size: 700%;
16
16
  animation: spinner steps(6) 2s infinite both;
17
+ z-index: 10;
17
18
  }
18
19
 
19
20
  #spinner[show] {
@@ -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
+ }