@operato/dataset 2.0.0-alpha.14 → 2.0.0-alpha.141

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 (104) hide show
  1. package/CHANGELOG.md +763 -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 +7 -7
  19. package/dist/src/ox-data-item-spec.js.map +1 -1
  20. package/dist/src/ox-data-ooc-badge.d.ts +2 -2
  21. package/dist/src/ox-data-ooc-badge.js +8 -4
  22. package/dist/src/ox-data-ooc-badge.js.map +1 -1
  23. package/dist/src/ox-data-ooc-brief-view.d.ts +2 -2
  24. package/dist/src/ox-data-ooc-brief-view.js +1 -2
  25. package/dist/src/ox-data-ooc-brief-view.js.map +1 -1
  26. package/dist/src/ox-data-ooc-correction-part.d.ts +2 -2
  27. package/dist/src/ox-data-ooc-correction-part.js +5 -6
  28. package/dist/src/ox-data-ooc-correction-part.js.map +1 -1
  29. package/dist/src/ox-data-ooc-history.d.ts +2 -2
  30. package/dist/src/ox-data-ooc-history.js +4 -4
  31. package/dist/src/ox-data-ooc-history.js.map +1 -1
  32. package/dist/src/ox-data-ooc-view.d.ts +2 -2
  33. package/dist/src/ox-data-ooc-view.js +1 -2
  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 +12 -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 +25 -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 +24 -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 +9 -8
  85. package/src/ox-data-ooc-badge.ts +8 -4
  86. package/src/ox-data-ooc-brief-view.ts +1 -2
  87. package/src/ox-data-ooc-correction-part.ts +5 -6
  88. package/src/ox-data-ooc-history.ts +4 -4
  89. package/src/ox-data-ooc-view.ts +1 -2
  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 +31 -29
  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 +26 -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 +2 -0
Binary file
@@ -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>;