@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.
- package/KPI-STATISTICS-SERVICE.md +233 -0
- package/_index.html +0 -5
- package/assets/favicon.ico +0 -0
- package/assets/images/project-image.png +0 -0
- package/assets/manifest/apple-1024.png +0 -0
- package/assets/manifest/apple-120.png +0 -0
- package/assets/manifest/apple-152.png +0 -0
- package/assets/manifest/apple-167.png +0 -0
- package/assets/manifest/apple-180.png +0 -0
- package/assets/manifest/apple-touch-icon.png +0 -0
- package/assets/manifest/badge-128x128.png +0 -0
- package/assets/manifest/chrome-splashscreen-icon-384x384.png +0 -0
- package/assets/manifest/chrome-touch-icon-192x192.png +0 -0
- package/assets/manifest/icon-128x128.png +0 -0
- package/assets/manifest/icon-192x192.png +0 -0
- package/assets/manifest/icon-512x512.png +0 -0
- package/assets/manifest/icon-72x72.png +0 -0
- package/assets/manifest/icon-96x96.png +0 -0
- package/assets/manifest/image-metaog.png +0 -0
- package/assets/manifest/maskable_icon.png +0 -0
- package/assets/manifest/ms-icon-144x144.png +0 -0
- package/assets/manifest/ms-touch-icon-144x144-precomposed.png +0 -0
- package/assets/videos/intro.mp4 +0 -0
- package/config/config.development.js +2 -1
- package/config/config.production.js +2 -1
- package/dist-client/bootstrap.js +64 -4
- package/dist-client/bootstrap.js.map +1 -1
- package/dist-client/components/kpi-2d-lookup-chart.d.ts +43 -0
- package/dist-client/components/kpi-2d-lookup-chart.js +253 -0
- package/dist-client/components/kpi-2d-lookup-chart.js.map +1 -0
- package/dist-client/components/kpi-boxplot-chart.d.ts +24 -0
- package/dist-client/components/kpi-boxplot-chart.js +291 -0
- package/dist-client/components/kpi-boxplot-chart.js.map +1 -0
- package/dist-client/components/kpi-lookup-chart.d.ts +53 -0
- package/dist-client/components/kpi-lookup-chart.js +430 -0
- package/dist-client/components/kpi-lookup-chart.js.map +1 -0
- package/dist-client/components/kpi-mini-trend-chart.d.ts +14 -0
- package/dist-client/components/kpi-mini-trend-chart.js +148 -0
- package/dist-client/components/kpi-mini-trend-chart.js.map +1 -0
- package/dist-client/components/kpi-radar-chart.d.ts +17 -0
- package/dist-client/components/kpi-radar-chart.js +259 -0
- package/dist-client/components/kpi-radar-chart.js.map +1 -0
- package/dist-client/components/kpi-single-boxplot-chart.d.ts +24 -0
- package/dist-client/components/kpi-single-boxplot-chart.js +391 -0
- package/dist-client/components/kpi-single-boxplot-chart.js.map +1 -0
- package/dist-client/components/kpi-trend-chart.d.ts +25 -0
- package/dist-client/components/kpi-trend-chart.js +220 -0
- package/dist-client/components/kpi-trend-chart.js.map +1 -0
- package/dist-client/components/sv-pagenation-control.d.ts +18 -0
- package/dist-client/components/sv-pagenation-control.js +142 -0
- package/dist-client/components/sv-pagenation-control.js.map +1 -0
- package/dist-client/entries/auth/checkin.d.ts +38 -0
- package/dist-client/entries/auth/checkin.js +546 -0
- package/dist-client/entries/auth/checkin.js.map +1 -0
- package/dist-client/google-map/common-google-map.d.ts +35 -0
- package/dist-client/google-map/common-google-map.js +345 -0
- package/dist-client/google-map/common-google-map.js.map +1 -0
- package/dist-client/google-map/google-map-loader.d.ts +6 -0
- package/dist-client/google-map/google-map-loader.js +23 -0
- package/dist-client/google-map/google-map-loader.js.map +1 -0
- package/dist-client/icons/menu-icons.d.ts +6 -0
- package/dist-client/icons/menu-icons.js +42 -0
- package/dist-client/icons/menu-icons.js.map +1 -1
- package/dist-client/pages/kpi-admin/dssp-kpi-list-page.d.ts +22 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-list-page.js +57 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-list-page.js.map +1 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.d.ts +46 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.js +378 -0
- package/dist-client/pages/kpi-admin/dssp-kpi-overview.js.map +1 -0
- package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.d.ts +20 -0
- package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.js +445 -0
- package/dist-client/pages/kpi-admin/kpi-grade-2d-editor.js.map +1 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.d.ts +18 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.js +535 -0
- package/dist-client/pages/kpi-admin/kpi-system-guide.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.d.ts +18 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js +259 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level1-card.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.d.ts +22 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js +346 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level2-comparison.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.d.ts +26 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js +433 -0
- package/dist-client/pages/kpi-dashboard/cards/kpi-level3-comparison.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.d.ts +8 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js +78 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-chart-toggle.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.d.ts +38 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js +851 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-left-panel.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.d.ts +42 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js +316 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-map-panel.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.d.ts +28 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js +497 -0
- package/dist-client/pages/kpi-dashboard/components/kpi-region-popup.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-alert-panel.d.ts +18 -0
- package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js +131 -0
- package/dist-client/pages/kpi-dashboard/kpi-alert-panel.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.d.ts +52 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js +798 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard-map.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.d.ts +63 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.js +1089 -0
- package/dist-client/pages/kpi-dashboard/kpi-dashboard.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.d.ts +12 -0
- package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js +82 -0
- package/dist-client/pages/kpi-dashboard/kpi-grade-visualization.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-history-viewer.d.ts +11 -0
- package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js +65 -0
- package/dist-client/pages/kpi-dashboard/kpi-history-viewer.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-list-summary.d.ts +13 -0
- package/dist-client/pages/kpi-dashboard/kpi-list-summary.js +115 -0
- package/dist-client/pages/kpi-dashboard/kpi-list-summary.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-performance-summary.d.ts +15 -0
- package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js +147 -0
- package/dist-client/pages/kpi-dashboard/kpi-performance-summary.js.map +1 -0
- package/dist-client/pages/kpi-dashboard/kpi-value-entry.d.ts +7 -0
- package/dist-client/pages/kpi-dashboard/kpi-value-entry.js +86 -0
- package/dist-client/pages/kpi-dashboard/kpi-value-entry.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.d.ts +57 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js +719 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-editor-page.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.d.ts +23 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js +76 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-importer.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.d.ts +68 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js +394 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-list-page.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.d.ts +12 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js +174 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-form.js.map +1 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.d.ts +40 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js +190 -0
- package/dist-client/pages/kpi-metric-value/kpi-metric-value-manual-entry-page.js.map +1 -0
- package/dist-client/pages/kpi-value/kpi-value-importer.d.ts +23 -0
- package/dist-client/pages/kpi-value/kpi-value-importer.js +93 -0
- package/dist-client/pages/kpi-value/kpi-value-importer.js.map +1 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.d.ts +71 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.js +454 -0
- package/dist-client/pages/kpi-value/kpi-value-list-page.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.d.ts +47 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js +756 -0
- package/dist-client/pages/project-complete-tabs/pc-tab1-plan.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.d.ts +14 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js +276 -0
- package/dist-client/pages/project-complete-tabs/pc-tab2-rating.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.d.ts +18 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js +307 -0
- package/dist-client/pages/project-complete-tabs/pc-tab3-upload.js.map +1 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.d.ts +18 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js +433 -0
- package/dist-client/pages/project-complete-tabs/pc-tab4-monthly.js.map +1 -0
- package/dist-client/pages/sv-project-complete.d.ts +22 -0
- package/dist-client/pages/sv-project-complete.js +232 -0
- package/dist-client/pages/sv-project-complete.js.map +1 -0
- package/dist-client/pages/sv-project-completed-list.d.ts +27 -0
- package/dist-client/pages/sv-project-completed-list.js +416 -0
- package/dist-client/pages/sv-project-completed-list.js.map +1 -0
- package/dist-client/pages/sv-project-detail.d.ts +47 -0
- package/dist-client/pages/sv-project-detail.js +1282 -0
- package/dist-client/pages/sv-project-detail.js.map +1 -0
- package/dist-client/pages/sv-project-list.d.ts +165 -0
- package/dist-client/pages/sv-project-list.js +488 -0
- package/dist-client/pages/sv-project-list.js.map +1 -0
- package/dist-client/pages/sv-user-management.d.ts +1 -0
- package/dist-client/pages/sv-user-management.js +5 -0
- package/dist-client/pages/sv-user-management.js.map +1 -1
- package/dist-client/route.d.ts +1 -1
- package/dist-client/route.js +47 -2
- package/dist-client/route.js.map +1 -1
- package/dist-client/shared/complete-api.d.ts +36 -0
- package/dist-client/shared/complete-api.js +198 -0
- package/dist-client/shared/complete-api.js.map +1 -0
- package/dist-client/shared/domain-context.d.ts +7 -0
- package/dist-client/shared/domain-context.js +13 -0
- package/dist-client/shared/domain-context.js.map +1 -0
- package/dist-client/shared/func.d.ts +2 -0
- package/dist-client/shared/func.js +22 -0
- package/dist-client/shared/func.js.map +1 -0
- package/dist-client/shared/integration-fetch.d.ts +35 -0
- package/dist-client/shared/integration-fetch.js +53 -0
- package/dist-client/shared/integration-fetch.js.map +1 -0
- package/dist-client/themes/dark.css +24 -24
- package/dist-client/themes/light.css +23 -23
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/viewparts/menu-tools.d.ts +40 -5
- package/dist-client/viewparts/menu-tools.js +300 -42
- package/dist-client/viewparts/menu-tools.js.map +1 -1
- package/dist-server/index.d.ts +2 -0
- package/dist-server/index.js +5 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/migrations/index.d.ts +1 -0
- package/dist-server/migrations/index.js +12 -0
- package/dist-server/migrations/index.js.map +1 -0
- package/dist-server/scripts/calculate-kpi-scores.d.ts +10 -0
- package/dist-server/scripts/calculate-kpi-scores.js +333 -0
- package/dist-server/scripts/calculate-kpi-scores.js.map +1 -0
- package/dist-server/scripts/load-grade-data-migration.d.ts +14 -0
- package/dist-server/scripts/load-grade-data-migration.js +279 -0
- package/dist-server/scripts/load-grade-data-migration.js.map +1 -0
- package/dist-server/scripts/propagate-parent-kpi-values.d.ts +14 -0
- package/dist-server/scripts/propagate-parent-kpi-values.js +786 -0
- package/dist-server/scripts/propagate-parent-kpi-values.js.map +1 -0
- package/dist-server/scripts/recalculate-by-project-name.d.ts +2 -0
- package/dist-server/scripts/recalculate-by-project-name.js +72 -0
- package/dist-server/scripts/recalculate-by-project-name.js.map +1 -0
- package/dist-server/service/index.d.ts +4 -0
- package/dist-server/service/index.js +20 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/kpi-metric-value/index.d.ts +4 -0
- package/dist-server/service/kpi-metric-value/index.js +8 -0
- package/dist-server/service/kpi-metric-value/index.js.map +1 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.d.ts +143 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js +907 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-mutation.js.map +1 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.d.ts +7 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js +52 -0
- package/dist-server/service/kpi-metric-value/kpi-metric-value-query.js.map +1 -0
- package/dist-server/service/kpi-stat/index.d.ts +4 -0
- package/dist-server/service/kpi-stat/index.js +8 -0
- package/dist-server/service/kpi-stat/index.js.map +1 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.d.ts +12 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.js +662 -0
- package/dist-server/service/kpi-stat/kpi-stat-query.js.map +1 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.d.ts +32 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.js +180 -0
- package/dist-server/service/kpi-stat/kpi-stat-types.js.map +1 -0
- package/dist-server/service/kpi-value/index.d.ts +3 -0
- package/dist-server/service/kpi-value/index.js +7 -0
- package/dist-server/service/kpi-value/index.js.map +1 -0
- package/dist-server/service/kpi-value/kpi-value-query.d.ts +8 -0
- package/dist-server/service/kpi-value/kpi-value-query.js +63 -0
- package/dist-server/service/kpi-value/kpi-value-query.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/kpi-module-service-tests.md +1286 -0
- package/kpi-module-test-report.md +676 -0
- package/kpi-module-unit-test-detailed-report.md +925 -0
- package/kpi-module-unit-tests-detailed.md +1452 -0
- package/package.json +69 -55
- package/recalculate-batch.sh +64 -0
- package/recalculate-projects-range.sh +98 -0
- package/schema.graphql +3391 -442
- package/things-factory.config.js +11 -1
- package/translations/en.json +5 -1
- package/translations/ko.json +5 -1
- package/views/auth-page.html +0 -1
- package/views/public/home.html +0 -1
package/dist-client/route.js
CHANGED
|
@@ -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
|
package/dist-client/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../client/route.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,IAAY;IACxC,
|
|
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,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(
|
|
3
|
-
--md-sys-color-surface-tint: rgb(
|
|
4
|
-
--md-sys-color-on-primary: rgb(
|
|
5
|
-
--md-sys-color-primary-container: rgb(
|
|
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(
|
|
8
|
-
--md-sys-color-on-secondary: rgb(
|
|
9
|
-
--md-sys-color-secondary-container: rgb(
|
|
10
|
-
--md-sys-color-on-secondary-container: rgb(
|
|
11
|
-
--md-sys-color-tertiary: rgb(
|
|
12
|
-
--md-sys-color-on-tertiary: rgb(
|
|
13
|
-
--md-sys-color-tertiary-container: rgb(
|
|
14
|
-
--md-sys-color-on-tertiary-container: rgb(
|
|
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(
|
|
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
|
|
34
|
-
--md-sys-color-primary-fixed-dim: rgb(
|
|
35
|
-
--md-sys-color-on-primary-fixed-variant: rgb(
|
|
36
|
-
--md-sys-color-secondary-fixed: rgb(
|
|
37
|
-
--md-sys-color-on-secondary-fixed: rgb(
|
|
38
|
-
--md-sys-color-secondary-fixed-dim: rgb(
|
|
39
|
-
--md-sys-color-on-secondary-fixed-variant: rgb(
|
|
40
|
-
--md-sys-color-tertiary-fixed: rgb(
|
|
41
|
-
--md-sys-color-on-tertiary-fixed: rgb(
|
|
42
|
-
--md-sys-color-tertiary-fixed-dim: rgb(
|
|
43
|
-
--md-sys-color-on-tertiary-fixed-variant: rgb(
|
|
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(
|
|
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(
|
|
7
|
-
--md-sys-color-secondary: rgb(
|
|
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(
|
|
10
|
-
--md-sys-color-on-secondary-container: rgb(
|
|
11
|
-
--md-sys-color-tertiary: rgb(
|
|
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(
|
|
14
|
-
--md-sys-color-on-tertiary-container: rgb(
|
|
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(
|
|
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(
|
|
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
|
|
34
|
-
--md-sys-color-primary-fixed-dim: rgb(
|
|
35
|
-
--md-sys-color-on-primary-fixed-variant: rgb(
|
|
36
|
-
--md-sys-color-secondary-fixed: rgb(
|
|
37
|
-
--md-sys-color-on-secondary-fixed: rgb(
|
|
38
|
-
--md-sys-color-secondary-fixed-dim: rgb(
|
|
39
|
-
--md-sys-color-on-secondary-fixed-variant: rgb(
|
|
40
|
-
--md-sys-color-tertiary-fixed: rgb(
|
|
41
|
-
--md-sys-color-on-tertiary-fixed: rgb(
|
|
42
|
-
--md-sys-color-tertiary-fixed-dim: rgb(
|
|
43
|
-
--md-sys-color-on-tertiary-fixed-variant: rgb(
|
|
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(
|
|
49
|
-
--md-sys-color-surface-container-high: rgb(232 231
|
|
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
|
}
|