@operato/grist-editor 1.0.0-alpha.9 → 1.0.0-beta.39

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 (87) hide show
  1. package/.storybook/main.js +2 -2
  2. package/.storybook/server.mjs +4 -4
  3. package/LICENSE +2 -2
  4. package/README.md +29 -9
  5. package/dist/src/index.js +15 -1
  6. package/package.json +36 -26
  7. package/src/index.ts +18 -0
  8. package/src/ox-grist-editor-crontab.ts +62 -0
  9. package/src/ox-grist-editor-duration.ts +62 -0
  10. package/src/{parameters/parameters-editor.ts → ox-grist-editor-parameters.ts} +14 -27
  11. package/src/ox-grist-editor-partition-keys.ts +86 -0
  12. package/src/ox-grist-editor-value-map.ts +86 -0
  13. package/src/ox-grist-renderer-crontab.ts +31 -0
  14. package/src/{parameters/parameters-editor-builder.ts → ox-parameters-builder.ts} +6 -10
  15. package/src/ox-popup-crontab-input.ts +75 -0
  16. package/src/ox-popup-duration-input.ts +75 -0
  17. package/src/{parameters/parameters-editor-popup.ts → ox-popup-parameters-builder.ts} +10 -9
  18. package/src/ox-popup-partition-keys-input.ts +97 -0
  19. package/src/ox-popup-value-map-input.ts +102 -0
  20. package/stories/ox-grist-editor-crontab.stories.ts +429 -0
  21. package/themes/app-theme.css +142 -0
  22. package/themes/form-theme.css +75 -0
  23. package/themes/grist-theme.css +194 -0
  24. package/themes/oops-theme.css +26 -0
  25. package/themes/report-theme.css +47 -0
  26. package/translations/en.json +3 -0
  27. package/translations/ko.json +3 -0
  28. package/translations/ms.json +3 -0
  29. package/translations/zh.json +3 -0
  30. package/web-dev-server.config.mjs +9 -8
  31. package/web-test-runner.config.mjs +7 -19
  32. package/.editorconfig +0 -29
  33. package/CHANGELOG.md +0 -11
  34. package/demo/data-grist-test.html +0 -456
  35. package/demo/index.html +0 -33
  36. package/dist/src/code/code-editor.d.ts +0 -6
  37. package/dist/src/code/code-editor.js +0 -50
  38. package/dist/src/code/code-editor.js.map +0 -1
  39. package/dist/src/code/index.d.ts +0 -1
  40. package/dist/src/code/index.js +0 -5
  41. package/dist/src/code/index.js.map +0 -1
  42. package/dist/src/id/id-input.d.ts +0 -19
  43. package/dist/src/id/id-input.js +0 -119
  44. package/dist/src/id/id-input.js.map +0 -1
  45. package/dist/src/id/id-renderer.d.ts +0 -2
  46. package/dist/src/id/id-renderer.js +0 -9
  47. package/dist/src/id/id-renderer.js.map +0 -1
  48. package/dist/src/id/id-selector.d.ts +0 -23
  49. package/dist/src/id/id-selector.js +0 -197
  50. package/dist/src/id/id-selector.js.map +0 -1
  51. package/dist/src/id/index.d.ts +0 -1
  52. package/dist/src/id/index.js +0 -7
  53. package/dist/src/id/index.js.map +0 -1
  54. package/dist/src/index.d.ts +0 -0
  55. package/dist/src/index.js.map +0 -1
  56. package/dist/src/object/index.d.ts +0 -1
  57. package/dist/src/object/index.js +0 -6
  58. package/dist/src/object/index.js.map +0 -1
  59. package/dist/src/object/object-editor.d.ts +0 -18
  60. package/dist/src/object/object-editor.js +0 -152
  61. package/dist/src/object/object-editor.js.map +0 -1
  62. package/dist/src/object/object-selector.d.ts +0 -38
  63. package/dist/src/object/object-selector.js +0 -338
  64. package/dist/src/object/object-selector.js.map +0 -1
  65. package/dist/src/parameters/index.d.ts +0 -1
  66. package/dist/src/parameters/index.js +0 -6
  67. package/dist/src/parameters/index.js.map +0 -1
  68. package/dist/src/parameters/parameters-editor-builder.d.ts +0 -4
  69. package/dist/src/parameters/parameters-editor-builder.js +0 -119
  70. package/dist/src/parameters/parameters-editor-builder.js.map +0 -1
  71. package/dist/src/parameters/parameters-editor-popup.d.ts +0 -13
  72. package/dist/src/parameters/parameters-editor-popup.js +0 -111
  73. package/dist/src/parameters/parameters-editor-popup.js.map +0 -1
  74. package/dist/src/parameters/parameters-editor.d.ts +0 -18
  75. package/dist/src/parameters/parameters-editor.js +0 -106
  76. package/dist/src/parameters/parameters-editor.js.map +0 -1
  77. package/dist/tsconfig.tsbuildinfo +0 -1
  78. package/src/code/code-editor.ts +0 -78
  79. package/src/code/index.ts +0 -6
  80. package/src/id/id-input.ts +0 -135
  81. package/src/id/id-renderer.ts +0 -12
  82. package/src/id/id-selector.ts +0 -189
  83. package/src/id/index.ts +0 -8
  84. package/src/object/index.ts +0 -8
  85. package/src/object/object-editor.ts +0 -162
  86. package/src/object/object-selector.ts +0 -346
  87. package/src/parameters/index.ts +0 -8
