@operato/dataset 2.0.0-alpha.8 → 2.0.0-alpha.81

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 (108) hide show
  1. package/CHANGELOG.md +418 -0
  2. package/demo/favicon.ico +0 -0
  3. package/demo/index.html +349 -0
  4. package/demo/ox-data-ooc-brief-view-test.html +349 -0
  5. package/dist/src/grist-editor/ox-grist-editor-data-item-spec.d.ts +1 -1
  6. package/dist/src/grist-editor/ox-popup-data-item-spec.d.ts +2 -1
  7. package/dist/src/grist-editor/ox-popup-data-item-spec.js +7 -8
  8. package/dist/src/grist-editor/ox-popup-data-item-spec.js.map +1 -1
  9. package/dist/src/ox-data-entry-form.js +49 -37
  10. package/dist/src/ox-data-entry-form.js.map +1 -1
  11. package/dist/src/ox-data-entry-subgroup-form.d.ts +1 -1
  12. package/dist/src/ox-data-entry-subgroup-form.js +2 -0
  13. package/dist/src/ox-data-entry-subgroup-form.js.map +1 -1
  14. package/dist/src/ox-data-entry-view.d.ts +3 -3
  15. package/dist/src/ox-data-entry-view.js +17 -7
  16. package/dist/src/ox-data-entry-view.js.map +1 -1
  17. package/dist/src/ox-data-item-spec.d.ts +1 -1
  18. package/dist/src/ox-data-item-spec.js +6 -6
  19. package/dist/src/ox-data-item-spec.js.map +1 -1
  20. package/dist/src/ox-data-ooc-badge.d.ts +9 -0
  21. package/dist/src/ox-data-ooc-badge.js +67 -0
  22. package/dist/src/ox-data-ooc-badge.js.map +1 -0
  23. package/dist/src/ox-data-ooc-brief-view.d.ts +4 -2
  24. package/dist/src/ox-data-ooc-brief-view.js +9 -111
  25. package/dist/src/ox-data-ooc-brief-view.js.map +1 -1
  26. package/dist/src/ox-data-ooc-correction-part.d.ts +9 -0
  27. package/dist/src/ox-data-ooc-correction-part.js +99 -0
  28. package/dist/src/ox-data-ooc-correction-part.js.map +1 -0
  29. package/dist/src/ox-data-ooc-history.d.ts +10 -0
  30. package/dist/src/ox-data-ooc-history.js +72 -0
  31. package/dist/src/ox-data-ooc-history.js.map +1 -0
  32. package/dist/src/ox-data-ooc-view.d.ts +3 -2
  33. package/dist/src/ox-data-ooc-view.js +7 -90
  34. package/dist/src/ox-data-ooc-view.js.map +1 -1
  35. package/dist/src/ox-data-sample-subgroup-view.d.ts +1 -1
  36. package/dist/src/ox-data-sample-subgroup-view.js +9 -9
  37. package/dist/src/ox-data-sample-subgroup-view.js.map +1 -1
  38. package/dist/src/ox-data-sample-view.d.ts +1 -1
  39. package/dist/src/ox-data-sample-view.js +52 -35
  40. package/dist/src/ox-data-sample-view.js.map +1 -1
  41. package/dist/src/ox-data-summary-view.d.ts +1 -1
  42. package/dist/src/ox-data-summary-view.js +10 -4
  43. package/dist/src/ox-data-summary-view.js.map +1 -1
  44. package/dist/src/types.d.ts +57 -9
  45. package/dist/src/types.js.map +1 -1
  46. package/dist/src/usecase/ccp/ox-input-ccp-limits.d.ts +1 -1
  47. package/dist/src/usecase/qc/ox-input-qc-limits.d.ts +1 -1
  48. package/dist/src/usecase/spc/index.d.ts +1 -0
  49. package/dist/src/usecase/spc/index.js +8 -0
  50. package/dist/src/usecase/spc/index.js.map +1 -0
  51. package/dist/src/usecase/spc/ox-data-use-case-spc.d.ts +7 -0
  52. package/dist/src/usecase/spc/ox-data-use-case-spc.js +102 -0
  53. package/dist/src/usecase/spc/ox-data-use-case-spc.js.map +1 -0
  54. package/dist/src/usecase/spc/ox-input-spc-limits.d.ts +44 -0
  55. package/dist/src/usecase/spc/ox-input-spc-limits.js +193 -0
  56. package/dist/src/usecase/spc/ox-input-spc-limits.js.map +1 -0
  57. package/dist/src/usecase/spc/ox-property-editor-spc-limits.d.ts +6 -0
  58. package/dist/src/usecase/spc/ox-property-editor-spc-limits.js +24 -0
  59. package/dist/src/usecase/spc/ox-property-editor-spc-limits.js.map +1 -0
  60. package/dist/stories/ox-data-entry-form.stories.d.ts +1 -1
  61. package/dist/stories/ox-data-entry-form.stories.js +73 -17
  62. package/dist/stories/ox-data-entry-form.stories.js.map +1 -1
  63. package/dist/stories/ox-data-item-spec.stories.d.ts +1 -1
  64. package/dist/stories/ox-data-item-spec.stories.js +14 -2
  65. package/dist/stories/ox-data-item-spec.stories.js.map +1 -1
  66. package/dist/stories/ox-data-ooc-brief-view.stories.d.ts +1 -1
  67. package/dist/stories/ox-data-ooc-brief-view.stories.js +25 -13
  68. package/dist/stories/ox-data-ooc-brief-view.stories.js.map +1 -1
  69. package/dist/stories/ox-data-ooc-view.stories.d.ts +1 -1
  70. package/dist/stories/ox-data-ooc-view.stories.js +27 -13
  71. package/dist/stories/ox-data-ooc-view.stories.js.map +1 -1
  72. package/dist/stories/ox-data-sample-view.stories.d.ts +1 -1
  73. package/dist/stories/ox-data-sample-view.stories.js +21 -9
  74. package/dist/stories/ox-data-sample-view.stories.js.map +1 -1
  75. package/dist/stories/ox-grist-editor-data-item-spec.stories.d.ts +1 -1
  76. package/dist/stories/ox-grist-editor-data-item-spec.stories.js +66 -54
  77. package/dist/stories/ox-grist-editor-data-item-spec.stories.js.map +1 -1
  78. package/dist/tsconfig.tsbuildinfo +1 -1
  79. package/package.json +39 -26
  80. package/src/grist-editor/ox-popup-data-item-spec.ts +7 -8
  81. package/src/ox-data-entry-form.ts +66 -47
  82. package/src/ox-data-entry-subgroup-form.ts +2 -0
  83. package/src/ox-data-entry-view.ts +18 -7
  84. package/src/ox-data-item-spec.ts +8 -7
  85. package/src/ox-data-ooc-badge.ts +65 -0
  86. package/src/ox-data-ooc-brief-view.ts +10 -121
  87. package/src/ox-data-ooc-correction-part.ts +107 -0
  88. package/src/ox-data-ooc-history.ts +74 -0
  89. package/src/ox-data-ooc-view.ts +7 -92
  90. package/src/ox-data-sample-subgroup-view.ts +16 -17
  91. package/src/ox-data-sample-view.ts +52 -35
  92. package/src/ox-data-summary-view.ts +10 -4
  93. package/src/types.ts +76 -27
  94. package/src/usecase/spc/index.ts +10 -0
  95. package/src/usecase/spc/ox-data-use-case-spc.ts +147 -0
  96. package/src/usecase/spc/ox-input-spc-limits.ts +182 -0
  97. package/src/usecase/spc/ox-property-editor-spc-limits.ts +23 -0
  98. package/stories/ox-data-entry-form.stories.ts +78 -22
  99. package/stories/ox-data-item-spec.stories.ts +14 -2
  100. package/stories/ox-data-ooc-brief-view.stories.ts +26 -15
  101. package/stories/ox-data-ooc-view.stories.ts +28 -15
  102. package/stories/ox-data-sample-view.stories.ts +22 -11
  103. package/stories/ox-grist-editor-data-item-spec.stories.ts +67 -56
  104. package/themes/grist-theme.css +1 -1
  105. package/translations/en.json +1 -0
  106. package/translations/ko.json +1 -0
  107. package/translations/ms.json +142 -70
  108. package/translations/zh.json +146 -75
