@dssp/supervision 1.0.0-alpha.26 → 1.0.0-alpha.27

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 (76) hide show
  1. package/dist-client/graphql/building-inspection.js +6 -0
  2. package/dist-client/graphql/building-inspection.js.map +1 -1
  3. package/dist-client/pages/action-plan/action-plan-importer.d.ts +1 -1
  4. package/dist-client/pages/action-plan/action-plan-list-page.d.ts +1 -1
  5. package/dist-client/pages/building-inspection/building-inspection-detail-camera.d.ts +1 -1
  6. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.d.ts +1 -1
  7. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js +25 -11
  8. package/dist-client/pages/building-inspection/building-inspection-detail-checklist.js.map +1 -1
  9. package/dist-client/pages/building-inspection/building-inspection-detail-drawing.d.ts +1 -1
  10. package/dist-client/pages/building-inspection/building-inspection-list.d.ts +5 -0
  11. package/dist-client/pages/building-inspection/building-inspection-list.js +64 -8
  12. package/dist-client/pages/building-inspection/building-inspection-list.js.map +1 -1
  13. package/dist-client/pages/building-inspection/component/daily-worklog-popup.d.ts +17 -0
  14. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js +354 -0
  15. package/dist-client/pages/building-inspection/component/daily-worklog-popup.js.map +1 -0
  16. package/dist-client/pages/building-inspection/component/image-preview-popup.d.ts +1 -1
  17. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.d.ts +1 -1
  18. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js +17 -21
  19. package/dist-client/pages/building-inspection/component/inspection-document/inspection-request-document.js.map +1 -1
  20. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.d.ts +4 -1
  21. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js +45 -19
  22. package/dist-client/pages/building-inspection/component/inspection-document/inspection-result-notification.js.map +1 -1
  23. package/dist-client/pages/building-inspection/component/inspection-document/photo-album-popup.d.ts +1 -1
  24. package/dist-client/pages/building-inspection-grid/building-inspection-grid-detail.d.ts +2 -2
  25. package/dist-client/pages/building-inspection-grid/component/plan-preview-popup.d.ts +1 -1
  26. package/dist-client/pages/checklist/checklist-view.js +28 -3
  27. package/dist-client/pages/checklist/checklist-view.js.map +1 -1
  28. package/dist-client/pages/checklist/inspection-info-popup.d.ts +1 -1
  29. package/dist-client/pages/checklist/inspection-tab-popup.d.ts +1 -1
  30. package/dist-client/pages/checklist-template/checklist-template-list.d.ts +1 -1
  31. package/dist-client/pages/checklist-template/checklist-type-management.d.ts +1 -1
  32. package/dist-client/pages/issue/issue-importer.d.ts +1 -1
  33. package/dist-client/pages/issue/issue-list-page.d.ts +1 -1
  34. package/dist-client/pages/project-report/project-report-importer.d.ts +1 -1
  35. package/dist-client/pages/project-report/project-report-list-page.d.ts +1 -1
  36. package/dist-client/pages/supervisor/supervisor-importer.d.ts +1 -1
  37. package/dist-client/pages/supervisor/supervisor-list-page.d.ts +1 -1
  38. package/dist-client/route.d.ts +1 -1
  39. package/dist-client/tsconfig.tsbuildinfo +1 -1
  40. package/dist-server/service/building-inspection/building-inspection-mutation.js +7 -2
  41. package/dist-server/service/building-inspection/building-inspection-mutation.js.map +1 -1
  42. package/dist-server/service/building-inspection/building-inspection-query.js +7 -1
  43. package/dist-server/service/building-inspection/building-inspection-query.js.map +1 -1
  44. package/dist-server/service/building-inspection/building-inspection-type.d.ts +2 -0
  45. package/dist-server/service/building-inspection/building-inspection-type.js +8 -0
  46. package/dist-server/service/building-inspection/building-inspection-type.js.map +1 -1
  47. package/dist-server/service/building-inspection/index.d.ts +1 -1
  48. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.d.ts +8 -0
  49. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js +98 -0
  50. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-mutation.js.map +1 -0
  51. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.d.ts +12 -0
  52. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js +85 -0
  53. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-query.js.map +1 -0
  54. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.d.ts +12 -0
  55. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js +47 -0
  56. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog-type.js.map +1 -0
  57. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.d.ts +25 -0
  58. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js +98 -0
  59. package/dist-server/service/building-inspection-daily-worklog/building-inspection-daily-worklog.js.map +1 -0
  60. package/dist-server/service/building-inspection-daily-worklog/index.d.ts +5 -0
  61. package/dist-server/service/building-inspection-daily-worklog/index.js +9 -0
  62. package/dist-server/service/building-inspection-daily-worklog/index.js.map +1 -0
  63. package/dist-server/service/checklist/checklist.d.ts +4 -1
  64. package/dist-server/service/checklist/checklist.js +15 -4
  65. package/dist-server/service/checklist/checklist.js.map +1 -1
  66. package/dist-server/service/index.d.ts +2 -1
  67. package/dist-server/service/index.js +6 -2
  68. package/dist-server/service/index.js.map +1 -1
  69. package/dist-server/tsconfig.tsbuildinfo +1 -1
  70. package/package.json +4 -3
  71. package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.d.ts +0 -21
  72. package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.js +0 -327
  73. package/dist-client/pages/building-inspection/component/inspection-document/name-list-upload-popup.js.map +0 -1
  74. package/dist-client/pages/building-inspection/component/photo-album-popup.d.ts +0 -41
  75. package/dist-client/pages/building-inspection/component/photo-album-popup.js +0 -406
  76. package/dist-client/pages/building-inspection/component/photo-album-popup.js.map +0 -1
@@ -6,6 +6,7 @@ import '@material/web/textfield/outlined-text-field.js';
6
6
  import { css, html, LitElement } from 'lit';
7
7
  import { customElement, property } from 'lit/decorators.js';
8
8
  import { ScrollbarStyles } from '@operato/styles';
9
+ import { InspectionMode } from './inspection-request-document';
9
10
  export var InspectionResultStatus;
