@operato/dataset 1.0.0-alpha.9 → 1.0.0-beta.10

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 (59) hide show
  1. package/CHANGELOG.md +735 -0
  2. package/demo/index.html +8 -90
  3. package/demo/ox-data-entry-form.html +118 -0
  4. package/demo/ox-data-item-spec.html +152 -0
  5. package/demo/ox-data-ooc-view.html +185 -0
  6. package/demo/ox-data-sample-view.html +150 -0
  7. package/demo/ox-grist-editor-data-item-spec.html +476 -0
  8. package/dist/src/grist-editor/index.d.ts +1 -0
  9. package/dist/src/grist-editor/index.js +7 -0
  10. package/dist/src/grist-editor/index.js.map +1 -0
  11. package/dist/src/grist-editor/ox-grist-editor-data-item-spec.d.ts +11 -0
  12. package/dist/src/grist-editor/ox-grist-editor-data-item-spec.js +77 -0
  13. package/dist/src/grist-editor/ox-grist-editor-data-item-spec.js.map +1 -0
  14. package/dist/src/grist-editor/ox-popup-data-item-spec.d.ts +13 -0
  15. package/dist/src/grist-editor/ox-popup-data-item-spec.js +91 -0
  16. package/dist/src/grist-editor/ox-popup-data-item-spec.js.map +1 -0
  17. package/dist/src/index.d.ts +6 -1
  18. package/dist/src/index.js +6 -1
  19. package/dist/src/index.js.map +1 -1
  20. package/dist/src/ox-data-entry-form.d.ts +1 -24
  21. package/dist/src/ox-data-entry-form.js +52 -26
  22. package/dist/src/ox-data-entry-form.js.map +1 -1
  23. package/dist/src/ox-data-item-spec.d.ts +18 -0
  24. package/dist/src/ox-data-item-spec.js +77 -0
  25. package/dist/src/ox-data-item-spec.js.map +1 -0
  26. package/dist/src/ox-data-ooc-view.d.ts +11 -0
  27. package/dist/src/ox-data-ooc-view.js +75 -0
  28. package/dist/src/ox-data-ooc-view.js.map +1 -0
  29. package/dist/src/ox-data-sample-view copy.d.ts +13 -0
  30. package/dist/src/ox-data-sample-view copy.js +214 -0
  31. package/dist/src/ox-data-sample-view copy.js.map +1 -0
  32. package/dist/src/ox-data-sample-view.d.ts +13 -0
  33. package/dist/src/ox-data-sample-view.js +169 -0
  34. package/dist/src/ox-data-sample-view.js.map +1 -0
  35. package/dist/src/ox-data-use-case.d.ts +16 -0
  36. package/dist/src/ox-data-use-case.js +111 -0
  37. package/dist/src/ox-data-use-case.js.map +1 -0
  38. package/dist/src/types.d.ts +78 -0
  39. package/dist/src/types.js +2 -0
  40. package/dist/src/types.js.map +1 -0
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +20 -12
  43. package/src/grist-editor/index.ts +10 -0
  44. package/src/grist-editor/ox-grist-editor-data-item-spec.ts +92 -0
  45. package/src/grist-editor/ox-popup-data-item-spec.ts +92 -0
  46. package/src/index.ts +6 -1
  47. package/src/ox-data-entry-form.ts +52 -47
  48. package/src/ox-data-item-spec.ts +74 -0
  49. package/src/ox-data-ooc-view.ts +75 -0
  50. package/src/ox-data-sample-view.ts +177 -0
  51. package/src/ox-data-use-case.ts +147 -0
  52. package/src/types.ts +72 -0
  53. package/themes/grist-theme.css +194 -0
  54. package/themes/oops-theme.css +26 -0
  55. package/themes/report-theme.css +47 -0
  56. package/translations/en.json +57 -0
  57. package/translations/ko.json +56 -0
  58. package/translations/ms.json +56 -0
  59. package/translations/zh.json +56 -0
