@dssp/dkpi 1.0.0-alpha.8 β†’ 1.0.0-alpha.80

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 (248) hide show
  1. package/KPI-STATISTICS-SERVICE.md +233 -0
  2. package/_index.html +0 -5
  3. package/assets/favicon.ico +0 -0
  4. package/assets/images/project-image.png +0 -0
  5. package/assets/manifest/apple-1024.png +0 -0
  6. package/assets/manifest/apple-120.png +0 -0
  7. package/assets/manifest/apple-152.png +0 -0
  8. package/assets/manifest/apple-167.png +0 -0
  9. package/assets/manifest/apple-180.png +0 -0
  10. package/assets/manifest/apple-touch-icon.png +0 -0
  11. package/assets/manifest/badge-128x128.png +0 -0
  12. package/assets/manifest/chrome-splashscreen-icon-384x384.png +0 -0
  13. package/assets/manifest/chrome-touch-icon-192x192.png +0 -0
  14. package/assets/manifest/icon-128x128.png +0 -0
  15. package/assets/manifest/icon-192x192.png +0 -0
  16. package/assets/manifest/icon-512x512.png +0 -0
  17. package/assets/manifest/icon-72x72.png +0 -0
  18. package/assets/manifest/icon-96x96.png +0 -0
  19. package/assets/manifest/image-metaog.png +0 -0
  20. package/assets/manifest/maskable_icon.png +0 -0
  21. package/assets/manifest/ms-icon-144x144.png +0 -0
  22. package/assets/manifest/ms-touch-icon-144x144-precomposed.png +0 -0
  23. package/assets/videos/intro.mp4 +0 -0
  24. package/config/config.development.js +2 -1
  25. package/config/config.production.js +2 -1
  26. package/dist-client/bootstrap.js +64 -4
  27. package/dist-client/bootstrap.js.map +1 -1
  28. package/dist-client/components/kpi-2d-lookup-chart.d.ts +43 -0
  29. package/dist-client/components/kpi-2d-lookup-chart.js +253 -0
  30. package/dist-client/components/kpi-2d-lookup-chart.js.map +1 -0
  31. package/dist-client/components/kpi-boxplot-chart.d.ts +24 -0
  32. package/dist-client/components/kpi-boxplot-chart.js +291 -0
  33. package/dist-client/components/kpi-boxplot-chart.js.map +1 -0
  34. package/dist-client/components/kpi-lookup-chart.d.ts +53 -0
  35. package/dist-client/components/kpi-lookup-chart.js +430 -0
  36. package/dist-client/components/kpi-lookup-chart.js.map +1 -0
  37. package/dist-client/components/kpi-mini-trend-chart.d.ts +14 -0
  38. package/dist-client/components/kpi-mini-trend-chart.js +148 -0
  39. package/dist-client/components/kpi-mini-trend-chart.js.map +1 -0
  40. package/dist-client/components/kpi-radar-chart.d.ts +17 -0
  41. package/dist-client/components/kpi-radar-chart.js +259 -0
  42. package/dist-client/components/kpi-radar-chart.js.map +1 -0
  43. package/dist-client/components/kpi-single-boxplot-chart.d.ts +24 -0
  44. package/dist-client/components/kpi-single-boxplot-chart.js +391 -0
  45. package/dist-client/components/kpi-single-boxplot-chart.js.map +1 -0
  46. package/dist-client/components/kpi-trend-chart.d.ts +25 -0
  47. package/dist-client/components/kpi-trend-chart.js +220 -0
  48. package/dist-client/components/kpi-trend-chart.js.map +1 -0
  49. package/dist-client/components/sv-pagenation-control.d.ts +18 -0
  50. package/dist-client/components/sv-pagenation-control.js +142 -0
  51. package/dist-client/components/sv-pagenation-control.js.map +1 -0
  52. package/dist-client/entries/auth/checkin.d.ts +38 -0
  53. package/dist-client/entries/auth/checkin.js +546 -0
  54. package/dist-client/entries/auth/checkin.js.map +1 -0
  55. package/dist-client/google-map/common-google-map.d.ts +35 -0
  56. package/dist-client/google-map/common-google-map.js +345 -0
  57. package/dist-client/google-map/common-google-map.js.map +1 -0
  58. package/dist-client/google-map/google-map-loader.d.ts +6 -0
  59. package/dist-client/google-map/google-map-loader.js +23 -0
  60. package/dist-client/google-map/google-map-loader.js.map +1 -0
  61. package/dist-client/icons/menu-icons.d.ts +6 -0
  62. package/dist-client/icons/menu-icons.js +42 -0
  63. package/dist-client/icons/menu-icons.js.map +1 -1
  64. package/dist-client/pages/kpi-admin/dssp-kpi-list-page.d.ts +22 -0
  65. package/dist-client/pages/kpi-admin/dssp-kpi-list-page.js +57 -0
  66. package/dist-client/pages/kpi-admin/dssp-kpi-list-page.js.map +1 -0
  67. package/dist-client/pages/kpi-admin/dssp-kpi-overview.d.ts +46 -0
  68. package/dist-client/pages/kpi-admin/dssp-kpi-overview.js +378 -0
  69. package/dist-client/pages/kpi-admin/dssp-kpi-overview.js.map +1 -0
  70. package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.d.ts +20 -0
  71. package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.js +445 -0
  72. package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.js.map +1 -0
  73. package/dist-client/pages/kpi-admin/kpi-system-guide.d.ts +18 -0
  74. package/dist-client/pages/kpi-admin/kpi-system-guide.js +535 -0
  75. package/dist-client/pages/kpi-admin/kpi-system-guide.js.map +1 -0
  76. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +18 -0
  77. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +259 -0
  78. package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -0
  79. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +22 -0
  80. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +346 -0
  81. package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -0
  82. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +26 -0
  83. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +433 -0
  84. package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -0
  85. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.d.ts +8 -0
  86. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js +78 -0
  87. package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js.map +1 -0
  88. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +38 -0
  89. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +851 -0
  90. package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -0
  91. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +42 -0
  92. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +316 -0
  93. package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +1 -0
  94. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +28 -0
  95. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +497 -0
  96. package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -0
  97. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.d.ts +18 -0
  98. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js +131 -0
  99. package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js.map +1 -0
  100. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +52 -0
  101. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +798 -0
  102. package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -0
  103. package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +63 -0
  104. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +1089 -0
  105. package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -0
  106. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.d.ts +12 -0
  107. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js +82 -0
  108. package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js.map +1 -0
  109. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.d.ts +11 -0
  110. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js +65 -0
  111. package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js.map +1 -0
  112. package/dist-client/pages/kpi-dashboard/kpi-list-summary.d.ts +13 -0
  113. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js +115 -0
  114. package/dist-client/pages/kpi-dashboard/kpi-list-summary.js.map +1 -0
  115. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.d.ts +15 -0
  116. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +147 -0
  117. package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -0
  118. package/dist-client/pages/kpi-dashboard/kpi-value-entry.d.ts +7 -0
  119. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js +86 -0
  120. package/dist-client/pages/kpi-dashboard/kpi-value-entry.js.map +1 -0
  121. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +57 -0
  122. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +719 -0
  123. package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -0
  124. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +23 -0
  125. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +76 -0
  126. package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +1 -0
  127. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +68 -0
  128. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +394 -0
  129. package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -0
  130. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +12 -0
  131. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +174 -0
  132. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +1 -0
  133. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +40 -0
  134. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +190 -0
  135. package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +1 -0
  136. package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +23 -0
  137. package/dist-client/pages/kpi-value/kpi-value-importer.js +93 -0
  138. package/dist-client/pages/kpi-value/kpi-value-importer.js.map +1 -0
  139. package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +71 -0
  140. package/dist-client/pages/kpi-value/kpi-value-list-page.js +454 -0
  141. package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -0
  142. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +47 -0
  143. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +756 -0
  144. package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -0
  145. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +14 -0
  146. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +276 -0
  147. package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +1 -0
  148. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.d.ts +18 -0
  149. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +307 -0
  150. package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +1 -0
  151. package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.d.ts +18 -0
  152. package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js +433 -0
  153. package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js.map +1 -0
  154. package/dist-client/pages/sv-project-complete.d.ts +22 -0
  155. package/dist-client/pages/sv-project-complete.js +232 -0
  156. package/dist-client/pages/sv-project-complete.js.map +1 -0
  157. package/dist-client/pages/sv-project-completed-list.d.ts +27 -0
  158. package/dist-client/pages/sv-project-completed-list.js +416 -0
  159. package/dist-client/pages/sv-project-completed-list.js.map +1 -0
  160. package/dist-client/pages/sv-project-detail.d.ts +47 -0
  161. package/dist-client/pages/sv-project-detail.js +1282 -0
  162. package/dist-client/pages/sv-project-detail.js.map +1 -0
  163. package/dist-client/pages/sv-project-list.d.ts +165 -0
  164. package/dist-client/pages/sv-project-list.js +488 -0
  165. package/dist-client/pages/sv-project-list.js.map +1 -0
  166. package/dist-client/pages/sv-user-management.d.ts +1 -0
  167. package/dist-client/pages/sv-user-management.js +5 -0
  168. package/dist-client/pages/sv-user-management.js.map +1 -1
  169. package/dist-client/route.d.ts +1 -1
  170. package/dist-client/route.js +47 -2
  171. package/dist-client/route.js.map +1 -1
  172. package/dist-client/shared/complete-api.d.ts +36 -0
  173. package/dist-client/shared/complete-api.js +198 -0
  174. package/dist-client/shared/complete-api.js.map +1 -0
  175. package/dist-client/shared/domain-context.d.ts +7 -0
  176. package/dist-client/shared/domain-context.js +13 -0
  177. package/dist-client/shared/domain-context.js.map +1 -0
  178. package/dist-client/shared/func.d.ts +2 -0
  179. package/dist-client/shared/func.js +22 -0
  180. package/dist-client/shared/func.js.map +1 -0
  181. package/dist-client/shared/integration-fetch.d.ts +35 -0
  182. package/dist-client/shared/integration-fetch.js +53 -0
  183. package/dist-client/shared/integration-fetch.js.map +1 -0
  184. package/dist-client/themes/dark.css +24 -24
  185. package/dist-client/themes/light.css +23 -23
  186. package/dist-client/tsconfig.tsbuildinfo +1 -1
  187. package/dist-client/viewparts/menu-tools.d.ts +40 -5
  188. package/dist-client/viewparts/menu-tools.js +300 -42
  189. package/dist-client/viewparts/menu-tools.js.map +1 -1
  190. package/dist-server/index.d.ts +2 -0
  191. package/dist-server/index.js +5 -0
  192. package/dist-server/index.js.map +1 -1
  193. package/dist-server/migrations/index.d.ts +1 -0
  194. package/dist-server/migrations/index.js +12 -0
  195. package/dist-server/migrations/index.js.map +1 -0
  196. package/dist-server/scripts/calculate-kpi-scores.d.ts +10 -0
  197. package/dist-server/scripts/calculate-kpi-scores.js +333 -0
  198. package/dist-server/scripts/calculate-kpi-scores.js.map +1 -0
  199. package/dist-server/scripts/load-grade-data-migration.d.ts +14 -0
  200. package/dist-server/scripts/load-grade-data-migration.js +279 -0
  201. package/dist-server/scripts/load-grade-data-migration.js.map +1 -0
  202. package/dist-server/scripts/propagate-parent-kpi-values.d.ts +14 -0
  203. package/dist-server/scripts/propagate-parent-kpi-values.js +786 -0
  204. package/dist-server/scripts/propagate-parent-kpi-values.js.map +1 -0
  205. package/dist-server/scripts/recalculate-by-project-name.d.ts +2 -0
  206. package/dist-server/scripts/recalculate-by-project-name.js +72 -0
  207. package/dist-server/scripts/recalculate-by-project-name.js.map +1 -0
  208. package/dist-server/service/index.d.ts +4 -0
  209. package/dist-server/service/index.js +20 -0
  210. package/dist-server/service/index.js.map +1 -0
  211. package/dist-server/service/kpi-metric-value/index.d.ts +4 -0
  212. package/dist-server/service/kpi-metric-value/index.js +8 -0
  213. package/dist-server/service/kpi-metric-value/index.js.map +1 -0
  214. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +143 -0
  215. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +907 -0
  216. package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -0
  217. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +7 -0
  218. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +52 -0
  219. package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +1 -0
  220. package/dist-server/service/kpi-stat/index.d.ts +4 -0
  221. package/dist-server/service/kpi-stat/index.js +8 -0
  222. package/dist-server/service/kpi-stat/index.js.map +1 -0
  223. package/dist-server/service/kpi-stat/kpi-stat-query.d.ts +12 -0
  224. package/dist-server/service/kpi-stat/kpi-stat-query.js +662 -0
  225. package/dist-server/service/kpi-stat/kpi-stat-query.js.map +1 -0
  226. package/dist-server/service/kpi-stat/kpi-stat-types.d.ts +32 -0
  227. package/dist-server/service/kpi-stat/kpi-stat-types.js +180 -0
  228. package/dist-server/service/kpi-stat/kpi-stat-types.js.map +1 -0
  229. package/dist-server/service/kpi-value/index.d.ts +3 -0
  230. package/dist-server/service/kpi-value/index.js +7 -0
  231. package/dist-server/service/kpi-value/index.js.map +1 -0
  232. package/dist-server/service/kpi-value/kpi-value-query.d.ts +8 -0
  233. package/dist-server/service/kpi-value/kpi-value-query.js +63 -0
  234. package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -0
  235. package/dist-server/tsconfig.tsbuildinfo +1 -1
  236. package/kpi-module-service-tests.md +1286 -0
  237. package/kpi-module-test-report.md +676 -0
  238. package/kpi-module-unit-test-detailed-report.md +925 -0
  239. package/kpi-module-unit-tests-detailed.md +1452 -0
  240. package/package.json +69 -55
  241. package/recalculate-batch.sh +64 -0
  242. package/recalculate-projects-range.sh +98 -0
  243. package/schema.graphql +3391 -442
  244. package/things-factory.config.js +11 -1
  245. package/translations/en.json +5 -1
  246. package/translations/ko.json +5 -1
  247. package/views/auth-page.html +0 -1
  248. package/views/public/home.html +0 -1