10
11
  (function (InspectionResultStatus) {
11
12
  InspectionResultStatus["PASS"] = "PASS";
@@ -23,33 +24,34 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
23
24
  this.checklist = {};
24
25
  this.buildingInspection = {};
25
26
  this.project = {};
27
+ this.mode = InspectionMode.VIEW;
26
28
  }
27
29
  render() {
28
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
29
- const today = this._formatDate(new Date());
30
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
31
+ const headerDate = this._formatDate(new Date(((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.inspectionResultUpdatedAt) || Date.now()));
30
32
  return html `
31
33
  <div class="document-container">
32
34
  <div class="document-header">
33
- <div class="document-title">검측결과통보</div>
35
+ <div class="document-title">검측 결과 통보</div>
34
36
  </div>
35
37
 
36
38
  <div class="document-body">
37
- <div class="date-section">${today}</div>
39
+ <div class="date-section">${headerDate}</div>
38
40
 
39
41
  <div class="recipient-section">
40
42
  <div class="recipient-item">
41
43
  <span class="recipient-label">문서 번호:</span>
42
- <span>${((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.inspectionResultDocumentNo) || ''}</span>
44
+ <span>${((_b = this.checklist) === null || _b === void 0 ? void 0 : _b.inspectionResultDocumentNo) || ''}</span>
43
45
  </div>
44
46
  <div class="recipient-item">
45
47
  <span class="recipient-label">수신:</span>
46
- <span>${(_e = (_d = (_c = (_b = this.buildingInspection) === null || _b === void 0 ? void 0 : _b.buildingLevel) === null || _c === void 0 ? void 0 : _c.building) === null || _d === void 0 ? void 0 : _d.buildingComplex) === null || _e === void 0 ? void 0 : _e.constructionCompany}</span>
48
+ <span>${(_f = (_e = (_d = (_c = this.buildingInspection) === null || _c === void 0 ? void 0 : _c.buildingLevel) === null || _d === void 0 ? void 0 : _d.building) === null || _e === void 0 ? void 0 : _e.buildingComplex) === null || _f === void 0 ? void 0 : _f.constructionCompany}</span>
47
49
  </div>
48
50
  </div>
49
51
 
50
52
  <div class="content-section">
51
- 문서번호 ${((_f = this.checklist) === null || _f === void 0 ? void 0 : _f.inspectionRequestDocumentNo) || ''} 검측 요청한 건에 대하여
52
- ${this._formatDate(new Date((_g = this.buildingInspection) === null || _g === void 0 ? void 0 : _g.requestDate))} 검측한 결과를 다음과 같이 통보합니다.
53
+ 문서번호 ${((_g = this.checklist) === null || _g === void 0 ? void 0 : _g.inspectionRequestDocumentNo) || ''} 검측 요청한 건에 대하여
54
+ ${this._formatDate(new Date((_h = this.buildingInspection) === null || _h === void 0 ? void 0 : _h.requestDate))} 검측한 결과를 다음과 같이 통보합니다.
53
55
  </div>
54
56
 
55
57
  <table class="request-table">
@@ -86,7 +88,8 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
86
88
  <md-radio
87
89
  name="inspectionResultType"
88
90
  value="GENERAL"
89
- ?checked=${((_h = this.checklist) === null || _h === void 0 ? void 0 : _h.inspectionResultType) === InspectionResultType.GENERAL}
91
+ ?checked=${((_j = this.checklist) === null || _j === void 0 ? void 0 : _j.inspectionResultType) === InspectionResultType.GENERAL}
92
+ ?disabled=${this.mode === InspectionMode.VIEW}
90
93
  @change=${this._onInspectionTypeChange}
91
94
  ></md-radio>
92
95
  <span>일반</span>
@@ -95,7 +98,8 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
95
98
  <md-radio
96
99
  name="inspectionResultType"
97
100
  value="FOCUS"
98
- ?checked=${((_j = this.checklist) === null || _j === void 0 ? void 0 : _j.inspectionResultType) === InspectionResultType.FOCUS}
101
+ ?checked=${((_k = this.checklist) === null || _k === void 0 ? void 0 : _k.inspectionResultType) === InspectionResultType.FOCUS}
102
+ ?disabled=${this.mode === InspectionMode.VIEW}
99
103
  @change=${this._onInspectionTypeChange}
100
104
  ></md-radio>
101
105
  <span>중점</span>
@@ -104,7 +108,8 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
104
108
  <md-radio
105
109
  name="inspectionResultType"
106
110
  value="CONCEALED_WORK"
107
- ?checked=${((_k = this.checklist) === null || _k === void 0 ? void 0 : _k.inspectionResultType) === InspectionResultType.CONCEALED_WORK}
111
+ ?checked=${((_l = this.checklist) === null || _l === void 0 ? void 0 : _l.inspectionResultType) === InspectionResultType.CONCEALED_WORK}
112
+ ?disabled=${this.mode === InspectionMode.VIEW}
108
113
  @change=${this._onInspectionTypeChange}
109
114
  ></md-radio>
110
115
  <span>매몰부위</span>
@@ -118,7 +123,8 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
118
123
  <input
119
124
  type="text"
120
125
  class="instructions-field"
121
- .value=${((_l = this.checklist) === null || _l === void 0 ? void 0 : _l.inspectionResultMemo) || ''}
126
+ .value=${((_m = this.checklist) === null || _m === void 0 ? void 0 : _m.inspectionResultMemo) || ''}
127
+ ?disabled=${this.mode === InspectionMode.VIEW}
122
128
  @input=${this._onInstructionsChange}
123
129
  placeholder="지시 사항을 입력하세요."
124
130
  />
@@ -140,18 +146,18 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
140
146
  <div class="signature-section">
141
147
  <div class="signature-box">
142
148
  <div class="signature-title">공종별 감리 책임자</div>
143
- <div class="signature-name">${(_o = (_m = this.checklist) === null || _m === void 0 ? void 0 : _m.taskSupervisory) === null || _o === void 0 ? void 0 : _o.name}</div>
149
+ <div class="signature-name">${(_p = (_o = this.checklist) === null || _o === void 0 ? void 0 : _o.taskSupervisory) === null || _p === void 0 ? void 0 : _p.name}</div>
144
150
  <div class="signature-container">
145
- ${((_p = this.checklist) === null || _p === void 0 ? void 0 : _p.taskSupervisorySignature)
151
+ ${((_q = this.checklist) === null || _q === void 0 ? void 0 : _q.taskSupervisorySignature)
146
152
  ? html `<img class="signature-image" src="${this.checklist.taskSupervisorySignature}" alt="서명" />`
147
153
  : ''}
148
154
  </div>
149
155
  </div>
150
156
  <div class="signature-box">
151
157
  <div class="signature-title">총괄 감리 책임자</div>
152
- <div class="signature-name">${(_r = (_q = this.checklist) === null || _q === void 0 ? void 0 : _q.overallSupervisory) === null || _r === void 0 ? void 0 : _r.name}</div>
158
+ <div class="signature-name">${(_s = (_r = this.checklist) === null || _r === void 0 ? void 0 : _r.overallSupervisory) === null || _s === void 0 ? void 0 : _s.name}</div>
153
159
  <div class="signature-container">
154
- ${((_s = this.checklist) === null || _s === void 0 ? void 0 : _s.overallSupervisorySignature)
160
+ ${((_t = this.checklist) === null || _t === void 0 ? void 0 : _t.overallSupervisorySignature)
155
161
  ? html `<img class="signature-image" src="${this.checklist.overallSupervisorySignature}" alt="서명" />`
156
162
  : ''}
157
163
  </div>
@@ -161,11 +167,25 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
161
167
  </div>
162
168
  </div>
163
169
 
164
- <div class="button-container">
165
- <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>
166
- </div>
170
+ ${this.mode === InspectionMode.EDIT
171
+ ? html `
172
+ <div class="button-container">
173
+ <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>
174
+ </div>
175
+ `
176
+ : ''}
167
177
  `;
168
178
  }
179
+ updated() {
180
+ var _a;
181
+ const overall = this._getOverallResult();
182
+ if (((_a = this.checklist) === null || _a === void 0 ? void 0 : _a.inspectionResultStatus) !== overall) {
183
+ this.dispatchEvent(new CustomEvent('inspection-result-change', {
184
+ detail: { inspectionResultStatus: overall },
185
+ bubbles: true
186
+ }));
187
+ }
188
+ }
169
189
  _formatDate(date) {
170
190
  return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`;
171
191
  }
@@ -198,8 +218,10 @@ let InspectionResultNotification = class InspectionResultNotification extends Li
198
218
  bubbles: true
199
219
  }));
200
220
  }
221
+ // 확인 버튼
201
222
  _onConfirm() {
202
223
  this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }));
224
+ history.back();
203
225
  }
204
226
  };
205
227
  InspectionResultNotification.styles = [
@@ -446,6 +468,10 @@ __decorate([
446
468
  property({ type: Object }),
447
469
  __metadata("design:type", Object)
448
470
  ], InspectionResultNotification.prototype, "project", void 0);
471
+ __decorate([
472
+ property({ type: String }),
473
+ __metadata("design:type", String)
474
+ ], InspectionResultNotification.prototype, "mode", void 0);
449
475
  InspectionResultNotification = __decorate([
450
476
  customElement('inspection-result-notification')
451
477
  ], InspectionResultNotification);
@@ -1 +1 @@
1
- {"version":3,"file":"inspection-result-notification.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/inspection-document/inspection-result-notification.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\nimport '@material/web/radio/radio.js'\nimport '@material/web/textfield/outlined-text-field.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ScrollbarStyles } from '@operato/styles'\n\nexport enum InspectionResultStatus {\n PASS = 'PASS', // 합격\n FAIL = 'FAIL' // 불합격\n}\n\nexport enum InspectionResultType {\n GENERAL = 'GENERAL', // 일반\n FOCUS = 'FOCUS', // 중점\n CONCEALED_WORK = 'CONCEALED_WORK' // 매몰부위\n}\n\n@customElement('inspection-result-notification')\nexport class InspectionResultNotification extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: block;\n padding: 20px;\n font-family: 'Noto Sans KR', sans-serif;\n line-height: 1.4;\n overflow-y: auto;\n }\n\n .document-container {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 2px solid #333;\n }\n\n .document-header {\n text-align: center;\n padding: 15px;\n border-bottom: 1px solid #333;\n }\n\n .document-title {\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 10px;\n }\n\n .document-body {\n padding: 20px;\n }\n\n .date-section {\n text-align: right;\n margin-bottom: 20px;\n font-size: 14px;\n }\n\n .recipient-section {\n margin-bottom: 30px;\n }\n\n .recipient-item {\n display: flex;\n margin-bottom: 5px;\n }\n\n .recipient-label {\n font-weight: bold;\n margin-right: 18px;\n }\n\n .content-section {\n margin-bottom: 20px;\n line-height: 1.6;\n }\n\n .request-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n\n .request-table th,\n .request-table td {\n border: 1px solid #333;\n padding: 8px;\n text-align: left;\n }\n\n .request-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n width: 120px;\n }\n\n .radio-group {\n display: flex;\n gap: 20px;\n align-items: center;\n }\n\n .radio-item {\n display: flex;\n align-items: center;\n gap: 5px;\n }\n\n .signature-section {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 15px;\n }\n\n .signature-box {\n display: flex;\n align-items: center;\n gap: 15px;\n text-align: right;\n }\n\n .signature-title {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n min-width: 120px;\n }\n\n .signature-name {\n font-size: 14px;\n color: #333;\n }\n\n .signature-container {\n position: relative;\n min-width: 100px;\n min-height: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .signature-container::after {\n content: '(인)';\n position: absolute;\n bottom: 5px;\n right: 5px;\n font-size: 12px;\n color: #333;\n font-weight: bold;\n z-index: 2;\n }\n\n .signature-image {\n max-width: 140px;\n max-height: 60px;\n width: auto;\n height: auto;\n }\n\n .attachment-section {\n margin-top: 30px;\n margin-bottom: 30px;\n }\n\n .attachment-title {\n font-weight: bold;\n font-size: 14px;\n color: #333;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .attachment-list {\n margin-left: 30px;\n }\n\n .attachment-item {\n margin-bottom: 5px;\n color: #2196f3;\n font-size: 14px;\n line-height: 1.5;\n }\n\n .instructions-field {\n width: 100%;\n max-width: -webkit-fill-available;\n height: 40px;\n border: 1px solid #ddd;\n padding: 10px;\n font-size: 15px;\n border-radius: 5px;\n }\n\n .document-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .signature-container::after {\n content: '(인)';\n position: absolute;\n bottom: 5px;\n right: 5px;\n font-size: 12px;\n color: #333;\n font-weight: bold;\n z-index: 2;\n }\n\n .signature-line {\n border-bottom: 1px solid #333;\n height: 60px;\n margin-bottom: 5px;\n position: relative;\n min-width: 100px;\n }\n\n .signature-label {\n font-size: 12px;\n }\n\n .button-container {\n display: flex;\n justify-content: center;\n margin-top: 20px;\n padding: 15px 0;\n border-top: 1px solid #ddd;\n }\n\n .button-container md-elevated-button {\n background-color: #3498db;\n color: white;\n padding: 12px 30px;\n font-size: 16px;\n font-weight: bold;\n border-radius: 8px;\n }\n\n .document-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n `\n ]\n\n @property({ type: Object }) checklist: any = {}\n @property({ type: Object }) buildingInspection: any = {}\n @property({ type: Object }) project: any = {}\n\n render() {\n const today = this._formatDate(new Date())\n\n return html`\n <div class=\"document-container\">\n <div class=\"document-header\">\n <div class=\"document-title\">검측결과통보</div>\n </div>\n\n <div class=\"document-body\">\n <div class=\"date-section\">${today}</div>\n\n <div class=\"recipient-section\">\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">문서 번호:</span>\n <span>${this.checklist?.inspectionResultDocumentNo || ''}</span>\n </div>\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">수신:</span>\n <span>${this.buildingInspection?.buildingLevel?.building?.buildingComplex?.constructionCompany}</span>\n </div>\n </div>\n\n <div class=\"content-section\">\n 문서번호 ${this.checklist?.inspectionRequestDocumentNo || ''} 검측 요청한 건에 대하여\n ${this._formatDate(new Date(this.buildingInspection?.requestDate))} 검측한 결과를 다음과 같이 통보합니다.\n </div>\n\n <table class=\"request-table\">\n <tr>\n <th>검측 결과</th>\n <td>\n <div class=\"radio-group\">\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultStatus\"\n value=\"PASS\"\n ?checked=${this._getOverallResult() === InspectionResultStatus.PASS}\n disabled\n ></md-radio>\n <span>합격</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultStatus\"\n value=\"FAIL\"\n ?checked=${this._getOverallResult() === InspectionResultStatus.FAIL}\n disabled\n ></md-radio>\n <span>불합격</span>\n </div>\n </div>\n </td>\n </tr>\n <tr>\n <th>검측 종류</th>\n <td>\n <div class=\"radio-group\">\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"GENERAL\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.GENERAL}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>일반</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"FOCUS\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.FOCUS}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>중점</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"CONCEALED_WORK\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.CONCEALED_WORK}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>매몰부위</span>\n </div>\n </div>\n </td>\n </tr>\n <tr>\n <th>지시 사항</th>\n <td>\n <input\n type=\"text\"\n class=\"instructions-field\"\n .value=${this.checklist?.inspectionResultMemo || ''}\n @input=${this._onInstructionsChange}\n placeholder=\"지시 사항을 입력하세요.\"\n />\n </td>\n </tr>\n </table>\n\n <div class=\"document-footer\">\n <div class=\"attachment-section\">\n <div class=\"attachment-title\">첨부 파일</div>\n <div class=\"attachment-list\">\n <div class=\"attachment-item\">시공자의 검측 체크리스트</div>\n ${this._getAttachmentCount() > 0\n ? html`<div class=\"attachment-item\">첨부 사진 ${this._getAttachmentCount()}개</div>`\n : ''}\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div class=\"signature-title\">공종별 감리 책임자</div>\n <div class=\"signature-name\">${this.checklist?.taskSupervisory?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.taskSupervisorySignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.taskSupervisorySignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n <div class=\"signature-box\">\n <div class=\"signature-title\">총괄 감리 책임자</div>\n <div class=\"signature-name\">${this.checklist?.overallSupervisory?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.overallSupervisorySignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.overallSupervisorySignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"button-container\">\n <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>\n </div>\n `\n }\n\n private _formatDate(date: Date): string {\n return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`\n }\n\n private _getAttachmentCount(): number {\n return (\n this.buildingInspection?.checklist?.checklistItems?.reduce((acc, item) => {\n return acc + item.checklistItemAttachmentCount\n }, 0) || 0\n )\n }\n\n private _getOverallResult(): string {\n const hasFailedItems = this.checklist?.checklistItems?.some(item => item.supervisoryConfirmStatus === 'F')\n return hasFailedItems ? InspectionResultStatus.FAIL : InspectionResultStatus.PASS\n }\n\n private _onInspectionTypeChange(e: Event) {\n const target = e.target as any\n this.checklist = {\n ...this.checklist,\n inspectionResultType: target.value\n }\n this.requestUpdate()\n this.dispatchEvent(\n new CustomEvent('inspection-type-change', {\n detail: { inspectionResultType: target.value },\n bubbles: true\n })\n )\n }\n\n private _onInstructionsChange(e: Event) {\n const target = e.target as HTMLInputElement\n this.checklist = {\n ...this.checklist,\n inspectionResultMemo: target.value\n }\n this.requestUpdate()\n this.dispatchEvent(\n new CustomEvent('instructions-change', {\n detail: { inspectionResultMemo: target.value },\n bubbles: true\n })\n )\n }\n\n private _onConfirm() {\n this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }))\n }\n}\n"]}
1
+ {"version":3,"file":"inspection-result-notification.js","sourceRoot":"","sources":["../../../../../client/pages/building-inspection/component/inspection-document/inspection-result-notification.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/button/elevated-button.js'\nimport '@material/web/icon/icon.js'\nimport '@material/web/radio/radio.js'\nimport '@material/web/textfield/outlined-text-field.js'\n\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ScrollbarStyles } from '@operato/styles'\nimport { InspectionMode } from './inspection-request-document'\n\nexport enum InspectionResultStatus {\n PASS = 'PASS', // 합격\n FAIL = 'FAIL' // 불합격\n}\n\nexport enum InspectionResultType {\n GENERAL = 'GENERAL', // 일반\n FOCUS = 'FOCUS', // 중점\n CONCEALED_WORK = 'CONCEALED_WORK' // 매몰부위\n}\n\n@customElement('inspection-result-notification')\nexport class InspectionResultNotification extends LitElement {\n static styles = [\n ScrollbarStyles,\n css`\n :host {\n display: block;\n padding: 20px;\n font-family: 'Noto Sans KR', sans-serif;\n line-height: 1.4;\n overflow-y: auto;\n }\n\n .document-container {\n max-width: 800px;\n margin: 0 auto;\n background: white;\n border: 2px solid #333;\n }\n\n .document-header {\n text-align: center;\n padding: 15px;\n border-bottom: 1px solid #333;\n }\n\n .document-title {\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 10px;\n }\n\n .document-body {\n padding: 20px;\n }\n\n .date-section {\n text-align: right;\n margin-bottom: 20px;\n font-size: 14px;\n }\n\n .recipient-section {\n margin-bottom: 30px;\n }\n\n .recipient-item {\n display: flex;\n margin-bottom: 5px;\n }\n\n .recipient-label {\n font-weight: bold;\n margin-right: 18px;\n }\n\n .content-section {\n margin-bottom: 20px;\n line-height: 1.6;\n }\n\n .request-table {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 20px;\n }\n\n .request-table th,\n .request-table td {\n border: 1px solid #333;\n padding: 8px;\n text-align: left;\n }\n\n .request-table th {\n background-color: #f5f5f5;\n font-weight: bold;\n width: 120px;\n }\n\n .radio-group {\n display: flex;\n gap: 20px;\n align-items: center;\n }\n\n .radio-item {\n display: flex;\n align-items: center;\n gap: 5px;\n }\n\n .signature-section {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 15px;\n }\n\n .signature-box {\n display: flex;\n align-items: center;\n gap: 15px;\n text-align: right;\n }\n\n .signature-title {\n font-size: 14px;\n font-weight: bold;\n color: #333;\n min-width: 120px;\n }\n\n .signature-name {\n font-size: 14px;\n color: #333;\n }\n\n .signature-container {\n position: relative;\n min-width: 100px;\n min-height: 60px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .signature-container::after {\n content: '(인)';\n position: absolute;\n bottom: 5px;\n right: 5px;\n font-size: 12px;\n color: #333;\n font-weight: bold;\n z-index: 2;\n }\n\n .signature-image {\n max-width: 140px;\n max-height: 60px;\n width: auto;\n height: auto;\n }\n\n .attachment-section {\n margin-top: 30px;\n margin-bottom: 30px;\n }\n\n .attachment-title {\n font-weight: bold;\n font-size: 14px;\n color: #333;\n margin-bottom: 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .attachment-list {\n margin-left: 30px;\n }\n\n .attachment-item {\n margin-bottom: 5px;\n color: #2196f3;\n font-size: 14px;\n line-height: 1.5;\n }\n\n .instructions-field {\n width: 100%;\n max-width: -webkit-fill-available;\n height: 40px;\n border: 1px solid #ddd;\n padding: 10px;\n font-size: 15px;\n border-radius: 5px;\n }\n\n .document-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .signature-container::after {\n content: '(인)';\n position: absolute;\n bottom: 5px;\n right: 5px;\n font-size: 12px;\n color: #333;\n font-weight: bold;\n z-index: 2;\n }\n\n .signature-line {\n border-bottom: 1px solid #333;\n height: 60px;\n margin-bottom: 5px;\n position: relative;\n min-width: 100px;\n }\n\n .signature-label {\n font-size: 12px;\n }\n\n .button-container {\n display: flex;\n justify-content: center;\n margin-top: 20px;\n padding: 15px 0;\n border-top: 1px solid #ddd;\n }\n\n .button-container md-elevated-button {\n background-color: #3498db;\n color: white;\n padding: 12px 30px;\n font-size: 16px;\n font-weight: bold;\n border-radius: 8px;\n }\n\n .document-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n `\n ]\n\n @property({ type: Object }) checklist: any = {}\n @property({ type: Object }) buildingInspection: any = {}\n @property({ type: Object }) project: any = {}\n @property({ type: String }) mode: InspectionMode = InspectionMode.VIEW\n\n render() {\n const headerDate = this._formatDate(new Date(this.checklist?.inspectionResultUpdatedAt || Date.now()))\n\n return html`\n <div class=\"document-container\">\n <div class=\"document-header\">\n <div class=\"document-title\">검측 결과 통보</div>\n </div>\n\n <div class=\"document-body\">\n <div class=\"date-section\">${headerDate}</div>\n\n <div class=\"recipient-section\">\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">문서 번호:</span>\n <span>${this.checklist?.inspectionResultDocumentNo || ''}</span>\n </div>\n <div class=\"recipient-item\">\n <span class=\"recipient-label\">수신:</span>\n <span>${this.buildingInspection?.buildingLevel?.building?.buildingComplex?.constructionCompany}</span>\n </div>\n </div>\n\n <div class=\"content-section\">\n 문서번호 ${this.checklist?.inspectionRequestDocumentNo || ''} 검측 요청한 건에 대하여\n ${this._formatDate(new Date(this.buildingInspection?.requestDate))} 검측한 결과를 다음과 같이 통보합니다.\n </div>\n\n <table class=\"request-table\">\n <tr>\n <th>검측 결과</th>\n <td>\n <div class=\"radio-group\">\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultStatus\"\n value=\"PASS\"\n ?checked=${this._getOverallResult() === InspectionResultStatus.PASS}\n disabled\n ></md-radio>\n <span>합격</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultStatus\"\n value=\"FAIL\"\n ?checked=${this._getOverallResult() === InspectionResultStatus.FAIL}\n disabled\n ></md-radio>\n <span>불합격</span>\n </div>\n </div>\n </td>\n </tr>\n <tr>\n <th>검측 종류</th>\n <td>\n <div class=\"radio-group\">\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"GENERAL\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.GENERAL}\n ?disabled=${this.mode === InspectionMode.VIEW}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>일반</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"FOCUS\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.FOCUS}\n ?disabled=${this.mode === InspectionMode.VIEW}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>중점</span>\n </div>\n <div class=\"radio-item\">\n <md-radio\n name=\"inspectionResultType\"\n value=\"CONCEALED_WORK\"\n ?checked=${this.checklist?.inspectionResultType === InspectionResultType.CONCEALED_WORK}\n ?disabled=${this.mode === InspectionMode.VIEW}\n @change=${this._onInspectionTypeChange}\n ></md-radio>\n <span>매몰부위</span>\n </div>\n </div>\n </td>\n </tr>\n <tr>\n <th>지시 사항</th>\n <td>\n <input\n type=\"text\"\n class=\"instructions-field\"\n .value=${this.checklist?.inspectionResultMemo || ''}\n ?disabled=${this.mode === InspectionMode.VIEW}\n @input=${this._onInstructionsChange}\n placeholder=\"지시 사항을 입력하세요.\"\n />\n </td>\n </tr>\n </table>\n\n <div class=\"document-footer\">\n <div class=\"attachment-section\">\n <div class=\"attachment-title\">첨부 파일</div>\n <div class=\"attachment-list\">\n <div class=\"attachment-item\">시공자의 검측 체크리스트</div>\n ${this._getAttachmentCount() > 0\n ? html`<div class=\"attachment-item\">첨부 사진 ${this._getAttachmentCount()}개</div>`\n : ''}\n </div>\n </div>\n\n <div class=\"signature-section\">\n <div class=\"signature-box\">\n <div class=\"signature-title\">공종별 감리 책임자</div>\n <div class=\"signature-name\">${this.checklist?.taskSupervisory?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.taskSupervisorySignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.taskSupervisorySignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n <div class=\"signature-box\">\n <div class=\"signature-title\">총괄 감리 책임자</div>\n <div class=\"signature-name\">${this.checklist?.overallSupervisory?.name}</div>\n <div class=\"signature-container\">\n ${this.checklist?.overallSupervisorySignature\n ? html`<img class=\"signature-image\" src=\"${this.checklist.overallSupervisorySignature}\" alt=\"서명\" />`\n : ''}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n ${this.mode === InspectionMode.EDIT\n ? html`\n <div class=\"button-container\">\n <md-elevated-button @click=${this._onConfirm}> 확인 </md-elevated-button>\n </div>\n `\n : ''}\n `\n }\n\n protected updated() {\n const overall = this._getOverallResult()\n if (this.checklist?.inspectionResultStatus !== overall) {\n this.dispatchEvent(\n new CustomEvent('inspection-result-change', {\n detail: { inspectionResultStatus: overall },\n bubbles: true\n })\n )\n }\n }\n\n private _formatDate(date: Date): string {\n return `${date.getFullYear()}. ${String(date.getMonth() + 1).padStart(2, '0')}. ${String(date.getDate()).padStart(2, '0')}.`\n }\n\n private _getAttachmentCount(): number {\n return (\n this.buildingInspection?.checklist?.checklistItems?.reduce((acc, item) => {\n return acc + item.checklistItemAttachmentCount\n }, 0) || 0\n )\n }\n\n private _getOverallResult(): string {\n const hasFailedItems = this.checklist?.checklistItems?.some(item => item.supervisoryConfirmStatus === 'F')\n return hasFailedItems ? InspectionResultStatus.FAIL : InspectionResultStatus.PASS\n }\n\n private _onInspectionTypeChange(e: Event) {\n const target = e.target as any\n this.checklist = {\n ...this.checklist,\n inspectionResultType: target.value\n }\n this.requestUpdate()\n this.dispatchEvent(\n new CustomEvent('inspection-type-change', {\n detail: { inspectionResultType: target.value },\n bubbles: true\n })\n )\n }\n\n private _onInstructionsChange(e: Event) {\n const target = e.target as HTMLInputElement\n this.checklist = {\n ...this.checklist,\n inspectionResultMemo: target.value\n }\n this.requestUpdate()\n this.dispatchEvent(\n new CustomEvent('instructions-change', {\n detail: { inspectionResultMemo: target.value },\n bubbles: true\n })\n )\n }\n\n // 확인 버튼\n private _onConfirm() {\n this.dispatchEvent(new CustomEvent('popup-close', { bubbles: true }))\n history.back()\n }\n}\n"]}
@@ -14,7 +14,7 @@ export declare class PhotoAlbumPopup extends LitElement {
14
14
  activeTab: PhotoTab;
15
15
  constructorFiles: any[];
16
16
  supervisorFiles: any[];
17
- render(): import("lit-html").TemplateResult<1>;
17
+ render(): import("lit").TemplateResult<1>;
18
18
  firstUpdated(): Promise<void>;
19
19
  private _loadPhotos;
20
20
  private _isImageFile;
@@ -26,7 +26,7 @@ export declare class BuildingInspectionGridDetail extends BuildingInspectionGrid
26
26
  cell: string;
27
27
  htmlSelectBuilding: any;
28
28
  htmlSelectLevel: any;
29
- render(): import("lit-html").TemplateResult<1>;
29
+ render(): import("lit").TemplateResult<1>;
30
30
  pageInitialized(lifecycle: PageLifecycle): Promise<void>;
31
31
  pageUpdated(changes: any, lifecycle: PageLifecycle): Promise<void>;
32
32
  initProject(projectId?: string, buildingId?: string, levelId?: string): Promise<void>;
@@ -39,7 +39,7 @@ export declare class BuildingInspectionGridDetail extends BuildingInspectionGrid
39
39
  _onClickCreateInspection(): void;
40
40
  _onClickUpdateInspection(initialTab?: number): void;
41
41
  refresh(buildingInspectionId?: string): Promise<void>;
42
- _getIconHtmlByStatus(status: string): import("lit-html").TemplateResult<1> | "";
42
+ _getIconHtmlByStatus(status: string): import("lit").TemplateResult<1> | "";
43
43
  private validateChecklist;
44
44
  _onClickApplyToAll(): Promise<void>;
45
45
  _openPlanPreviewPopup(): void;
@@ -4,7 +4,7 @@ export declare class PlanPreviewPopup extends LitElement {
4
4
  buildingLevelId: string;
5
5
  private buildingLevel;
6
6
  connectedCallback(): Promise<void>;
7
- render(): import("lit-html").TemplateResult<1>;
7
+ render(): import("lit").TemplateResult<1>;
8
8
  private _loadBuildingLevel;
9
9
  private _openPreview;
10
10
  private _openImagePreview;
@@ -15,6 +15,7 @@ import './comment-list-popup';
15
15
  import './attachment-list-popup';
16
16
  import '../../stt/speech-to-text';
17
17
  import { parseSpeechCommand } from '../../stt/stt-utils';
18
+ import { notify } from '@operato/layout';
18
19
  let ChecklistView = class ChecklistView extends connect(store)(LitElement) {
19
20
  constructor() {
20
21
  super(...arguments);
@@ -65,7 +66,7 @@ let ChecklistView = class ChecklistView extends connect(store)(LitElement) {
65
66
  /**
66
67
  * 음성 명령 해석 결과를 체크리스트에 반영
67
68
  */
68
- _applySpeechCommand(parsed) {
69
+ async _applySpeechCommand(parsed) {
69
70
  // 합격/불합격 처리 예시 (시공자 기준)
70
71
  if (parsed.rowIds && parsed.isPass !== null) {
71
72
  this.checklist.checklistItems = this.checklist.checklistItems.map((item, idx) => parsed.rowIds.includes(idx + 1) ? Object.assign(Object.assign({}, item), { constructionConfirmStatus: parsed.isPass ? 'T' : 'F' }) : item);
@@ -73,9 +74,33 @@ let ChecklistView = class ChecklistView extends connect(store)(LitElement) {
73
74
  }
74
75
  // 조치사항 처리 예시
75
76
  if (parsed.rowIds && parsed.actionText) {
76
- this.checklist.checklistItems = this.checklist.checklistItems.map((item, idx) => parsed.rowIds.includes(idx + 1) ? Object.assign(Object.assign({}, item), { action: parsed.actionText }) : item);
77
- this.requestUpdate();
77
+ const { rowIds, actionText } = parsed;
78
+ const checklistItems = this.checklist.checklistItems;
79
+ const ids = rowIds.length > 0 ? rowIds : Array.from({ length: checklistItems.length }, (_, i) => i + 1); // rowIds가 빈값이면 모든 아이템에 대해 조치사항 등록
80
+ let count = 0;
81
+ for (const rowId of ids) {
82
+ const item = checklistItems[rowId - 1];
83
+ count += await this._createChecklistItemComment(item.id, actionText);
84
+ this._refreshItem({ detail: { checklistItemId: item.id } });
85
+ }
86
+ notify({ message: `${count}건의 조치사항을 등록했습니다.` });
87
+ }
88
+ }
89
+ // 체크리스트 아이템 코멘트 생성
90
+ async _createChecklistItemComment(checklistItemId, comment) {
91
+ const response = await client.mutate({
92
+ mutation: gql `
93
+ mutation CreateChecklistItemComment($checklistItemComment: NewChecklistItemComment!) {
94
+ createChecklistItemComment(checklistItemComment: $checklistItemComment) {
95
+ id
96
+ }
78
97
  }
98
+ `,
99
+ variables: {
100
+ checklistItemComment: { comment, checklistItemId }
101
+ }
102
+ });
103
+ return !response.errors ? 1 : 0;
79
104
  }
80
105
  render() {
81
106
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
@@ -1 +1 @@
1
- {"version":3,"file":"checklist-view.js","sourceRoot":"","sources":["../../../client/pages/checklist/checklist-view.ts"],"names":[],"mappings":";AAAA,OAAO,0BAA0B,CAAA;AACjC,OAAO,4BAA4B,CAAA;AACnC,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,kCAAkC,EACnC,MAAM,iDAAiD,CAAA;AACxD,OAAO,sCAAsC,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,sBAAsB,CAAA;AAC7B,OAAO,yBAAyB,CAAA;AAChC,OAAO,0BAA0B,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAcxD,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;IAAtD;;QAoO8B,SAAI,uCAAsC;QAC1C,cAAS,GAAQ,EAAE,CAAA;QACnB,YAAO,GAAQ,EAAE,CAAA;QACjB,oBAAe,GAAG;YAC5C,EAAE,EAAE,EAAE;YACN,qBAAqB,EAAE,EAAc;YACrC,wBAAwB,EAAE,EAAc;YACxC,qBAAqB,EAAE,EAAc;YACrC,wBAAwB,EAAE,EAAc;SACzC,CAAA;QAC2B,WAAM,GAA6B,wBAAwB,CAAC,IAAI,CAAA;QAChE,gBAAW,iCAAgC;QAE/D,gBAAW,GAAG,KAAK,CAAA;QAoBnB,iBAAY,GAAG,GAAG,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAQ,CAAA;YACxD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,cAAc,EAAE,CAAA;YACvB,CAAC;iBAAM,CAAC;gBACN,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,aAAa,EAAE,CAAA;YACtB,CAAC;YACD,oCAAoC;QACtC,CAAC,CAAA;IAibH,CAAC;IA3cC,YAAY;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACjD,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAM,EAAE,EAAE;;gBAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAA;gBACrC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAA,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,cAAc,0CAAE,MAAM,KAAI,EAAE,CAAC,CAAA;gBACrF,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;YAClC,CAAC,CAAC,CAAA;YACF,GAAG,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAM,EAAE,EAAE;gBAC5C,wBAAwB;gBACxB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;gBAC9B,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;gBACnE,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;gBAC7F,IAAI,CAAC,aAAa,EAAE,CAAA;YACtB,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAYD;;OAEG;IACK,mBAAmB,CAAC,MAAW;QACrC,wBAAwB;QACxB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAC9E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,iCAAM,IAAI,KAAE,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAG,CAAC,CAAC,IAAI,CAC3G,CAAA;YACD,IAAI,CAAC,aAAa,EAAE,CAAA;QACtB,CAAC;QACD,aAAa;QACb,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAC9E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,iCAAM,IAAI,KAAE,MAAM,EAAE,MAAM,CAAC,UAAU,IAAG,CAAC,CAAC,IAAI,CAChF,CAAA;YACD,IAAI,CAAC,aAAa,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED,MAAM;;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAEvC,YAAY;QACZ,MAAM,iBAAiB,GACrB,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI;YAC5C,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,YAAY;YACpD,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI,CAAA;QAE9C,YAAY;QACZ,MAAM,iBAAiB,GACrB,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,eAAe,CAAA;QAE5G,8BAA8B;QAC9B,IAAI,sBAAsB,GAAY,KAAK,CAAA;QAC3C,IAAI,iBAAiB,GAAY,KAAK,CAAA;QACtC,IAAI,oBAAoB,GAAY,KAAK,CAAA;QACzC,IAAI,iBAAiB,GAAY,KAAK,CAAA;QACtC,IAAI,oBAAoB,GAAY,KAAK,CAAA;QAEzC,IAAI,IAAI,CAAC,IAAI,uCAAwB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,MAAA,MAAC,KAAK,CAAC,QAAQ,EAAU,CAAC,IAAI,0CAAE,IAAI,0CAAE,KAAK,CAAA;YACzD,4BAA4B;YAC5B,iBAAiB,GAAG,CAAA,MAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,0CAAE,QAAQ,CAAC,KAAK,CAAC,KAAI,KAAK,CAAA;YACxF,2BAA2B;YAC3B,oBAAoB,GAAG,CAAA,MAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,0CAAE,QAAQ,CAAC,KAAK,CAAC,KAAI,KAAK,CAAA;YAC9F,4BAA4B;YAC5B,iBAAiB,GAAG,CAAA,MAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,0CAAE,QAAQ,CAAC,KAAK,CAAC,KAAI,KAAK,CAAA;YACxF,2BAA2B;YAC3B,oBAAoB,GAAG,CAAA,MAAA,IAAI,CAAC,eAAe,CAAC,wBAAwB,0CAAE,QAAQ,CAAC,KAAK,CAAC,KAAI,KAAK,CAAA;YAC9F,kCAAkC;YAClC,sBAAsB,GAAG,iBAAiB;gBACxC,CAAC,CAAC,iBAAiB,IAAI,oBAAoB;gBAC3C,CAAC,CAAC,iBAAiB,IAAI,oBAAoB,CAAA;QAC/C,CAAC;QAED,eAAe;QACf,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,cAAc,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,qBAAqB;YACrB,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;gBAAE,OAAO,CAAC,CAAC,CAAA;YACtC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ;gBAAE,OAAO,CAAC,CAAA;YAErC,uBAAuB;YACvB,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;gBAAE,OAAO,CAAC,CAAC,CAAA;YAC1C,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;gBAAE,OAAO,CAAC,CAAA;YAEzC,qBAAqB;YACrB,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,cAAc,KAAI,EAAE,CAAC,CAAA;QAEpF,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,IAAI,uCAAwB;YACjC,CAAC,CAAC,IAAI,CAAA;;;;wBAIU,IAAI,CAAC,WAAW;uBACjB,IAAI,CAAC,YAAY;0BACd,KAAK;uBACR,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;;;;WAItD;YACH,CAAC,CAAC,EAAE;;;oBAGQ,IAAI,CAAC,SAAS,CAAC,IAAI;;;;;gBAKvB,IAAI,CAAC,SAAS,CAAC,gBAAgB;;gBAE/B,IAAI,CAAC,SAAS,CAAC,UAAU;;;;gBAIzB,IAAI,CAAC,SAAS,CAAC,sBAAsB;;gBAErC,IAAI,CAAC,SAAS,CAAC,QAAQ;;;YAG3B,IAAI,CAAC,WAAW,iCAAoB;YACpC,CAAC,CAAC,IAAI,CAAA;;sBAEI,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,KAAI,EAAE;eAC/B;YACH,CAAC,CAAC,IAAI,CAAA;;sBAEI,CAAA,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,eAAe,0CAAE,IAAI,CAAC,IAAI,CAAC,KAAI,EAAE;eACxD;;;gBAGC,kCAAkC,CAAC,IAAI,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;YA0BnD,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,EAAE,GAAG,EAAE,EAAE;YAC/G,OAAO,IAAI,CAAA;gBACP,gBAAgB;gBAChB,CAAC,CAAC,IAAI,CAAA,+BAA+B,eAAe,KAAK,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO;gBACvG,CAAC,CAAC,EAAE;gBACJ,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAA,sBAAsB,iBAAiB,KAAK,IAAI,CAAC,UAAU,QAAQ,CAAC,CAAC,CAAC,EAAE;;oBAE7F,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI;oBACrB,IAAI,CAAC,iBAAiB;;;4BAGd,IAAI,CAAC,EAAE;;yBAEV,qBAAqB,GAAG,IAAI,CAAC,EAAE;;6BAE3B,IAAI,CAAC,yBAAyB,KAAK,GAAG;8BACrC,CAAC,iBAAiB,IAAI,CAAC,sBAAsB;4BAC/C,IAAI,CAAC,sBAAsB;;;;;4BAK3B,IAAI,CAAC,EAAE;;yBAEV,qBAAqB,GAAG,IAAI,CAAC,EAAE;;6BAE3B,IAAI,CAAC,yBAAyB,KAAK,GAAG;8BACrC,CAAC,iBAAiB,IAAI,CAAC,sBAAsB;4BAC/C,IAAI,CAAC,sBAAsB;;;;;4BAK3B,IAAI,CAAC,EAAE;;yBAEV,oBAAoB,GAAG,IAAI,CAAC,EAAE;;6BAE1B,IAAI,CAAC,wBAAwB,KAAK,GAAG;8BACpC,CAAC,iBAAiB,IAAI,CAAC,sBAAsB;4BAC/C,IAAI,CAAC,sBAAsB;;;;;4BAK3B,IAAI,CAAC,EAAE;;yBAEV,oBAAoB,GAAG,IAAI,CAAC,EAAE;;6BAE1B,IAAI,CAAC,wBAAwB,KAAK,GAAG;8BACpC,CAAC,iBAAiB,IAAI,CAAC,sBAAsB;4BAC/C,IAAI,CAAC,sBAAsB;;;;;4BAK3B,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI;yBAC/C,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;;;wBAGvC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,4BAA4B,KAAI,EAAE;;sCAE1B,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;;wBAExG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,yBAAyB,KAAI,EAAE;;kBAE3C,CAAA;QACR,CAAC,CAAC;;;;;;;;;gBASI,IAAI,CAAC,IAAI,uCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,0BAA0B,CAAC;;;;;;yBAM3F,IAAI,CAAC,SAAS,CAAC,wBAAwB;;0BAEtC,IAAI,CAAC,kBAAkB;4BACrB,CAAC,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,IAAI,CAAC;YAC1G,CAAC,iBAAiB;;;;;;;;;;yBAUT,IAAI,CAAC,SAAS,CAAC,2BAA2B;;0BAEzC,IAAI,CAAC,kBAAkB;4BACrB,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,YAAY,IAAI,CAAC,oBAAoB;;;;;;;;gBAQzF,IAAI,CAAC,IAAI,uCAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC;;;;;;yBAMzF,IAAI,CAAC,SAAS,CAAC,wBAAwB;;0BAEtC,IAAI,CAAC,kBAAkB;4BACrB,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,OAAO,IAAI,CAAC,iBAAiB;;;;;;;;;;yBAUxE,IAAI,CAAC,SAAS,CAAC,2BAA2B;;0BAEzC,IAAI,CAAC,kBAAkB;4BACrB,IAAI,CAAC,MAAM,IAAI,wBAAwB,CAAC,eAAe,IAAI,CAAC,oBAAoB;;;;;;;;;;;;;;;KAevG,CAAA;IACH,CAAC;IAEO,sBAAsB,CAAC,CAAQ;;QACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAA0B,CAAA;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAE1B,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,cAAc,0CAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CACzE,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC,iCAAM,IAAI,KAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAG,CAAC,CAAC,IAAI,CACtD,CAAA;IACH,CAAC;IAEO,kBAAkB,CAAC,CAAQ;;QACjC,MAAM,MAAM,GAAG,CAAC,CAAC,MAA0B,CAAA;QAC3C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAC,KAAK,CAAC,QAAQ,EAAU,CAAC,IAAI,0CAAE,IAAI,CAAA;QAE/D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAA;QAE1C,wBAAwB;QACxB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,0BAA0B;oBAC7B,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;oBACnD,MAAK;gBACP,KAAK,6BAA6B;oBAChC,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;oBACtD,MAAK;gBACP,KAAK,0BAA0B;oBAC7B,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;oBACnD,MAAK;gBACP,KAAK,6BAA6B;oBAChC,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;oBACtD,MAAK;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,IAAI;QACnB,IAAI,CAAC,IAAI;YAAE,OAAO,QAAQ,CAAA;QAE1B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAA;QAC1C,OAAO,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACvC,QAAQ,EAAE,YAAY;YACtB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,GAAG,EAAE,SAAS;SACf,CAAC,CAAA;IACJ,CAAC;IAEO,kBAAkB,CAAC,cAAc;QACvC,MAAM,gBAAgB,GAAG,EAAE,CAAA;QAC3B,MAAM,kBAAkB,GAAG,EAAE,CAAA;QAC7B,IAAI,gBAAgB,GAAG,IAAI,CAAA;QAC3B,IAAI,kBAAkB,GAAG,IAAI,CAAA;QAE7B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;YAElC,6BAA6B;YAC7B,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;gBAClC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAA;gBACvF,kBAAkB,GAAG,IAAI,CAAA,CAAC,iBAAiB;YAC7C,CAAC;YAED,+BAA+B;YAC/B,IAAI,UAAU,KAAK,kBAAkB,EAAE,CAAC;gBACtC,kBAAkB,CAAC,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,CACrE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CAC5D,CAAC,MAAM,CAAA;YACV,CAAC;YAED,MAAM,gBAAgB,GAAG,QAAQ,KAAK,gBAAgB,CAAA;YACtD,MAAM,kBAAkB,GAAG,UAAU,KAAK,kBAAkB,CAAA;YAE5D,MAAM,eAAe,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;YAClD,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC,CAAA;YAEzE,aAAa;YACb,gBAAgB,GAAG,QAAQ,CAAA;YAC3B,kBAAkB,GAAG,UAAU,CAAA;YAE/B,OAAO;gBACL,IAAI;gBACJ,gBAAgB;gBAChB,eAAe;gBACf,kBAAkB;gBAClB,iBAAiB;aAClB,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,eAAe,CAAC,eAAuB;QAC7C,SAAS,CACP,IAAI,CAAA;;6BAEmB,eAAe;oBACxB,IAAI,CAAC,MAAM;kBACb,IAAI,CAAC,IAAI;4BACC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;OAEjD,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CACnD,CAAA;IACH,CAAC;IAEO,kBAAkB,CAAC,eAAuB;QAChD,SAAS,CACP,IAAI,CAAA;;6BAEmB,eAAe;oBACxB,IAAI,CAAC,MAAM;kBACb,IAAI,CAAC,IAAI;+BACI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;;OAEpD,EACD,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CACnD,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,CAAC;;QAC1B,MAAM,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;QACpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;YAClC,KAAK,EAAE,GAAG,CAAA;;;;;;;;OAQT;YACD,SAAS,EAAE;gBACT,eAAe,EAAE,eAAe;aACjC;SACF,CAAC,CAAA;QAEF,MAAM,aAAa,GAAG,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,aAAa,KAAI,EAAE,CAAA;QACxD,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACvE,OAAO,IAAI,CAAC,EAAE,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,iCAAM,IAAI,GAAK,aAAa,CAAE,CAAA;QAC1E,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;;AA5rBM,oBAAM,GAAG;IACd,qBAAqB;IACrB,eAAe;IACf,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6NF;CACF,AAjOY,CAiOZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2CAA2C;AAC1C;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDAAoB;AACnB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;8CAAkB;AACjB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;sDAM1B;AAC2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;6CAAiE;AAChE;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDAA4C;AA/OnE,aAAa;IADlB,aAAa,CAAC,gBAAgB,CAAC;GAC1B,aAAa,CA8rBlB","sourcesContent":["import '@material/web/fab/fab.js'\nimport '@material/web/icon/icon.js'\nimport gql from 'graphql-tag'\nimport { client } from '@operato/graphql'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'\nimport {\n CHECKLIST_MAIN_TYPE_LIST,\n BuildingInspectionStatus,\n BUILDING_INSPECTION_STATUS_DISPLAY\n} from '../building-inspection/building-inspection-list'\nimport '@operato/input/ox-input-signature.js'\nimport { store } from '@operato/shell'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport { openPopup } from '@operato/layout'\nimport './comment-list-popup'\nimport './attachment-list-popup'\nimport '../../stt/speech-to-text'\nimport { parseSpeechCommand } from '../../stt/stt-utils'\n\nexport const enum ProjectType {\n DSSP = 'DSSP',\n DCSP = 'DCSP',\n DKPI = 'DKPI'\n}\n\nexport const enum ChecklistMode {\n VIEWER = 'VIEWER',\n EDITOR = 'EDITOR'\n}\n\n@customElement('checklist-view')\nclass ChecklistView extends connect(store)(LitElement) {\n static styles = [\n ButtonContainerStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n padding: var(--spacing-large, 12px);\n padding-top: 0;\n font-size: 14px;\n min-width: 800px;\n\n position: relative;\n }\n\n [bold] {\n font-weight: bold;\n }\n\n div[name] {\n display: flex;\n color: #586878;\n font-size: 24px;\n align-items: center;\n justify-content: center;\n }\n\n table {\n width: 100%;\n font-size: 15px;\n color: #586878;\n text-align: left;\n border-collapse: collapse;\n td,\n th {\n border: 1px rgba(51, 51, 51, 0.2) solid;\n padding-inline: var(--spacing-medium, 8px);\n vertical-align: middle;\n }\n th {\n background-color: #efefef;\n font-weight: bold;\n }\n td {\n height: 33px;\n background-color: var(--md-sys-color-on-primary);\n &[radio] {\n text-align: center;\n width: 50px;\n }\n }\n }\n\n table[header] {\n margin-top: var(--spacing-small, 4px);\n\n td {\n min-width: 180px;\n border-left: none;\n }\n th {\n width: 110px;\n border-right: none;\n }\n }\n\n table[body] {\n border: 2px solid var(--md-sys-color-on-primary-container);\n border-bottom: none;\n margin-top: var(--spacing-medium, 8px);\n\n th {\n text-align: center;\n\n &[type] {\n min-width: 150px;\n }\n &[inspection-name] {\n min-width: 250px;\n }\n &[result] {\n width: 270px;\n }\n &[criteria] {\n width: 90px;\n }\n &[small] {\n width: 60px;\n }\n }\n td {\n &[main-type] {\n width: 50px;\n text-align: center;\n word-break: keep-all;\n }\n\n &[attachment] {\n text-align: center;\n cursor: pointer;\n\n * {\n vertical-align: middle;\n }\n }\n &[comment] {\n cursor: pointer;\n text-align: center;\n\n * {\n vertical-align: middle;\n }\n }\n &[disabled] * {\n opacity: 0.6;\n }\n }\n }\n\n table[tail] {\n border: 2px solid var(--md-sys-color-on-primary-container);\n border-top: none;\n margin-top: -1px;\n\n td {\n width: 25%;\n border-left: none;\n text-align: center;\n position: relative;\n background-color: var(--md-sys-color-on-primary);\n font-size: 14px;\n }\n th {\n width: 25%;\n border-right: none;\n }\n\n span[sign-text] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n }\n ox-input-signature {\n margin: var(--spacing-medium, 8px);\n\n &[disabled] {\n background: #eee;\n }\n }\n }\n\n div[footer] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-tiny, 2px);\n font-size: 12px;\n margin-top: var(--spacing-medium, 8px);\n color: #586878;\n text-indent: -9px;\n padding-left: var(--spacing-medium, 8px);\n }\n\n .stt-float-btns {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n gap: 8px;\n z-index: 10;\n }\n .stt-float-btns button {\n background: #fff;\n border: 1px solid #ccc;\n border-radius: 50%;\n width: 38px;\n height: 38px;\n font-size: 18px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n cursor: pointer;\n transition: background 0.2s;\n outline: none;\n }\n .stt-float-btns button:hover {\n background: #f2f2f2;\n }\n div[title-row] {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 8px;\n }\n div[name] {\n color: #586878;\n font-size: 24px;\n font-weight: bold;\n flex: 1;\n text-align: center;\n }\n\n @keyframes pulse {\n 0% {\n filter: drop-shadow(0 0 0 #d32f2f);\n }\n 70% {\n filter: drop-shadow(0 0 8px #d32f2f);\n }\n 100% {\n filter: drop-shadow(0 0 0 #d32f2f);\n }\n }\n\n .stt-fab {\n position: fixed;\n top: 100px;\n right: 20px;\n }\n\n .stt-fab[active] md-icon {\n color: #d32f2f;\n animation: pulse 1s infinite;\n }\n `\n ]\n\n @property({ type: String }) mode: ChecklistMode = ChecklistMode.VIEWER\n @property({ type: Object }) checklist: any = {}\n @property({ type: Object }) manager: any = {}\n @property({ type: Object }) buildingComplex = {\n id: '',\n taskConstructorEmails: [] as string[],\n overallConstructorEmails: [] as string[],\n taskSupervisoryEmails: [] as string[],\n overallSupervisoryEmails: [] as string[]\n }\n @property({ type: String }) status: BuildingInspectionStatus = BuildingInspectionStatus.WAIT\n @property({ type: String }) projectType: ProjectType = ProjectType.DSSP\n\n private isListening = false\n\n firstUpdated() {\n const stt = this.renderRoot.querySelector('#stt')\n if (stt) {\n stt.addEventListener('stt-result', (e: any) => {\n const text = e.detail.finalTranscript\n const parsed = parseSpeechCommand(text, this.checklist?.checklistItems?.length || 20)\n this._applySpeechCommand(parsed)\n })\n stt.addEventListener('stt-status', (e: any) => {\n // 음성 인식 상태에 따라 버튼 상태 갱신\n const status = e.detail.status\n if (status && status.includes('Listening')) this.isListening = true\n if (status && (status.includes('종료') || status.includes('Stopped'))) this.isListening = false\n this.requestUpdate()\n })\n }\n }\n\n private _onToggleSTT = () => {\n const stt = this.renderRoot.querySelector('#stt') as any\n if (!this.isListening) {\n stt?.startListening()\n } else {\n stt?.stopListening()\n }\n // isListening은 stt-status 이벤트에서 갱신됨\n }\n\n /**\n * 음성 명령 해석 결과를 체크리스트에 반영\n */\n private _applySpeechCommand(parsed: any) {\n // 합격/불합격 처리 예시 (시공자 기준)\n if (parsed.rowIds && parsed.isPass !== null) {\n this.checklist.checklistItems = this.checklist.checklistItems.map((item, idx) =>\n parsed.rowIds.includes(idx + 1) ? { ...item, constructionConfirmStatus: parsed.isPass ? 'T' : 'F' } : item\n )\n this.requestUpdate()\n }\n // 조치사항 처리 예시\n if (parsed.rowIds && parsed.actionText) {\n this.checklist.checklistItems = this.checklist.checklistItems.map((item, idx) =>\n parsed.rowIds.includes(idx + 1) ? { ...item, action: parsed.actionText } : item\n )\n this.requestUpdate()\n }\n }\n\n render() {\n const today = this._getDate(new Date())\n\n // 시공자 스탭 여부\n const isConstructorStep =\n this.status == BuildingInspectionStatus.WAIT ||\n this.status == BuildingInspectionStatus.OVERALL_WAIT ||\n this.status == BuildingInspectionStatus.FAIL\n\n // 감리자 스탭 여부\n const isSupervisoryStep =\n this.status == BuildingInspectionStatus.REQUEST || this.status == BuildingInspectionStatus.OVERALL_REQUEST\n\n // 현재 스탭에 해당하는 계정인지 체크 (편집모드만)\n let havePermissionByStatus: boolean = false\n let isTaskConstructor: boolean = false\n let isOverallConstructor: boolean = false\n let isTaskSupervisory: boolean = false\n let isOverallSupervisory: boolean = false\n\n if (this.mode == ChecklistMode.EDITOR && this.status) {\n const email = (store.getState() as any).auth?.user?.email\n // 현재 유저가 \"공종별 시공 관리자\" 인지 체크\n isTaskConstructor = this.buildingComplex.taskConstructorEmails?.includes(email) || false\n // 현재 유저가 \"총괄 시공 책임자\" 인지 체크\n isOverallConstructor = this.buildingComplex.overallConstructorEmails?.includes(email) || false\n // 현재 유저가 \"공종별 감리 책임자\" 인지 체크\n isTaskSupervisory = this.buildingComplex.taskSupervisoryEmails?.includes(email) || false\n // 현재 유저가 \"총괄 감리 책임자\" 인지 체크\n isOverallSupervisory = this.buildingComplex.overallSupervisoryEmails?.includes(email) || false\n // 스탭이 시공자 스탭일때에 내가 시공자 권한이 있는지 체크\n havePermissionByStatus = isConstructorStep\n ? isTaskConstructor || isOverallConstructor\n : isTaskSupervisory || isOverallSupervisory\n }\n\n // 체크리스트 아이템 정렬\n this.checklist?.checklistItems?.sort((a, b) => {\n // 1순위: mainType 오름차순\n if (a.mainType < b.mainType) return -1\n if (a.mainType > b.mainType) return 1\n\n // 2순위: detailType 오름차순\n if (a.detailType < b.detailType) return -1\n if (a.detailType > b.detailType) return 1\n\n // 3순위: sequence 오름차순\n return a.sequence - b.sequence\n })\n\n const processedItems = this.drawChecklistItems(this.checklist?.checklistItems || [])\n\n return html`\n ${this.mode == ChecklistMode.EDITOR\n ? html`\n <speech-to-text id=\"stt\"></speech-to-text>\n <md-fab\n class=\"stt-fab\"\n ?active=${this.isListening}\n @click=${this._onToggleSTT}\n ?disabled=${false}\n .label=${this.isListening ? '음성 인식 중지' : '음성 인식 시작'}\n >\n <md-icon slot=\"icon\">mic</md-icon>\n </md-fab>\n `\n : ''}\n\n <div title-row>\n <div name>${this.checklist.name}</div>\n </div>\n <table header>\n <tr>\n <th>공종</th>\n <td>${this.checklist.constructionType}</td>\n <th>문서 번호</th>\n <td>${this.checklist.documentNo}</td>\n </tr>\n <tr>\n <th>세부 공종</th>\n <td>${this.checklist.constructionDetailType}</td>\n <th>위치 및 부위</th>\n <td>${this.checklist.location}</td>\n </tr>\n <tr>\n ${this.projectType == ProjectType.DSSP\n ? html`\n <th>담당자</th>\n <td>${this.manager?.name || ''}</td>\n `\n : html`\n <th>검측 부위</th>\n <td>${this.checklist?.inspectionParts?.join(', ') || ''}</td>\n `}\n\n <th>검측 상태</th>\n <td>${BUILDING_INSPECTION_STATUS_DISPLAY[this.status]}</td>\n </tr>\n </table>\n\n <table body>\n <thead>\n <tr>\n <th colspan=\"2\" rowspan=\"3\" type>구분</th>\n <th rowspan=\"3\" inspection-name>검사항목</th>\n <th rowspan=\"3\" criteria>검사기준</th>\n <th colspan=\"4\" result>검사결과</th>\n <th rowspan=\"3\" small>첨부자료</th>\n <th rowspan=\"3\" small>조치사항</th>\n </tr>\n <tr>\n <th colspan=\"2\">시공자</th>\n <th colspan=\"2\">감리자</th>\n </tr>\n <tr>\n <th>적합</th>\n <th>부적합</th>\n <th>적합</th>\n <th>부적합</th>\n </tr>\n </thead>\n <tbody>\n ${processedItems.map(({ item, showMainTypeCell, mainTypeRowspan, showDetailTypeCell, detailTypeRowspan }, idx) => {\n return html` <tr>\n ${showMainTypeCell\n ? html`<td main-type bold rowspan=\"${mainTypeRowspan}\">${CHECKLIST_MAIN_TYPE_LIST[item.mainType]}</td>`\n : ''}\n ${showDetailTypeCell ? html` <td bold rowspan=\"${detailTypeRowspan}\">${item.detailType}</td> ` : ''}\n\n <td>${idx + 1}. ${item.name}</td>\n <td>${item.inspctionCriteria}</td>\n <td radio>\n <md-radio\n item-id=${item.id}\n item-name=\"constructionConfirmStatus\"\n name=${'radio-construction-' + item.id}\n value=\"T\"\n .checked=${item.constructionConfirmStatus === 'T'}\n ?disabled=${!isConstructorStep || !havePermissionByStatus}\n @change=${this._onChangeConfirmStatus}\n ></md-radio>\n </td>\n <td radio>\n <md-radio\n item-id=${item.id}\n item-name=\"constructionConfirmStatus\"\n name=${'radio-construction-' + item.id}\n value=\"F\"\n .checked=${item.constructionConfirmStatus === 'F'}\n ?disabled=${!isConstructorStep || !havePermissionByStatus}\n @change=${this._onChangeConfirmStatus}\n ></md-radio>\n </td>\n <td radio>\n <md-radio\n item-id=${item.id}\n item-name=\"supervisoryConfirmStatus\"\n name=${'radio-supervisory-' + item.id}\n value=\"T\"\n .checked=${item.supervisoryConfirmStatus === 'T'}\n ?disabled=${!isSupervisoryStep || !havePermissionByStatus}\n @change=${this._onChangeConfirmStatus}\n ></md-radio>\n </td>\n <td radio>\n <md-radio\n item-id=${item.id}\n item-name=\"supervisoryConfirmStatus\"\n name=${'radio-supervisory-' + item.id}\n value=\"F\"\n .checked=${item.supervisoryConfirmStatus === 'F'}\n ?disabled=${!isSupervisoryStep || !havePermissionByStatus}\n @change=${this._onChangeConfirmStatus}\n ></md-radio>\n </td>\n <td\n attachment\n ?disabled=${this.status == BuildingInspectionStatus.PASS}\n @click=${() => this._onClickAttachment(item.id)}\n >\n <md-icon slot=\"icon\">attach_file</md-icon>\n <span>${item?.checklistItemAttachmentCount || ''}</span>\n </td>\n <td comment ?disabled=${this.status == BuildingInspectionStatus.PASS} @click=${() => this._onClickComment(item.id)}>\n <md-icon slot=\"icon\">chat</md-icon>\n <span>${item?.checklistItemCommentCount || ''}</span>\n </td>\n </tr>`\n })}\n </tbody>\n </table>\n\n <table tail>\n <tbody>\n <tr first>\n <th rowspan=\"2\">시공자 점검일</th>\n <td rowspan=\"2\">\n ${this.mode == ChecklistMode.VIEWER ? today : this._getDate(this.checklist.constructionInspectionDate)}\n </td>\n <th>공종별 시공 관리자</th>\n <td>\n <span sign-text>(인)</span>\n <ox-input-signature\n .value=${this.checklist.taskConstructorSignature}\n name=\"taskConstructorSignature\"\n @change=${this._onChangeSignature}\n ?disabled=${(this.status != BuildingInspectionStatus.WAIT && this.status != BuildingInspectionStatus.FAIL) ||\n !isTaskConstructor}\n >\n </ox-input-signature>\n </td>\n </tr>\n <tr>\n <th>총괄 시공 책임자</th>\n <td>\n <span sign-text>(인)</span>\n <ox-input-signature\n .value=${this.checklist.overallConstructorSignature}\n name=\"overallConstructorSignature\"\n @change=${this._onChangeSignature}\n ?disabled=${this.status != BuildingInspectionStatus.OVERALL_WAIT || !isOverallConstructor}\n >\n </ox-input-signature>\n </td>\n </tr>\n <tr>\n <th rowspan=\"2\">감리자 점검일</th>\n <td rowspan=\"2\">\n ${this.mode == ChecklistMode.VIEWER ? today : this._getDate(this.checklist.supervisorInspectionDate)}\n </td>\n <th>공종별 감리 책임자</th>\n <td>\n <span sign-text>(인)</span>\n <ox-input-signature\n .value=${this.checklist.taskSupervisorySignature}\n name=\"taskSupervisorySignature\"\n @change=${this._onChangeSignature}\n ?disabled=${this.status != BuildingInspectionStatus.REQUEST || !isTaskSupervisory}\n >\n </ox-input-signature>\n </td>\n </tr>\n <tr>\n <th>총괄 감리 책임자</th>\n <td>\n <span sign-text>(인)</span>\n <ox-input-signature\n .value=${this.checklist.overallSupervisorySignature}\n name=\"overallSupervisorySignature\"\n @change=${this._onChangeSignature}\n ?disabled=${this.status != BuildingInspectionStatus.OVERALL_REQUEST || !isOverallSupervisory}\n >\n </ox-input-signature>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div footer>\n <div>\n - 검사결과는 1차, 2차로 구분 재검측시 2차에 기록하고 검사기준도 검사결과와 비교될 수 있도록 시방서 또는 도면 등에 있는\n 수치를 작성하며, 수치가 없는 검사항목은 시방서 또는 설계도서에 있는 내용과 검사한 내용으로 작성함\n </div>\n <div>- 검사항목 및 검사기준은 각 공종별로 감리원과 협의하여 작성할 것</div>\n </div>\n `\n }\n\n private _onChangeConfirmStatus(e: Event) {\n const target = e.target as HTMLInputElement\n const itemId = target.getAttribute('item-id')\n const name = target.getAttribute('item-name') || ''\n const value = target.value\n\n this.checklist.checklistItems = this.checklist?.checklistItems?.map(item =>\n item.id == itemId ? { ...item, [name]: value } : item\n )\n }\n\n private _onChangeSignature(e: Event) {\n const target = e.target as HTMLInputElement\n const { name: userName } = (store.getState() as any).auth?.user\n\n this.checklist[target.name] = target.value\n\n // 서명할 때 해당 사용자 ID도 업데이트\n if (userName) {\n switch (target.name) {\n case 'taskConstructorSignature':\n this.checklist.taskConstructor = { name: userName }\n break\n case 'overallConstructorSignature':\n this.checklist.overallConstructor = { name: userName }\n break\n case 'taskSupervisorySignature':\n this.checklist.taskSupervisory = { name: userName }\n break\n case 'overallSupervisorySignature':\n this.checklist.overallSupervisory = { name: userName }\n break\n }\n }\n }\n\n private _getDate(date) {\n if (!date) return ' 년 월 일'\n\n const _date = new Date(date) || new Date()\n return _date.toLocaleDateString('ko-KR', {\n timeZone: 'Asia/Seoul',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })\n }\n\n private drawChecklistItems(checklistItems) {\n const mainTypeRowspans = {}\n const detailTypeRowspans = {}\n let previousMainType = null\n let previousDetailType = null\n\n return checklistItems.map((item, index) => {\n const mainType = item.mainType\n const detailType = item.detailType\n\n // mainType이 변경되면 rowspan을 계산\n if (mainType !== previousMainType) {\n mainTypeRowspans[mainType] = checklistItems.filter(i => i.mainType === mainType).length\n previousDetailType = null // detailType 초기화\n }\n\n // detailType이 변경되면 rowspan을 계산\n if (detailType !== previousDetailType) {\n detailTypeRowspans[`${mainType}-${detailType}`] = checklistItems.filter(\n i => i.mainType === mainType && i.detailType === detailType\n ).length\n }\n\n const showMainTypeCell = mainType !== previousMainType\n const showDetailTypeCell = detailType !== previousDetailType\n\n const mainTypeRowspan = mainTypeRowspans[mainType]\n const detailTypeRowspan = detailTypeRowspans[`${mainType}-${detailType}`]\n\n // 이전 값을 업데이트\n previousMainType = mainType\n previousDetailType = detailType\n\n return {\n item,\n showMainTypeCell,\n mainTypeRowspan,\n showDetailTypeCell,\n detailTypeRowspan\n }\n })\n }\n\n private _onClickComment(checklistItemId: string) {\n openPopup(\n html`\n <comment-list-popup\n .checklistItemId=${checklistItemId}\n .status=${this.status}\n .mode=${this.mode}\n @change-comment=${this._refreshItem.bind(this)}\n ></comment-list-popup>\n `,\n { backdrop: true, size: 'medium', title: '조치 사항' }\n )\n }\n\n private _onClickAttachment(checklistItemId: string) {\n openPopup(\n html`\n <attachment-list-popup\n .checklistItemId=${checklistItemId}\n .status=${this.status}\n .mode=${this.mode}\n @change-attachment=${this._refreshItem.bind(this)}\n ></attachment-list-popup>\n `,\n { backdrop: true, size: 'medium', title: '첨부 자료' }\n )\n }\n\n private async _refreshItem(e) {\n const { checklistItemId } = e.detail\n const response = await client.query({\n query: gql`\n query ChecklistItem($checklistItemId: String!) {\n checklistItem(id: $checklistItemId) {\n id\n checklistItemCommentCount\n checklistItemAttachmentCount\n }\n }\n `,\n variables: {\n checklistItemId: checklistItemId\n }\n })\n\n const checklistItem = response.data?.checklistItem || []\n this.checklist.checklistItems = this.checklist.checklistItems.map(item => {\n return item.id != checklistItemId ? item : { ...item, ...checklistItem }\n })\n\n this.requestUpdate()\n }\n}\n"]}
1
+ {"version":3,"file":"checklist-view.js","sourceRoot":"","sources":["../../../client/pages/checklist/checklist-view.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/fab/fab.js'\nimport '@material/web/icon/icon.js'\nimport gql from 'graphql-tag'\nimport { client } from '@operato/graphql'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ButtonContainerStyles, ScrollbarStyles } from '@operato/styles'\nimport {\n CHECKLIST_MAIN_TYPE_LIST,\n BuildingInspectionStatus,\n BUILDING_INSPECTION_STATUS_DISPLAY\n} from '../building-inspection/building-inspection-list'\nimport '@operato/input/ox-input-signature.js'\nimport { store } from '@operato/shell'\nimport { connect } from 'pwa-helpers/connect-mixin.js'\nimport { openPopup } from '@operato/layout'\nimport './comment-list-popup'\nimport './attachment-list-popup'\nimport '../../stt/speech-to-text'\nimport { parseSpeechCommand } from '../../stt/stt-utils'\nimport { notify } from '@operato/layout'\n\nexport const enum ProjectType {\n DSSP = 'DSSP',\n DCSP = 'DCSP',\n DKPI = 'DKPI'\n}\n\nexport const enum ChecklistMode {\n VIEWER = 'VIEWER',\n EDITOR = 'EDITOR'\n}\n\n@customElement('checklist-view')\nclass ChecklistView extends connect(store)(LitElement) {\n static styles = [\n ButtonContainerStyles,\n ScrollbarStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n padding: var(--spacing-large, 12px);\n padding-top: 0;\n font-size: 14px;\n min-width: 800px;\n\n position: relative;\n }\n\n [bold] {\n font-weight: bold;\n }\n\n div[name] {\n display: flex;\n color: #586878;\n font-size: 24px;\n align-items: center;\n justify-content: center;\n }\n\n table {\n width: 100%;\n font-size: 15px;\n color: #586878;\n text-align: left;\n border-collapse: collapse;\n td,\n th {\n border: 1px rgba(51, 51, 51, 0.2) solid;\n padding-inline: var(--spacing-medium, 8px);\n vertical-align: middle;\n }\n th {\n background-color: #efefef;\n font-weight: bold;\n }\n td {\n height: 33px;\n background-color: var(--md-sys-color-on-primary);\n &[radio] {\n text-align: center;\n width: 50px;\n }\n }\n }\n\n table[header] {\n margin-top: var(--spacing-small, 4px);\n\n td {\n min-width: 180px;\n border-left: none;\n }\n th {\n width: 110px;\n border-right: none;\n }\n }\n\n table[body] {\n border: 2px solid var(--md-sys-color-on-primary-container);\n border-bottom: none;\n margin-top: var(--spacing-medium, 8px);\n\n th {\n text-align: center;\n\n &[type] {\n min-width: 150px;\n }\n &[inspection-name] {\n min-width: 250px;\n }\n &[result] {\n width: 270px;\n }\n &[criteria] {\n width: 90px;\n }\n &[small] {\n width: 60px;\n }\n }\n td {\n &[main-type] {\n width: 50px;\n text-align: center;\n word-break: keep-all;\n }\n\n &[attachment] {\n text-align: center;\n cursor: pointer;\n\n * {\n vertical-align: middle;\n }\n }\n &[comment] {\n cursor: pointer;\n text-align: center;\n\n * {\n vertical-align: middle;\n }\n }\n &[disabled] * {\n opacity: 0.6;\n }\n }\n }\n\n table[tail] {\n border: 2px solid var(--md-sys-color-on-primary-container);\n border-top: none;\n margin-top: -1px;\n\n td {\n width: 25%;\n border-left: none;\n text-align: center;\n position: relative;\n background-color: var(--md-sys-color-on-primary);\n font-size: 14px;\n }\n th {\n width: 25%;\n border-right: none;\n }\n\n span[sign-text] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n }\n ox-input-signature {\n margin: var(--spacing-medium, 8px);\n\n &[disabled] {\n background: #eee;\n }\n }\n }\n\n div[footer] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-tiny, 2px);\n font-size: 12px;\n margin-top: var(--spacing-medium, 8px);\n color: #586878;\n text-indent: -9px;\n padding-left: var(--spacing-medium, 8px);\n }\n\n .stt-float-btns {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n gap: 8px;\n z-index: 10;\n }\n .stt-float-btns button {\n background: #fff;\n border: 1px solid #ccc;\n border-radius: 50%;\n width: 38px;\n height: 38px;\n font-size: 18px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n cursor: pointer;\n transition: background 0.2s;\n outline: none;\n }\n .stt-float-btns button:hover {\n background: #f2f2f2;\n }\n div[title-row] {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 8px;\n }\n div[name] {\n color: #586878;\n font-size: 24px;\n font-weight: bold;\n flex: 1;\n text-align: center;\n }\n\n @keyframes pulse {\n 0% {\n filter: drop-shadow(0 0 0 #d32f2f);\n }\n 70% {\n filter: drop-shadow(0 0 8px #d32f2f);\n }\n 100% {\n filter: drop-shadow(0 0 0 #d32f2f);\n }\n }\n\n .stt-fab {\n position: fixed;\n top: 100px;\n right: 20px;\n }\n\n .stt-fab[active] md-icon {\n color: #d32f2f;\n animation: pulse 1s infinite;\n }\n `\n ]\n\n @property({ type: String }) mode: ChecklistMode = ChecklistMode.VIEWER\n @property({ type: Object }) checklist: any = {}\n @property({ type: Object }) manager: any = {}\n @property({ type: Object }) buildingComplex = {\n id: '',\n taskConstructorEmails: [] as string[],\n overallConstructorEmails: [] as string[],\n taskSupervisoryEmails: [] as string[],\n overallSupervisoryEmails: [] as string[]\n }\n @property({ type: String }) status: BuildingInspectionStatus = BuildingInspectionStatus.WAIT\n @property({ type: String }) projectType: ProjectType = ProjectType.DSSP\n\n private isListening = false\n\n firstUpdated() {\n const stt = this.renderRoot.querySelector('#stt')\n if (stt) {\n stt.addEventListener('stt-result', (e: any) => {\n const text = e.detail.finalTranscript\n const parsed = parseSpeechCommand(text, this.checklist?.checklistItems?.length || 20)\n this._applySpeechCommand(parsed)\n })\n stt.addEventListener('stt-status', (e: any) => {\n // 음성 인식 상태에 따라 버튼 상태 갱신\n const status = e.detail.status\n if (status && status.includes('Listening')) this.isListening = true\n if (status && (status.includes('종료') || status.includes('Stopped'))) this.isListening = false\n this.requestUpdate()\n })\n }\n }\n\n private _onToggleSTT = () => {\n const stt = this.renderRoot.querySelector('#stt') as any\n if (!this.isListening) {\n stt?.startListening()\n } else {\n stt?.stopListening()\n }\n // isListening은 stt-status 이벤트에서 갱신됨\n }\n\n /**\n * 음성 명령 해석 결과를 체크리스트에 반영\n */\n private async _applySpeechCommand(parsed: any) {\n // 합격/불합격 처리 예시 (시공자 기준)\n if (parsed.rowIds && parsed.isPass !== null) {\n this.checklist.checklistItems = this.checklist.checklistItems.map((item, idx) =>\n parsed.rowIds.includes(idx + 1) ? { ...item, constructionConfirmStatus: parsed.isPass ? 'T' : 'F' } : item\n )\n this.requestUpdate()\n }\n // 조치사항 처리 예시\n if (parsed.rowIds && parsed.actionText) {\n const { rowIds, actionText } = parsed\n const checklistItems = this.checklist.checklistItems\n const ids = rowIds.length > 0 ? rowIds : Array.from({ length: checklistItems.length }, (_, i) => i + 1) // rowIds가 빈값이면 모든 아이템에 대해 조치사항 등록\n let count = 0\n for (const rowId of ids) {\n const item = checklistItems[rowId - 1]\n count += await this._createChecklistItemComment(item.id, actionText)\n this._refreshItem({ detail: { checklistItemId: item.id } })\n }\n notify({ message: `${count}건의 조치사항을 등록했습니다.` })\n }\n }\n\n // 체크리스트 아이템 코멘트 생성\n private async _createChecklistItemComment(checklistItemId: string, comment: string) {\n const response = await client.mutate({\n mutation: gql`\n mutation CreateChecklistItemComment($checklistItemComment: NewChecklistItemComment!) {\n createChecklistItemComment(checklistItemComment: $checklistItemComment) {\n id\n }\n }\n `,\n variables: {\n checklistItemComment: { comment, checklistItemId }\n }\n })\n\n return !response.errors ? 1 : 0\n }\n\n render() {\n const today = this._getDate(new Date())\n\n // 시공자 스탭 여부\n const isConstructorStep =\n this.status == BuildingInspectionStatus.WAIT ||\n this.status == BuildingInspectionStatus.OVERALL_WAIT ||\n this.status == BuildingInspectionStatus.FAIL\n\n // 감리자 스탭 여부\n const isSupervisoryStep =\n this.status == BuildingInspectionStatus.REQUEST || this.status == BuildingInspectionStatus.OVERALL_REQUEST\n\n // 현재 스탭에 해당하는 계정인지 체크 (편집모드만)\n let havePermissionByStatus: boolean = false\n let isTaskConstructor: boolean = false\n let isOverallConstructor: boolean = false\n let isTaskSupervisory: boolean = false\n let isOverallSupervisory: boolean = false\n\n if (this.mode == ChecklistMode.EDITOR && this.status) {\n const email = (store.getState() as any).auth?.user?.email\n // 현재 유저가 \"공종별 시공 관리자\" 인지 체크\n isTaskConstructor = this.buildingComplex.taskConstructorEmails?.includes(email) || false\n // 현재 유저가 \"총괄 시공 책임자\" 인지 체크\n isOverallConstructor = this.buildingComplex.overallConstructorEmails?.includes(email) || false\n // 현재 유저가 \"공종별 감리 책임자\" 인지 체크\n isTaskSupervisory = this.buildingComplex.taskSupervisoryEmails?.includes(email) || false\n // 현재 유저가 \"총괄 감리 책임자\" 인지 체크\n isOverallSupervisory = this.buildingComplex.overallSupervisoryEmails?.includes(email) || false\n // 스탭이 시공자 스탭일때에 내가 시공자 권한이 있는지 체크\n havePermissionByStatus = isConstructorStep\n ? isTaskConstructor || isOverallConstructor\n : isTaskSupervisory || isOverallSupervisory\n }\n\n // 체크리스트 아이템 정렬\n this.checklist?.checklistItems?.sort((a, b) => {\n // 1순위: mainType 오름차순\n if (a.mainType < b.mainType) return -1\n if (a.mainType > b.mainType) return 1\n\n // 2순위: detailType 오름차순\n if (a.detailType < b.detailType) return -1\n if (a.detailType > b.detailType) return 1\n\n // 3순위: sequence 오름차순\n return a.sequence - b.sequence\n })\n\n const processedItems = this.drawChecklistItems(this.checklist?.checklistItems || [])\n\n return html`\n ${this.mode == ChecklistMode.EDITOR\n ? html`\n <speech-to-text id=\"stt\"></speech-to-text>\n <md-fab\n class=\"stt-fab\"\n ?active=${this.isListening}\n @click=${this._onToggleSTT}\n ?disabled=${false}\n .label=${this.isListening ? '음성 인식 중지' : '음성 인식 시작'}\n >\n <md-icon slot=\"icon\">mic</md-icon>\n </md-fab>\n `\n : ''}\n\n <div title-row>\n <div name>${this.checklist.name}</div>\n </div>\n <table header>\n <tr>\n <th>공종</th>\n <td>${this.checklist.constructionType}</td>\n <th>문서 번호</th>\n <td>${this.checklist.documentNo}</td>\n </tr>\n <tr>\n <th>세부 공종</th>\n <td>${this.checklist.constructionDetailType}</td>\n <th>위치 및 부위</th>\n <td>${this.checklist.location}</td>\n </tr>\n <tr>\n ${this.projectType == ProjectType.DSSP\n ? html`\n <th>담당자</th>\n <td>${this.manager?.name || ''}</td>\n `\n : html`\n <th>검측 부위</th>\n <td>${this.checklist?.inspectionParts?.join(', ') || ''}</td>\n `}\n\n <th>검측 상태</th>\n <td>${BUILDING_INSPECTION_STATUS_DISPLAY[this.status]}</td>\n </tr>\n </table>\n\n <table body>\n <thead>\n <tr>\n <th colspan=\"2\" rowspan=\"3\" type>구분</th>\n <th rowspan=\"3\" inspection-name>검사항목</th>\n <th rowspan=\"3\" criteria>검사기준</th>\n <th colspan=\"4\" result>검사결과</th>\n <th rowspan=\"3\" small>첨부자료</th>\n <th rowspan=\"3\" small>조치사항</th>\n </tr>\n <tr>\n <th colspan=\"2\">시공자</th>\n <th colspan=\"2\">감리자</th>\n </tr>\n <tr>\n <th>적합</th>\n <th>부적합</th>\n <th>적합</th>\n <th>부적합</th>\n </tr>\n </thead>\n <tbody>\n ${processedItems.map(({ item, showMainTypeCell, mainTypeRowspan, showDetailTypeCell, detailTypeRowspan }, idx) => {\n return html` <tr>\n ${showMainTypeCell\n ? html`<td main-type bold rowspan=\"${mainTypeRowspan}\">${CHECKLIST_MAIN_TYPE_LIST[item.mainType]}</td>`\n : ''}\n ${showDetailTypeCell ? html` <td bold rowspan=\"${detailTypeRowspan}\">${item.detailType}</td> ` : ''}\n\n <td>${idx + 1}. ${item.name}</td>\n <td>${item.inspctionCriteria}</td>\n <td radio>\n <md-radio\n item-id=${item.id}\n item-name=\"constructionConfirmStatus\"\n name=${'radio-construction-' + item.id}\n value=\"T\"\n .checked=${item.constructionConfirmStatus === 'T'}\n ?disabled=${!isConstructorStep || !havePermissionByStatus}\n @change=${this._onChangeConfirmStatus}\n ></md-radio>\n </td>\n <td radio>\n <md-radio\n item-id=${item.id}\n item-name=\"constructionConfirmStatus\"\n name=${'radio-construction-' + item.id}\n value=\"F\"\n .checked=${item.constructionConfirmStatus === 'F'}\n ?disabled=${!isConstructorStep || !havePermissionByStatus}\n @change=${this._onChangeConfirmStatus}\n ></md-radio>\n </td>\n <td radio>\n <md-radio\n item-id=${item.id}\n item-name=\"supervisoryConfirmStatus\"\n name=${'radio-supervisory-' + item.id}\n value=\"T\"\n .checked=${item.supervisoryConfirmStatus === 'T'}\n ?disabled=${!isSupervisoryStep || !havePermissionByStatus}\n @change=${this._onChangeConfirmStatus}\n ></md-radio>\n </td>\n <td radio>\n <md-radio\n item-id=${item.id}\n item-name=\"supervisoryConfirmStatus\"\n name=${'radio-supervisory-' + item.id}\n value=\"F\"\n .checked=${item.supervisoryConfirmStatus === 'F'}\n ?disabled=${!isSupervisoryStep || !havePermissionByStatus}\n @change=${this._onChangeConfirmStatus}\n ></md-radio>\n </td>\n <td\n attachment\n ?disabled=${this.status == BuildingInspectionStatus.PASS}\n @click=${() => this._onClickAttachment(item.id)}\n >\n <md-icon slot=\"icon\">attach_file</md-icon>\n <span>${item?.checklistItemAttachmentCount || ''}</span>\n </td>\n <td comment ?disabled=${this.status == BuildingInspectionStatus.PASS} @click=${() => this._onClickComment(item.id)}>\n <md-icon slot=\"icon\">chat</md-icon>\n <span>${item?.checklistItemCommentCount || ''}</span>\n </td>\n </tr>`\n })}\n </tbody>\n </table>\n\n <table tail>\n <tbody>\n <tr first>\n <th rowspan=\"2\">시공자 점검일</th>\n <td rowspan=\"2\">\n ${this.mode == ChecklistMode.VIEWER ? today : this._getDate(this.checklist.constructionInspectionDate)}\n </td>\n <th>공종별 시공 관리자</th>\n <td>\n <span sign-text>(인)</span>\n <ox-input-signature\n .value=${this.checklist.taskConstructorSignature}\n name=\"taskConstructorSignature\"\n @change=${this._onChangeSignature}\n ?disabled=${(this.status != BuildingInspectionStatus.WAIT && this.status != BuildingInspectionStatus.FAIL) ||\n !isTaskConstructor}\n >\n </ox-input-signature>\n </td>\n </tr>\n <tr>\n <th>총괄 시공 책임자</th>\n <td>\n <span sign-text>(인)</span>\n <ox-input-signature\n .value=${this.checklist.overallConstructorSignature}\n name=\"overallConstructorSignature\"\n @change=${this._onChangeSignature}\n ?disabled=${this.status != BuildingInspectionStatus.OVERALL_WAIT || !isOverallConstructor}\n >\n </ox-input-signature>\n </td>\n </tr>\n <tr>\n <th rowspan=\"2\">감리자 점검일</th>\n <td rowspan=\"2\">\n ${this.mode == ChecklistMode.VIEWER ? today : this._getDate(this.checklist.supervisorInspectionDate)}\n </td>\n <th>공종별 감리 책임자</th>\n <td>\n <span sign-text>(인)</span>\n <ox-input-signature\n .value=${this.checklist.taskSupervisorySignature}\n name=\"taskSupervisorySignature\"\n @change=${this._onChangeSignature}\n ?disabled=${this.status != BuildingInspectionStatus.REQUEST || !isTaskSupervisory}\n >\n </ox-input-signature>\n </td>\n </tr>\n <tr>\n <th>총괄 감리 책임자</th>\n <td>\n <span sign-text>(인)</span>\n <ox-input-signature\n .value=${this.checklist.overallSupervisorySignature}\n name=\"overallSupervisorySignature\"\n @change=${this._onChangeSignature}\n ?disabled=${this.status != BuildingInspectionStatus.OVERALL_REQUEST || !isOverallSupervisory}\n >\n </ox-input-signature>\n </td>\n </tr>\n </tbody>\n </table>\n\n <div footer>\n <div>\n - 검사결과는 1차, 2차로 구분 재검측시 2차에 기록하고 검사기준도 검사결과와 비교될 수 있도록 시방서 또는 도면 등에 있는\n 수치를 작성하며, 수치가 없는 검사항목은 시방서 또는 설계도서에 있는 내용과 검사한 내용으로 작성함\n </div>\n <div>- 검사항목 및 검사기준은 각 공종별로 감리원과 협의하여 작성할 것</div>\n </div>\n `\n }\n\n private _onChangeConfirmStatus(e: Event) {\n const target = e.target as HTMLInputElement\n const itemId = target.getAttribute('item-id')\n const name = target.getAttribute('item-name') || ''\n const value = target.value\n\n this.checklist.checklistItems = this.checklist?.checklistItems?.map(item =>\n item.id == itemId ? { ...item, [name]: value } : item\n )\n }\n\n private _onChangeSignature(e: Event) {\n const target = e.target as HTMLInputElement\n const { name: userName } = (store.getState() as any).auth?.user\n\n this.checklist[target.name] = target.value\n\n // 서명할 때 해당 사용자 ID도 업데이트\n if (userName) {\n switch (target.name) {\n case 'taskConstructorSignature':\n this.checklist.taskConstructor = { name: userName }\n break\n case 'overallConstructorSignature':\n this.checklist.overallConstructor = { name: userName }\n break\n case 'taskSupervisorySignature':\n this.checklist.taskSupervisory = { name: userName }\n break\n case 'overallSupervisorySignature':\n this.checklist.overallSupervisory = { name: userName }\n break\n }\n }\n }\n\n private _getDate(date) {\n if (!date) return ' 년 월 일'\n\n const _date = new Date(date) || new Date()\n return _date.toLocaleDateString('ko-KR', {\n timeZone: 'Asia/Seoul',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n })\n }\n\n private drawChecklistItems(checklistItems) {\n const mainTypeRowspans = {}\n const detailTypeRowspans = {}\n let previousMainType = null\n let previousDetailType = null\n\n return checklistItems.map((item, index) => {\n const mainType = item.mainType\n const detailType = item.detailType\n\n // mainType이 변경되면 rowspan을 계산\n if (mainType !== previousMainType) {\n mainTypeRowspans[mainType] = checklistItems.filter(i => i.mainType === mainType).length\n previousDetailType = null // detailType 초기화\n }\n\n // detailType이 변경되면 rowspan을 계산\n if (detailType !== previousDetailType) {\n detailTypeRowspans[`${mainType}-${detailType}`] = checklistItems.filter(\n i => i.mainType === mainType && i.detailType === detailType\n ).length\n }\n\n const showMainTypeCell = mainType !== previousMainType\n const showDetailTypeCell = detailType !== previousDetailType\n\n const mainTypeRowspan = mainTypeRowspans[mainType]\n const detailTypeRowspan = detailTypeRowspans[`${mainType}-${detailType}`]\n\n // 이전 값을 업데이트\n previousMainType = mainType\n previousDetailType = detailType\n\n return {\n item,\n showMainTypeCell,\n mainTypeRowspan,\n showDetailTypeCell,\n detailTypeRowspan\n }\n })\n }\n\n private _onClickComment(checklistItemId: string) {\n openPopup(\n html`\n <comment-list-popup\n .checklistItemId=${checklistItemId}\n .status=${this.status}\n .mode=${this.mode}\n @change-comment=${this._refreshItem.bind(this)}\n ></comment-list-popup>\n `,\n { backdrop: true, size: 'medium', title: '조치 사항' }\n )\n }\n\n private _onClickAttachment(checklistItemId: string) {\n openPopup(\n html`\n <attachment-list-popup\n .checklistItemId=${checklistItemId}\n .status=${this.status}\n .mode=${this.mode}\n @change-attachment=${this._refreshItem.bind(this)}\n ></attachment-list-popup>\n `,\n { backdrop: true, size: 'medium', title: '첨부 자료' }\n )\n }\n\n private async _refreshItem(e) {\n const { checklistItemId } = e.detail\n const response = await client.query({\n query: gql`\n query ChecklistItem($checklistItemId: String!) {\n checklistItem(id: $checklistItemId) {\n id\n checklistItemCommentCount\n checklistItemAttachmentCount\n }\n }\n `,\n variables: {\n checklistItemId: checklistItemId\n }\n })\n\n const checklistItem = response.data?.checklistItem || []\n this.checklist.checklistItems = this.checklist.checklistItems.map(item => {\n return item.id != checklistItemId ? item : { ...item, ...checklistItem }\n })\n\n this.requestUpdate()\n }\n}\n"]}
@@ -27,7 +27,7 @@ export declare class InspectionInfoPopup extends InspectionInfoPopup_base {
27
27
  video: HTMLVideoElement;
28
28
  cameraInput: HTMLInputElement;
29
29
  fileInput: any;
30
- render(): import("lit-html").TemplateResult<1>;
30
+ render(): import("lit").TemplateResult<1>;
31
31
  firstUpdated(): Promise<void>;
32
32
  private _loadInspectionInfo;
33
33
  private _onMemoChange;
@@ -9,7 +9,7 @@ export declare class InspectionTabPopup extends LitElement {
9
9
  initialTab: number;
10
10
  activeTab: number;
11
11
  firstUpdated(): void;
12
- render(): import("lit-html").TemplateResult<1>;
12
+ render(): import("lit").TemplateResult<1>;
13
13
  private _renderChecklistTab;
14
14
  private _renderInfoTab;
15
15
  private _setActiveTab;
@@ -38,7 +38,7 @@ export declare class ChecklistTemplateListPage extends ChecklistTemplateListPage
38
38
  }[];
39
39
  toolbar: boolean;
40
40
  };
41
- render(): import("lit-html").TemplateResult<1>;
41
+ render(): import("lit").TemplateResult<1>;
42
42
  pageUpdated(changes: any, lifecycle: any): Promise<void>;
43
43
  pageInitialized(lifecycle: any): Promise<void>;
44
44
  getchecklistTypes(): Promise<void>;
@@ -43,7 +43,7 @@ export declare class ChecklistTypeManagement extends ChecklistTypeManagement_bas
43
43
  }[];
44
44
  toolbar: boolean;
45
45
  };
46
- render(): import("lit-html").TemplateResult<1>;
46
+ render(): import("lit").TemplateResult<1>;
47
47
  pageInitialized(lifecycle: any): Promise<void>;
48
48
  fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
49
49
  total: any;
@@ -5,6 +5,6 @@ export declare class IssueImporter extends LitElement {
5
5
  static styles: import("lit").CSSResult[];
6
6
  private issues;
7
7
  private columns;
8
- render(): import("lit-html").TemplateResult<1>;
8
+ render(): import("lit").TemplateResult<1>;
9
9
  private save;
10
10
  }
@@ -48,7 +48,7 @@ export declare class IssueListPage extends IssueListPage_base {
48
48
  handler: (records: any) => Promise<void>;
49
49
  };
50
50
  };
51
- render(): import("lit-html").TemplateResult<1>;
51
+ render(): import("lit").TemplateResult<1>;
52
52
  pageInitialized(lifecycle: any): Promise<void>;
53
53
  pageUpdated(changes: any, lifecycle: any): Promise<void>;
54
54
  fetchHandler({ page, limit, sortings, filters }: FetchOption): Promise<{
@@ -5,6 +5,6 @@ export declare class ProjectReportImporter extends LitElement {
5
5
  static styles: import("lit").CSSResult[];
6
6
  private projectReports;
7
7
  private columns;
8
- render(): import("lit-html").TemplateResult<1>;
8
+ render(): import("lit").TemplateResult<1>;
9
9
  private save;
10
10
  }