@@ -0,0 +1,429 @@
1
+ import '@operato/property-editor/ox-property-editor-checkbox.js'
2
+ import '@operato/property-editor/ox-property-editor-number.js'
3
+ import '@operato/property-editor/ox-property-editor-string.js'
4
+ import '@operato/property-editor/ox-property-editor-options.js'
5
+ import '@operato/property-editor/ox-properties-dynamic-view.js'
6
+ import '@operato/data-grist'
7
+ import '@operato/data-grist/ox-filters-form.js'
8
+ import '@operato/data-grist/ox-sorters-control.js'
9
+ import '@material/mwc-icon'
10
+
11
+ /* set grist-editors */
12
+ import { css, html, LitElement, TemplateResult } from 'lit'
13
+ import { state } from 'lit/decorators.js'
14
+
15
+ import { FetchOption, GristRecord, OxGristRendererJson5, registerEditor, registerRenderer } from '@operato/data-grist'
16
+ import { i18next } from '@operato/i18n'
17
+ import { OxPropertyEditor } from '@operato/property-editor'
18
+ import { CommonGristStyles } from '@operato/styles'
19
+
20
+ import { OxGristEditorCrontab } from '../src/ox-grist-editor-crontab.js'
21
+ import { OxGristEditorDuration } from '../src/ox-grist-editor-duration.js'
22
+ import { OxGristEditorParameters } from '../src/ox-grist-editor-parameters.js'
23
+ import { OxGristEditorPartitionKeys } from '../src/ox-grist-editor-partition-keys.js'
24
+ // import { OxGristRendererCrontab } from '../src/ox-grist-renderer-crontab.js'
25
+ import { OxGristEditorValueMap } from '../src/ox-grist-editor-value-map.js'
26
+
27
+ // import { OxGristEditorJson } from './ox-grist-editor-json.js'
28
+ // import { OxGristRendererCrontab } from '../src/ox-grist-renderer-crontab.js'
29
+
30
+ OxPropertyEditor.register({
31
+ number: 'ox-property-editor-number',
32
+ string: 'ox-property-editor-string',
33
+ boolean: 'ox-property-editor-checkbox',
34
+ options: 'ox-property-editor-options'
35
+ })
36
+
37
+ registerEditor('parameters', OxGristEditorParameters)
38
+ registerEditor('crontab', OxGristEditorCrontab)
39
+ registerEditor('value-map', OxGristEditorValueMap)
40
+ registerEditor('partition-keys', OxGristEditorPartitionKeys)
41
+
42
+ /* register grist renderer/editor for id */
43
+ // registerEditor('resource-id', OxGristEditorResourceId)
44
+ // registerEditor('resource-object', OxGristEditorResourceObject)
45
+ // registerEditor('resource-code', OxGristEditorResourceCode)
46
+ registerEditor('parameters', OxGristEditorParameters)
47
+ registerEditor('value-map', OxGristEditorValueMap)
48
+ registerEditor('partition-keys', OxGristEditorPartitionKeys)
49
+ registerEditor('crontab', OxGristEditorCrontab)
50
+ registerEditor('duration', OxGristEditorDuration)
51
+ // registerEditor('json', OxGristEditorJson)
52
+
53
+ // registerRenderer('resource-id', OxGristRendererResourceId)
54
+ // registerRenderer('resource-object', OxGristRendererResourceObject)
55
+ registerRenderer('parameters', OxGristRendererJson5)
56
+ registerRenderer('value-map', OxGristRendererJson5)
57
+ registerRenderer('partition-keys', OxGristRendererJson5)
58
+ // registerRenderer('crontab', OxGristRendererCrontab)
59
+
60
+ const fetchHandler = async ({ page = 1, limit = 100, sortings = [], filters = [] }: FetchOption) => {
61
+ var total = 10
62
+ var start = (page - 1) * limit
63
+
64
+ return {
65
+ total,
66
+ records: Array(limit * page > total ? total % limit : limit)
67
+ .fill('')
68
+ .map((item, idx) => {
69
+ return {
70
+ id: idx,
71
+ name: `name-${start + idx + 1}`,
72
+ description: `description-${start + idx + 1}`,
73
+ sequence: idx + 1,
74
+ active: true,
75
+ tag: `tag-${idx + 1}`,
76
+ type: idx % 3 === 0 ? 'select' : idx % 3 === 1 ? 'number' : 'string',
77
+ spec: {
78
+ ccp: {
79
+ criticalLimits: 100,
80
+ targetLimits: 200
81
+ },
82
+ qc: {
83
+ criticalLimits: 300,
84
+ targetLimits: true
85
+ }
86
+ },
87
+ options:
88
+ idx % 2 === 0
89
+ ? {
90
+ options: [
91
+ {
92
+ text: 'A',
93
+ value: 'a'
94
+ },
95
+ {
96
+ text: 'B',
97
+ value: 'b'
98
+ }
99
+ ]
100
+ }
101
+ : undefined,
102
+ schedule: '* * * * * *',
103
+ keyvalue: {},
104
+ createdAt: Date.now(),
105
+ updatedAt: Date.now()
106
+ }
107
+ })
108
+ }
109
+ }
110
+
111
+ class GristDemo extends LitElement {
112
+ static styles = [
113
+ CommonGristStyles,
114
+ css`
115
+ :host {
116
+ display: flex;
117
+ flex-direction: column;
118
+ }
119
+
120
+ #tailer {
121
+ display: flex;
122
+ flex-direction: row;
123
+ margin: 0 var(--margin-default);
124
+ }
125
+
126
+ #tailer a {
127
+ padding: 0 var(--padding-default) 0 var(--padding-default);
128
+ margin: 0 var(--margin-narrow);
129
+ border-right: 1px solid rgba(0, 0, 0, 0.1);
130
+ font-size: var(--fontsize-default);
131
+ color: var(--primary-color);
132
+ }
133
+ `
134
+ ]
135
+
136
+ @state() mode: String = 'CARD'
137
+
138
+ get grist() {
139
+ return this.renderRoot.querySelector('ox-grist')
140
+ }
141
+
142
+ config: any = {
143
+ list: { fields: ['name', 'description', 'active'] },
144
+ columns: [
145
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
146
+ {
147
+ type: 'gutter',
148
+ gutterName: 'button',
149
+ icon: 'add',
150
+ handlers: {
151
+ click: 'record-copy'
152
+ }
153
+ },
154
+ { type: 'gutter', gutterName: 'sequence' },
155
+ {
156
+ type: 'gutter',
157
+ gutterName: 'button',
158
+ icon: 'arrow_upward',
159
+ handlers: {
160
+ click: 'move-up'
161
+ }
162
+ },
163
+ {
164
+ type: 'gutter',
165
+ gutterName: 'button',
166
+ icon: 'arrow_downward',
167
+ handlers: {
168
+ click: 'move-down'
169
+ }
170
+ },
171
+ {
172
+ type: 'number',
173
+ name: 'sequence',
174
+ hidden: true
175
+ },
176
+ {
177
+ type: 'string',
178
+ name: 'id',
179
+ hidden: true
180
+ },
181
+ {
182
+ type: 'string',
183
+ name: 'name',
184
+ header: i18next.t('field.name'),
185
+ record: {
186
+ editable: true
187
+ },
188
+ width: 140
189
+ },
190
+ {
191
+ type: 'string',
192
+ name: 'description',
193
+ header: i18next.t('field.description'),
194
+ record: {
195
+ editable: true
196
+ },
197
+ width: 180
198
+ },
199
+ {
200
+ type: 'checkbox',
201
+ name: 'active',
202
+ label: true,
203
+ header: i18next.t('field.active'),
204
+ record: {
205
+ editable: true
206
+ },
207
+ sortable: true,
208
+ width: 60
209
+ },
210
+ {
211
+ type: 'string',
212
+ name: 'tag',
213
+ header: i18next.t('field.tag'),
214
+ record: {
215
+ editable: true
216
+ },
217
+ width: 180
218
+ },
219
+ {
220
+ type: 'select',
221
+ name: 'type',
222
+ header: i18next.t('field.type'),
223
+ record: {
224
+ options: ['', 'number', 'text', 'select', 'boolean', 'file'],
225
+ editable: true
226
+ },
227
+ width: 120
228
+ },
229
+ {
230
+ type: 'crontab',
231
+ name: 'schedule',
232
+ header: i18next.t('field.schedule'),
233
+ record: {
234
+ editable: true
235
+ },
236
+ width: 120
237
+ },
238
+ {
239
+ type: 'partition-keys',
240
+ name: 'keyvalue',
241
+ header: i18next.t('field.keyvalue'),
242
+ record: {
243
+ editable: true,
244
+ options: {
245
+ objectified: true,
246
+ valuetype: 'string'
247
+ }
248
+ },
249
+ width: 120
250
+ },
251
+ {
252
+ type: 'parameters',
253
+ name: 'options',
254
+ header: i18next.t('field.options'),
255
+ record: {
256
+ editable: true,
257
+ renderer: (value: any) => {
258
+ return typeof value === 'string' ? value : typeof value === 'object' ? JSON.stringify(value) : ''
259
+ },
260
+ options: async (value: any, column: any, record: GristRecord, row: GristRecord, field: any) => {
261
+ return {
262
+ name: record.type,
263
+ help: '',
264
+ spec:
265
+ record.type === 'select'
266
+ ? [
267
+ {
268
+ type: 'options',
269
+ name: 'options',
270
+ label: 'options'
271
+ }
272
+ ]
273
+ : [],
274
+ context: this.grist,
275
+ objectified: true /* tell parameters editor not to need to parse */
276
+ }
277
+ }
278
+ },
279
+ width: 120
280
+ },
281
+ {
282
+ type: 'string',
283
+ name: 'unit',
284
+ header: i18next.t('field.unit'),
285
+ record: {
286
+ editable: true
287
+ },
288
+ width: 120
289
+ },
290
+ {
291
+ type: 'number',
292
+ name: 'quota',
293
+ header: i18next.t('field.quota'),
294
+ record: {
295
+ editable: true
296
+ },
297
+ width: 60
298
+ },
299
+ {
300
+ type: 'crontab',
301
+ name: 'spec',
302
+ header: i18next.t('field.spec'),
303
+ record: {
304
+ editable: true,
305
+ options: {
306
+ name,
307
+ objectified: true
308
+ }
309
+ },
310
+ width: 200
311
+ }
312
+ ],
313
+ rows: {
314
+ selectable: {
315
+ multiple: true
316
+ }
317
+ },
318
+ pagination: {
319
+ infinite: true
320
+ },
321
+ sorters: [
322
+ {
323
+ name: 'sequence'
324
+ }
325
+ ]
326
+ }
327
+
328
+ render() {
329
+ const mode = this.mode || 'CARD'
330
+
331
+ return html`
332
+ <ox-grist .config=${this.config} .mode=${mode} auto-fetch .fetchHandler=${fetchHandler}>
333
+ <div id="filters" slot="headroom">
334
+ <ox-filters-form @filters-change=${(e: CustomEvent) => console.log('changed', e.detail)}></ox-filters-form>
335
+ </div>
336
+
337
+ <div slot="headroom" id="headroom">
338
+ <div id="modes">
339
+ <mwc-icon @click=${() => (this.mode = 'GRID')} ?active=${mode == 'GRID'}>view_list</mwc-icon>
340
+ <mwc-icon @click=${() => (this.mode = 'LIST')} ?active=${mode == 'LIST'}>menu</mwc-icon>
341
+ <mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
342
+ </div>
343
+ </div>
344
+ </ox-grist>
345
+ `
346
+ }
347
+ }
348
+
349
+ customElements.define('ox-grist-demo', GristDemo)
350
+
351
+ export default {
352
+ title: 'ox-grist-editor-crontab',
353
+ component: 'ox-grist-editor-crontab',
354
+ argTypes: {}
355
+ }
356
+
357
+ interface Story<T> {
358
+ (args: T): TemplateResult
359
+ args?: Partial<T>
360
+ argTypes?: Record<string, unknown>
361
+ }
362
+
363
+ interface ArgTypes {}
364
+
365
+ const Template: Story<ArgTypes> = ({}: ArgTypes) =>
366
+ html`
367
+ <link href="https://fonts.googleapis.com/css?family=Material+Icons&display=block" rel="stylesheet" />
368
+ <link href="/themes/app-theme.css" rel="stylesheet" />
369
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
370
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
371
+
372
+ <style>
373
+ [slot='headroom'] {
374
+ display: flex;
375
+ flex-direction: row;
376
+ align-items: center;
377
+ padding: var(--padding-default) var(--padding-wide);
378
+ border-top: 2px solid rgba(0, 0, 0, 0.2);
379
+ background-color: var(--theme-white-color);
380
+ box-shadow: var(--box-shadow);
381
+
382
+ --mdc-icon-size: 24px;
383
+ }
384
+ #sorters mwc-icon,
385
+ #modes mwc-icon {
386
+ --mdc-icon-size: 18px;
387
+ }
388
+ #sorters {
389
+ margin-left: auto;
390
+ margin-right: var(--margin-default);
391
+ padding-left: var(--padding-narrow);
392
+ border-bottom: var(--border-dark-color);
393
+ position: relative;
394
+ color: var(--secondary-color);
395
+ font-size: var(--fontsize-default);
396
+ user-select: none;
397
+ }
398
+
399
+ #sorters > * {
400
+ padding: var(--padding-narrow);
401
+ vertical-align: middle;
402
+ }
403
+
404
+ #filters {
405
+ display: flex;
406
+ justify-content: center;
407
+ align-items: center;
408
+ }
409
+
410
+ #filters * {
411
+ margin-right: var(--margin-default);
412
+ }
413
+
414
+ @media only screen and (max-width: 460px) {
415
+ #filters {
416
+ flex-direction: column;
417
+ }
418
+
419
+ #modes {
420
+ display: none;
421
+ }
422
+ }
423
+ </style>
424
+
425
+ <ox-grist-demo mode="LIST"></ox-grist-demo>
426
+ `
427
+
428
+ export const Regular = Template.bind({})
429
+ Regular.args = {}
@@ -0,0 +1,142 @@
1
+ body {
2
+ /* theme color */
3
+ --primary-color-rgb: 130, 105, 96;
4
+ --primary-color: rgb(var(--primary-color-rgb));
5
+ --secondary-color-rgb: 78, 78, 90;
6
+ --secondary-color: rgb(var(--secondary-color-rgb));
7
+ --focus-color: var(--theme-white-color);
8
+ --primary-background-color: var(--secondary-color);
9
+ --secondary-background-color: #283644;
10
+ --main-section-background-color: #f5f2ee;
11
+ --theme-white-color: #fff;
12
+ --theme-black-color: rgba(0, 0, 0, 0.9);
13
+
14
+ --focus-background-color: var(--primary-color);
15
+ --primary-text-color: #3c3938;
16
+ --secondary-text-color: var(--primary-color);
17
+
18
+ --opacity-dark-color: rgba(0, 0, 0, 0.4);
19
+ --opacity-light-color: rgba(255, 255, 255, 0.8);
20
+
21
+ /* status color */
22
+ --status-success-color: #35a24a;
23
+ --status-warning-color: #ee8d03;
24
+ --status-danger-color: #d14946;
25
+ --status-info-color: #398ace;
26
+
27
+ /* common style */
28
+ --border-radius: 4px;
29
+ --border-dark-color: 1px solid rgba(0, 0, 0, 0.15);
30
+ --border-light-color: 1px solid rgba(255, 255, 255, 0.3);
31
+
32
+ --box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.1);
33
+
34
+ --theme-font: 'Noto', Helvetica;
35
+
36
+ --margin-default: 9px;
37
+ --margin-narrow: 4px;
38
+ --margin-wide: 15px;
39
+ --padding-default: var(--margin-default);
40
+ --padding-narrow: var(--margin-narrow);
41
+ --padding-wide: var(--margin-wide);
42
+
43
+ --scrollbar-thumb-color: rgba(57, 78, 100, 0.5);
44
+ --scrollbar-thumb-hover-color: var(--primary-color);
45
+
46
+ --fontsize-default: 14px;
47
+ --fontsize-small: 13px;
48
+ --fontsize-large: 16px;
49
+
50
+ /* app layout style */
51
+ --app-grid-template-area: 'header header header' 'nav main aside' 'nav footer aside';
52
+
53
+ /* title & description style */
54
+ --title-margin: var(--margin-narrow) 0;
55
+ --title-font: bold 24px var(--theme-font);
56
+ --title-text-color: var(--secondary-color);
57
+ --title-font-mobile: bold 20px var(--theme-font);
58
+
59
+ --page-description-margin: var(--margin-narrow) 0 var(--margin-wide) 0;
60
+ --page-description-font: normal var(--fontsize-default) / 1.2rem var(--theme-font);
61
+ --page-description-color: var(--secondary-text-color);
62
+
63
+ --subtitle-padding: 12px 5px 3px 5px;
64
+ --subtitle-font: bold 18px var(--theme-font);
65
+ --subtitle-text-color: var(--primary-color);
66
+ --subtitle-border-bottom: 1px solid var(--primary-color);
67
+
68
+ /* icon style */
69
+ --icon-tiny-size: 24px;
70
+ --icon-default-size: 36px;
71
+ --icon-big-size: 48px;
72
+ --icon-default-color: var(--theme-white-color);
73
+
74
+ /* material design component themes */
75
+ --mdc-theme-on-primary: var(--theme-white-color);
76
+ --mdc-theme-primary: var(--secondary-text-color);
77
+ --mdc-theme-on-secondary: var(--theme-white-color);
78
+ --mdc-theme-secondary: var(--primary-color);
79
+ --mdc-button-outline-color: var(--primary-color);
80
+ --mdc-danger-button-primary-color: var(--status-danger-color);
81
+ --mdc-danger-button-outline-color: var(--status-danger-color);
82
+ --mdc-button-outline-width: 1px;
83
+ --mdc-button-horizontal-padding: 16px;
84
+
85
+ /* button style */
86
+ --button-background-color: #fafbfc;
87
+ --button-background-focus-color: var(--primary-color);
88
+ --button-border: var(--border-dark-color);
89
+ --button-border-radius: var(--border-radius);
90
+ --button-margin: var(--margin-default) var(--margin-default) var(--margin-default) 0;
91
+ --button-padding: var(--padding-default);
92
+ --button-color: var(--secondary-color);
93
+ --button-font: normal 15px var(--theme-font);
94
+ --button-text-transform: capitalize;
95
+ --button-active-box-shadow: 1px 1px 1px 0px rgba(0, 0, 0, 0.2);
96
+ --button-activ-border: 1px solid var(--primary-color);
97
+
98
+ --button-primary-background-color: var(--primary-color);
99
+ --button-primary-active-background-color: var(--status-success-color);
100
+ --button-primary-padding: var(--margin-default) var(--margin-wide);
101
+ --button-primary-color: var(--theme-white-color);
102
+ --button-primary-font: bold 16px var(--theme-font);
103
+
104
+ /* table style */
105
+ --th-padding: var(--padding-default) 0 var(--padding-default) var(--padding-default);
106
+ --th-border-top: 2px solid var(--secondary-color);
107
+ --th-text-transform: capitalize;
108
+ --th-font: bold var(--fontsize-small) var(--theme-font);
109
+ --th-color: rgba(var(--secondary-color-rgb), 0.8);
110
+
111
+ --tr-background-color: var(--theme-white-color);
112
+ --tr-background-odd-color: rgba(255, 255, 255, 0.4);
113
+ --tr-background-hover-color: #e1f5fe;
114
+ --td-border-bottom: 1px solid rgba(0, 0, 0, 0.09);
115
+ --td-padding: var(--padding-default);
116
+ --td-font: normal 13px var(--theme-font);
117
+ --td-color: var(--secondary-color);
118
+
119
+ /* form style */
120
+ --label-font: normal var(--fontsize-default) var(--theme-font);
121
+ --label-color: var(--secondary-color);
122
+ --label-text-transform: capitalize;
123
+ --input-margin: var(--margin-narrow) 0;
124
+ --input-padding: var(--padding-default);
125
+ --input-min-width: 200px;
126
+ --input-font: normal var(--fontsize-default) var(--theme-font);
127
+ --input-hint-font: normal var(--fontsize-small) var(--theme-font);
128
+ --input-hint-color: #666;
129
+ --input-container-max-width: 900px;
130
+ --fieldset-margin: var(--padding-wide) 0;
131
+ --fieldset-padding: 0 var(--padding-wide) var(--padding-wide) var(--padding-wide);
132
+ --legend-padding: var(--padding-default) 0;
133
+ --legend-color: var(--secondary-text-color);
134
+ --legend-font: bold 16px var(--theme-font);
135
+ }
136
+
137
+ @media only screen and (max-width: 460px) {
138
+ body {
139
+ /* subtitle style */
140
+ --subtitle-margin: 0;
141
+ }
142
+ }
@@ -0,0 +1,75 @@
1
+ body {
2
+ --form-border: none;
3
+ --form-margin: var(--margin-wide);
4
+ --form-max-width: 700px;
5
+ --form-multi-column-max-width: 100%;
6
+ --form-sublabel-font: normal 13px var(--theme-font);
7
+ --form-sublabel-color: var(--secondary-color);
8
+ --form-grid-gap: 12px 5px;
9
+
10
+ --legend-padding: var(--padding-default) 0;
11
+ --legend-font: bold 16px var(--theme-font);
12
+ --legend-text-color: var(--secondary-text-color);
13
+ --legend-border-bottom: 1px solid var(--primary-color);
14
+
15
+ --label-padding: 3px 0;
16
+ --label-font: normal 14px var(--theme-font);
17
+ --label-color: var(--secondary-color);
18
+
19
+ --input-field-border: 1px solid rgba(0, 0, 0, 0.2);
20
+ --input-field-border-radius: var(--border-radius);
21
+ --input-field-padding: 2px 9px;
22
+ --input-field-font: normal 14px var(--theme-font);
23
+
24
+ --search-panel-background-color: rgba(0, 0, 0, 0.1);
25
+ --search-panel-search-iconbutton-size: var(--icon-default-size);
26
+ --search-form-icon-color: var(--primary-color);
27
+ --search-form-box-shadow: 0 2px 3px 1px rgba(0, 0, 0, 0.15);
28
+ --search-form-box-padding: 15px 30px 15px 15px;
29
+ --search-form-background-color: #fff;
30
+ --search-form-narrow-background-color: var(--primary-color);
31
+ --search-form-narrow-text-color: #fff;
32
+
33
+ --file-uploader-border: 1px solid rgba(0, 0, 0, 0.1);
34
+ --file-uploader-background-color: var(--main-section-background-color);
35
+ --file-uploader-font: normal 12px/20px var(--theme-font);
36
+ --file-uploader-color: var(--secondary-color);
37
+ --file-uploader-icon-color: var(--primary-color);
38
+ --file-uploader-candrop-background-color: #fffde9;
39
+ --file-uploader-label-padding: 3px 20px;
40
+ --file-uploader-label-border-radius: var(--border-radius);
41
+ --file-uploader-label-background-color: var(--secondary-color);
42
+ --file-uploader-label-font: normal 12px var(--theme-font);
43
+ --file-uploader-label-color: #fff;
44
+ --file-uploader-li-padding: 2px 5px 0px 5px;
45
+ --file-uploader-li-border-bottom: 1px dotted rgba(0, 0, 0, 0.1);
46
+ --file-uploader-li-icon-margin: 2px 0 2px 5px;
47
+ --file-uploader-li-icon-font: normal 15px var(--mdc-icon-font, 'Material Icons');
48
+ --file-uploader-li-icon-focus-color: var(--primary-color);
49
+ }
50
+
51
+ @media screen and (max-width: 480px) {
52
+ body {
53
+ --label-font: normal 15px var(--theme-font);
54
+ }
55
+ }
56
+
57
+ @media (min-width: 481px) and (max-width: 1024px) {
58
+ body {
59
+ --form-margin: 15px 0;
60
+ --form-multi-column-max-width: 100%;
61
+ --form-container-padding: 0 9px 12px 9px;
62
+ --label-font: normal 14px var(--theme-font);
63
+ --input-field-font: normal 15px var(--theme-font);
64
+ --input-field-padding: 3px 5px;
65
+ }
66
+ }
67
+
68
+ @media only screen and (max-width: 925px) {
69
+ body {
70
+ --form-margin: 14px 0;
71
+ --form-multi-column-max-width: 100%;
72
+ --form-container-padding: 0 9px 12px 9px;
73
+ --input-field-padding: 3px 5px;
74
+ }
75
+ }