@@ -0,0 +1,147 @@
1
+ import { DataItem, DataItemSpecSet, DataSet, EvaluationResult } from './types'
2
+
3
+ export abstract class OxDataUseCase {
4
+ static registry: { [name: string]: OxDataUseCase } = {}
5
+
6
+ public static registerUseCase(name: string, useCase: OxDataUseCase) {
7
+ OxDataUseCase.registry[name] = useCase
8
+ }
9
+
10
+ public static getUseCaseNames() {
11
+ return Object.keys(OxDataUseCase.registry)
12
+ }
13
+
14
+ public static getUseCases(): OxDataUseCase[] {
15
+ return Object.values(OxDataUseCase.registry)
16
+ }
17
+
18
+ public static getUseCase(name: string): OxDataUseCase | undefined {
19
+ return OxDataUseCase.registry[name]
20
+ }
21
+
22
+ public static elaborateDataItemSpec(dataSet: DataSet, dataItem: DataItem): string {
23
+ if (!dataSet.useCase) {
24
+ return ''
25
+ }
26
+
27
+ const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim())
28
+ const useCases = useCaseNames.map(useCaseName => OxDataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase)
29
+
30
+ var texts = []
31
+
32
+ for (let j = 0; j < useCases.length; j++) {
33
+ const useCase = useCases[j]
34
+ if (!useCase) {
35
+ continue
36
+ }
37
+
38
+ const specs = dataItem.spec?.[dataSet.useCase]
39
+ if (!specs) {
40
+ continue
41
+ }
42
+
43
+ const result = useCase.elaborateUseCaseSpec(dataItem.spec)
44
+ if (!result) {
45
+ continue
46
+ }
47
+
48
+ texts.push(result)
49
+ }
50
+
51
+ return texts.join('\n')
52
+ }
53
+
54
+ public static evaluate(dataSet: DataSet, dataItems: DataItem[], data: any): EvaluationResult | undefined {
55
+ var ooc = false
56
+ var oos = false
57
+
58
+ if (!dataSet.useCase) {
59
+ return { ooc, oos }
60
+ }
61
+
62
+ const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim())
63
+ const useCases = useCaseNames.map(useCaseName => OxDataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase)
64
+
65
+ for (let i = 0; i < dataItems.length; i++) {
66
+ const dataItem = dataItems[i]
67
+ const { active, tag } = dataItem
68
+ if (!active || !tag) {
69
+ continue
70
+ }
71
+
72
+ let values: any | any[] = data[tag]
73
+ if (typeof values === 'undefined') {
74
+ continue // TODO what if in case no value ?
75
+ }
76
+
77
+ if (!(values instanceof Array)) {
78
+ values = [values]
79
+ }
80
+
81
+ for (let j = 0; j < useCases.length; j++) {
82
+ const useCase = useCases[j]
83
+
84
+ const specs = dataItem.spec?.[dataSet.useCase]
85
+ if (!specs) {
86
+ continue
87
+ }
88
+
89
+ const result = useCase?.evaluate(specs, values)
90
+
91
+ if (result) {
92
+ ooc ||= result.ooc
93
+ oos ||= result.oos
94
+ }
95
+ }
96
+ }
97
+
98
+ return { ooc, oos }
99
+ }
100
+
101
+ public static evaluateItem(dataSet: DataSet, dataItem: DataItem, values: any | any[]): EvaluationResult | undefined {
102
+ var ooc = false
103
+ var oos = false
104
+
105
+ if (!dataSet.useCase) {
106
+ return { ooc, oos }
107
+ }
108
+
109
+ const useCaseNames = dataSet.useCase.split(',').map(useCaseName => useCaseName.trim())
110
+ const useCases = useCaseNames.map(useCaseName => OxDataUseCase.getUseCase(useCaseName)).filter(useCase => !!useCase)
111
+
112
+ const { active, tag } = dataItem
113
+ if (!active || !tag) {
114
+ return
115
+ }
116
+
117
+ if (typeof values === 'undefined') {
118
+ return // TODO what if in case no value ?
119
+ }
120
+
121
+ if (!(values instanceof Array)) {
122
+ values = [values]
123
+ }
124
+
125
+ for (let j = 0; j < useCases.length; j++) {
126
+ const useCase = useCases[j]
127
+
128
+ const specs = dataItem.spec?.[dataSet.useCase]
129
+ if (!specs) {
130
+ return
131
+ }
132
+
133
+ const result = useCase?.evaluate(specs, values)
134
+
135
+ if (result) {
136
+ ooc ||= result.ooc
137
+ oos ||= result.oos
138
+ }
139
+ }
140
+
141
+ return { ooc, oos }
142
+ }
143
+
144
+ public abstract evaluate(specs: any, values: any[]): EvaluationResult | undefined
145
+ public abstract elaborateUseCaseSpec(spec: any): string | undefined
146
+ public abstract getSpecification(dataItem: DataItem): DataItemSpecSet
147
+ }
package/src/types.ts ADDED
@@ -0,0 +1,72 @@
1
+ export type SelectOption = { text: string; value: string }
2
+ export type SelectOptions = SelectOption[]
3
+ export type TypeOptions = {
4
+ options?: SelectOptions
5
+ [prop: string]: any
6
+ }
7
+
8
+ export type DataItem = {
9
+ name: string
10
+ description: string
11
+ sequence: number
12
+ tag: string
13
+ type: string
14
+ active: boolean
15
+ options: TypeOptions
16
+ unit: string
17
+ quota: number
18
+ spec: { [useCase: string]: any }
19
+ }
20
+
21
+ export type DataSet = {
22
+ name: string
23
+ description: string
24
+ type: 'manual' | 'automatic'
25
+ useCase: string
26
+ active: boolean
27
+ dataItems: DataItem[]
28
+ spec: { [dataItem: string]: { [useCase: string]: any } }
29
+ }
30
+
31
+ export type DataItemSpec = {
32
+ type: string
33
+ label: string
34
+ name: string
35
+ property?: { [option: string]: any }
36
+ }
37
+
38
+ export type DataItemSpecSet = {
39
+ name: string
40
+ description: string
41
+ help: string
42
+ specs: DataItemSpec[]
43
+ }
44
+
45
+ export type DataSample = {
46
+ name: string
47
+ description: string
48
+ data: any
49
+ spec: any
50
+ quota: number
51
+ workDate: string
52
+ workShift: string
53
+ collectedAt: Date
54
+ }
55
+
56
+ export type DataOocState = 'CREATED' | 'REVIEWED' | 'CORRECTED'
57
+
58
+ export type DataOoc = DataSample & {
59
+ state: DataOocState
60
+ correctiveAction: string
61
+ history: {
62
+ user: {
63
+ id: string
64
+ name: string
65
+ }
66
+ state: DataOocState
67
+ comment: string
68
+ timestamp: number
69
+ }[]
70
+ }
71
+
72
+ export type EvaluationResult = { oos: boolean; ooc: boolean }
@@ -0,0 +1,194 @@
1
+ body {
2
+ --grid-container-border-color: 1px solid rgba(0, 0, 0, 0.09);
3
+ --grid-container-border-width: 1px 0;
4
+
5
+ --grist-background-color: var(--main-section-background-color);
6
+ --grist-title-margin: 0 0 0 10px;
7
+ --grist-title-border: none;
8
+ --grist-title-font: bold 16px var(--theme-font);
9
+ --grist-title-color: var(--secondary-color);
10
+ --grist-title-font: bold 16px var(--theme-font);
11
+ --grist-title-icon-color: var(--primary-color);
12
+ --grist-title-icon-margin: 0 3px 2px 0;
13
+ --grist-title-icon-size: var(--fontsize-default);
14
+ --grist-title-with-grid-padding: 0;
15
+
16
+ --grist-object-editor-font: normal 1em var(--theme-font);
17
+ --grist-object-editor-color: var(--secondary-color);
18
+
19
+ --grist-input-zoom: 1;
20
+ --grist-input-progress-border: 1px solid rgba(255, 255, 255, 0.5);
21
+ --grist-input-progress-background: rgba(121, 110, 110, 0.1);
22
+ --grist-input-progress-bar-background: #4ac5fd;
23
+ --grist-input-progress-bar-color: var(--theme-white-color);
24
+
25
+ --grid-header-background-color: transparent;
26
+ --grid-header-top-border: 2px solid rgba(var(--secondary-color-rgb), 0.7);
27
+ --grid-header-bottom-border: var(--grid-container-border-color);
28
+ --grid-header-border-color: rgba(var(--primary-color-rgb), 0.3);
29
+ --grid-header-padding: var(--padding-default) 0 var(--padding-narrow) var(--padding-default);
30
+ --grid-header-sorter-size: 18px;
31
+ --grid-header-splitter-border: var(--grid-container-border-color);
32
+ --grid-header-splitter-border-hover: 1px solid var(--primary-color);
33
+ --grid-header-color: rgba(var(--secondary-color-rgb), 0.8);
34
+ --grid-header-font: bold var(--fontsize-small) var(--theme-font);
35
+ --grid-header-filter-title-color: var(--primary-text-color);
36
+ --grid-header-filter-title-font: normal 12px var(--theme-font);
37
+ --grid-header-filter-title-icon-color: var(--primary-color);
38
+
39
+ --grid-record-background-color: var(--theme-white-color);
40
+ --grid-record-odd-background-color: rgba(255, 255, 255, 0.4);
41
+ --grid-record-padding: var(--padding-default) 0 var(--padding-default) var(--padding-default);
42
+ --grid-record-color: var(--secondary-color);
43
+ --grid-record-color-hover: var(--primary-color);
44
+ --grid-record-wide-fontsize: var(--fontsize-small);
45
+ --grid-record-selected-background-color: #f1f8e9;
46
+ --grid-record-selected-color: var(--grid-record-color);
47
+ --grid-record-focused-background-color: rgba(var(--primary-color-rgb), 0.2);
48
+ --grid-record-focused-border: 1px solid var(--primary-color);
49
+ --grid-record-focused-cell-background-color: rgba(var(--primary-color-rgb), 0.25);
50
+ --grid-record-focused-cell-border: 1px dashed var(--primary-color);
51
+ --grid-record-focused-color: var(--grid-record-color);
52
+ --grid-record-focused-box-shadow: 0px 2px 0px 0px rgb(0 0 0 / 10%);
53
+ --grid-record-emphasized-background-color: var(--primary-color);
54
+ --grid-record-emphasized-color: var(--theme-white-color);
55
+ --grid-record-editing-background-color: var(--theme-white-color);
56
+ --grid-record-editing-border: 1px dashed rgba(var(--primary-color-rgb), 0.4);
57
+ --grid-record-fontsize: var(--fontsize-large);
58
+ --grid-record-border-bottom: var(--grid-container-border-color);
59
+
60
+ --grid-record-dirty-border-top: 24px solid rgba(var(--primary-color-rgb), 0.6);
61
+ --grid-record-dirty-border-left: 24px solid transparent;
62
+ --grid-record-dirty-icon-font: bold 10px/12px var(--mdc-icon-font, 'Material Icons');
63
+ --grid-record-dirty-icon-size: var(--fontsize-large);
64
+ --grid-record-dirty-color: var(--theme-white-color);
65
+
66
+ --grid-footer-background-color: transparent;
67
+ --grid-footer-font-size: var(--fontsize-default);
68
+ --grid-footer-color: var(--secondary-color);
69
+ --grid-footer-limit-color: rgba(var(--secondary-color-rgb), 0.6);
70
+ --grid-footer-inactive-color: var(--grid-footer-limit-color);
71
+ --grid-footer-padding: var(--padding-default) var(--padding-narrow);
72
+
73
+ --data-list-background-color: var(--main-section-background-color);
74
+ --data-list-item-margin: var(--margin-default) 0 var(--margin-default) var(--margin-wide);
75
+ --data-list-item-padding: var(--padding-default) var(--padding-wide);
76
+ --data-list-item-border-bottom: var(--grid-container-border-color);
77
+ --data-list-item-name-font: bold 1em/1em var(--theme-font);
78
+ --data-list-item-name-color: var(--secondary-color);
79
+ --data-list-item-disc-font: normal 0.9em/1em var(--theme-font);
80
+ --data-list-item-disc-color: var(--secondary-text-color);
81
+ --data-list-item-etc-label-font: bold 1em/1em var(--theme-font);
82
+ --data-list-item-etc-font: normal 0.8em/1em var(--theme-font);
83
+ --data-list-item-etc-color: #585858;
84
+ --data-list-item-icon-font: normal 1em/1em;
85
+ --data-list-item-icon-color: var(--secondary-text-color);
86
+ --data-list-selected-background-color: var(--grid-record-selected-background-color);
87
+ --data-list-fab-position-horizontal: 15px;
88
+ --data-list-fab-position-vertical: 15px;
89
+ --data-list-fab-color: var(--primary-color);
90
+ --data-list-fab-shadow: var(--box-shadow);
91
+
92
+ --data-card-background-color: var(--main-section-background-color);
93
+ --data-card-record-card-background-color: var(--theme-white-color);
94
+ --data-card-record-card-border: var(--border-dark-color);
95
+ --data-card-record-card-border-hover: 1px solid var(--primary-color);
96
+ --data-card-record-card-boxshadow-hover: 1px 1px 2px 1px rgba(0, 0, 0, 0.15);
97
+ --data-card-record-card-selected-border: 1px solid var(--primary-color);
98
+ --data-card-record-card-border-radius: var(--border-radius);
99
+ --data-card-item-margin: var(--margin-default) 0 var(--margin-default) var(--margin-wide);
100
+ --data-card-item-padding: var(--padding-default) var(--padding-wide);
101
+ --data-card-item-border-bottom: var(--grid-container-border-color);
102
+ --data-card-item-name-font: bold 1.2em/1em var(--theme-font);
103
+ --data-card-item-name-color: var(--secondary-text-color);
104
+ --data-card-item-name-label-font: normal 0.65em/0.8em var(--theme-font);
105
+ --data-card-item-name-label-color: rgba(var(--secondary-color-rgb), 0.8);
106
+ --data-card-item-disc-font: normal 0.9em/1em var(--theme-font);
107
+ --data-card-item-disc-color: var(--primary-color);
108
+ --data-card-item-etc-label-font: normal 1em/1em var(--theme-font);
109
+ --data-card-item-etc-font: bold 0.8em/1em var(--theme-font);
110
+ --data-card-item-etc-color: var(--secondary-color);
111
+ --data-card-item-icon-font: normal 1em/1em;
112
+ --data-card-item-icon-color: var(--secondary-text-color);
113
+ --data-card-item-btn-border: var(--border-dark-color);
114
+ --data-card-item-btn-border-radius: var(--border-radius);
115
+ --data-card-item-btn-padding: var(--padding-narrow);
116
+ --data-card-selected-background-color: var(--grid-record-selected-background-color);
117
+ --data-card-fab-position-horizontal: 15px;
118
+ --data-card-fab-position-vertical: 15px;
119
+ --data-card-fab-color: var(--primary-color);
120
+ --data-card-fab-shadow: var(--box-shadow);
121
+ --data-card-template: repeat(3, minmax(auto, 100%));
122
+ --data-card-thumbnail-height: 140px;
123
+ --data-card-thumbnail-border-bottom: var(--border-dark-color);
124
+ --data-card-attachimg-height: 70px;
125
+
126
+ --record-view-background-color: var(--main-section-background-color);
127
+ --record-view-gap: var(--margin-narrow) 0;
128
+ --record-view-padding: var(--padding-default);
129
+ --record-view-label-font: bold 15px var(--theme-font);
130
+ --record-view-label-color: var(--secondary-color);
131
+ --record-view-label-icon-size: var(--fontsize-small);
132
+ --record-view-font: normal 15px var(--theme-font);
133
+ --record-view-color: var(--secondary-color);
134
+ --record-view-focus-color: var(--primary-color);
135
+ --record-view-border-bottom: 1px solid rgba(0, 0, 0, 0.1);
136
+ --record-view-edit-border-bottom: 2px solid var(--primary-color);
137
+ --record-view-item-padding: var(--padding-default);
138
+
139
+ --record-view-footer-background: #586272;
140
+ --record-view-footer-button-border: 1px solid rgba(0, 0, 0, 0.3);
141
+ --record-view-footer-button-border-width: 0 0 0 1px;
142
+ --record-view-footer-button-font: 17px;
143
+ --record-view-footer-button-color: var(--theme-white-color);
144
+ --record-view-footer-iconbutton-size: 35px;
145
+ --record-view-footer-focus-background: var(--primary-color);
146
+
147
+ --ox-grist-padding: var(--padding-default) var(--padding-default) 0 var(--padding-default);
148
+ }
149
+
150
+ @media print {
151
+ body {
152
+ --grist-input-zoom: 0.7;
153
+ }
154
+ }
155
+
156
+ @media only screen and (max-width: 460px) {
157
+ body {
158
+ --record-view-label-font: bold 15px/32px var(--theme-font);
159
+ --record-view-font: normal 15px/32px var(--theme-font);
160
+ --data-card-template: repeat(1, minmax(auto, 100%));
161
+ --ox-grist-padding: 0;
162
+ }
163
+ }
164
+ @media (min-width: 461px) and (max-width: 700px) {
165
+ body {
166
+ --data-card-template: repeat(2, minmax(auto, 100%));
167
+ --ox-grist-padding: 0;
168
+ }
169
+ }
170
+ @media (min-width: 461px) and (max-width: 1024px) {
171
+ body {
172
+ --data-card-create-form-padding: 7px;
173
+ }
174
+ }
175
+ @media (min-width: 1025px) and (max-width: 1400px) {
176
+ body {
177
+ --data-card-template: repeat(4, minmax(auto, 100%));
178
+ }
179
+ }
180
+ @media (min-width: 1401px) and (max-width: 1800px) {
181
+ body {
182
+ --data-card-template: repeat(5, minmax(auto, 100%));
183
+ }
184
+ }
185
+ @media (min-width: 1801px) and (max-width: 2200px) {
186
+ body {
187
+ --data-card-template: repeat(6, minmax(auto, 100%));
188
+ }
189
+ }
190
+ @media only screen and (min-width: 2201px) {
191
+ body {
192
+ --data-card-template: repeat(7, minmax(auto, 100%));
193
+ }
194
+ }
@@ -0,0 +1,26 @@
1
+ body {
2
+ /* oops spinner style */
3
+
4
+ --oops-spinner-image: url(/assets/images/spinner.png);
5
+
6
+ /* oops note style */
7
+ --oops-note-icon-font: normal 24px var(--mdc-icon-font, 'Material Icons');
8
+ --oops-note-icon-color: rgba(var(--secondary-color-rgb), 0.3);
9
+ --oops-note-icon-border: 2px solid rgba(var(--secondary-color-rgb), 0.3);
10
+ --oops-note-icon-border-radius: 50px;
11
+ --oops-note-icon-padding: var(--padding-default);
12
+ --oops-note-title-margin: 7px 0 2px 0;
13
+ --oops-note-title-font: bold 14px var(--theme-font);
14
+ --oops-note-title-color: var(--secondary-color);
15
+ --oops-note-description-font: normal 12px var(--theme-font);
16
+ --oops-note-description-color: var(--primary-color);
17
+ }
18
+ @media only screen and (max-width: 460px) {
19
+ body {
20
+ --oops-note-icon-padding: var(--padding-narrow);
21
+ --oops-note-icon-font: normal 18px var(--mdc-icon-font, 'Material Icons');
22
+ --oops-note-title-font: bold 13px var(--theme-font);
23
+ --oops-note-title-margin: var(--margin-narrow) 0 2px 0;
24
+ --oops-note-description-font: normal 0px var(--theme-font);
25
+ }
26
+ }
@@ -0,0 +1,47 @@
1
+ body {
2
+ --report-background-color: var(--main-section-background-color);
3
+ --report-padding: 15px;
4
+ --report-title-margin: 0 0 0 10px;
5
+ --report-title-border: none;
6
+ --report-title-color: var(--secondary-color);
7
+ --report-title-icon-color: var(--primary-color);
8
+ --report-title-icon-margin: 0 3px 2px 0;
9
+ --report-title-icon-size: 14px;
10
+ --report-title-with-grid-padding: 0;
11
+ --report-component-border-radius: var(--border-radius);
12
+
13
+ --report-header-background-color: rgba(var(--primary-color-rgb), 0.05);
14
+ --report-header-border: 1px solid var(--report-header-border-color);
15
+ --report-header-border-color: rgba(var(--primary-color-rgb), 0.3);
16
+ --report-header-padding: 5px 0 5px 5px;
17
+ --report-header-color: var(--secondary-text-color);
18
+ --report-header-font: normal 1em/1.5 var(--theme-font);
19
+ --report-header-fontsize: 13px;
20
+
21
+ --report-record-background-color: #fff;
22
+ --report-record-odd-background-color: #f6f6f6;
23
+ --report-record-field-padding: 7px 10px;
24
+ --report-record-field-border-bottom: 1px solid rgba(0, 0, 0, 0.1);
25
+ --report-record-wide-fontsize: 13px;
26
+ --report-record-focused-background-color: #ffde3b47;
27
+ --report-record-focused-border: 1px dashed rgba(0, 0, 0, 0.5);
28
+
29
+ --report-totalized-background-color: #efefef;
30
+ --report-totalized-border: 1px solid rgba(0, 0, 0, 0.1);
31
+ --report-totalized-color: var(--secondary-text-color);
32
+
33
+ --report-grouped-background-color: #607d8bbf;
34
+ --report-grouped-border: 1px solid rgba(0, 0, 0, 0.2);
35
+ --report-grouped-color: #fff;
36
+ }
37
+
38
+ @media print {
39
+ body {
40
+ --report-header-padding: 5px;
41
+ --report-record-field-padding: 5px;
42
+ --report-record-wide-fontsize: 10px;
43
+ --report-grouped-background-color: #d7d7d7;
44
+ --report-grouped-color: #000;
45
+ --report-totalized-color: #000;
46
+ }
47
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "button.corrected": "corrected",
3
+ "button.reviewed": "reviewed",
4
+ "field.appliance": "appliance",
5
+ "field.collected_at": "collected at",
6
+ "field.corrective-action": "corrective action",
7
+ "field.corrector": "corrector",
8
+ "field.corrected-at": "corrected at",
9
+ "field.data": "data",
10
+ "field.data-sample": "data sample",
11
+ "field.data-set": "data set",
12
+ "field.device-id": "device id",
13
+ "field.entry-role": "entry role",
14
+ "field.entry-type": "entry type",
15
+ "field.entry-view": "entry view",
16
+ "field.hidden": "hidden",
17
+ "field.latest-collected-at": "latest collected at",
18
+ "field.monitor-type": "monitor type",
19
+ "field.monitor-view": "monitor view",
20
+ "field.netmask": "network mask",
21
+ "field.next-schedule": "next schedule",
22
+ "field.oos": "out of critical limit",
23
+ "field.ooc": "out of control limit",
24
+ "field.options": "options",
25
+ "field.partition-keys": "partition keys",
26
+ "field.prev-schedule": "previous schedule",
27
+ "field.quota": "sampling #",
28
+ "field.raw-data": "raw data",
29
+ "field.ref-by": "ref. by",
30
+ "field.report-type": "report type",
31
+ "field.report-view": "report view",
32
+ "field.serial-no": "serial #",
33
+ "field.spec": "spec",
34
+ "field.state": "state",
35
+ "field.supervisory-role": "supervisory role",
36
+ "field.tag": "tag name",
37
+ "field.unit": "unit",
38
+ "field.use-case": "use case",
39
+ "field.work-date": "work date",
40
+ "field.work-shift": "work shift",
41
+ "text.automatically collected": "automatically collected",
42
+ "text.data sample created successfully": "a data sample created successfully",
43
+ "text.data ooc updated successfully": "a data ooc updated successfully",
44
+ "text.manually collected": "manually collected",
45
+ "title.data-entry-form": "data entry form",
46
+ "title.data-entry list": "data entry list",
47
+ "title.data-item list": "data item list",
48
+ "title.data-monitor-view": "data monitor view",
49
+ "title.data-report-view": "data report view",
50
+ "title.data-ooc list": "data OOC list",
51
+ "title.data-ooc view": "data OOC view",
52
+ "title.data-sample list": "data sample list",
53
+ "title.data-sample view": "data sample view",
54
+ "title.data-sensor list": "data sensor list",
55
+ "title.data-set list": "data set list",
56
+ "title.edit code": "edit code"
57
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "button.corrected": "조치완료",
3
+ "button.reviewed": "검토완료",
4
+ "field.appliance": "어플라이언스",
5
+ "field.collected_at": "수집일시",
6
+ "field.corrective-action": "조치 활동",
7
+ "field.corrector": "조치자",
8
+ "field.corrected-at": "조치 시간",
9
+ "field.data": "데이타",
10
+ "field.data-sample": "데이타 샘플",
11
+ "field.data-set": "데이타셋",
12
+ "field.device-id": "디바이스 아이디",
13
+ "field.entry-role": "입력담당 역할",
14
+ "field.entry-type": "입력용 화면종류",
15
+ "field.entry-view": "입력용 화면",
16
+ "field.hidden": "숨기기",
17
+ "field.latest-collected-at": "최근 수집 시간",
18
+ "field.monitor-type": "모니터용 화면종류",
19
+ "field.monitor-view": "모니터용 화면",
20
+ "field.netmask": "네트워크마스크",
21
+ "field.next-schedule": "다음 수집계획",
22
+ "field.oos": "허용한계 이탈여부",
23
+ "field.ooc": "관리한계 이탈여부",
24
+ "field.options": "선택옵션",
25
+ "field.partition-keys": "파티션 키",
26
+ "field.prev-schedule": "이전 수집계획",
27
+ "field.quota": "샘플수",
28
+ "field.raw-data": "데이타 원본",
29
+ "field.ref-by": "참조아이템",
30
+ "field.report-type": "리포트용 화면종류",
31
+ "field.report-view": "리포트용 화면",
32
+ "field.serial-no": "시리얼번호",
33
+ "field.spec": "명세",
34
+ "field.state": "상태",
35
+ "field.supervisory-role": "관리자 역할",
36
+ "field.tag": "태그이름",
37
+ "field.unit": "단위",
38
+ "field.use-case": "사용 사례",
39
+ "field.work-date": "작업기준일",
40
+ "field.work-shift": "교대근무조",
41
+ "text.automatically collected": "자동 수집",
42
+ "text.data sample created successfully": "데이타 샘플이 성공적으로 생성되었습니다",
43
+ "text.data ooc updated successfully": "이탈데이타 내용이 수정되었습니다",
44
+ "text.manually collected": "수동 수집",
45
+ "title.data-entry-form": "데이타 입력",
46
+ "title.data-item list": "데이타 아이템 조회",
47
+ "title.data-monitor-view": "데이타 모니터",
48
+ "title.data-report-view": "데이타 리포트",
49
+ "title.data-ooc list": "데이타 이탈점 조회",
50
+ "title.data-ooc view": "데이타 이탈점 상세",
51
+ "title.data-sample list": "데이타 샘플 조회",
52
+ "title.data-sample view": "데이타 샘플 상세",
53
+ "title.data-sensor list": "데이타 센서 조회",
54
+ "title.data-set list": "데이타 셋 조회",
55
+ "title.edit code": "코드 편집"
56
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "button.corrected": "corrected",
3
+ "button.reviewed": "reviewed",
4
+ "field.appliance": "appliance",
5
+ "field.collected_at": "collected at",
6
+ "field.corrective-action": "corrective action",
7
+ "field.corrector": "corrector",
8
+ "field.corrected-at": "corrected at",
9
+ "field.data": "data",
10
+ "field.data-sample": "data sample",
11
+ "field.data-set": "data set",
12
+ "field.device-id": "device id",
13
+ "field.entry-role": "entry role",
14
+ "field.entry-type": "entry type",
15
+ "field.entry-view": "entry view",
16
+ "field.latest-collected-at": "latest collected at",
17
+ "field.monitor-type": "monitor type",
18
+ "field.monitor-view": "monitor view",
19
+ "field.netmask": "network mask",
20
+ "field.next-schedule": "next schedule",
21
+ "field.oos": "out of critical limit",
22
+ "field.ooc": "out of control limit",
23
+ "field.options": "options",
24
+ "field.hidden": "hidden",
25
+ "field.partition-keys": "partition keys",
26
+ "field.prev-schedule": "previous schedule",
27
+ "field.quota": "sampling #",
28
+ "field.raw-data": "raw data",
29
+ "field.ref-by": "ref. by",
30
+ "field.report-type": "report type",
31
+ "field.report-view": "report view",
32
+ "field.serial-no": "serial #",
33
+ "field.spec": "spec",
34
+ "field.state": "keadaan",
35
+ "field.supervisory-role": "supervisory role",
36
+ "field.tag": "tag name",
37
+ "field.unit": "unit",
38
+ "field.use-case": "use case",
39
+ "field.work-date": "work date",
40
+ "field.work-shift": "work shift",
41
+ "text.automatically collected": "automatically collected",
42
+ "text.data sample created successfully": "a data sample created successfully",
43
+ "text.data ooc updated successfully": "a data ooc updated successfully",
44
+ "text.manually collected": "manually collected",
45
+ "title.data-entry-form": "data entry form",
46
+ "title.data-item list": "data item list",
47
+ "title.data-monitor-view": "data monitor view",
48
+ "title.data-report-view": "data report view",
49
+ "title.data-ooc list": "data OOC list",
50
+ "title.data-ooc view": "data OOC view",
51
+ "title.data-sample list": "data sample list",
52
+ "title.data-sample view": "data sample view",
53
+ "title.data-sensor list": "data sensor list",
54
+ "title.data-set list": "data set list",
55
+ "title.edit code": "edit code"
56
+ }