@@ -1,10 +1,55 @@
1
+ function getDomainType() {
2
+ // URL pattern: /{extType}/{subdomain}/<rest>
3
+ const match = window.location.pathname.match(/^\/([^\/]+)\/[^\/]+/);
4
+ return (match === null || match === void 0 ? void 0 : match[1]) || 'domain';
5
+ }
1
6
  export default function route(page) {
7
+ // 도메인 νƒ€μž…λ³„ μ§„μž… νŽ˜μ΄μ§€ λΆ„κΈ°
8
+ if (page === '') {
9
+ const domainType = getDomainType();
10
+ if (domainType === 'project') {
11
+ return '/project-detail'; // dkpi μ—μ„œλŠ” sv-project-detail 둜 맀핑됨
12
+ }
13
+ return '/kpi-dashboard-map';
14
+ }
2
15
  switch (page) {
3
- case '':
4
- return '/dashboard';
5
16
  case 'users':
6
17
  import('./pages/sv-user-management');
7
18
  return page;
19
+ case 'kpi-dashboard-map':
20
+ import('./pages/kpi-dashboard/kpi-dashboard-map');
21
+ return page;
22
+ case 'project-list':
23
+ import('./pages/sv-project-list');
24
+ return page;
25
+ case 'project-completed-list':
26
+ import('./pages/sv-project-completed-list');
27
+ return page;
28
+ case 'project-detail':
29
+ import('./pages/sv-project-detail');
30
+ return page;
31
+ case 'project-complete':
32
+ import('./pages/sv-project-complete');
33
+ return page;
34
+ case 'kpi-value-list':
35
+ import('./pages/kpi-value/kpi-value-list-page');
36
+ return page;
37
+ case 'kpi-metric-value-list':
38
+ import('./pages/kpi-metric-value/kpi-metric-value-list-page');
39
+ return page;
40
+ case 'kpi-metric-value-manual-entry':
41
+ import('./pages/kpi-metric-value/kpi-metric-value-manual-entry-page');
42
+ return page;
43
+ case 'kpi-overview':
44
+ import('./pages/kpi-admin/dssp-kpi-overview');
45
+ return page;
46
+ case 'kpi-system-guide':
47
+ import('./pages/kpi-admin/kpi-system-guide');
48
+ return page;
49
+ case 'kpi-list':
50
+ case 'kpi-admin':
51
+ import('./pages/kpi-admin/dssp-kpi-list-page');
52
+ return page;
8
53
  }
9
54
  }