@@ -0,0 +1,349 @@
1
+ <!doctype html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
6
+ <style>
7
+ body {
8
+ /* box-sizing: border-box; */
9
+ margin: 0;
10
+ padding: 0;
11
+ overflow: hidden;
12
+
13
+ /* This is a font-stack that tries to use the system-default sans-serifs first */
14
+ font-family: Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
15
+ line-height: 1.5;
16
+ -webkit-font-smoothing: antialiased;
17
+ }
18
+
19
+ #app {
20
+ width: 100vw;
21
+ height: 100dvh;
22
+ overflow: auto;
23
+
24
+ display: flex;
25
+ flex-direction: column;
26
+ }
27
+
28
+ #demo {
29
+ flex: 1;
30
+
31
+ display: flex;
32
+ flex-direction: column;
33
+ }
34
+
35
+ @media print {
36
+ #app {
37
+ height: unset;
38
+ }
39
+ }
40
+ </style>
41
+ <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet" />
42
+ <link
43
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
44
+ rel="stylesheet"
45
+ />
46
+ <link
47
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
48
+ rel="stylesheet"
49
+ />
50
+ <link
51
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
52
+ rel="stylesheet"
53
+ />
54
+
55
+ <link href="/themes/app-theme.css" rel="stylesheet" />
56
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
57
+ </head>
58
+
59
+ <body>
60
+ <script type="module">
61
+ import { LitElement, html, css, render } from 'lit'
62
+ import '../dist/src/index.js'
63
+ import '../dist/src/usecase/ccp/index.js'
64
+ import '../dist/src/ox-data-sample-view.js'
65
+
66
+ const dataSet = {
67
+ name: 'sample',
68
+ description: 'sample description',
69
+ type: 'manual',
70
+ useCase: 'CCP',
71
+ dataItems: [
72
+ {
73
+ name: '창고 온도',
74
+ description: '창고 온도는 섭씨 0도 이하로 유지되어야 합니다.',
75
+ sequence: 1,
76
+ tag: 'temp',
77
+ group: '측정데이타',
78
+ type: 'number',
79
+ quota: 1,
80
+ active: true,
81
+ unit: '℃',
82
+ spec: {
83
+ CCP: {
84
+ criticalLimits: {
85
+ minimum: 100,
86
+ maximum: 200
87
+ },
88
+ targetLimits: {
89
+ minimum: 120,
90
+ maximum: 180
91
+ }
92
+ }
93
+ }
94
+ },
95
+ {
96
+ name: '창고 습도',
97
+ description: '창고 습도는 30% 이하로 유지되어야 합니다.',
98
+ sequence: 2,
99
+ tag: 'humid',
100
+ group: '측정데이타',
101
+ type: 'number',
102
+ quota: 5,
103
+ active: true,
104
+ unit: '%',
105
+ spec: {
106
+ CCP: {
107
+ criticalLimits: {
108
+ minimum: 10,
109
+ maximum: 50
110
+ },
111
+ targetLimits: {
112
+ minimum: 20,
113
+ maximum: 40
114
+ }
115
+ }
116
+ }
117
+ },
118
+ {
119
+ name: '육안 검사',
120
+ description: '육안 검사는 포장전 30분 내로 실행되어야 합니다.',
121
+ sequence: 3,
122
+ tag: 'inspection',
123
+ group: '측정데이타',
124
+ type: 'boolean',
125
+ quota: 3,
126
+ active: true,
127
+ spec: {
128
+ CCP: {
129
+ criticalLimits: {
130
+ acceptables: true
131
+ },
132
+ targetLimits: {
133
+ acceptables: true
134
+ }
135
+ }
136
+ }
137
+ },
138
+ {
139
+ name: '품평',
140
+ description: '품평은 최우수/우수/보통/미달을 포함하여 간단히 평가.',
141
+ sequence: 4,
142
+ tag: 'evaluation',
143
+ group: '측정데이타',
144
+ type: 'select',
145
+ options: {
146
+ options: [
147
+ { text: '최우수', value: '최우수' },
148
+ { text: '우수', value: '우수' },
149
+ { text: '보통', value: '보통' },
150
+ { text: '미달', value: '미달' }
151
+ ]
152
+ },
153
+ quota: 3,
154
+ active: true,
155
+ spec: {
156
+ CCP: {
157
+ criticalLimits: {
158
+ acceptables: ['최우수', '우수', '보통']
159
+ },
160
+ targetLimits: {
161
+ acceptables: ['최우수', '우수']
162
+ }
163
+ }
164
+ }
165
+ },
166
+ {
167
+ name: '코멘트',
168
+ description: '특이사항을 기록함.',
169
+ sequence: 4,
170
+ tag: 'comment',
171
+ type: 'string',
172
+ quota: 1,
173
+ active: true
174
+ },
175
+ {
176
+ name: '첨부파일',
177
+ description: '참조 첨부 파일.',
178
+ sequence: 4,
179
+ tag: 'attachment',
180
+ type: 'file',
181
+ quota: 1,
182
+ active: true
183
+ }
184
+ ]
185
+ }
186
+
187
+ var dataSample = {
188
+ name: 'Data Sample Name',
189
+ description: 'Data Sample이 어쩌구 저쩌구 그래서 중요합니다. 당연히 그래야죠.',
190
+ state: 'CORRECTED',
191
+ useCase: 'CCP',
192
+ judgment: {
193
+ temp: {
194
+ ooc: true,
195
+ oos: false
196
+ },
197
+ humid: {
198
+ ooc: false,
199
+ oos: true
200
+ }
201
+ },
202
+ data: {
203
+ temp: [1000, 1023, 1027, 997, 981],
204
+ humid: [20, 23, 21, 26, 27],
205
+ inspection: [true, false, true, false, false],
206
+ evaluation: ['최우수', '보통', '우수', '보통', '최우수'],
207
+ comment: '이것은 코멘트입니다.'
208
+ },
209
+ dataItems: dataSet.dataItems,
210
+ spec: {
211
+ temp: {
212
+ name: '창고 온도',
213
+ description: '창고 온도는 섭씨 0도 이하로 유지되어야 합니다.',
214
+ spec: {
215
+ CCP: {
216
+ criticalLimits: {
217
+ minimum: 100,
218
+ maximum: 200
219
+ },
220
+ targetLimits: {
221
+ minimum: 120,
222
+ maximum: 180
223
+ }
224
+ }
225
+ }
226
+ },
227
+ humid: {
228
+ name: '창고 습도',
229
+ description: '창고 습도는 30% 이하로 유지되어야 합니다.',
230
+ spec: {
231
+ CCP: {
232
+ criticalLimits: {
233
+ minimum: 10,
234
+ maximum: 50
235
+ },
236
+ targetLimits: {
237
+ minimum: 20,
238
+ maximum: 40
239
+ }
240
+ }
241
+ }
242
+ },
243
+ inspection: {
244
+ name: '육안 검사',
245
+ description: '육안 검사는 포장전 30분 내로 실행되어야 합니다.'
246
+ },
247
+ evaluation: {
248
+ name: '품평',
249
+ description: '품평은 최우수/우수/보통/미달을 포함하여 간단히 평가.',
250
+ spec: {
251
+ CCP: {
252
+ criticalLimits: {
253
+ acceptables: ['최우수', '우수', '보통']
254
+ },
255
+ targetLimits: {
256
+ acceptables: ['최우수', '우수']
257
+ }
258
+ }
259
+ }
260
+ },
261
+ comment: {
262
+ name: '코멘트',
263
+ description: '특이사항을 기록함.'
264
+ },
265
+ attachment: {
266
+ name: '첨부파일',
267
+ description: '참조 첨부 파일.'
268
+ }
269
+ },
270
+ collectedAt: Date.now(),
271
+ reviewer: {
272
+ name: '남상혁'
273
+ },
274
+ reviewedAt: Date.now(),
275
+ correctiveInstruction: '바지틀고서 만나오리오. 쿠투추파',
276
+ corrector: {
277
+ name: '남상혁'
278
+ },
279
+ correctedAt: Date.now(),
280
+ correctiveAction: '바지틀고서 만나오리오. 쿠투추파',
281
+ history: [
282
+ {
283
+ user: {
284
+ id: 0,
285
+ name: 'shnam'
286
+ },
287
+ state: 'ISSUED',
288
+ timestamp: Date.now()
289
+ },
290
+ {
291
+ user: {
292
+ id: 0,
293
+ name: 'shnam'
294
+ },
295
+ state: 'REVIEWED',
296
+ comment: '금일 생산한 제품은 전량 폐기합니다',
297
+ timestamp: Date.now()
298
+ },
299
+ {
300
+ user: {
301
+ id: 0,
302
+ name: 'shnam'
303
+ },
304
+ state: 'CORRECTED',
305
+ timestamp: Date.now()
306
+ }
307
+ ]
308
+ }
309
+
310
+ class OxDataSampleViewDemo extends LitElement {
311
+ static styles = [
312
+ css`
313
+ :host {
314
+ display: block;
315
+ }
316
+
317
+ ox-data-sample-view {
318
+ page-break-after: always;
319
+ }
320
+ `
321
+ ]
322
+
323
+ render() {
324
+ return Array(10)
325
+ .fill(null)
326
+ .map(
327
+ () => html`
328
+ <ox-data-sample-view
329
+ .dataSet=${dataSet}
330
+ .dataSample=${dataSample}
331
+ @change=${e => console.log(e.detail)}
332
+ ></ox-data-sample-view>
333
+ `
334
+ )
335
+ }
336
+ }
337
+
338
+ customElements.define('ox-data-sample-view-demo', OxDataSampleViewDemo)
339
+
340
+ setTimeout(() => {
341
+ render(html` <ox-data-sample-view-demo></ox-data-sample-view-demo> `, document.querySelector('#demo'))
342
+ })
343
+ </script>
344
+
345
+ <div id="app">
346
+ <div id="demo"></div>
347
+ </div>
348
+ </body>
349
+ </html>
@@ -0,0 +1,349 @@
1
+ <!doctype html>
2
+ <html lang="en-GB">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
6
+ <style>
7
+ body {
8
+ /* box-sizing: border-box; */
9
+ margin: 0;
10
+ padding: 0;
11
+ overflow: hidden;
12
+
13
+ /* This is a font-stack that tries to use the system-default sans-serifs first */
14
+ font-family: Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
15
+ line-height: 1.5;
16
+ -webkit-font-smoothing: antialiased;
17
+ }
18
+
19
+ #app {
20
+ width: 100vw;
21
+ height: 100dvh;
22
+ overflow: auto;
23
+
24
+ display: flex;
25
+ flex-direction: column;
26
+ }
27
+
28
+ #demo {
29
+ flex: 1;
30
+
31
+ display: flex;
32
+ flex-direction: column;
33
+ }
34
+
35
+ @media print {
36
+ #app {
37
+ height: unset;
38
+ }
39
+ }
40
+ </style>
41
+ <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet" />
42
+ <link
43
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
44
+ rel="stylesheet"
45
+ />
46
+ <link
47
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
48
+ rel="stylesheet"
49
+ />
50
+ <link
51
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
52
+ rel="stylesheet"
53
+ />
54
+
55
+ <link href="/themes/app-theme.css" rel="stylesheet" />
56
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
57
+ </head>
58
+
59
+ <body>
60
+ <script type="module">
61
+ import { LitElement, html, css, render } from 'lit'
62
+ import '../dist/src/index.js'
63
+ import '../dist/src/usecase/ccp/index.js'
64
+ import '../dist/src/ox-data-ooc-brief-view.js'
65
+
66
+ const dataSet = {
67
+ name: 'sample',
68
+ description: 'sample description',
69
+ type: 'manual',
70
+ useCase: 'CCP',
71
+ dataItems: [
72
+ {
73
+ name: '창고 온도',
74
+ description: '창고 온도는 섭씨 0도 이하로 유지되어야 합니다.',
75
+ sequence: 1,
76
+ tag: 'temp',
77
+ group: '측정데이타',
78
+ type: 'number',
79
+ quota: 1,
80
+ active: true,
81
+ unit: '℃',
82
+ spec: {
83
+ CCP: {
84
+ criticalLimits: {
85
+ minimum: 100,
86
+ maximum: 200
87
+ },
88
+ targetLimits: {
89
+ minimum: 120,
90
+ maximum: 180
91
+ }
92
+ }
93
+ }
94
+ },
95
+ {
96
+ name: '창고 습도',
97
+ description: '창고 습도는 30% 이하로 유지되어야 합니다.',
98
+ sequence: 2,
99
+ tag: 'humid',
100
+ group: '측정데이타',
101
+ type: 'number',
102
+ quota: 5,
103
+ active: true,
104
+ unit: '%',
105
+ spec: {
106
+ CCP: {
107
+ criticalLimits: {
108
+ minimum: 10,
109
+ maximum: 50
110
+ },
111
+ targetLimits: {
112
+ minimum: 20,
113
+ maximum: 40
114
+ }
115
+ }
116
+ }
117
+ },
118
+ {
119
+ name: '육안 검사',
120
+ description: '육안 검사는 포장전 30분 내로 실행되어야 합니다.',
121
+ sequence: 3,
122
+ tag: 'inspection',
123
+ group: '측정데이타',
124
+ type: 'boolean',
125
+ quota: 3,
126
+ active: true,
127
+ spec: {
128
+ CCP: {
129
+ criticalLimits: {
130
+ acceptables: true
131
+ },
132
+ targetLimits: {
133
+ acceptables: true
134
+ }
135
+ }
136
+ }
137
+ },
138
+ {
139
+ name: '품평',
140
+ description: '품평은 최우수/우수/보통/미달을 포함하여 간단히 평가.',
141
+ sequence: 4,
142
+ tag: 'evaluation',
143
+ group: '측정데이타',
144
+ type: 'select',
145
+ options: {
146
+ options: [
147
+ { text: '최우수', value: '최우수' },
148
+ { text: '우수', value: '우수' },
149
+ { text: '보통', value: '보통' },
150
+ { text: '미달', value: '미달' }
151
+ ]
152
+ },
153
+ quota: 3,
154
+ active: true,
155
+ spec: {
156
+ CCP: {
157
+ criticalLimits: {
158
+ acceptables: ['최우수', '우수', '보통']
159
+ },
160
+ targetLimits: {
161
+ acceptables: ['최우수', '우수']
162
+ }
163
+ }
164
+ }
165
+ },
166
+ {
167
+ name: '코멘트',
168
+ description: '특이사항을 기록함.',
169
+ sequence: 4,
170
+ tag: 'comment',
171
+ type: 'string',
172
+ quota: 1,
173
+ active: true
174
+ },
175
+ {
176
+ name: '첨부파일',
177
+ description: '참조 첨부 파일.',
178
+ sequence: 4,
179
+ tag: 'attachment',
180
+ type: 'file',
181
+ quota: 1,
182
+ active: true
183
+ }
184
+ ]
185
+ }
186
+
187
+ var dataOoc = {
188
+ name: 'Data Sample Name',
189
+ description: 'Data Sample이 어쩌구 저쩌구 그래서 중요합니다. 당연히 그래야죠.',
190
+ state: 'CORRECTED',
191
+ useCase: 'CCP',
192
+ judgment: {
193
+ temp: {
194
+ ooc: true,
195
+ oos: false
196
+ },
197
+ humid: {
198
+ ooc: false,
199
+ oos: true
200
+ }
201
+ },
202
+ data: {
203
+ temp: [1000, 1023, 1027, 997, 981],
204
+ humid: [20, 23, 21, 26, 27],
205
+ inspection: [true, false, true, false, false],
206
+ evaluation: ['최우수', '보통', '우수', '보통', '최우수'],
207
+ comment: '이것은 코멘트입니다.'
208
+ },
209
+ dataItems: dataSet.dataItems,
210
+ spec: {
211
+ temp: {
212
+ name: '창고 온도',
213
+ description: '창고 온도는 섭씨 0도 이하로 유지되어야 합니다.',
214
+ spec: {
215
+ CCP: {
216
+ criticalLimits: {
217
+ minimum: 100,
218
+ maximum: 200
219
+ },
220
+ targetLimits: {
221
+ minimum: 120,
222
+ maximum: 180
223
+ }
224
+ }
225
+ }
226
+ },
227
+ humid: {
228
+ name: '창고 습도',
229
+ description: '창고 습도는 30% 이하로 유지되어야 합니다.',
230
+ spec: {
231
+ CCP: {
232
+ criticalLimits: {
233
+ minimum: 10,
234
+ maximum: 50
235
+ },
236
+ targetLimits: {
237
+ minimum: 20,
238
+ maximum: 40
239
+ }
240
+ }
241
+ }
242
+ },
243
+ inspection: {
244
+ name: '육안 검사',
245
+ description: '육안 검사는 포장전 30분 내로 실행되어야 합니다.'
246
+ },
247
+ evaluation: {
248
+ name: '품평',
249
+ description: '품평은 최우수/우수/보통/미달을 포함하여 간단히 평가.',
250
+ spec: {
251
+ CCP: {
252
+ criticalLimits: {
253
+ acceptables: ['최우수', '우수', '보통']
254
+ },
255
+ targetLimits: {
256
+ acceptables: ['최우수', '우수']
257
+ }
258
+ }
259
+ }
260
+ },
261
+ comment: {
262
+ name: '코멘트',
263
+ description: '특이사항을 기록함.'
264
+ },
265
+ attachment: {
266
+ name: '첨부파일',
267
+ description: '참조 첨부 파일.'
268
+ }
269
+ },
270
+ collectedAt: Date.now(),
271
+ reviewer: {
272
+ name: '남상혁'
273
+ },
274
+ reviewedAt: Date.now(),
275
+ correctiveInstruction: '바지틀고서 만나오리오. 쿠투추파',
276
+ corrector: {
277
+ name: '남상혁'
278
+ },
279
+ correctedAt: Date.now(),
280
+ correctiveAction: '바지틀고서 만나오리오. 쿠투추파',
281
+ history: [
282
+ {
283
+ user: {
284
+ id: 0,
285
+ name: 'shnam'
286
+ },
287
+ state: 'ISSUED',
288
+ timestamp: Date.now()
289
+ },
290
+ {
291
+ user: {
292
+ id: 0,
293
+ name: 'shnam'
294
+ },
295
+ state: 'REVIEWED',
296
+ comment: '금일 생산한 제품은 전량 폐기합니다',
297
+ timestamp: Date.now()
298
+ },
299
+ {
300
+ user: {
301
+ id: 0,
302
+ name: 'shnam'
303
+ },
304
+ state: 'CORRECTED',
305
+ timestamp: Date.now()
306
+ }
307
+ ]
308
+ }
309
+
310
+ class OxDataOocViewDemo extends LitElement {
311
+ static styles = [
312
+ css`
313
+ :host {
314
+ display: block;
315
+ }
316
+
317
+ ox-data-ooc-brief-view {
318
+ page-break-after: always;
319
+ }
320
+ `
321
+ ]
322
+
323
+ render() {
324
+ return Array(10)
325
+ .fill(null)
326
+ .map(
327
+ () => html`
328
+ <ox-data-ooc-brief-view
329
+ .dataSet=${dataSet}
330
+ .dataOoc=${dataOoc}
331
+ @change=${e => console.log(e.detail)}
332
+ ></ox-data-ooc-brief-view>
333
+ `
334
+ )
335
+ }
336
+ }
337
+
338
+ customElements.define('ox-data-ooc-brief-view-demo', OxDataOocViewDemo)
339
+
340
+ setTimeout(() => {
341
+ render(html` <ox-data-ooc-brief-view-demo></ox-data-ooc-brief-view-demo> `, document.querySelector('#demo'))
342
+ })
343
+ </script>
344
+
345
+ <div id="app">
346
+ <div id="demo"></div>
347
+ </div>
348
+ </body>
349
+ </html>
@@ -5,7 +5,7 @@ import './ox-popup-data-item-spec.js';
5
5
  import { OxGristEditor } from '@operato/data-grist';
6
6
  export declare class OxGristEditorDataItemSpec extends OxGristEditor {
7
7
  private popup?;
8
- get editorTemplate(): import("lit").TemplateResult<1>;
8
+ get editorTemplate(): import("lit-html").TemplateResult<1>;
9
9
  _onclick(e: Event): void;
10
10
  _onkeydown(e: KeyboardEvent): void;
11
11
  openSelector(): Promise<void>;