10
55
  //# sourceMappingURL=route.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY;IACxC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,EAAE;YACL,OAAO,YAAY,CAAA;QAErB,KAAK,OAAO;YACV,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC","sourcesContent":["export default function route(page: string) {\n switch (page) {\n case '':\n return '/dashboard'\n\n case 'users':\n import('./pages/sv-user-management')\n return page\n }\n}\n"]}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,SAAS,aAAa;IACpB,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACnE,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,KAAI,QAAQ,CAAA;AAC/B,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY;IACxC,oBAAoB;IACpB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;QAClC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,iBAAiB,CAAA,CAAC,mCAAmC;QAC9D,CAAC;QACD,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QAEb,KAAK,OAAO;YACV,MAAM,CAAC,4BAA4B,CAAC,CAAA;YACpC,OAAO,IAAI,CAAA;QAEb,KAAK,mBAAmB;YACtB,MAAM,CAAC,yCAAyC,CAAC,CAAA;YACjD,OAAO,IAAI,CAAA;QAEb,KAAK,cAAc;YACjB,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACjC,OAAO,IAAI,CAAA;QAEb,KAAK,wBAAwB;YAC3B,MAAM,CAAC,mCAAmC,CAAC,CAAA;YAC3C,OAAO,IAAI,CAAA;QAEb,KAAK,gBAAgB;YACnB,MAAM,CAAC,2BAA2B,CAAC,CAAA;YACnC,OAAO,IAAI,CAAA;QAEb,KAAK,kBAAkB;YACrB,MAAM,CAAC,6BAA6B,CAAC,CAAA;YACrC,OAAO,IAAI,CAAA;QAEb,KAAK,gBAAgB;YACnB,MAAM,CAAC,uCAAuC,CAAC,CAAA;YAC/C,OAAO,IAAI,CAAA;QAEb,KAAK,uBAAuB;YAC1B,MAAM,CAAC,qDAAqD,CAAC,CAAA;YAC7D,OAAO,IAAI,CAAA;QAEb,KAAK,+BAA+B;YAClC,MAAM,CAAC,6DAA6D,CAAC,CAAA;YACrE,OAAO,IAAI,CAAA;QAEb,KAAK,cAAc;YACjB,MAAM,CAAC,qCAAqC,CAAC,CAAA;YAC7C,OAAO,IAAI,CAAA;QAEb,KAAK,kBAAkB;YACrB,MAAM,CAAC,oCAAoC,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAA;QAEb,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW;YACd,MAAM,CAAC,sCAAsC,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC","sourcesContent":["function getDomainType(): string {\n // URL pattern: /{extType}/{subdomain}/<rest>\n const match = window.location.pathname.match(/^\\/([^\\/]+)\\/[^\\/]+/)\n return match?.[1] || 'domain'\n}\n\nexport default function route(page: string) {\n // 도메인 νƒ€μž…λ³„ μ§„μž… νŽ˜μ΄μ§€ λΆ„κΈ°\n if (page === '') {\n const domainType = getDomainType()\n if (domainType === 'project') {\n return '/project-detail' // dkpi μ—μ„œλŠ” sv-project-detail 둜 맀핑됨\n }\n return '/kpi-dashboard-map'\n }\n\n switch (page) {\n\n case 'users':\n import('./pages/sv-user-management')\n return page\n\n case 'kpi-dashboard-map':\n import('./pages/kpi-dashboard/kpi-dashboard-map')\n return page\n\n case 'project-list':\n import('./pages/sv-project-list')\n return page\n\n case 'project-completed-list':\n import('./pages/sv-project-completed-list')\n return page\n\n case 'project-detail':\n import('./pages/sv-project-detail')\n return page\n\n case 'project-complete':\n import('./pages/sv-project-complete')\n return page\n\n case 'kpi-value-list':\n import('./pages/kpi-value/kpi-value-list-page')\n return page\n\n case 'kpi-metric-value-list':\n import('./pages/kpi-metric-value/kpi-metric-value-list-page')\n return page\n\n case 'kpi-metric-value-manual-entry':\n import('./pages/kpi-metric-value/kpi-metric-value-manual-entry-page')\n return page\n\n case 'kpi-overview':\n import('./pages/kpi-admin/dssp-kpi-overview')\n return page\n\n case 'kpi-system-guide':\n import('./pages/kpi-admin/kpi-system-guide')\n return page\n\n case 'kpi-list':\n case 'kpi-admin':\n import('./pages/kpi-admin/dssp-kpi-list-page')\n return page\n }\n}\n"]}
@@ -0,0 +1,36 @@
1
+ export declare const getProject: (projectId: string) => Promise<any>;
2
+ export declare const getKpiMetrics: () => Promise<any>;
3
+ export declare const getKpiMetricValues: (projectId: string) => Promise<any>;
4
+ export declare const getKpiCategories: () => Promise<any>;
5
+ export declare const updateProjectCompleteStep1: (patches: any) => Promise<import("@apollo/client").InteropMutateResult<any>>;
6
+ export declare const updateProjectCompleteStep2: (patches: any) => Promise<import("@apollo/client").InteropMutateResult<any>>;
7
+ export declare const updateProjectCompleteStep3: (file: any, projectId: string) => Promise<import("@apollo/client").InteropMutateResult<any>>;
8
+ /**
9
+ * UI "μžλ™ μˆ˜μ§‘" λ²„νŠΌ μ „μš© β€” 세움터/μ˜¬λ°”λ‘œ/ν‚€μŠ€μ½˜ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό 순차 호좜 ν›„
10
+ * μ‹œμŠ€ν…œλ³„ 성곡/μ‹€νŒ¨ κ²°κ³Όλ₯Ό λ°˜ν™˜. μ‹œλ‚˜λ¦¬μ˜€λŠ” 도메인 EnvVar 만으둜 λ™μž‘ν•˜λ―€λ‘œ
11
+ * νŒŒλΌλ―Έν„° μ—†μŒ. μ‹œλ‚˜λ¦¬μ˜€ λ‚΄λΆ€ step 이 KPI Value λ₯Ό DB 에 μ μž¬ν•˜λ―€λ‘œ 호좜 ν›„
12
+ * KPI Metric Values λ₯Ό λ‹€μ‹œ μ‘°νšŒν•΄ form 을 κ°±μ‹ ν•˜λŠ” 것이 정상 흐름.
13
+ */
14
+ export interface ExternalDataCollectionResult {
15
+ source: string;
16
+ label: string;
17
+ ok: boolean;
18
+ message: string;
19
+ /**
20
+ * μ‹œλ‚˜λ¦¬μ˜€ result 객체. projectKey: value λ§΅.
21
+ * - 세움터: { area, floorAreaRatio, upperFloorCount, lowerFloorCount,
22
+ * structureType, siteType }
23
+ * - μ˜¬λ°”λ‘œ: { totalConstructionWasteAmount }
24
+ * - ν‚€μŠ€μ½˜: { constructionPeriod, constructionCost }
25
+ *
26
+ * siteType (건물 μš©λ„, SiteType enum κ°’ β€” 예: APARTMENT_COMPLEX) 와
27
+ * structureType (κ΅¬μ‘°ν˜•νƒœ) λŠ” KPI metric 이 μ•„λ‹ˆλΌ BuildingComplex 의 κΈ°λ³Έ
28
+ * μ†μ„±μœΌλ‘œ μ‚¬μš©. KISCON 의 "κ³΅μ‚¬μœ ν˜•(μ‹ μ„€/증좕)" 은 SiteType 도메인과 λ‹€λ₯΄λ―€λ‘œ
29
+ * λ§€ν•‘ λŒ€μƒ μ•„λ‹˜.
30
+ *
31
+ * μ—†λŠ” ν‚€λŠ” omit. μ‹œλ‚˜λ¦¬μ˜€ μ‹€νŒ¨ μ‹œ null/undefined.
32
+ */
33
+ data?: Record<string, number | string | null>;
34
+ }
35
+ export declare const collectProjectExternalData: (projectId: string) => Promise<ExternalDataCollectionResult[]>;
36
+ export declare const updateProjectCompleteFinalize: (projectId: string) => Promise<import("@apollo/client").InteropMutateResult<any>>;
@@ -0,0 +1,198 @@
1
+ import { gql } from '@apollo/client';
2
+ import { client } from '@operato/graphql';
3
+ export const getProject = async (projectId) => {
4
+ const response = await client.query({
5
+ query: gql `
6
+ query Project($id: String!) {
7
+ project(id: $id) {
8
+ id
9
+ name
10
+ startDate
11
+ endDate
12
+ state
13
+
14
+ completeReport {
15
+ id
16
+ name
17
+ fullpath
18
+ }
19
+
20
+ buildingComplex {
21
+ id
22
+ coverageRatio
23
+ floorAreaRatio
24
+ workerCount
25
+ designChangeCount
26
+ constructionCost
27
+ area
28
+ }
29
+ }
30
+ }
31
+ `,
32
+ variables: { id: projectId }
33
+ });
34
+ if (response.errors) {
35
+ return {};
36
+ }
37
+ return response.data.project;
38
+ };
39
+ export const getKpiMetrics = async () => {
40
+ const response = await client.query({
41
+ query: gql `
42
+ query KpiMetrics {
43
+ kpiMetrics {
44
+ items {
45
+ id
46
+ name
47
+ unit
48
+ periodType
49
+ }
50
+ }
51
+ }
52
+ `
53
+ });
54
+ if (response.errors) {
55
+ return [];
56
+ }
57
+ return response.data.kpiMetrics.items;
58
+ };
59
+ export const getKpiMetricValues = async (projectId) => {
60
+ const filters = [{ name: 'org', operator: 'eq', value: projectId }];
61
+ const response = await client.query({
62
+ query: gql `
63
+ query KpiMetricValues($filters: [Filter!]) {
64
+ kpiMetricValues(filters: $filters) {
65
+ items {
66
+ id
67
+ value
68
+ unit
69
+ periodType
70
+ metricId
71
+ }
72
+ }
73
+ }
74
+ `,
75
+ variables: {
76
+ filters
77
+ }
78
+ });
79
+ if (response.errors) {
80
+ return [];
81
+ }
82
+ return response.data.kpiMetricValues.items;
83
+ };
84
+ export const getKpiCategories = async () => {
85
+ const response = await client.query({
86
+ query: gql `
87
+ query {
88
+ kpiCategories: kpisLevel1 {
89
+ id
90
+ name
91
+ description
92
+ active
93
+ kpis: children {
94
+ id
95
+ name
96
+ description
97
+ formula
98
+ active
99
+ grades
100
+ }
101
+ }
102
+ }
103
+ `
104
+ });
105
+ if (response.errors) {
106
+ return [];
107
+ }
108
+ return response.data.kpiCategories;
109
+ };
110
+ export const updateProjectCompleteStep1 = async (patches) => {
111
+ const response = await client.mutate({
112
+ mutation: gql `
113
+ mutation UpdateKpiMetricValuesCumulative($patches: [KpiMetricValuePatch!]!) {
114
+ updateKpiMetricValuesCumulative(patches: $patches) {
115
+ id
116
+ }
117
+ }
118
+ `,
119
+ variables: {
120
+ patches
121
+ }
122
+ });
123
+ return response;
124
+ };
125
+ export const updateProjectCompleteStep2 = async (patches) => {
126
+ const response = await client.mutate({
127
+ mutation: gql `
128
+ mutation UpdateKpiMetricValuesAssessment($patches: [KpiMetricValuePatch!]!) {
129
+ updateKpiMetricValuesAssessment(patches: $patches) {
130
+ id
131
+ }
132
+ }
133
+ `,
134
+ variables: {
135
+ patches
136
+ }
137
+ });
138
+ return response;
139
+ };
140
+ export const updateProjectCompleteStep3 = async (file, projectId) => {
141
+ const response = await client.mutate({
142
+ mutation: gql `
143
+ mutation UpdateKpiMetricValuesSentiment($attachment: NewAttachment!) {
144
+ updateKpiMetricValuesSentiment(attachment: $attachment) {
145
+ id
146
+ name
147
+ fullpath
148
+ }
149
+ }
150
+ `,
151
+ variables: {
152
+ attachment: {
153
+ file,
154
+ refBy: projectId,
155
+ refType: 'ProjectCompleteReport'
156
+ }
157
+ },
158
+ context: {
159
+ hasUpload: true
160
+ }
161
+ });
162
+ return response;
163
+ };
164
+ export const collectProjectExternalData = async (projectId) => {
165
+ const response = await client.mutate({
166
+ mutation: gql `
167
+ mutation CollectProjectExternalData($projectId: String!) {
168
+ collectProjectExternalData(projectId: $projectId) {
169
+ source
170
+ label
171
+ ok
172
+ message
173
+ data
174
+ }
175
+ }
176
+ `,
177
+ variables: { projectId }
178
+ });
179
+ if (response.errors) {
180
+ // 전체 mutation 자체 μ‹€νŒ¨ β€” UI κ°€ μ‹œμŠ€ν…œλ³„ fallback κ²°κ³Ό ꡬ성
181
+ throw new Error(response.errors.map((e) => e.message).join('\n'));
182
+ }
183
+ return response.data.collectProjectExternalData;
184
+ };
185
+ export const updateProjectCompleteFinalize = async (projectId) => {
186
+ const response = await client.mutate({
187
+ mutation: gql `
188
+ mutation FinalizeProjectWithKpiRecalculation($projectId: String!) {
189
+ finalizeProjectWithKpiRecalculation(projectId: $projectId)
190
+ }
191
+ `,
192
+ variables: {
193
+ projectId
194
+ }
195
+ });
196
+ return response;
197
+ };
198
+ //# sourceMappingURL=complete-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete-api.js","sourceRoot":"","sources":["../../client/shared/complete-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { gql } from '@apollo/client'\nimport { client } from '@operato/graphql'\n\nexport const getProject = async (projectId: string) => {\n const response = await client.query({\n query: gql`\n query Project($id: String!) {\n project(id: $id) {\n id\n name\n startDate\n endDate\n state\n\n completeReport {\n id\n name\n fullpath\n }\n\n buildingComplex {\n id\n coverageRatio\n floorAreaRatio\n workerCount\n designChangeCount\n constructionCost\n area\n }\n }\n }\n `,\n variables: { id: projectId }\n })\n\n if (response.errors) {\n return {}\n }\n\n return response.data.project\n}\n\nexport const getKpiMetrics = async () => {\n const response = await client.query({\n query: gql`\n query KpiMetrics {\n kpiMetrics {\n items {\n id\n name\n unit\n periodType\n }\n }\n }\n `\n })\n\n if (response.errors) {\n return []\n }\n\n return response.data.kpiMetrics.items\n}\n\nexport const getKpiMetricValues = async (projectId: string) => {\n const filters = [{ name: 'org', operator: 'eq', value: projectId }]\n\n const response = await client.query({\n query: gql`\n query KpiMetricValues($filters: [Filter!]) {\n kpiMetricValues(filters: $filters) {\n items {\n id\n value\n unit\n periodType\n metricId\n }\n }\n }\n `,\n variables: {\n filters\n }\n })\n\n if (response.errors) {\n return []\n }\n\n return response.data.kpiMetricValues.items\n}\n\nexport const getKpiCategories = async () => {\n const response = await client.query({\n query: gql`\n query {\n kpiCategories: kpisLevel1 {\n id\n name\n description\n active\n kpis: children {\n id\n name\n description\n formula\n active\n grades\n }\n }\n }\n `\n })\n\n if (response.errors) {\n return []\n }\n\n return response.data.kpiCategories\n}\n\nexport const updateProjectCompleteStep1 = async (patches: any) => {\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateKpiMetricValuesCumulative($patches: [KpiMetricValuePatch!]!) {\n updateKpiMetricValuesCumulative(patches: $patches) {\n id\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n return response\n}\n\nexport const updateProjectCompleteStep2 = async (patches: any) => {\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateKpiMetricValuesAssessment($patches: [KpiMetricValuePatch!]!) {\n updateKpiMetricValuesAssessment(patches: $patches) {\n id\n }\n }\n `,\n variables: {\n patches\n }\n })\n\n return response\n}\n\nexport const updateProjectCompleteStep3 = async (file: any, projectId: string) => {\n const response = await client.mutate({\n mutation: gql`\n mutation UpdateKpiMetricValuesSentiment($attachment: NewAttachment!) {\n updateKpiMetricValuesSentiment(attachment: $attachment) {\n id\n name\n fullpath\n }\n }\n `,\n variables: {\n attachment: {\n file,\n refBy: projectId,\n refType: 'ProjectCompleteReport'\n }\n },\n context: {\n hasUpload: true\n }\n })\n\n return response\n}\n\n/**\n * UI \"μžλ™ μˆ˜μ§‘\" λ²„νŠΌ μ „μš© β€” 세움터/μ˜¬λ°”λ‘œ/ν‚€μŠ€μ½˜ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό 순차 호좜 ν›„\n * μ‹œμŠ€ν…œλ³„ 성곡/μ‹€νŒ¨ κ²°κ³Όλ₯Ό λ°˜ν™˜. μ‹œλ‚˜λ¦¬μ˜€λŠ” 도메인 EnvVar 만으둜 λ™μž‘ν•˜λ―€λ‘œ\n * νŒŒλΌλ―Έν„° μ—†μŒ. μ‹œλ‚˜λ¦¬μ˜€ λ‚΄λΆ€ step 이 KPI Value λ₯Ό DB 에 μ μž¬ν•˜λ―€λ‘œ 호좜 ν›„\n * KPI Metric Values λ₯Ό λ‹€μ‹œ μ‘°νšŒν•΄ form 을 κ°±μ‹ ν•˜λŠ” 것이 정상 흐름.\n */\nexport interface ExternalDataCollectionResult {\n source: string // 'saeumteo' | 'allbaro' | 'kiscon'\n label: string // '세움터' | 'μ˜¬λ°”λ‘œ' | 'ν‚€μŠ€μ½˜'\n ok: boolean\n message: string\n /**\n * μ‹œλ‚˜λ¦¬μ˜€ result 객체. projectKey: value λ§΅.\n * - 세움터: { area, floorAreaRatio, upperFloorCount, lowerFloorCount,\n * structureType, siteType }\n * - μ˜¬λ°”λ‘œ: { totalConstructionWasteAmount }\n * - ν‚€μŠ€μ½˜: { constructionPeriod, constructionCost }\n *\n * siteType (건물 μš©λ„, SiteType enum κ°’ β€” 예: APARTMENT_COMPLEX) 와\n * structureType (κ΅¬μ‘°ν˜•νƒœ) λŠ” KPI metric 이 μ•„λ‹ˆλΌ BuildingComplex 의 κΈ°λ³Έ\n * μ†μ„±μœΌλ‘œ μ‚¬μš©. KISCON 의 \"κ³΅μ‚¬μœ ν˜•(μ‹ μ„€/증좕)\" 은 SiteType 도메인과 λ‹€λ₯΄λ―€λ‘œ\n * λ§€ν•‘ λŒ€μƒ μ•„λ‹˜.\n *\n * μ—†λŠ” ν‚€λŠ” omit. μ‹œλ‚˜λ¦¬μ˜€ μ‹€νŒ¨ μ‹œ null/undefined.\n */\n data?: Record<string, number | string | null>\n}\n\nexport const collectProjectExternalData = async (\n projectId: string\n): Promise<ExternalDataCollectionResult[]> => {\n const response = await client.mutate({\n mutation: gql`\n mutation CollectProjectExternalData($projectId: String!) {\n collectProjectExternalData(projectId: $projectId) {\n source\n label\n ok\n message\n data\n }\n }\n `,\n variables: { projectId }\n })\n\n if (response.errors) {\n // 전체 mutation 자체 μ‹€νŒ¨ β€” UI κ°€ μ‹œμŠ€ν…œλ³„ fallback κ²°κ³Ό ꡬ성\n throw new Error(response.errors.map((e: any) => e.message).join('\\n'))\n }\n\n return response.data.collectProjectExternalData\n}\n\nexport const updateProjectCompleteFinalize = async (projectId: string) => {\n const response = await client.mutate({\n mutation: gql`\n mutation FinalizeProjectWithKpiRecalculation($projectId: String!) {\n finalizeProjectWithKpiRecalculation(projectId: $projectId)\n }\n `,\n variables: {\n projectId\n }\n })\n\n return response\n}\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * λ©€ν‹°ν…Œλ„ŒνŠΈ 도메인 μ»¨ν…μŠ€νŠΈ 헬퍼.
3
+ * URL νŒ¨ν„΄: /{extType}/{subdomain}/<rest> (μ°Έμ‘°: client/route.ts)
4
+ * extType === 'project' 인 경우 단일 ν”„λ‘œμ νŠΈ μŠ€μ½”ν”„ 도메인이닀.
5
+ */
6
+ export declare function getDomainType(): string;
7
+ export declare function isProjectTypeDomain(): boolean;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * λ©€ν‹°ν…Œλ„ŒνŠΈ 도메인 μ»¨ν…μŠ€νŠΈ 헬퍼.
3
+ * URL νŒ¨ν„΄: /{extType}/{subdomain}/<rest> (μ°Έμ‘°: client/route.ts)
4
+ * extType === 'project' 인 경우 단일 ν”„λ‘œμ νŠΈ μŠ€μ½”ν”„ 도메인이닀.
5
+ */
6
+ export function getDomainType() {
7
+ const match = window.location.pathname.match(/^\/([^\/]+)\/[^\/]+/);
8
+ return (match === null || match === void 0 ? void 0 : match[1]) || 'domain';
9
+ }
10
+ export function isProjectTypeDomain() {
11
+ return getDomainType() === 'project';
12
+ }
13
+ //# sourceMappingURL=domain-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-context.js","sourceRoot":"","sources":["../../client/shared/domain-context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACnE,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,KAAI,QAAQ,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,aAAa,EAAE,KAAK,SAAS,CAAA;AACtC,CAAC","sourcesContent":["/**\n * λ©€ν‹°ν…Œλ„ŒνŠΈ 도메인 μ»¨ν…μŠ€νŠΈ 헬퍼.\n * URL νŒ¨ν„΄: /{extType}/{subdomain}/<rest> (μ°Έμ‘°: client/route.ts)\n * extType === 'project' 인 경우 단일 ν”„λ‘œμ νŠΈ μŠ€μ½”ν”„ 도메인이닀.\n */\nexport function getDomainType(): string {\n const match = window.location.pathname.match(/^\\/([^\\/]+)\\/[^\\/]+/)\n return match?.[1] || 'domain'\n}\n\nexport function isProjectTypeDomain(): boolean {\n return getDomainType() === 'project'\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const calcDiff: (a: string | number, b: string | number) => number;
2
+ export declare const calcDateDiff: (a: string, b: string) => number;
@@ -0,0 +1,22 @@
1
+ import moment from 'moment';
2
+ // a와 b의 차이λ₯Ό κ³„μ‚°ν•˜μ—¬ κ°’κ³Ό 클래슀λ₯Ό λ°˜ν™˜
3
+ export const calcDiff = (a, b) => {
4
+ const origin = Number(a || '0');
5
+ const complete = Number(b || '0');
6
+ const diff = complete - origin;
7
+ if (!isFinite(diff))
8
+ return 0;
9
+ return diff;
10
+ };
11
+ // a와 b의 λ‚ μ§œ 차이λ₯Ό κ³„μ‚°ν•˜μ—¬ κ°’κ³Ό 클래슀λ₯Ό λ°˜ν™˜
12
+ export const calcDateDiff = (a, b) => {
13
+ const origin = moment(a, 'YYYY-MM-DD', true);
14
+ const complete = moment(b, 'YYYY-MM-DD', true);
15
+ if (!origin.isValid() || !complete.isValid())
16
+ return 0;
17
+ const diffDays = complete.diff(origin, 'days');
18
+ if (diffDays === 0)
19
+ return 0;
20
+ return diffDays;
21
+ };
22
+ //# sourceMappingURL=func.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"func.js","sourceRoot":"","sources":["../../client/shared/func.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,4BAA4B;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAkB,EAAE,CAAkB,EAAU,EAAE;IACzE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAA;IAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QAAE,OAAO,CAAC,CAAA;IAEtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9C,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAE5B,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA","sourcesContent":["import moment from 'moment'\n\n// a와 b의 차이λ₯Ό κ³„μ‚°ν•˜μ—¬ κ°’κ³Ό 클래슀λ₯Ό λ°˜ν™˜\nexport const calcDiff = (a: string | number, b: string | number): number => {\n const origin = Number(a || '0')\n const complete = Number(b || '0')\n const diff = complete - origin\n if (!isFinite(diff)) return 0\n return diff\n}\n\n// a와 b의 λ‚ μ§œ 차이λ₯Ό κ³„μ‚°ν•˜μ—¬ κ°’κ³Ό 클래슀λ₯Ό λ°˜ν™˜\nexport const calcDateDiff = (a: string, b: string): number => {\n const origin = moment(a, 'YYYY-MM-DD', true)\n const complete = moment(b, 'YYYY-MM-DD', true)\n if (!origin.isValid() || !complete.isValid()) return 0\n\n const diffDays = complete.diff(origin, 'days')\n if (diffDays === 0) return 0\n\n return diffDays\n}\n"]}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * 완곡 μž…λ ₯ ν™”λ©΄μ˜ "μžλ™ μˆ˜μ§‘" μ›Œν¬ν”Œλ‘œμš© μ™ΈλΆ€ μ‹œμŠ€ν…œ 연동 μˆ˜μ§‘ ν•¨μˆ˜.
3
+ *
4
+ * 데λͺ¨ λͺ©μ : ν‚€μŠ€μ½˜Β·μ„Έμ›€ν„°Β·μ˜¬λ°”λ‘œμ—μ„œ "연동을 톡해 값을 κ°€μ Έμ˜¨λ‹€"λŠ” μ›Œν¬ν”Œλ‘œλ₯Ό
5
+ * 보여주기 μœ„ν•œ 것. μ‹€μ œ μŠ€ν¬λž˜ν•‘/API μ—°λ™μ˜ κΉŠμ΄λŠ” 이 ν•¨μˆ˜ 내뢀에 μΊ‘μŠν™”λ˜μ–΄
6
+ * μžˆμœΌλ―€λ‘œ, μΆ”ν›„ 싀연동(integration-kiscon / data-go-kr / integration-allbaro)
7
+ * 으둜 ꡐ체할 λ•Œ 이 본문만 λ°”κΎΈλ©΄ ν™”λ©΄/μ €μž₯ 흐름은 κ·ΈλŒ€λ‘œ μœ μ§€λœλ‹€.
8
+ */
9
+ export type IntegrationSource = 'kiscon' | 'saeumteo' | 'allbaro';
10
+ export interface IntegrationSourceMeta {
11
+ source: IntegrationSource;
12
+ label: string;
13
+ icon: string;
14
+ desc: string;
15
+ }
16
+ /** 화면에 ν‘œμ‹œν•  연동 μ†ŒμŠ€ λͺ©λ‘ (μˆ˜μ§‘ μˆœμ„œλŒ€λ‘œ) */
17
+ export declare const INTEGRATION_SOURCES: IntegrationSourceMeta[];
18
+ export interface CollectedField {
19
+ /** 폼의 projectKey (KPI_METRIC_KEY_MAPPING 의 projectKey 와 일치) */
20
+ projectKey: string;
21
+ label: string;
22
+ value: number | string;
23
+ unit?: string;
24
+ }
25
+ export interface CollectionResult {
26
+ source: IntegrationSource;
27
+ label: string;
28
+ fields: CollectedField[];
29
+ }
30
+ /**
31
+ * ν•œ μ™ΈλΆ€ μ‹œμŠ€ν…œμ—μ„œ μ—°λ™μœΌλ‘œ 값을 μˆ˜μ§‘ν•œλ‹€.
32
+ * 데λͺ¨μ—μ„œλŠ” 연동 μˆ˜μ§‘μ„ 흉내내기 μœ„ν•΄ 짧은 μ§€μ—° ν›„ λŒ€ν‘œκ°’μ„ λ°˜ν™˜ν•œλ‹€
33
+ * (ν”„λ‘œμ νŠΈμ— 이미 μžˆλŠ” 값이 있으면 μš°μ„  μ‚¬μš©).
34
+ */
35
+ export declare function collectFromSource(source: IntegrationSource, project: any): Promise<CollectionResult>;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * 완곡 μž…λ ₯ ν™”λ©΄μ˜ "μžλ™ μˆ˜μ§‘" μ›Œν¬ν”Œλ‘œμš© μ™ΈλΆ€ μ‹œμŠ€ν…œ 연동 μˆ˜μ§‘ ν•¨μˆ˜.
3
+ *
4
+ * 데λͺ¨ λͺ©μ : ν‚€μŠ€μ½˜Β·μ„Έμ›€ν„°Β·μ˜¬λ°”λ‘œμ—μ„œ "연동을 톡해 값을 κ°€μ Έμ˜¨λ‹€"λŠ” μ›Œν¬ν”Œλ‘œλ₯Ό
5
+ * 보여주기 μœ„ν•œ 것. μ‹€μ œ μŠ€ν¬λž˜ν•‘/API μ—°λ™μ˜ κΉŠμ΄λŠ” 이 ν•¨μˆ˜ 내뢀에 μΊ‘μŠν™”λ˜μ–΄
6
+ * μžˆμœΌλ―€λ‘œ, μΆ”ν›„ 싀연동(integration-kiscon / data-go-kr / integration-allbaro)
7
+ * 으둜 ꡐ체할 λ•Œ 이 본문만 λ°”κΎΈλ©΄ ν™”λ©΄/μ €μž₯ 흐름은 κ·ΈλŒ€λ‘œ μœ μ§€λœλ‹€.
8
+ */
9
+ /** 화면에 ν‘œμ‹œν•  연동 μ†ŒμŠ€ λͺ©λ‘ (μˆ˜μ§‘ μˆœμ„œλŒ€λ‘œ) */
10
+ export const INTEGRATION_SOURCES = [
11
+ { source: 'kiscon', label: 'ν‚€μŠ€μ½˜', icon: 'πŸ—', desc: 'κ±΄μ„€κ³΅μ‚¬λŒ€μž₯ 톡보' },
12
+ { source: 'saeumteo', label: '세움터', icon: 'πŸ›', desc: 'κ±΄μΆ•λ¬ΌλŒ€μž₯ / 건좕HUB' },
13
+ { source: 'allbaro', label: 'μ˜¬λ°”λ‘œ', icon: 'β™»', desc: '건섀폐기물 μ²˜λ¦¬μ‹€μ ' }
14
+ ];
15
+ /**
16
+ * ν•œ μ™ΈλΆ€ μ‹œμŠ€ν…œμ—μ„œ μ—°λ™μœΌλ‘œ 값을 μˆ˜μ§‘ν•œλ‹€.
17
+ * 데λͺ¨μ—μ„œλŠ” 연동 μˆ˜μ§‘μ„ 흉내내기 μœ„ν•΄ 짧은 μ§€μ—° ν›„ λŒ€ν‘œκ°’μ„ λ°˜ν™˜ν•œλ‹€
18
+ * (ν”„λ‘œμ νŠΈμ— 이미 μžˆλŠ” 값이 있으면 μš°μ„  μ‚¬μš©).
19
+ */
20
+ export async function collectFromSource(source, project) {
21
+ // 연동 μˆ˜μ§‘μ΄ "μ§„ν–‰λ˜λŠ”" λŠλ‚Œμ„ μ£ΌκΈ° μœ„ν•œ 짧은 μ§€μ—° (데λͺ¨μš©)
22
+ await new Promise(r => setTimeout(r, 700));
23
+ const bc = (project === null || project === void 0 ? void 0 : project.buildingComplex) || {};
24
+ switch (source) {
25
+ case 'kiscon':
26
+ return {
27
+ source,
28
+ label: 'ν‚€μŠ€μ½˜',
29
+ fields: [
30
+ { projectKey: 'constructionPeriod', label: 'κ³„νšκ³΅μ‚¬κΈ°κ°„', value: 30, unit: 'κ°œμ›”' },
31
+ { projectKey: 'constructionCost', label: 'κ³„νšκ³΅μ‚¬λΉ„', value: bc.constructionCost || 2500, unit: '얡원' }
32
+ ]
33
+ };
34
+ case 'saeumteo':
35
+ return {
36
+ source,
37
+ label: '세움터',
38
+ fields: [
39
+ { projectKey: 'area', label: '연면적', value: bc.area || 114000, unit: '㎑' },
40
+ { projectKey: 'floorAreaRatio', label: '용적율', value: bc.floorAreaRatio || 250, unit: '%' },
41
+ { projectKey: 'upperFloorCount', label: 'μ§€μƒμΈ΅μˆ˜', value: 25, unit: 'μΈ΅' },
42
+ { projectKey: 'lowerFloorCount', label: 'μ§€ν•˜μΈ΅μˆ˜', value: 3, unit: 'μΈ΅' }
43
+ ]
44
+ };
45
+ case 'allbaro':
46
+ return {
47
+ source,
48
+ label: 'μ˜¬λ°”λ‘œ',
49
+ fields: [{ projectKey: 'totalConstructionWasteAmount', label: '총 건섀폐기물', value: 15, unit: 'ton' }]
50
+ };
51
+ }
52
+ }
53
+ //# sourceMappingURL=integration-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-fetch.js","sourceRoot":"","sources":["../../client/shared/integration-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,iCAAiC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAA4B;IAC1D,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;IACjE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE;IACvE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE;CACnE,CAAA;AAgBD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAyB,EAAE,OAAY;IAC7E,sCAAsC;IACtC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IAE1C,MAAM,EAAE,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,KAAI,EAAE,CAAA;IAEzC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO;gBACL,MAAM;gBACN,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE;oBACN,EAAE,UAAU,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;oBAC5E,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;iBACnG;aACF,CAAA;QAEH,KAAK,UAAU;YACb,OAAO;gBACL,MAAM;gBACN,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE;oBACN,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE;oBACzE,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;oBAC1F,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;oBACtE,EAAE,UAAU,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;iBACtE;aACF,CAAA;QAEH,KAAK,SAAS;YACZ,OAAO;gBACL,MAAM;gBACN,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,8BAA8B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACnG,CAAA;IACL,CAAC;AACH,CAAC","sourcesContent":["/**\n * 완곡 μž…λ ₯ ν™”λ©΄μ˜ \"μžλ™ μˆ˜μ§‘\" μ›Œν¬ν”Œλ‘œμš© μ™ΈλΆ€ μ‹œμŠ€ν…œ 연동 μˆ˜μ§‘ ν•¨μˆ˜.\n *\n * 데λͺ¨ λͺ©μ : ν‚€μŠ€μ½˜Β·μ„Έμ›€ν„°Β·μ˜¬λ°”λ‘œμ—μ„œ \"연동을 톡해 값을 κ°€μ Έμ˜¨λ‹€\"λŠ” μ›Œν¬ν”Œλ‘œλ₯Ό\n * 보여주기 μœ„ν•œ 것. μ‹€μ œ μŠ€ν¬λž˜ν•‘/API μ—°λ™μ˜ κΉŠμ΄λŠ” 이 ν•¨μˆ˜ 내뢀에 μΊ‘μŠν™”λ˜μ–΄\n * μžˆμœΌλ―€λ‘œ, μΆ”ν›„ 싀연동(integration-kiscon / data-go-kr / integration-allbaro)\n * 으둜 ꡐ체할 λ•Œ 이 본문만 λ°”κΎΈλ©΄ ν™”λ©΄/μ €μž₯ 흐름은 κ·ΈλŒ€λ‘œ μœ μ§€λœλ‹€.\n */\n\nexport type IntegrationSource = 'kiscon' | 'saeumteo' | 'allbaro'\n\nexport interface IntegrationSourceMeta {\n source: IntegrationSource\n label: string\n icon: string\n desc: string\n}\n\n/** 화면에 ν‘œμ‹œν•  연동 μ†ŒμŠ€ λͺ©λ‘ (μˆ˜μ§‘ μˆœμ„œλŒ€λ‘œ) */\nexport const INTEGRATION_SOURCES: IntegrationSourceMeta[] = [\n { source: 'kiscon', label: 'ν‚€μŠ€μ½˜', icon: 'πŸ—', desc: 'κ±΄μ„€κ³΅μ‚¬λŒ€μž₯ 톡보' },\n { source: 'saeumteo', label: '세움터', icon: 'πŸ›', desc: 'κ±΄μΆ•λ¬ΌλŒ€μž₯ / 건좕HUB' },\n { source: 'allbaro', label: 'μ˜¬λ°”λ‘œ', icon: 'β™»', desc: '건섀폐기물 μ²˜λ¦¬μ‹€μ ' }\n]\n\nexport interface CollectedField {\n /** 폼의 projectKey (KPI_METRIC_KEY_MAPPING 의 projectKey 와 일치) */\n projectKey: string\n label: string\n value: number | string\n unit?: string\n}\n\nexport interface CollectionResult {\n source: IntegrationSource\n label: string\n fields: CollectedField[]\n}\n\n/**\n * ν•œ μ™ΈλΆ€ μ‹œμŠ€ν…œμ—μ„œ μ—°λ™μœΌλ‘œ 값을 μˆ˜μ§‘ν•œλ‹€.\n * 데λͺ¨μ—μ„œλŠ” 연동 μˆ˜μ§‘μ„ 흉내내기 μœ„ν•΄ 짧은 μ§€μ—° ν›„ λŒ€ν‘œκ°’μ„ λ°˜ν™˜ν•œλ‹€\n * (ν”„λ‘œμ νŠΈμ— 이미 μžˆλŠ” 값이 있으면 μš°μ„  μ‚¬μš©).\n */\nexport async function collectFromSource(source: IntegrationSource, project: any): Promise<CollectionResult> {\n // 연동 μˆ˜μ§‘μ΄ \"μ§„ν–‰λ˜λŠ”\" λŠλ‚Œμ„ μ£ΌκΈ° μœ„ν•œ 짧은 μ§€μ—° (데λͺ¨μš©)\n await new Promise(r => setTimeout(r, 700))\n\n const bc = project?.buildingComplex || {}\n\n switch (source) {\n case 'kiscon':\n return {\n source,\n label: 'ν‚€μŠ€μ½˜',\n fields: [\n { projectKey: 'constructionPeriod', label: 'κ³„νšκ³΅μ‚¬κΈ°κ°„', value: 30, unit: 'κ°œμ›”' },\n { projectKey: 'constructionCost', label: 'κ³„νšκ³΅μ‚¬λΉ„', value: bc.constructionCost || 2500, unit: '얡원' }\n ]\n }\n\n case 'saeumteo':\n return {\n source,\n label: '세움터',\n fields: [\n { projectKey: 'area', label: '연면적', value: bc.area || 114000, unit: '㎑' },\n { projectKey: 'floorAreaRatio', label: '용적율', value: bc.floorAreaRatio || 250, unit: '%' },\n { projectKey: 'upperFloorCount', label: 'μ§€μƒμΈ΅μˆ˜', value: 25, unit: 'μΈ΅' },\n { projectKey: 'lowerFloorCount', label: 'μ§€ν•˜μΈ΅μˆ˜', value: 3, unit: 'μΈ΅' }\n ]\n }\n\n case 'allbaro':\n return {\n source,\n label: 'μ˜¬λ°”λ‘œ',\n fields: [{ projectKey: 'totalConstructionWasteAmount', label: '총 건섀폐기물', value: 15, unit: 'ton' }]\n }\n }\n}\n"]}
@@ -1,17 +1,17 @@
1
1
  .dark {
2
- --md-sys-color-primary: rgb(174 198 255);
3
- --md-sys-color-surface-tint: rgb(174 198 255);
4
- --md-sys-color-on-primary: rgb(17 47 96);
5
- --md-sys-color-primary-container: rgb(44 70 120);
2
+ --md-sys-color-primary: rgb(173 198 255);
3
+ --md-sys-color-surface-tint: rgb(173 198 255);
4
+ --md-sys-color-on-primary: rgb(16 47 96);
5
+ --md-sys-color-primary-container: rgb(43 70 120);
6
6
  --md-sys-color-on-primary-container: rgb(216 226 255);
7
- --md-sys-color-secondary: rgb(191 198 220);
8
- --md-sys-color-on-secondary: rgb(41 48 65);
9
- --md-sys-color-secondary-container: rgb(63 71 89);
10
- --md-sys-color-on-secondary-container: rgb(219 226 249);
11
- --md-sys-color-tertiary: rgb(222 188 223);
12
- --md-sys-color-on-tertiary: rgb(64 40 67);
13
- --md-sys-color-tertiary-container: rgb(88 62 91);
14
- --md-sys-color-on-tertiary-container: rgb(252 215 251);
7
+ --md-sys-color-secondary: rgb(167 200 255);
8
+ --md-sys-color-on-secondary: rgb(4 48 95);
9
+ --md-sys-color-secondary-container: rgb(36 71 119);
10
+ --md-sys-color-on-secondary-container: rgb(213 227 255);
11
+ --md-sys-color-tertiary: rgb(234 181 238);
12
+ --md-sys-color-on-tertiary: rgb(72 32 79);
13
+ --md-sys-color-tertiary-container: rgb(96 55 103);
14
+ --md-sys-color-on-tertiary-container: rgb(254 214 255);
15
15
  --md-sys-color-error: rgb(255 180 171);
16
16
  --md-sys-color-on-error: rgb(105 0 5);
17
17
  --md-sys-color-error-container: rgb(147 0 10);
@@ -21,7 +21,7 @@
21
21
  --md-sys-color-surface: rgb(17 19 24);
22
22
  --md-sys-color-on-surface: rgb(226 226 233);
23
23
  --md-sys-color-surface-variant: rgb(68 71 79);
24
- --md-sys-color-on-surface-variant: rgb(197 198 208);
24
+ --md-sys-color-on-surface-variant: rgb(196 198 208);
25
25
  --md-sys-color-outline: rgb(142 144 153);
26
26
  --md-sys-color-outline-variant: rgb(68 71 79);
27
27
  --md-sys-color-shadow: rgb(0 0 0);
@@ -30,17 +30,17 @@
30
30
  --md-sys-color-inverse-on-surface: rgb(47 48 54);
31
31
  --md-sys-color-inverse-primary: rgb(68 94 145);
32
32
  --md-sys-color-primary-fixed: rgb(216 226 255);
33
- --md-sys-color-on-primary-fixed: rgb(0 26 66);
34
- --md-sys-color-primary-fixed-dim: rgb(174 198 255);
35
- --md-sys-color-on-primary-fixed-variant: rgb(44 70 120);
36
- --md-sys-color-secondary-fixed: rgb(219 226 249);
37
- --md-sys-color-on-secondary-fixed: rgb(20 27 44);
38
- --md-sys-color-secondary-fixed-dim: rgb(191 198 220);
39
- --md-sys-color-on-secondary-fixed-variant: rgb(63 71 89);
40
- --md-sys-color-tertiary-fixed: rgb(252 215 251);
41
- --md-sys-color-on-tertiary-fixed: rgb(41 19 45);
42
- --md-sys-color-tertiary-fixed-dim: rgb(222 188 223);
43
- --md-sys-color-on-tertiary-fixed-variant: rgb(88 62 91);
33
+ --md-sys-color-on-primary-fixed: rgb(0 26 65);
34
+ --md-sys-color-primary-fixed-dim: rgb(173 198 255);
35
+ --md-sys-color-on-primary-fixed-variant: rgb(43 70 120);
36
+ --md-sys-color-secondary-fixed: rgb(213 227 255);
37
+ --md-sys-color-on-secondary-fixed: rgb(0 27 60);
38
+ --md-sys-color-secondary-fixed-dim: rgb(167 200 255);
39
+ --md-sys-color-on-secondary-fixed-variant: rgb(36 71 119);
40
+ --md-sys-color-tertiary-fixed: rgb(254 214 255);
41
+ --md-sys-color-on-tertiary-fixed: rgb(48 9 57);
42
+ --md-sys-color-tertiary-fixed-dim: rgb(234 181 238);
43
+ --md-sys-color-on-tertiary-fixed-variant: rgb(96 55 103);
44
44
  --md-sys-color-surface-dim: rgb(17 19 24);
45
45
  --md-sys-color-surface-bright: rgb(55 57 62);
46
46
  --md-sys-color-surface-container-lowest: rgb(12 14 19);
@@ -1,17 +1,17 @@
1
1
  .light {
2
- --md-sys-color-primary: rgb(68 94 145);
2
+ --md-sys-color-primary: rgb(11 77 162);
3
3
  --md-sys-color-surface-tint: rgb(68 94 145);
4
4
  --md-sys-color-on-primary: rgb(255 255 255);
5
5
  --md-sys-color-primary-container: rgb(216 226 255);
6
- --md-sys-color-on-primary-container: rgb(44 70 120);
7
- --md-sys-color-secondary: rgb(87 94 113);
6
+ --md-sys-color-on-primary-container: rgb(43 70 120);
7
+ --md-sys-color-secondary: rgb(36, 41, 60);
8
8
  --md-sys-color-on-secondary: rgb(255 255 255);
9
- --md-sys-color-secondary-container: rgb(219 226 249);
10
- --md-sys-color-on-secondary-container: rgb(63 71 89);
11
- --md-sys-color-tertiary: rgb(113 85 115);
9
+ --md-sys-color-secondary-container: rgb(213 227 255);
10
+ --md-sys-color-on-secondary-container: rgb(36 71 119);
11
+ --md-sys-color-tertiary: rgb(122 79 128);
12
12
  --md-sys-color-on-tertiary: rgb(255 255 255);
13
- --md-sys-color-tertiary-container: rgb(252 215 251);
14
- --md-sys-color-on-tertiary-container: rgb(88 62 91);
13
+ --md-sys-color-tertiary-container: rgb(254 214 255);
14
+ --md-sys-color-on-tertiary-container: rgb(96 55 103);
15
15
  --md-sys-color-error: rgb(186 26 26);
16
16
  --md-sys-color-on-error: rgb(255 255 255);
17
17
  --md-sys-color-error-container: rgb(255 218 214);
@@ -23,29 +23,29 @@
23
23
  --md-sys-color-surface-variant: rgb(225 226 236);
24
24
  --md-sys-color-on-surface-variant: rgb(68 71 79);
25
25
  --md-sys-color-outline: rgb(117 119 127);
26
- --md-sys-color-outline-variant: rgb(197 198 208);
26
+ --md-sys-color-outline-variant: rgb(196 198 208);
27
27
  --md-sys-color-shadow: rgb(0 0 0);
28
28
  --md-sys-color-scrim: rgb(0 0 0);
29
29
  --md-sys-color-inverse-surface: rgb(47 48 54);
30
30
  --md-sys-color-inverse-on-surface: rgb(240 240 247);
31
- --md-sys-color-inverse-primary: rgb(174 198 255);
31
+ --md-sys-color-inverse-primary: rgb(173 198 255);
32
32
  --md-sys-color-primary-fixed: rgb(216 226 255);
33
- --md-sys-color-on-primary-fixed: rgb(0 26 66);
34
- --md-sys-color-primary-fixed-dim: rgb(174 198 255);
35
- --md-sys-color-on-primary-fixed-variant: rgb(44 70 120);
36
- --md-sys-color-secondary-fixed: rgb(219 226 249);
37
- --md-sys-color-on-secondary-fixed: rgb(20 27 44);
38
- --md-sys-color-secondary-fixed-dim: rgb(191 198 220);
39
- --md-sys-color-on-secondary-fixed-variant: rgb(63 71 89);
40
- --md-sys-color-tertiary-fixed: rgb(252 215 251);
41
- --md-sys-color-on-tertiary-fixed: rgb(41 19 45);
42
- --md-sys-color-tertiary-fixed-dim: rgb(222 188 223);
43
- --md-sys-color-on-tertiary-fixed-variant: rgb(88 62 91);
33
+ --md-sys-color-on-primary-fixed: rgb(0 26 65);
34
+ --md-sys-color-primary-fixed-dim: rgb(173 198 255);
35
+ --md-sys-color-on-primary-fixed-variant: rgb(43 70 120);
36
+ --md-sys-color-secondary-fixed: rgb(213 227 255);
37
+ --md-sys-color-on-secondary-fixed: rgb(0 27 60);
38
+ --md-sys-color-secondary-fixed-dim: rgb(167 200 255);
39
+ --md-sys-color-on-secondary-fixed-variant: rgb(36 71 119);
40
+ --md-sys-color-tertiary-fixed: rgb(254 214 255);
41
+ --md-sys-color-on-tertiary-fixed: rgb(48 9 57);
42
+ --md-sys-color-tertiary-fixed-dim: rgb(234 181 238);
43
+ --md-sys-color-on-tertiary-fixed-variant: rgb(96 55 103);
44
44
  --md-sys-color-surface-dim: rgb(217 217 224);
45
45
  --md-sys-color-surface-bright: rgb(249 249 255);
46
46
  --md-sys-color-surface-container-lowest: rgb(255 255 255);
47
47
  --md-sys-color-surface-container-low: rgb(243 243 250);
48
- --md-sys-color-surface-container: rgb(238 237 244);
49
- --md-sys-color-surface-container-high: rgb(232 231 239);
48
+ --md-sys-color-surface-container: rgb(237 237 244);
49
+ --md-sys-color-surface-container-high: rgb(232 231 238);
50
50
  --md-sys-color-surface-container-highest: rgb(226 226 233);
51
51
  }