From 1528c9fc20c5c00d6efbd38aed1186d6ea5c1a11 Mon Sep 17 00:00:00 2001 From: DmsAnhr Date: Tue, 27 Jan 2026 09:31:12 +0700 Subject: [PATCH] Initial commit on FE --- .gitignore | 48 + .prettierrc | 1 + Dockerfile | 57 + README.md | 36 + .../_components/main-mapset-card-skeleton.tsx | 37 + .../components/catalog-section/index.tsx | 98 + .../catalog-section/main-mapset-card.tsx | 62 + .../category-section/category-card.tsx | 43 + .../components/category-section/index.tsx | 88 + .../feedback/_components/emoji-rating.tsx | 110 + .../feedback/_components/select-purpose.tsx | 73 + .../feedback/_components/select-sector.tsx | 70 + .../feedback/_hooks/use-feedback-form.tsx | 41 + .../components/feedback/feedback-form.tsx | 299 + .../(landing)/components/feedback/index.tsx | 61 + .../_components/statistic-card-item.tsx | 75 + .../_components/statistic-config.ts | 44 + .../hero-section/_views/highlight-mapset.tsx | 54 + .../components/hero-section/_views/search.tsx | 59 + .../hero-section/_views/statistic-card.tsx | 36 + .../components/hero-section/index.tsx | 35 + .../(landing)/components/mapset-card.tsx | 46 + .../_components/news-card-skeleton.tsx | 39 + .../components/news-section/index.tsx | 114 + .../components/news-section/news-card.tsx | 63 + .../news-section/news-main-card.tsx | 82 + .../news-section/news-secondary-card.tsx | 55 + .../components/organization-section/index.tsx | 119 + .../organization-card.tsx | 49 + .../components/statistic-section.tsx | 79 + .../admin/_components/confirmation-dialog.tsx | 64 + .../admin/_components/data-table.tsx | 232 + .../admin/_components/delete-dialog.tsx | 54 + .../admin/_components/detail-item.tsx | 32 + .../admin/_components/empty-state.tsx | 26 + .../admin/_components/page-header.tsx | 22 + .../admin/_components/refdata-bootstrap.tsx | 55 + .../admin/_components/resource-table.tsx | 158 + .../admin/_components/search-action-bar.tsx | 226 + .../admin/_components/search-input.tsx | 15 + app/(modules)/admin/_components/sidebar.tsx | 246 + app/(modules)/admin/_hooks/use-tab.tsx | 10 + .../admin/_hooks/use-table-state.tsx | 205 + .../admin/category/_components/column.tsx | 224 + .../admin/category/_components/detail.tsx | 48 + .../admin/category/_components/form.tsx | 140 + .../category/_hooks/use-category-form.tsx | 60 + .../admin/category/add/page.client.tsx | 31 + app/(modules)/admin/category/add/page.tsx | 16 + .../admin/category/detail/[id]/page.tsx | 16 + .../admin/category/edit/[id]/page.client.tsx | 41 + .../admin/category/edit/[id]/page.tsx | 20 + app/(modules)/admin/category/page.client.tsx | 63 + app/(modules)/admin/category/page.tsx | 22 + .../admin/credential/_components/column.tsx | 221 + .../admin/credential/_components/form.tsx | 262 + .../_components/use-credential-form.tsx | 62 + .../admin/credential/add/page.client.tsx | 31 + app/(modules)/admin/credential/add/page.tsx | 16 + .../credential/edit/[id]/page.client.tsx | 41 + .../admin/credential/edit/[id]/page.tsx | 20 + .../admin/credential/page.client.tsx | 63 + app/(modules)/admin/credential/page.tsx | 22 + app/(modules)/admin/dashboard/page.tsx | 232 + app/(modules)/admin/layout.tsx | 43 + .../admin/map-source/_components/column.tsx | 229 + .../admin/map-source/_components/detail.tsx | 48 + .../admin/map-source/_components/form.tsx | 178 + .../admin/map-source/_hooks/use-form.tsx | 59 + .../admin/map-source/add/page.client.tsx | 31 + app/(modules)/admin/map-source/add/page.tsx | 16 + .../admin/map-source/detail/[id]/page.tsx | 16 + .../map-source/edit/[id]/page.client.tsx | 40 + .../admin/map-source/edit/[id]/page.tsx | 20 + .../admin/map-source/page.client.tsx | 66 + app/(modules)/admin/map-source/page.tsx | 16 + app/(modules)/admin/map-source/state.ts | 14 + .../detail/mapset-classification-section.tsx | 31 + .../_components/detail/mapset-detail.tsx | 288 + .../_components/detail/mapset-history.tsx | 68 + .../detail/mapset-info-section.tsx | 55 + .../detail/mapset-metadata-section.tsx | 85 + .../detail/mapset-organization-section.tsx | 53 + .../_components/detail/mapset-status.tsx | 42 + .../detail/mapset-version-section.tsx | 27 + .../form/mapset-classification-form.tsx | 139 + .../_components/form/mapset-info-form.tsx | 310 + .../_components/form/mapset-metadata-form.tsx | 290 + .../form/mapset-organization-form.tsx | 114 + .../mapset/_components/form/mapset-tab.tsx | 102 + .../_components/form/mapset-version-form.tsx | 104 + .../admin/mapset/_components/list/column.tsx | 264 + .../mapset/_components/list/filter-drawer.tsx | 197 + .../_components/list/tab-navigation.tsx | 91 + .../_components/verify-mapset-dialog.tsx | 84 + .../admin/mapset/add/page.client.tsx | 257 + app/(modules)/admin/mapset/add/page.tsx | 20 + .../admin/mapset/detail/[id]/page.tsx | 14 + app/(modules)/admin/mapset/edit/[id]/page.tsx | 298 + app/(modules)/admin/mapset/page.client.tsx | 151 + app/(modules)/admin/mapset/page.tsx | 16 + app/(modules)/admin/mapset/state.ts | 72 + .../admin/news/_components/column.tsx | 220 + .../admin/news/_components/detail.tsx | 55 + app/(modules)/admin/news/_components/form.tsx | 137 + app/(modules)/admin/news/_hooks/use-form.tsx | 59 + app/(modules)/admin/news/add/page.client.tsx | 31 + app/(modules)/admin/news/add/page.tsx | 16 + app/(modules)/admin/news/detail/[id]/page.tsx | 19 + app/(modules)/admin/news/edit/[id]/page.tsx | 42 + app/(modules)/admin/news/page.client.tsx | 63 + app/(modules)/admin/news/page.tsx | 16 + .../admin/organization/_components/column.tsx | 162 + .../admin/organization/_components/detail.tsx | 52 + .../admin/organization/_components/form.tsx | 208 + .../_hooks/use-organization-form.tsx | 62 + .../admin/organization/add/page.client.tsx | 31 + app/(modules)/admin/organization/add/page.tsx | 16 + .../admin/organization/detail/[id]/page.tsx | 16 + .../organization/edit/[id]/page.client.tsx | 40 + .../admin/organization/edit/[id]/page.tsx | 20 + .../admin/organization/page.client.tsx | 63 + app/(modules)/admin/organization/page.tsx | 16 + app/(modules)/admin/organization/state.ts | 18 + app/(modules)/admin/page.tsx | 33 + .../admin/user/_components/column.tsx | 190 + .../admin/user/_components/detail.tsx | 40 + app/(modules)/admin/user/_components/form.tsx | 329 + app/(modules)/admin/user/_hooks/use-form.tsx | 70 + app/(modules)/admin/user/add/page.client.tsx | 35 + app/(modules)/admin/user/add/page.tsx | 16 + app/(modules)/admin/user/detail/[id]/page.tsx | 16 + .../admin/user/edit/[id]/page.client.tsx | 43 + app/(modules)/admin/user/edit/[id]/page.tsx | 20 + app/(modules)/admin/user/page.client.tsx | 66 + app/(modules)/admin/user/page.tsx | 22 + .../auth/admin/login/page.client.tsx | 142 + app/(modules)/auth/admin/login/page.tsx | 10 + app/(modules)/auth/admin/logout/page.tsx | 39 + app/(modules)/maps/components/cesium-map.tsx | 17 + .../components/feature-information/index.tsx | 98 + .../maps/components/footer/index.tsx | 59 + .../maps/components/footer/scale-bar.tsx | 63 + .../components/geocoding-search/index.tsx | 132 + .../maps/components/layer-manager.tsx | 591 + .../maps/components/leaflet-map/index.tsx | 67 + .../components/leaflet-map/zoom-control.tsx | 28 + .../maps/components/map-component.tsx | 23 + .../maps/components/map-settings.tsx | 97 + .../maps/components/mapset-dialog/index.tsx | 88 + .../main/dataset-detail-sidebar.tsx | 115 + .../main/description-section.tsx | 36 + .../main/download-geojson-btn.tsx | 22 + .../mapset-dialog/main/download-kml-btn.tsx | 22 + .../mapset-dialog/main/download-shp-btn.tsx | 22 + .../mapset-dialog/main/empty-state.tsx | 23 + .../components/mapset-dialog/main/index.tsx | 38 + .../mapset-dialog/main/layer-toggle.tsx | 21 + .../mapset-list/group-mapset/index.tsx | 127 + .../mapset-list/group-mapset/mapset-item.tsx | 47 + .../mapset-dialog/mapset-list/index.tsx | 238 + .../components/mapset-dialog/tab-switcher.tsx | 43 + .../maps/components/sidebar/close-trigger.tsx | 16 + .../sidebar/drawing-tools/index.tsx | 275 + .../maps/components/sidebar/empty-state.tsx | 20 + .../maps/components/sidebar/index.tsx | 73 + .../sidebar/layer-controls/index.tsx | 184 + .../layer-control-item/choropleth-control.tsx | 124 + .../layer-control-item/index.tsx | 145 + .../layer-control-item/layer-actions.tsx | 58 + .../layer-control-item/legend-display.tsx | 397 + .../layer-control-item/opacity-control.tsx | 26 + .../maps/components/sidebar/logo-image.tsx | 16 + .../maps/components/sidebar/open-trigger.tsx | 22 + app/(modules)/maps/config/basemap-config.ts | 110 + .../maps/factories/cesium-provider.ts | 29 + app/(modules)/maps/hooks/useCesiumMap.tsx | 125 + app/(modules)/maps/hooks/useLayerToggle.tsx | 65 + app/(modules)/maps/page.client.tsx | 31 + app/(modules)/maps/page.tsx | 12 + app/(modules)/maps/state/active-basemap.ts | 4 + app/(modules)/maps/state/active-layers.ts | 127 + app/(modules)/maps/state/active-tab.ts | 4 + .../maps/state/feature-information.ts | 11 + .../maps/state/leaflet-layer-instances.ts | 5 + app/(modules)/maps/state/map-settings.ts | 8 + app/(modules)/maps/state/map-type.ts | 3 + app/(modules)/maps/state/map.ts | 3 + app/(modules)/maps/state/mapset-dialog.ts | 8 + app/(modules)/maps/types/basemap-config.ts | 27 + app/(modules)/maps/types/map-config.ts | 4 + app/(modules)/maps/utils/cesium.ts | 11 + app/(modules)/maps/utils/colors.ts | 38 + .../maps/utils/feature-information.ts | 23 + app/(modules)/maps/utils/theme.ts | 33 + app/(modules)/news/[id]/news-content.tsx | 19 + app/(modules)/news/[id]/page.tsx | 95 + app/(modules)/news/layout.tsx | 23 + app/(modules)/news/page.tsx | 210 + app/auth/[...nextauth]/route.ts | 2 + app/error.tsx | 46 + app/favicon.ico | Bin 0 -> 15406 bytes .../mapset/download/geojson/[id]/route.ts | 58 + app/fe-api/mapset/download/kml/[id]/route.ts | 56 + app/fe-api/mapset/download/shp/[id]/route.ts | 56 + app/globals.css | 172 + app/layout.tsx | 76 + app/not-found.tsx | 23 + app/page.tsx | 36 + auth.ts | 132 + components.json | 20 + docker-compose.yml | 25 + ecosystem.config.js | 14 + env.example | 6 + env.prod.example | 6 + eslint.config.mjs | 16 + next.config.ts | 40 + package-lock.json | 12977 +++ package.json | 101 + pnpm-lock.yaml | 8433 ++ postcss.config.mjs | 5 + public/admin-logo.png | Bin 0 -> 1764 bytes .../Assets/IAU2006_XYS/IAU2006_XYS_0.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_1.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_10.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_11.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_12.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_13.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_14.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_15.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_16.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_17.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_18.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_19.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_2.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_20.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_21.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_22.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_23.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_24.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_25.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_26.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_27.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_3.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_4.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_5.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_6.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_7.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_8.json | 1 + .../Assets/IAU2006_XYS/IAU2006_XYS_9.json | 1 + .../cesium/Assets/Images/bing_maps_credit.png | Bin 0 -> 18831 bytes public/cesium/Assets/Images/cesium_credit.png | Bin 0 -> 4242 bytes .../Assets/Images/google_earth_credit.png | Bin 0 -> 7703 bytes public/cesium/Assets/Images/ion-credit.png | Bin 0 -> 6028 bytes .../Assets/Textures/LensFlare/DirtMask.jpg | Bin 0 -> 113718 bytes .../Assets/Textures/LensFlare/StarBurst.jpg | Bin 0 -> 195728 bytes .../Assets/Textures/NaturalEarthII/0/0/0.jpg | Bin 0 -> 12067 bytes .../Assets/Textures/NaturalEarthII/0/1/0.jpg | Bin 0 -> 14055 bytes .../Assets/Textures/NaturalEarthII/1/0/0.jpg | Bin 0 -> 7278 bytes .../Assets/Textures/NaturalEarthII/1/0/1.jpg | Bin 0 -> 11399 bytes .../Assets/Textures/NaturalEarthII/1/1/0.jpg | Bin 0 -> 10652 bytes .../Assets/Textures/NaturalEarthII/1/1/1.jpg | Bin 0 -> 13142 bytes .../Assets/Textures/NaturalEarthII/1/2/0.jpg | Bin 0 -> 9643 bytes .../Assets/Textures/NaturalEarthII/1/2/1.jpg | Bin 0 -> 15312 bytes .../Assets/Textures/NaturalEarthII/1/3/0.jpg | Bin 0 -> 10532 bytes .../Assets/Textures/NaturalEarthII/1/3/1.jpg | Bin 0 -> 13262 bytes .../Assets/Textures/NaturalEarthII/2/0/0.jpg | Bin 0 -> 8157 bytes .../Assets/Textures/NaturalEarthII/2/0/1.jpg | Bin 0 -> 9307 bytes .../Assets/Textures/NaturalEarthII/2/0/2.jpg | Bin 0 -> 7891 bytes .../Assets/Textures/NaturalEarthII/2/0/3.jpg | Bin 0 -> 10341 bytes .../Assets/Textures/NaturalEarthII/2/1/0.jpg | Bin 0 -> 7852 bytes .../Assets/Textures/NaturalEarthII/2/1/1.jpg | Bin 0 -> 6850 bytes .../Assets/Textures/NaturalEarthII/2/1/2.jpg | Bin 0 -> 11581 bytes .../Assets/Textures/NaturalEarthII/2/1/3.jpg | Bin 0 -> 15862 bytes .../Assets/Textures/NaturalEarthII/2/2/0.jpg | Bin 0 -> 10657 bytes .../Assets/Textures/NaturalEarthII/2/2/1.jpg | Bin 0 -> 12456 bytes .../Assets/Textures/NaturalEarthII/2/2/2.jpg | Bin 0 -> 12262 bytes .../Assets/Textures/NaturalEarthII/2/2/3.jpg | Bin 0 -> 14940 bytes .../Assets/Textures/NaturalEarthII/2/3/0.jpg | Bin 0 -> 9531 bytes .../Assets/Textures/NaturalEarthII/2/3/1.jpg | Bin 0 -> 10234 bytes .../Assets/Textures/NaturalEarthII/2/3/2.jpg | Bin 0 -> 11678 bytes .../Assets/Textures/NaturalEarthII/2/3/3.jpg | Bin 0 -> 10754 bytes .../Assets/Textures/NaturalEarthII/2/4/0.jpg | Bin 0 -> 8474 bytes .../Assets/Textures/NaturalEarthII/2/4/1.jpg | Bin 0 -> 12265 bytes .../Assets/Textures/NaturalEarthII/2/4/2.jpg | Bin 0 -> 16477 bytes .../Assets/Textures/NaturalEarthII/2/4/3.jpg | Bin 0 -> 11888 bytes .../Assets/Textures/NaturalEarthII/2/5/0.jpg | Bin 0 -> 7540 bytes .../Assets/Textures/NaturalEarthII/2/5/1.jpg | Bin 0 -> 10274 bytes .../Assets/Textures/NaturalEarthII/2/5/2.jpg | Bin 0 -> 16112 bytes .../Assets/Textures/NaturalEarthII/2/5/3.jpg | Bin 0 -> 11877 bytes .../Assets/Textures/NaturalEarthII/2/6/0.jpg | Bin 0 -> 6636 bytes .../Assets/Textures/NaturalEarthII/2/6/1.jpg | Bin 0 -> 11564 bytes .../Assets/Textures/NaturalEarthII/2/6/2.jpg | Bin 0 -> 16411 bytes .../Assets/Textures/NaturalEarthII/2/6/3.jpg | Bin 0 -> 12756 bytes .../Assets/Textures/NaturalEarthII/2/7/0.jpg | Bin 0 -> 9032 bytes .../Assets/Textures/NaturalEarthII/2/7/1.jpg | Bin 0 -> 12957 bytes .../Assets/Textures/NaturalEarthII/2/7/2.jpg | Bin 0 -> 11362 bytes .../Assets/Textures/NaturalEarthII/2/7/3.jpg | Bin 0 -> 11859 bytes .../NaturalEarthII/tilemapresource.xml | 14 + .../Assets/Textures/SkyBox/tycho2t3_80_mx.jpg | Bin 0 -> 118775 bytes .../Assets/Textures/SkyBox/tycho2t3_80_my.jpg | Bin 0 -> 152501 bytes .../Assets/Textures/SkyBox/tycho2t3_80_mz.jpg | Bin 0 -> 167980 bytes .../Assets/Textures/SkyBox/tycho2t3_80_px.jpg | Bin 0 -> 122746 bytes .../Assets/Textures/SkyBox/tycho2t3_80_py.jpg | Bin 0 -> 152999 bytes .../Assets/Textures/SkyBox/tycho2t3_80_pz.jpg | Bin 0 -> 152537 bytes .../cesium/Assets/Textures/maki/airfield.png | Bin 0 -> 1188 bytes .../cesium/Assets/Textures/maki/airport.png | Bin 0 -> 1554 bytes .../Assets/Textures/maki/alcohol-shop.png | Bin 0 -> 1293 bytes .../Assets/Textures/maki/america-football.png | Bin 0 -> 2595 bytes .../Assets/Textures/maki/art-gallery.png | Bin 0 -> 3159 bytes public/cesium/Assets/Textures/maki/bakery.png | Bin 0 -> 2714 bytes public/cesium/Assets/Textures/maki/bank.png | Bin 0 -> 936 bytes public/cesium/Assets/Textures/maki/bar.png | Bin 0 -> 1435 bytes .../cesium/Assets/Textures/maki/baseball.png | Bin 0 -> 1838 bytes .../Assets/Textures/maki/basketball.png | Bin 0 -> 1318 bytes public/cesium/Assets/Textures/maki/beer.png | Bin 0 -> 1403 bytes .../cesium/Assets/Textures/maki/bicycle.png | Bin 0 -> 3989 bytes .../cesium/Assets/Textures/maki/building.png | Bin 0 -> 1765 bytes public/cesium/Assets/Textures/maki/bus.png | Bin 0 -> 998 bytes public/cesium/Assets/Textures/maki/cafe.png | Bin 0 -> 1518 bytes public/cesium/Assets/Textures/maki/camera.png | Bin 0 -> 1976 bytes .../cesium/Assets/Textures/maki/campsite.png | Bin 0 -> 2411 bytes public/cesium/Assets/Textures/maki/car.png | Bin 0 -> 1498 bytes .../cesium/Assets/Textures/maki/cemetery.png | Bin 0 -> 967 bytes public/cesium/Assets/Textures/maki/cesium.png | Bin 0 -> 3610 bytes .../cesium/Assets/Textures/maki/chemist.png | Bin 0 -> 1603 bytes public/cesium/Assets/Textures/maki/cinema.png | Bin 0 -> 1492 bytes .../Assets/Textures/maki/circle-stroked.png | Bin 0 -> 2126 bytes public/cesium/Assets/Textures/maki/circle.png | Bin 0 -> 1459 bytes public/cesium/Assets/Textures/maki/city.png | Bin 0 -> 788 bytes .../Assets/Textures/maki/clothing-store.png | Bin 0 -> 2037 bytes .../cesium/Assets/Textures/maki/college.png | Bin 0 -> 2502 bytes .../Assets/Textures/maki/commercial.png | Bin 0 -> 1002 bytes .../cesium/Assets/Textures/maki/cricket.png | Bin 0 -> 1677 bytes public/cesium/Assets/Textures/maki/cross.png | Bin 0 -> 1888 bytes public/cesium/Assets/Textures/maki/dam.png | Bin 0 -> 1703 bytes public/cesium/Assets/Textures/maki/danger.png | Bin 0 -> 2429 bytes .../Assets/Textures/maki/disability.png | Bin 0 -> 3437 bytes .../cesium/Assets/Textures/maki/dog-park.png | Bin 0 -> 3146 bytes .../cesium/Assets/Textures/maki/embassy.png | Bin 0 -> 1680 bytes .../Textures/maki/emergency-telephone.png | Bin 0 -> 1533 bytes .../cesium/Assets/Textures/maki/entrance.png | Bin 0 -> 1307 bytes public/cesium/Assets/Textures/maki/farm.png | Bin 0 -> 1686 bytes .../cesium/Assets/Textures/maki/fast-food.png | Bin 0 -> 2019 bytes public/cesium/Assets/Textures/maki/ferry.png | Bin 0 -> 2879 bytes .../Assets/Textures/maki/fire-station.png | Bin 0 -> 2228 bytes public/cesium/Assets/Textures/maki/fuel.png | Bin 0 -> 1741 bytes public/cesium/Assets/Textures/maki/garden.png | Bin 0 -> 2057 bytes public/cesium/Assets/Textures/maki/gift.png | Bin 0 -> 1606 bytes public/cesium/Assets/Textures/maki/golf.png | Bin 0 -> 1999 bytes .../cesium/Assets/Textures/maki/grocery.png | Bin 0 -> 1425 bytes .../Assets/Textures/maki/hairdresser.png | Bin 0 -> 3301 bytes public/cesium/Assets/Textures/maki/harbor.png | Bin 0 -> 2048 bytes public/cesium/Assets/Textures/maki/heart.png | Bin 0 -> 1745 bytes .../cesium/Assets/Textures/maki/heliport.png | Bin 0 -> 2059 bytes .../cesium/Assets/Textures/maki/hospital.png | Bin 0 -> 909 bytes .../cesium/Assets/Textures/maki/ice-cream.png | Bin 0 -> 1602 bytes .../Assets/Textures/maki/industrial.png | Bin 0 -> 1092 bytes .../cesium/Assets/Textures/maki/land-use.png | Bin 0 -> 1773 bytes .../cesium/Assets/Textures/maki/laundry.png | Bin 0 -> 2407 bytes .../cesium/Assets/Textures/maki/library.png | Bin 0 -> 1355 bytes .../Assets/Textures/maki/lighthouse.png | Bin 0 -> 1944 bytes .../cesium/Assets/Textures/maki/lodging.png | Bin 0 -> 1362 bytes .../cesium/Assets/Textures/maki/logging.png | Bin 0 -> 1378 bytes .../Textures/maki/london-underground.png | Bin 0 -> 2979 bytes .../Assets/Textures/maki/marker-stroked.png | Bin 0 -> 3414 bytes public/cesium/Assets/Textures/maki/marker.png | Bin 0 -> 2448 bytes .../cesium/Assets/Textures/maki/minefield.png | Bin 0 -> 1907 bytes .../Assets/Textures/maki/mobilephone.png | Bin 0 -> 1474 bytes .../cesium/Assets/Textures/maki/monument.png | Bin 0 -> 1376 bytes public/cesium/Assets/Textures/maki/museum.png | Bin 0 -> 2578 bytes public/cesium/Assets/Textures/maki/music.png | Bin 0 -> 1371 bytes .../cesium/Assets/Textures/maki/oil-well.png | Bin 0 -> 3357 bytes public/cesium/Assets/Textures/maki/park.png | Bin 0 -> 2059 bytes public/cesium/Assets/Textures/maki/park2.png | Bin 0 -> 2284 bytes .../Assets/Textures/maki/parking-garage.png | Bin 0 -> 1563 bytes .../cesium/Assets/Textures/maki/parking.png | Bin 0 -> 1250 bytes .../cesium/Assets/Textures/maki/pharmacy.png | Bin 0 -> 2258 bytes public/cesium/Assets/Textures/maki/pitch.png | Bin 0 -> 3288 bytes .../Assets/Textures/maki/place-of-worship.png | Bin 0 -> 1111 bytes .../Assets/Textures/maki/playground.png | Bin 0 -> 3856 bytes public/cesium/Assets/Textures/maki/police.png | Bin 0 -> 2194 bytes .../Assets/Textures/maki/polling-place.png | Bin 0 -> 1772 bytes public/cesium/Assets/Textures/maki/post.png | Bin 0 -> 1273 bytes public/cesium/Assets/Textures/maki/prison.png | Bin 0 -> 1371 bytes .../Assets/Textures/maki/rail-above.png | Bin 0 -> 2071 bytes .../Assets/Textures/maki/rail-light.png | Bin 0 -> 2816 bytes .../Assets/Textures/maki/rail-metro.png | Bin 0 -> 2249 bytes .../Assets/Textures/maki/rail-underground.png | Bin 0 -> 1996 bytes public/cesium/Assets/Textures/maki/rail.png | Bin 0 -> 2073 bytes .../Textures/maki/religious-christian.png | Bin 0 -> 948 bytes .../Assets/Textures/maki/religious-jewish.png | Bin 0 -> 2384 bytes .../Assets/Textures/maki/religious-muslim.png | Bin 0 -> 3925 bytes .../Assets/Textures/maki/restaurant.png | Bin 0 -> 2499 bytes .../cesium/Assets/Textures/maki/roadblock.png | Bin 0 -> 1312 bytes public/cesium/Assets/Textures/maki/rocket.png | Bin 0 -> 1653 bytes public/cesium/Assets/Textures/maki/school.png | Bin 0 -> 3838 bytes .../cesium/Assets/Textures/maki/scooter.png | Bin 0 -> 2942 bytes public/cesium/Assets/Textures/maki/shop.png | Bin 0 -> 1544 bytes public/cesium/Assets/Textures/maki/skiing.png | Bin 0 -> 3345 bytes .../Assets/Textures/maki/slaughterhouse.png | Bin 0 -> 2270 bytes public/cesium/Assets/Textures/maki/soccer.png | Bin 0 -> 2420 bytes .../Assets/Textures/maki/square-stroked.png | Bin 0 -> 650 bytes public/cesium/Assets/Textures/maki/square.png | Bin 0 -> 582 bytes .../Assets/Textures/maki/star-stroked.png | Bin 0 -> 3460 bytes public/cesium/Assets/Textures/maki/star.png | Bin 0 -> 2703 bytes .../cesium/Assets/Textures/maki/suitcase.png | Bin 0 -> 1129 bytes .../cesium/Assets/Textures/maki/swimming.png | Bin 0 -> 2106 bytes .../cesium/Assets/Textures/maki/telephone.png | Bin 0 -> 1702 bytes public/cesium/Assets/Textures/maki/tennis.png | Bin 0 -> 1658 bytes .../cesium/Assets/Textures/maki/theatre.png | Bin 0 -> 3233 bytes .../cesium/Assets/Textures/maki/toilets.png | Bin 0 -> 2917 bytes .../cesium/Assets/Textures/maki/town-hall.png | Bin 0 -> 2005 bytes public/cesium/Assets/Textures/maki/town.png | Bin 0 -> 1125 bytes .../Assets/Textures/maki/triangle-stroked.png | Bin 0 -> 2837 bytes .../cesium/Assets/Textures/maki/triangle.png | Bin 0 -> 2137 bytes .../cesium/Assets/Textures/maki/village.png | Bin 0 -> 2145 bytes .../cesium/Assets/Textures/maki/warehouse.png | Bin 0 -> 1908 bytes .../Assets/Textures/maki/waste-basket.png | Bin 0 -> 1917 bytes public/cesium/Assets/Textures/maki/water.png | Bin 0 -> 2411 bytes .../cesium/Assets/Textures/maki/wetland.png | Bin 0 -> 2151 bytes public/cesium/Assets/Textures/maki/zoo.png | Bin 0 -> 2681 bytes public/cesium/Assets/Textures/moonSmall.jpg | Bin 0 -> 18196 bytes public/cesium/Assets/Textures/pin.svg | 1 + .../cesium/Assets/Textures/waterNormals.jpg | Bin 0 -> 294196 bytes .../Assets/Textures/waterNormalsSmall.jpg | Bin 0 -> 34121 bytes .../Assets/approximateTerrainHeights.json | 1 + public/cesium/Cesium.js | 16099 ++++ public/cesium/ThirdParty/Workers/package.json | 1 + .../ThirdParty/Workers/pako_deflate.min.js | 1 + .../ThirdParty/Workers/pako_inflate.min.js | 1 + .../ThirdParty/Workers/z-worker-pako.js | 1 + .../cesium/ThirdParty/basis_transcoder.wasm | Bin 0 -> 500839 bytes public/cesium/ThirdParty/draco_decoder.wasm | Bin 0 -> 285948 bytes .../ThirdParty/google-earth-dbroot-parser.js | 1 + public/cesium/Widgets/Animation/Animation.css | 127 + public/cesium/Widgets/Animation/lighter.css | 70 + .../BaseLayerPicker/BaseLayerPicker.css | 108 + .../Widgets/BaseLayerPicker/lighter.css | 22 + .../Cesium3DTilesInspector.css | 102 + .../CesiumInspector/CesiumInspector.css | 113 + .../Widgets/CesiumWidget/CesiumWidget.css | 119 + .../cesium/Widgets/CesiumWidget/lighter.css | 14 + .../FullscreenButton/FullscreenButton.css | 8 + public/cesium/Widgets/Geocoder/Geocoder.css | 70 + public/cesium/Widgets/Geocoder/lighter.css | 17 + .../I3SBuildingSceneLayerExplorer.css | 27 + .../ArcGisMapServiceWorldHillshade.png | Bin 0 -> 8624 bytes .../ArcGisMapServiceWorldImagery.png | Bin 0 -> 12290 bytes .../ArcGisMapServiceWorldOcean.png | Bin 0 -> 9905 bytes .../Images/ImageryProviders/bingAerial.png | Bin 0 -> 9943 bytes .../ImageryProviders/bingAerialLabels.png | Bin 0 -> 10374 bytes .../Images/ImageryProviders/bingRoads.png | Bin 0 -> 8076 bytes .../Images/ImageryProviders/blueMarble.png | Bin 0 -> 7403 bytes .../Images/ImageryProviders/earthAtNight.png | Bin 0 -> 5836 bytes .../mapQuestOpenStreetMap.png | Bin 0 -> 11342 bytes .../ImageryProviders/mapboxSatellite.png | Bin 0 -> 9242 bytes .../Images/ImageryProviders/mapboxStreets.png | Bin 0 -> 7270 bytes .../Images/ImageryProviders/mapboxTerrain.png | Bin 0 -> 8300 bytes .../ImageryProviders/naturalEarthII.png | Bin 0 -> 7491 bytes .../Images/ImageryProviders/openStreetMap.png | Bin 0 -> 2663 bytes .../Images/ImageryProviders/sentinel-2.png | Bin 0 -> 10086 bytes .../ImageryProviders/stadiaAlidadeSmooth.png | Bin 0 -> 7302 bytes .../stadiaAlidadeSmoothDark.png | Bin 0 -> 7289 bytes .../Images/ImageryProviders/stamenToner.png | Bin 0 -> 4119 bytes .../ImageryProviders/stamenWatercolor.png | Bin 0 -> 10806 bytes .../Widgets/Images/NavigationHelp/Mouse.svg | 84 + .../Images/NavigationHelp/MouseLeft.svg | 76 + .../Images/NavigationHelp/MouseMiddle.svg | 76 + .../Images/NavigationHelp/MouseRight.svg | 76 + .../Widgets/Images/NavigationHelp/Touch.svg | 120 + .../Images/NavigationHelp/TouchDrag.svg | 129 + .../Images/NavigationHelp/TouchRotate.svg | 76 + .../Images/NavigationHelp/TouchTilt.svg | 135 + .../Images/NavigationHelp/TouchZoom.svg | 74 + .../TerrainProviders/CesiumWorldTerrain.png | Bin 0 -> 10080 bytes .../Images/TerrainProviders/Ellipsoid.png | Bin 0 -> 6173 bytes .../cesium/Widgets/Images/TimelineIcons.png | Bin 0 -> 781 bytes public/cesium/Widgets/Images/info-loading.gif | Bin 0 -> 723 bytes public/cesium/Widgets/InfoBox/InfoBox.css | 92 + .../Widgets/InfoBox/InfoBoxDescription.css | 178 + .../NavigationHelpButton.css | 93 + .../Widgets/NavigationHelpButton/lighter.css | 38 + .../PerformanceWatchdog.css | 15 + .../ProjectionPicker/ProjectionPicker.css | 38 + .../SceneModePicker/SceneModePicker.css | 56 + .../SelectionIndicator/SelectionIndicator.css | 20 + public/cesium/Widgets/Timeline/Timeline.css | 103 + public/cesium/Widgets/Timeline/lighter.css | 23 + public/cesium/Widgets/VRButton/VRButton.css | 8 + public/cesium/Widgets/Viewer/Viewer.css | 107 + .../Widgets/VoxelInspector/VoxelInspector.css | 16 + public/cesium/Widgets/lighter.css | 237 + public/cesium/Widgets/lighterShared.css | 46 + public/cesium/Widgets/shared.css | 103 + public/cesium/Widgets/widgets.css | 1342 + public/cesium/Workers/chunk-35CVRQTC.js | 26 + public/cesium/Workers/chunk-3A7LMSMN.js | 26 + public/cesium/Workers/chunk-42IXF5OF.js | 26 + public/cesium/Workers/chunk-4IMXHKCA.js | 26 + public/cesium/Workers/chunk-4UYSGV57.js | 26 + public/cesium/Workers/chunk-4YP32ZNP.js | 26 + public/cesium/Workers/chunk-6BHHTHKE.js | 26 + public/cesium/Workers/chunk-74GQJJ7R.js | 26 + public/cesium/Workers/chunk-ANLJ4KBN.js | 26 + public/cesium/Workers/chunk-AOALMXNW.js | 26 + public/cesium/Workers/chunk-APUOR5ZJ.js | 26 + public/cesium/Workers/chunk-AZ3SWEDV.js | 26 + public/cesium/Workers/chunk-BBPN4YHW.js | 26 + public/cesium/Workers/chunk-BKSIEBAA.js | 26 + public/cesium/Workers/chunk-CKMJZ5B3.js | 26 + public/cesium/Workers/chunk-CXNPIJLB.js | 26 + public/cesium/Workers/chunk-D4TZ3IL5.js | 26 + public/cesium/Workers/chunk-EEKB62LQ.js | 26 + public/cesium/Workers/chunk-FMRIJYNG.js | 26 + public/cesium/Workers/chunk-FNJKWSPR.js | 26 + public/cesium/Workers/chunk-GE5NEIZC.js | 27 + public/cesium/Workers/chunk-GHQSI7F2.js | 26 + public/cesium/Workers/chunk-GSNDLQ4C.js | 26 + public/cesium/Workers/chunk-H7RGDEUC.js | 26 + public/cesium/Workers/chunk-ICZXFP3D.js | 26 + public/cesium/Workers/chunk-ID6SFQTL.js | 27 + public/cesium/Workers/chunk-II4JDBXY.js | 26 + public/cesium/Workers/chunk-IIL7G2BA.js | 26 + public/cesium/Workers/chunk-IPMQ7HU7.js | 26 + public/cesium/Workers/chunk-IWC6ZFZO.js | 26 + public/cesium/Workers/chunk-J4KLLKML.js | 26 + public/cesium/Workers/chunk-JCUVYVZU.js | 26 + public/cesium/Workers/chunk-JMSSU44E.js | 28 + public/cesium/Workers/chunk-JS6PT4NQ.js | 26 + public/cesium/Workers/chunk-KM43AUZL.js | 26 + public/cesium/Workers/chunk-KSZ5EBRB.js | 26 + public/cesium/Workers/chunk-LCOAEBXR.js | 26 + public/cesium/Workers/chunk-M5SITFFN.js | 26 + public/cesium/Workers/chunk-NNHN6WUY.js | 26 + public/cesium/Workers/chunk-O3CFQFRB.js | 26 + public/cesium/Workers/chunk-PWAJ3RAI.js | 28 + public/cesium/Workers/chunk-R3AL5FUL.js | 26 + public/cesium/Workers/chunk-RSJQ5FUT.js | 26 + public/cesium/Workers/chunk-T7ERZ2CJ.js | 26 + public/cesium/Workers/chunk-UV3CO6HM.js | 26 + public/cesium/Workers/chunk-V3DSE3OK.js | 26 + public/cesium/Workers/chunk-VLPNAR64.js | 26 + public/cesium/Workers/chunk-VTVHUB7E.js | 26 + public/cesium/Workers/chunk-WNTCOVG2.js | 26 + public/cesium/Workers/chunk-YWRPWWKI.js | 66 + public/cesium/Workers/chunk-ZFTFDHK4.js | 26 + public/cesium/Workers/chunk-ZPYKVVFF.js | 26 + public/cesium/Workers/combineGeometry.js | 26 + public/cesium/Workers/createBoxGeometry.js | 26 + .../Workers/createBoxOutlineGeometry.js | 26 + public/cesium/Workers/createCircleGeometry.js | 26 + .../Workers/createCircleOutlineGeometry.js | 26 + .../Workers/createCoplanarPolygonGeometry.js | 26 + .../createCoplanarPolygonOutlineGeometry.js | 26 + .../cesium/Workers/createCorridorGeometry.js | 26 + .../Workers/createCorridorOutlineGeometry.js | 26 + .../cesium/Workers/createCylinderGeometry.js | 26 + .../Workers/createCylinderOutlineGeometry.js | 26 + .../cesium/Workers/createEllipseGeometry.js | 26 + .../Workers/createEllipseOutlineGeometry.js | 26 + .../cesium/Workers/createEllipsoidGeometry.js | 26 + .../Workers/createEllipsoidOutlineGeometry.js | 26 + .../cesium/Workers/createFrustumGeometry.js | 26 + .../Workers/createFrustumOutlineGeometry.js | 26 + public/cesium/Workers/createGeometry.js | 26 + .../Workers/createGroundPolylineGeometry.js | 26 + public/cesium/Workers/createPlaneGeometry.js | 26 + .../Workers/createPlaneOutlineGeometry.js | 26 + .../cesium/Workers/createPolygonGeometry.js | 26 + .../Workers/createPolygonOutlineGeometry.js | 26 + .../cesium/Workers/createPolylineGeometry.js | 26 + .../Workers/createPolylineVolumeGeometry.js | 26 + .../createPolylineVolumeOutlineGeometry.js | 26 + .../cesium/Workers/createRectangleGeometry.js | 26 + .../Workers/createRectangleOutlineGeometry.js | 26 + .../Workers/createSimplePolylineGeometry.js | 26 + public/cesium/Workers/createSphereGeometry.js | 26 + .../Workers/createSphereOutlineGeometry.js | 26 + .../Workers/createTaskProcessorWorker.js | 26 + .../createVectorTileClampedPolylines.js | 26 + .../Workers/createVectorTileGeometries.js | 26 + .../cesium/Workers/createVectorTilePoints.js | 26 + .../Workers/createVectorTilePolygons.js | 26 + .../Workers/createVectorTilePolylines.js | 26 + ...VerticesFromGoogleEarthEnterpriseBuffer.js | 26 + .../Workers/createVerticesFromHeightmap.js | 26 + .../createVerticesFromQuantizedTerrainMesh.js | 26 + public/cesium/Workers/createWallGeometry.js | 26 + .../Workers/createWallOutlineGeometry.js | 26 + public/cesium/Workers/decodeDraco.js | 26 + .../decodeGoogleEarthEnterprisePacket.js | 26 + public/cesium/Workers/decodeI3S.js | 26 + public/cesium/Workers/transcodeKTX2.js | 56 + .../cesium/Workers/transferTypedArrayTest.js | 26 + .../Workers/upsampleQuantizedTerrainMesh.js | 26 + public/cesium/index.cjs | 16099 ++++ public/cesium/index.js | 16099 ++++ public/dark-thumb.png | Bin 0 -> 112987 bytes public/empty-box.png | Bin 0 -> 2955 bytes public/empty-mapset.png | Bin 0 -> 16851 bytes public/feedback-button.svg | 5 + public/file.svg | 1 + public/globe.svg | 1 + public/icons/emoji-0.svg | 40 + public/icons/emoji-1.svg | 31 + public/icons/emoji-2.svg | 47 + public/icons/emoji-3.svg | 31 + public/icons/emoji-4.svg | 40 + public/illustration-map.png | Bin 0 -> 3270166 bytes public/ilustration-login.svg | 9 + public/jatim.json | 79510 ++++++++++++++++ public/landing/hero.webp | Bin 0 -> 21358 bytes public/landing/icons/icon_downloads.png | Bin 0 -> 7730 bytes public/landing/icons/icon_fb.webp | Bin 0 -> 160 bytes public/landing/icons/icon_instagram.webp | Bin 0 -> 204 bytes public/landing/icons/icon_mapset.webp | Bin 0 -> 1714 bytes public/landing/icons/icon_metadata.webp | Bin 0 -> 954 bytes public/landing/icons/icon_opd.webp | Bin 0 -> 1194 bytes public/landing/icons/icon_twitter.webp | Bin 0 -> 194 bytes public/landing/icons/icon_visitors.webp | Bin 0 -> 1110 bytes public/landing/icons/icon_youtube.webp | Bin 0 -> 186 bytes public/landing/logo_pemprov_jatim.png | Bin 0 -> 39311 bytes public/landing/ornaments/ornament1.webp | Bin 0 -> 572 bytes public/landing/ornaments/ornament2.webp | Bin 0 -> 3704 bytes public/light-thumb.png | Bin 0 -> 185814 bytes public/logo-vertical.svg | 194 + public/logo-white.png | Bin 0 -> 15782 bytes public/logo-white_.png | Bin 0 -> 5986 bytes public/logo.png | Bin 0 -> 89106 bytes public/logo.svg | 578 + public/logo_satu peta_white.webp | Bin 0 -> 6404 bytes public/marker-icon-2x.png | Bin 0 -> 2464 bytes public/marker-icon.png | Bin 0 -> 1466 bytes public/marker-shadow.png | Bin 0 -> 618 bytes public/next.svg | 1 + public/osm-thumb.png | Bin 0 -> 475615 bytes public/pattern-01.png | Bin 0 -> 3995 bytes public/rbi-thumb.png | Bin 0 -> 234207 bytes public/satellite-thumb.png | Bin 0 -> 885586 bytes public/template-news-2.png | Bin 0 -> 316921 bytes public/template-news.png | Bin 0 -> 374608 bytes public/template-organization.png | Bin 0 -> 1154 bytes public/terrain-thumb.png | Bin 0 -> 547549 bytes public/vercel.svg | 1 + public/window.svg | 1 + shared/components/auth/admin-route-guard.tsx | 71 + shared/components/button/button.tsx | 56 + shared/components/client-wrapper.tsx | 19 + shared/components/data-table.tsx | 175 + shared/components/ds/badge.tsx | 48 + shared/components/ds/button.tsx | 62 + shared/components/ds/card.tsx | 68 + shared/components/ds/form-button.tsx | 43 + shared/components/ds/form-field.tsx | 96 + shared/components/ds/input.tsx | 23 + shared/components/ds/success-dialog.tsx | 62 + shared/components/error-state.tsx | 33 + shared/components/forms/form-input.tsx | 58 + .../forms/form-organization-select.tsx | 84 + shared/components/forms/form-topic-select.tsx | 83 + shared/components/icons.tsx | 180 + shared/components/image-upload.tsx | 134 + shared/components/layout/footer.tsx | 109 + shared/components/layout/header.tsx | 136 + shared/components/layout/menu-header.tsx | 136 + shared/components/loading-spinner.tsx | 7 + shared/components/map-legend.tsx | 71 + shared/components/popup-attribute.tsx | 26 + shared/components/preview-map.tsx | 280 + shared/components/search-input.tsx | 24 + shared/components/status-validation-badge.tsx | 21 + shared/components/text-editor.tsx | 257 + shared/components/ui/accordion.tsx | 66 + shared/components/ui/alert-dialog.tsx | 157 + shared/components/ui/avatar.tsx | 53 + shared/components/ui/badge.tsx | 46 + shared/components/ui/breadcrumb.tsx | 109 + shared/components/ui/button.tsx | 68 + shared/components/ui/card.tsx | 92 + shared/components/ui/checkbox.tsx | 32 + shared/components/ui/command.tsx | 177 + shared/components/ui/dialog.tsx | 135 + shared/components/ui/dropdown-menu.tsx | 257 + shared/components/ui/form.tsx | 167 + shared/components/ui/input.tsx | 21 + shared/components/ui/label.tsx | 24 + shared/components/ui/pagination.tsx | 62 + shared/components/ui/popover.tsx | 37 + shared/components/ui/radio-group.tsx | 45 + shared/components/ui/scroll-area.tsx | 58 + shared/components/ui/select.tsx | 185 + shared/components/ui/separator.tsx | 28 + shared/components/ui/sheet.tsx | 139 + shared/components/ui/sidebar.tsx | 715 + shared/components/ui/skeleton.tsx | 13 + shared/components/ui/slider.tsx | 63 + shared/components/ui/sonner.tsx | 25 + shared/components/ui/switch.tsx | 35 + shared/components/ui/table.tsx | 43 + shared/components/ui/tabs.tsx | 66 + shared/components/ui/textarea.tsx | 18 + shared/components/ui/tooltip.tsx | 61 + shared/components/virtual-select.tsx | 118 + shared/config/access-admin.ts | 9 + shared/config/app-config.ts | 24 + shared/config/coverage.ts | 6 + shared/config/feature-flag.ts | 22 + shared/config/layer-type.ts | 20 + shared/config/map-config.ts | 4 + shared/config/role.ts | 134 + shared/config/route-permission-map.ts | 44 + shared/config/status-validation.ts | 13 + shared/hooks/use-auth-api.ts | 42 + shared/hooks/use-mobile.ts | 19 + shared/hooks/use-session.ts | 37 + shared/hooks/use-success-dialog.ts | 26 + shared/providers/global-dialog-provider.tsx | 41 + shared/providers/index.tsx | 57 + shared/providers/theme-provider.tsx | 11 + shared/schemas/category.ts | 11 + shared/schemas/credential.ts | 26 + shared/schemas/feedback.ts | 22 + shared/schemas/map-source.ts | 12 + shared/schemas/news.ts | 11 + shared/schemas/organization.ts | 15 + shared/schemas/user.ts | 42 + shared/services/api.ts | 113 + shared/services/auth.ts | 29 + shared/services/category.ts | 51 + shared/services/classification.ts | 30 + shared/services/color-scale.ts | 51 + shared/services/count.ts | 11 + shared/services/credential.ts | 46 + shared/services/feedback.ts | 13 + shared/services/file.ts | 55 + shared/services/history.ts | 36 + shared/services/map-layer.ts | 63 + shared/services/map-projection-system.ts | 32 + shared/services/map-source.ts | 49 + shared/services/mapset.ts | 61 + shared/services/metadata-url.ts | 50 + shared/services/news.ts | 51 + shared/services/organization.ts | 50 + shared/services/role.ts | 28 + shared/services/statistic-count.ts | 7 + shared/services/topic.ts | 26 + shared/services/user.ts | 47 + shared/state/dialog.ts | 29 + shared/state/theme.ts | 3 + shared/state/user.ts | 3 + shared/types/api-response.ts | 23 + shared/types/attribute-kugi.ts | 8 + shared/types/auth-user.ts | 33 + shared/types/auth.d.ts | 60 + shared/types/category.ts | 8 + shared/types/classification.ts | 7 + shared/types/credential.ts | 23 + shared/types/feedback.ts | 15 + shared/types/global.d.ts | 7 + shared/types/history-draft.ts | 10 + shared/types/history.ts | 10 + shared/types/map-projection-system.ts | 4 + shared/types/map-source.ts | 13 + shared/types/mapset-source.ts | 6 + shared/types/mapset-type.ts | 6 + shared/types/mapset.ts | 110 + shared/types/news.ts | 7 + shared/types/organization.ts | 14 + shared/types/pagination.ts | 7 + shared/types/role.ts | 6 + shared/types/select-option.ts | 4 + shared/types/topic.ts | 16 + shared/types/user.ts | 17 + shared/types/wilayah.ts | 7 + shared/utils/auth-transform.ts | 28 + shared/utils/create-theme.ts | 25 + shared/utils/date.ts | 18 + shared/utils/dialog.ts | 47 + shared/utils/download-mapset.ts | 136 + shared/utils/file.ts | 9 + shared/utils/form.ts | 17 + shared/utils/geonetwork.ts | 25 + shared/utils/mege-data-geojson.ts | 51 + shared/utils/query-client.ts | 50 + shared/utils/utils.ts | 6 + shared/utils/wms.ts | 267 + structure.txt | 203 + tsconfig.json | 30 + 789 files changed, 182213 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 app/(modules)/(landing)/components/catalog-section/_components/main-mapset-card-skeleton.tsx create mode 100644 app/(modules)/(landing)/components/catalog-section/index.tsx create mode 100644 app/(modules)/(landing)/components/catalog-section/main-mapset-card.tsx create mode 100644 app/(modules)/(landing)/components/category-section/category-card.tsx create mode 100644 app/(modules)/(landing)/components/category-section/index.tsx create mode 100644 app/(modules)/(landing)/components/feedback/_components/emoji-rating.tsx create mode 100644 app/(modules)/(landing)/components/feedback/_components/select-purpose.tsx create mode 100644 app/(modules)/(landing)/components/feedback/_components/select-sector.tsx create mode 100644 app/(modules)/(landing)/components/feedback/_hooks/use-feedback-form.tsx create mode 100644 app/(modules)/(landing)/components/feedback/feedback-form.tsx create mode 100644 app/(modules)/(landing)/components/feedback/index.tsx create mode 100644 app/(modules)/(landing)/components/hero-section/_components/statistic-card-item.tsx create mode 100644 app/(modules)/(landing)/components/hero-section/_components/statistic-config.ts create mode 100644 app/(modules)/(landing)/components/hero-section/_views/highlight-mapset.tsx create mode 100644 app/(modules)/(landing)/components/hero-section/_views/search.tsx create mode 100644 app/(modules)/(landing)/components/hero-section/_views/statistic-card.tsx create mode 100644 app/(modules)/(landing)/components/hero-section/index.tsx create mode 100644 app/(modules)/(landing)/components/mapset-card.tsx create mode 100644 app/(modules)/(landing)/components/news-section/_components/news-card-skeleton.tsx create mode 100644 app/(modules)/(landing)/components/news-section/index.tsx create mode 100644 app/(modules)/(landing)/components/news-section/news-card.tsx create mode 100644 app/(modules)/(landing)/components/news-section/news-main-card.tsx create mode 100644 app/(modules)/(landing)/components/news-section/news-secondary-card.tsx create mode 100644 app/(modules)/(landing)/components/organization-section/index.tsx create mode 100644 app/(modules)/(landing)/components/organization-section/organization-card.tsx create mode 100644 app/(modules)/(landing)/components/statistic-section.tsx create mode 100644 app/(modules)/admin/_components/confirmation-dialog.tsx create mode 100644 app/(modules)/admin/_components/data-table.tsx create mode 100644 app/(modules)/admin/_components/delete-dialog.tsx create mode 100644 app/(modules)/admin/_components/detail-item.tsx create mode 100644 app/(modules)/admin/_components/empty-state.tsx create mode 100644 app/(modules)/admin/_components/page-header.tsx create mode 100644 app/(modules)/admin/_components/refdata-bootstrap.tsx create mode 100644 app/(modules)/admin/_components/resource-table.tsx create mode 100644 app/(modules)/admin/_components/search-action-bar.tsx create mode 100644 app/(modules)/admin/_components/search-input.tsx create mode 100644 app/(modules)/admin/_components/sidebar.tsx create mode 100644 app/(modules)/admin/_hooks/use-tab.tsx create mode 100644 app/(modules)/admin/_hooks/use-table-state.tsx create mode 100644 app/(modules)/admin/category/_components/column.tsx create mode 100644 app/(modules)/admin/category/_components/detail.tsx create mode 100644 app/(modules)/admin/category/_components/form.tsx create mode 100644 app/(modules)/admin/category/_hooks/use-category-form.tsx create mode 100644 app/(modules)/admin/category/add/page.client.tsx create mode 100644 app/(modules)/admin/category/add/page.tsx create mode 100644 app/(modules)/admin/category/detail/[id]/page.tsx create mode 100644 app/(modules)/admin/category/edit/[id]/page.client.tsx create mode 100644 app/(modules)/admin/category/edit/[id]/page.tsx create mode 100644 app/(modules)/admin/category/page.client.tsx create mode 100644 app/(modules)/admin/category/page.tsx create mode 100644 app/(modules)/admin/credential/_components/column.tsx create mode 100644 app/(modules)/admin/credential/_components/form.tsx create mode 100644 app/(modules)/admin/credential/_components/use-credential-form.tsx create mode 100644 app/(modules)/admin/credential/add/page.client.tsx create mode 100644 app/(modules)/admin/credential/add/page.tsx create mode 100644 app/(modules)/admin/credential/edit/[id]/page.client.tsx create mode 100644 app/(modules)/admin/credential/edit/[id]/page.tsx create mode 100644 app/(modules)/admin/credential/page.client.tsx create mode 100644 app/(modules)/admin/credential/page.tsx create mode 100644 app/(modules)/admin/dashboard/page.tsx create mode 100644 app/(modules)/admin/layout.tsx create mode 100644 app/(modules)/admin/map-source/_components/column.tsx create mode 100644 app/(modules)/admin/map-source/_components/detail.tsx create mode 100644 app/(modules)/admin/map-source/_components/form.tsx create mode 100644 app/(modules)/admin/map-source/_hooks/use-form.tsx create mode 100644 app/(modules)/admin/map-source/add/page.client.tsx create mode 100644 app/(modules)/admin/map-source/add/page.tsx create mode 100644 app/(modules)/admin/map-source/detail/[id]/page.tsx create mode 100644 app/(modules)/admin/map-source/edit/[id]/page.client.tsx create mode 100644 app/(modules)/admin/map-source/edit/[id]/page.tsx create mode 100644 app/(modules)/admin/map-source/page.client.tsx create mode 100644 app/(modules)/admin/map-source/page.tsx create mode 100644 app/(modules)/admin/map-source/state.ts create mode 100644 app/(modules)/admin/mapset/_components/detail/mapset-classification-section.tsx create mode 100644 app/(modules)/admin/mapset/_components/detail/mapset-detail.tsx create mode 100644 app/(modules)/admin/mapset/_components/detail/mapset-history.tsx create mode 100644 app/(modules)/admin/mapset/_components/detail/mapset-info-section.tsx create mode 100644 app/(modules)/admin/mapset/_components/detail/mapset-metadata-section.tsx create mode 100644 app/(modules)/admin/mapset/_components/detail/mapset-organization-section.tsx create mode 100644 app/(modules)/admin/mapset/_components/detail/mapset-status.tsx create mode 100644 app/(modules)/admin/mapset/_components/detail/mapset-version-section.tsx create mode 100644 app/(modules)/admin/mapset/_components/form/mapset-classification-form.tsx create mode 100644 app/(modules)/admin/mapset/_components/form/mapset-info-form.tsx create mode 100644 app/(modules)/admin/mapset/_components/form/mapset-metadata-form.tsx create mode 100644 app/(modules)/admin/mapset/_components/form/mapset-organization-form.tsx create mode 100644 app/(modules)/admin/mapset/_components/form/mapset-tab.tsx create mode 100644 app/(modules)/admin/mapset/_components/form/mapset-version-form.tsx create mode 100644 app/(modules)/admin/mapset/_components/list/column.tsx create mode 100644 app/(modules)/admin/mapset/_components/list/filter-drawer.tsx create mode 100644 app/(modules)/admin/mapset/_components/list/tab-navigation.tsx create mode 100644 app/(modules)/admin/mapset/_components/verify-mapset-dialog.tsx create mode 100644 app/(modules)/admin/mapset/add/page.client.tsx create mode 100644 app/(modules)/admin/mapset/add/page.tsx create mode 100644 app/(modules)/admin/mapset/detail/[id]/page.tsx create mode 100644 app/(modules)/admin/mapset/edit/[id]/page.tsx create mode 100644 app/(modules)/admin/mapset/page.client.tsx create mode 100644 app/(modules)/admin/mapset/page.tsx create mode 100644 app/(modules)/admin/mapset/state.ts create mode 100644 app/(modules)/admin/news/_components/column.tsx create mode 100644 app/(modules)/admin/news/_components/detail.tsx create mode 100644 app/(modules)/admin/news/_components/form.tsx create mode 100644 app/(modules)/admin/news/_hooks/use-form.tsx create mode 100644 app/(modules)/admin/news/add/page.client.tsx create mode 100644 app/(modules)/admin/news/add/page.tsx create mode 100644 app/(modules)/admin/news/detail/[id]/page.tsx create mode 100644 app/(modules)/admin/news/edit/[id]/page.tsx create mode 100644 app/(modules)/admin/news/page.client.tsx create mode 100644 app/(modules)/admin/news/page.tsx create mode 100644 app/(modules)/admin/organization/_components/column.tsx create mode 100644 app/(modules)/admin/organization/_components/detail.tsx create mode 100644 app/(modules)/admin/organization/_components/form.tsx create mode 100644 app/(modules)/admin/organization/_hooks/use-organization-form.tsx create mode 100644 app/(modules)/admin/organization/add/page.client.tsx create mode 100644 app/(modules)/admin/organization/add/page.tsx create mode 100644 app/(modules)/admin/organization/detail/[id]/page.tsx create mode 100644 app/(modules)/admin/organization/edit/[id]/page.client.tsx create mode 100644 app/(modules)/admin/organization/edit/[id]/page.tsx create mode 100644 app/(modules)/admin/organization/page.client.tsx create mode 100644 app/(modules)/admin/organization/page.tsx create mode 100644 app/(modules)/admin/organization/state.ts create mode 100644 app/(modules)/admin/page.tsx create mode 100644 app/(modules)/admin/user/_components/column.tsx create mode 100644 app/(modules)/admin/user/_components/detail.tsx create mode 100644 app/(modules)/admin/user/_components/form.tsx create mode 100644 app/(modules)/admin/user/_hooks/use-form.tsx create mode 100644 app/(modules)/admin/user/add/page.client.tsx create mode 100644 app/(modules)/admin/user/add/page.tsx create mode 100644 app/(modules)/admin/user/detail/[id]/page.tsx create mode 100644 app/(modules)/admin/user/edit/[id]/page.client.tsx create mode 100644 app/(modules)/admin/user/edit/[id]/page.tsx create mode 100644 app/(modules)/admin/user/page.client.tsx create mode 100644 app/(modules)/admin/user/page.tsx create mode 100644 app/(modules)/auth/admin/login/page.client.tsx create mode 100644 app/(modules)/auth/admin/login/page.tsx create mode 100644 app/(modules)/auth/admin/logout/page.tsx create mode 100644 app/(modules)/maps/components/cesium-map.tsx create mode 100644 app/(modules)/maps/components/feature-information/index.tsx create mode 100644 app/(modules)/maps/components/footer/index.tsx create mode 100644 app/(modules)/maps/components/footer/scale-bar.tsx create mode 100644 app/(modules)/maps/components/geocoding-search/index.tsx create mode 100644 app/(modules)/maps/components/layer-manager.tsx create mode 100644 app/(modules)/maps/components/leaflet-map/index.tsx create mode 100644 app/(modules)/maps/components/leaflet-map/zoom-control.tsx create mode 100644 app/(modules)/maps/components/map-component.tsx create mode 100644 app/(modules)/maps/components/map-settings.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/index.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/main/dataset-detail-sidebar.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/main/description-section.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/main/download-geojson-btn.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/main/download-kml-btn.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/main/download-shp-btn.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/main/empty-state.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/main/index.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/main/layer-toggle.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/mapset-list/group-mapset/index.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/mapset-list/group-mapset/mapset-item.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/mapset-list/index.tsx create mode 100644 app/(modules)/maps/components/mapset-dialog/tab-switcher.tsx create mode 100644 app/(modules)/maps/components/sidebar/close-trigger.tsx create mode 100644 app/(modules)/maps/components/sidebar/drawing-tools/index.tsx create mode 100644 app/(modules)/maps/components/sidebar/empty-state.tsx create mode 100644 app/(modules)/maps/components/sidebar/index.tsx create mode 100644 app/(modules)/maps/components/sidebar/layer-controls/index.tsx create mode 100644 app/(modules)/maps/components/sidebar/layer-controls/layer-control-item/choropleth-control.tsx create mode 100644 app/(modules)/maps/components/sidebar/layer-controls/layer-control-item/index.tsx create mode 100644 app/(modules)/maps/components/sidebar/layer-controls/layer-control-item/layer-actions.tsx create mode 100644 app/(modules)/maps/components/sidebar/layer-controls/layer-control-item/legend-display.tsx create mode 100644 app/(modules)/maps/components/sidebar/layer-controls/layer-control-item/opacity-control.tsx create mode 100644 app/(modules)/maps/components/sidebar/logo-image.tsx create mode 100644 app/(modules)/maps/components/sidebar/open-trigger.tsx create mode 100644 app/(modules)/maps/config/basemap-config.ts create mode 100644 app/(modules)/maps/factories/cesium-provider.ts create mode 100644 app/(modules)/maps/hooks/useCesiumMap.tsx create mode 100644 app/(modules)/maps/hooks/useLayerToggle.tsx create mode 100644 app/(modules)/maps/page.client.tsx create mode 100644 app/(modules)/maps/page.tsx create mode 100644 app/(modules)/maps/state/active-basemap.ts create mode 100644 app/(modules)/maps/state/active-layers.ts create mode 100644 app/(modules)/maps/state/active-tab.ts create mode 100644 app/(modules)/maps/state/feature-information.ts create mode 100644 app/(modules)/maps/state/leaflet-layer-instances.ts create mode 100644 app/(modules)/maps/state/map-settings.ts create mode 100644 app/(modules)/maps/state/map-type.ts create mode 100644 app/(modules)/maps/state/map.ts create mode 100644 app/(modules)/maps/state/mapset-dialog.ts create mode 100644 app/(modules)/maps/types/basemap-config.ts create mode 100644 app/(modules)/maps/types/map-config.ts create mode 100644 app/(modules)/maps/utils/cesium.ts create mode 100644 app/(modules)/maps/utils/colors.ts create mode 100644 app/(modules)/maps/utils/feature-information.ts create mode 100644 app/(modules)/maps/utils/theme.ts create mode 100644 app/(modules)/news/[id]/news-content.tsx create mode 100644 app/(modules)/news/[id]/page.tsx create mode 100644 app/(modules)/news/layout.tsx create mode 100644 app/(modules)/news/page.tsx create mode 100644 app/auth/[...nextauth]/route.ts create mode 100644 app/error.tsx create mode 100644 app/favicon.ico create mode 100644 app/fe-api/mapset/download/geojson/[id]/route.ts create mode 100644 app/fe-api/mapset/download/kml/[id]/route.ts create mode 100644 app/fe-api/mapset/download/shp/[id]/route.ts create mode 100644 app/globals.css create mode 100644 app/layout.tsx create mode 100644 app/not-found.tsx create mode 100644 app/page.tsx create mode 100644 auth.ts create mode 100644 components.json create mode 100644 docker-compose.yml create mode 100644 ecosystem.config.js create mode 100644 env.example create mode 100644 env.prod.example create mode 100644 eslint.config.mjs create mode 100644 next.config.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.mjs create mode 100644 public/admin-logo.png create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json create mode 100644 public/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json create mode 100644 public/cesium/Assets/Images/bing_maps_credit.png create mode 100644 public/cesium/Assets/Images/cesium_credit.png create mode 100644 public/cesium/Assets/Images/google_earth_credit.png create mode 100644 public/cesium/Assets/Images/ion-credit.png create mode 100644 public/cesium/Assets/Textures/LensFlare/DirtMask.jpg create mode 100644 public/cesium/Assets/Textures/LensFlare/StarBurst.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg create mode 100644 public/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml create mode 100644 public/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg create mode 100644 public/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg create mode 100644 public/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg create mode 100644 public/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg create mode 100644 public/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg create mode 100644 public/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg create mode 100644 public/cesium/Assets/Textures/maki/airfield.png create mode 100644 public/cesium/Assets/Textures/maki/airport.png create mode 100644 public/cesium/Assets/Textures/maki/alcohol-shop.png create mode 100644 public/cesium/Assets/Textures/maki/america-football.png create mode 100644 public/cesium/Assets/Textures/maki/art-gallery.png create mode 100644 public/cesium/Assets/Textures/maki/bakery.png create mode 100644 public/cesium/Assets/Textures/maki/bank.png create mode 100644 public/cesium/Assets/Textures/maki/bar.png create mode 100644 public/cesium/Assets/Textures/maki/baseball.png create mode 100644 public/cesium/Assets/Textures/maki/basketball.png create mode 100644 public/cesium/Assets/Textures/maki/beer.png create mode 100644 public/cesium/Assets/Textures/maki/bicycle.png create mode 100644 public/cesium/Assets/Textures/maki/building.png create mode 100644 public/cesium/Assets/Textures/maki/bus.png create mode 100644 public/cesium/Assets/Textures/maki/cafe.png create mode 100644 public/cesium/Assets/Textures/maki/camera.png create mode 100644 public/cesium/Assets/Textures/maki/campsite.png create mode 100644 public/cesium/Assets/Textures/maki/car.png create mode 100644 public/cesium/Assets/Textures/maki/cemetery.png create mode 100644 public/cesium/Assets/Textures/maki/cesium.png create mode 100644 public/cesium/Assets/Textures/maki/chemist.png create mode 100644 public/cesium/Assets/Textures/maki/cinema.png create mode 100644 public/cesium/Assets/Textures/maki/circle-stroked.png create mode 100644 public/cesium/Assets/Textures/maki/circle.png create mode 100644 public/cesium/Assets/Textures/maki/city.png create mode 100644 public/cesium/Assets/Textures/maki/clothing-store.png create mode 100644 public/cesium/Assets/Textures/maki/college.png create mode 100644 public/cesium/Assets/Textures/maki/commercial.png create mode 100644 public/cesium/Assets/Textures/maki/cricket.png create mode 100644 public/cesium/Assets/Textures/maki/cross.png create mode 100644 public/cesium/Assets/Textures/maki/dam.png create mode 100644 public/cesium/Assets/Textures/maki/danger.png create mode 100644 public/cesium/Assets/Textures/maki/disability.png create mode 100644 public/cesium/Assets/Textures/maki/dog-park.png create mode 100644 public/cesium/Assets/Textures/maki/embassy.png create mode 100644 public/cesium/Assets/Textures/maki/emergency-telephone.png create mode 100644 public/cesium/Assets/Textures/maki/entrance.png create mode 100644 public/cesium/Assets/Textures/maki/farm.png create mode 100644 public/cesium/Assets/Textures/maki/fast-food.png create mode 100644 public/cesium/Assets/Textures/maki/ferry.png create mode 100644 public/cesium/Assets/Textures/maki/fire-station.png create mode 100644 public/cesium/Assets/Textures/maki/fuel.png create mode 100644 public/cesium/Assets/Textures/maki/garden.png create mode 100644 public/cesium/Assets/Textures/maki/gift.png create mode 100644 public/cesium/Assets/Textures/maki/golf.png create mode 100644 public/cesium/Assets/Textures/maki/grocery.png create mode 100644 public/cesium/Assets/Textures/maki/hairdresser.png create mode 100644 public/cesium/Assets/Textures/maki/harbor.png create mode 100644 public/cesium/Assets/Textures/maki/heart.png create mode 100644 public/cesium/Assets/Textures/maki/heliport.png create mode 100644 public/cesium/Assets/Textures/maki/hospital.png create mode 100644 public/cesium/Assets/Textures/maki/ice-cream.png create mode 100644 public/cesium/Assets/Textures/maki/industrial.png create mode 100644 public/cesium/Assets/Textures/maki/land-use.png create mode 100644 public/cesium/Assets/Textures/maki/laundry.png create mode 100644 public/cesium/Assets/Textures/maki/library.png create mode 100644 public/cesium/Assets/Textures/maki/lighthouse.png create mode 100644 public/cesium/Assets/Textures/maki/lodging.png create mode 100644 public/cesium/Assets/Textures/maki/logging.png create mode 100644 public/cesium/Assets/Textures/maki/london-underground.png create mode 100644 public/cesium/Assets/Textures/maki/marker-stroked.png create mode 100644 public/cesium/Assets/Textures/maki/marker.png create mode 100644 public/cesium/Assets/Textures/maki/minefield.png create mode 100644 public/cesium/Assets/Textures/maki/mobilephone.png create mode 100644 public/cesium/Assets/Textures/maki/monument.png create mode 100644 public/cesium/Assets/Textures/maki/museum.png create mode 100644 public/cesium/Assets/Textures/maki/music.png create mode 100644 public/cesium/Assets/Textures/maki/oil-well.png create mode 100644 public/cesium/Assets/Textures/maki/park.png create mode 100644 public/cesium/Assets/Textures/maki/park2.png create mode 100644 public/cesium/Assets/Textures/maki/parking-garage.png create mode 100644 public/cesium/Assets/Textures/maki/parking.png create mode 100644 public/cesium/Assets/Textures/maki/pharmacy.png create mode 100644 public/cesium/Assets/Textures/maki/pitch.png create mode 100644 public/cesium/Assets/Textures/maki/place-of-worship.png create mode 100644 public/cesium/Assets/Textures/maki/playground.png create mode 100644 public/cesium/Assets/Textures/maki/police.png create mode 100644 public/cesium/Assets/Textures/maki/polling-place.png create mode 100644 public/cesium/Assets/Textures/maki/post.png create mode 100644 public/cesium/Assets/Textures/maki/prison.png create mode 100644 public/cesium/Assets/Textures/maki/rail-above.png create mode 100644 public/cesium/Assets/Textures/maki/rail-light.png create mode 100644 public/cesium/Assets/Textures/maki/rail-metro.png create mode 100644 public/cesium/Assets/Textures/maki/rail-underground.png create mode 100644 public/cesium/Assets/Textures/maki/rail.png create mode 100644 public/cesium/Assets/Textures/maki/religious-christian.png create mode 100644 public/cesium/Assets/Textures/maki/religious-jewish.png create mode 100644 public/cesium/Assets/Textures/maki/religious-muslim.png create mode 100644 public/cesium/Assets/Textures/maki/restaurant.png create mode 100644 public/cesium/Assets/Textures/maki/roadblock.png create mode 100644 public/cesium/Assets/Textures/maki/rocket.png create mode 100644 public/cesium/Assets/Textures/maki/school.png create mode 100644 public/cesium/Assets/Textures/maki/scooter.png create mode 100644 public/cesium/Assets/Textures/maki/shop.png create mode 100644 public/cesium/Assets/Textures/maki/skiing.png create mode 100644 public/cesium/Assets/Textures/maki/slaughterhouse.png create mode 100644 public/cesium/Assets/Textures/maki/soccer.png create mode 100644 public/cesium/Assets/Textures/maki/square-stroked.png create mode 100644 public/cesium/Assets/Textures/maki/square.png create mode 100644 public/cesium/Assets/Textures/maki/star-stroked.png create mode 100644 public/cesium/Assets/Textures/maki/star.png create mode 100644 public/cesium/Assets/Textures/maki/suitcase.png create mode 100644 public/cesium/Assets/Textures/maki/swimming.png create mode 100644 public/cesium/Assets/Textures/maki/telephone.png create mode 100644 public/cesium/Assets/Textures/maki/tennis.png create mode 100644 public/cesium/Assets/Textures/maki/theatre.png create mode 100644 public/cesium/Assets/Textures/maki/toilets.png create mode 100644 public/cesium/Assets/Textures/maki/town-hall.png create mode 100644 public/cesium/Assets/Textures/maki/town.png create mode 100644 public/cesium/Assets/Textures/maki/triangle-stroked.png create mode 100644 public/cesium/Assets/Textures/maki/triangle.png create mode 100644 public/cesium/Assets/Textures/maki/village.png create mode 100644 public/cesium/Assets/Textures/maki/warehouse.png create mode 100644 public/cesium/Assets/Textures/maki/waste-basket.png create mode 100644 public/cesium/Assets/Textures/maki/water.png create mode 100644 public/cesium/Assets/Textures/maki/wetland.png create mode 100644 public/cesium/Assets/Textures/maki/zoo.png create mode 100644 public/cesium/Assets/Textures/moonSmall.jpg create mode 100644 public/cesium/Assets/Textures/pin.svg create mode 100644 public/cesium/Assets/Textures/waterNormals.jpg create mode 100644 public/cesium/Assets/Textures/waterNormalsSmall.jpg create mode 100644 public/cesium/Assets/approximateTerrainHeights.json create mode 100644 public/cesium/Cesium.js create mode 100644 public/cesium/ThirdParty/Workers/package.json create mode 100644 public/cesium/ThirdParty/Workers/pako_deflate.min.js create mode 100644 public/cesium/ThirdParty/Workers/pako_inflate.min.js create mode 100644 public/cesium/ThirdParty/Workers/z-worker-pako.js create mode 100644 public/cesium/ThirdParty/basis_transcoder.wasm create mode 100644 public/cesium/ThirdParty/draco_decoder.wasm create mode 100644 public/cesium/ThirdParty/google-earth-dbroot-parser.js create mode 100644 public/cesium/Widgets/Animation/Animation.css create mode 100644 public/cesium/Widgets/Animation/lighter.css create mode 100644 public/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css create mode 100644 public/cesium/Widgets/BaseLayerPicker/lighter.css create mode 100644 public/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css create mode 100644 public/cesium/Widgets/CesiumInspector/CesiumInspector.css create mode 100644 public/cesium/Widgets/CesiumWidget/CesiumWidget.css create mode 100644 public/cesium/Widgets/CesiumWidget/lighter.css create mode 100644 public/cesium/Widgets/FullscreenButton/FullscreenButton.css create mode 100644 public/cesium/Widgets/Geocoder/Geocoder.css create mode 100644 public/cesium/Widgets/Geocoder/lighter.css create mode 100644 public/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css create mode 100644 public/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/bingAerial.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/bingRoads.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/blueMarble.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/earthAtNight.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/openStreetMap.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/sentinel-2.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/stamenToner.png create mode 100644 public/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png create mode 100644 public/cesium/Widgets/Images/NavigationHelp/Mouse.svg create mode 100644 public/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg create mode 100644 public/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg create mode 100644 public/cesium/Widgets/Images/NavigationHelp/MouseRight.svg create mode 100644 public/cesium/Widgets/Images/NavigationHelp/Touch.svg create mode 100644 public/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg create mode 100644 public/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg create mode 100644 public/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg create mode 100644 public/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg create mode 100644 public/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png create mode 100644 public/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png create mode 100644 public/cesium/Widgets/Images/TimelineIcons.png create mode 100644 public/cesium/Widgets/Images/info-loading.gif create mode 100644 public/cesium/Widgets/InfoBox/InfoBox.css create mode 100644 public/cesium/Widgets/InfoBox/InfoBoxDescription.css create mode 100644 public/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css create mode 100644 public/cesium/Widgets/NavigationHelpButton/lighter.css create mode 100644 public/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css create mode 100644 public/cesium/Widgets/ProjectionPicker/ProjectionPicker.css create mode 100644 public/cesium/Widgets/SceneModePicker/SceneModePicker.css create mode 100644 public/cesium/Widgets/SelectionIndicator/SelectionIndicator.css create mode 100644 public/cesium/Widgets/Timeline/Timeline.css create mode 100644 public/cesium/Widgets/Timeline/lighter.css create mode 100644 public/cesium/Widgets/VRButton/VRButton.css create mode 100644 public/cesium/Widgets/Viewer/Viewer.css create mode 100644 public/cesium/Widgets/VoxelInspector/VoxelInspector.css create mode 100644 public/cesium/Widgets/lighter.css create mode 100644 public/cesium/Widgets/lighterShared.css create mode 100644 public/cesium/Widgets/shared.css create mode 100644 public/cesium/Widgets/widgets.css create mode 100644 public/cesium/Workers/chunk-35CVRQTC.js create mode 100644 public/cesium/Workers/chunk-3A7LMSMN.js create mode 100644 public/cesium/Workers/chunk-42IXF5OF.js create mode 100644 public/cesium/Workers/chunk-4IMXHKCA.js create mode 100644 public/cesium/Workers/chunk-4UYSGV57.js create mode 100644 public/cesium/Workers/chunk-4YP32ZNP.js create mode 100644 public/cesium/Workers/chunk-6BHHTHKE.js create mode 100644 public/cesium/Workers/chunk-74GQJJ7R.js create mode 100644 public/cesium/Workers/chunk-ANLJ4KBN.js create mode 100644 public/cesium/Workers/chunk-AOALMXNW.js create mode 100644 public/cesium/Workers/chunk-APUOR5ZJ.js create mode 100644 public/cesium/Workers/chunk-AZ3SWEDV.js create mode 100644 public/cesium/Workers/chunk-BBPN4YHW.js create mode 100644 public/cesium/Workers/chunk-BKSIEBAA.js create mode 100644 public/cesium/Workers/chunk-CKMJZ5B3.js create mode 100644 public/cesium/Workers/chunk-CXNPIJLB.js create mode 100644 public/cesium/Workers/chunk-D4TZ3IL5.js create mode 100644 public/cesium/Workers/chunk-EEKB62LQ.js create mode 100644 public/cesium/Workers/chunk-FMRIJYNG.js create mode 100644 public/cesium/Workers/chunk-FNJKWSPR.js create mode 100644 public/cesium/Workers/chunk-GE5NEIZC.js create mode 100644 public/cesium/Workers/chunk-GHQSI7F2.js create mode 100644 public/cesium/Workers/chunk-GSNDLQ4C.js create mode 100644 public/cesium/Workers/chunk-H7RGDEUC.js create mode 100644 public/cesium/Workers/chunk-ICZXFP3D.js create mode 100644 public/cesium/Workers/chunk-ID6SFQTL.js create mode 100644 public/cesium/Workers/chunk-II4JDBXY.js create mode 100644 public/cesium/Workers/chunk-IIL7G2BA.js create mode 100644 public/cesium/Workers/chunk-IPMQ7HU7.js create mode 100644 public/cesium/Workers/chunk-IWC6ZFZO.js create mode 100644 public/cesium/Workers/chunk-J4KLLKML.js create mode 100644 public/cesium/Workers/chunk-JCUVYVZU.js create mode 100644 public/cesium/Workers/chunk-JMSSU44E.js create mode 100644 public/cesium/Workers/chunk-JS6PT4NQ.js create mode 100644 public/cesium/Workers/chunk-KM43AUZL.js create mode 100644 public/cesium/Workers/chunk-KSZ5EBRB.js create mode 100644 public/cesium/Workers/chunk-LCOAEBXR.js create mode 100644 public/cesium/Workers/chunk-M5SITFFN.js create mode 100644 public/cesium/Workers/chunk-NNHN6WUY.js create mode 100644 public/cesium/Workers/chunk-O3CFQFRB.js create mode 100644 public/cesium/Workers/chunk-PWAJ3RAI.js create mode 100644 public/cesium/Workers/chunk-R3AL5FUL.js create mode 100644 public/cesium/Workers/chunk-RSJQ5FUT.js create mode 100644 public/cesium/Workers/chunk-T7ERZ2CJ.js create mode 100644 public/cesium/Workers/chunk-UV3CO6HM.js create mode 100644 public/cesium/Workers/chunk-V3DSE3OK.js create mode 100644 public/cesium/Workers/chunk-VLPNAR64.js create mode 100644 public/cesium/Workers/chunk-VTVHUB7E.js create mode 100644 public/cesium/Workers/chunk-WNTCOVG2.js create mode 100644 public/cesium/Workers/chunk-YWRPWWKI.js create mode 100644 public/cesium/Workers/chunk-ZFTFDHK4.js create mode 100644 public/cesium/Workers/chunk-ZPYKVVFF.js create mode 100644 public/cesium/Workers/combineGeometry.js create mode 100644 public/cesium/Workers/createBoxGeometry.js create mode 100644 public/cesium/Workers/createBoxOutlineGeometry.js create mode 100644 public/cesium/Workers/createCircleGeometry.js create mode 100644 public/cesium/Workers/createCircleOutlineGeometry.js create mode 100644 public/cesium/Workers/createCoplanarPolygonGeometry.js create mode 100644 public/cesium/Workers/createCoplanarPolygonOutlineGeometry.js create mode 100644 public/cesium/Workers/createCorridorGeometry.js create mode 100644 public/cesium/Workers/createCorridorOutlineGeometry.js create mode 100644 public/cesium/Workers/createCylinderGeometry.js create mode 100644 public/cesium/Workers/createCylinderOutlineGeometry.js create mode 100644 public/cesium/Workers/createEllipseGeometry.js create mode 100644 public/cesium/Workers/createEllipseOutlineGeometry.js create mode 100644 public/cesium/Workers/createEllipsoidGeometry.js create mode 100644 public/cesium/Workers/createEllipsoidOutlineGeometry.js create mode 100644 public/cesium/Workers/createFrustumGeometry.js create mode 100644 public/cesium/Workers/createFrustumOutlineGeometry.js create mode 100644 public/cesium/Workers/createGeometry.js create mode 100644 public/cesium/Workers/createGroundPolylineGeometry.js create mode 100644 public/cesium/Workers/createPlaneGeometry.js create mode 100644 public/cesium/Workers/createPlaneOutlineGeometry.js create mode 100644 public/cesium/Workers/createPolygonGeometry.js create mode 100644 public/cesium/Workers/createPolygonOutlineGeometry.js create mode 100644 public/cesium/Workers/createPolylineGeometry.js create mode 100644 public/cesium/Workers/createPolylineVolumeGeometry.js create mode 100644 public/cesium/Workers/createPolylineVolumeOutlineGeometry.js create mode 100644 public/cesium/Workers/createRectangleGeometry.js create mode 100644 public/cesium/Workers/createRectangleOutlineGeometry.js create mode 100644 public/cesium/Workers/createSimplePolylineGeometry.js create mode 100644 public/cesium/Workers/createSphereGeometry.js create mode 100644 public/cesium/Workers/createSphereOutlineGeometry.js create mode 100644 public/cesium/Workers/createTaskProcessorWorker.js create mode 100644 public/cesium/Workers/createVectorTileClampedPolylines.js create mode 100644 public/cesium/Workers/createVectorTileGeometries.js create mode 100644 public/cesium/Workers/createVectorTilePoints.js create mode 100644 public/cesium/Workers/createVectorTilePolygons.js create mode 100644 public/cesium/Workers/createVectorTilePolylines.js create mode 100644 public/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js create mode 100644 public/cesium/Workers/createVerticesFromHeightmap.js create mode 100644 public/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js create mode 100644 public/cesium/Workers/createWallGeometry.js create mode 100644 public/cesium/Workers/createWallOutlineGeometry.js create mode 100644 public/cesium/Workers/decodeDraco.js create mode 100644 public/cesium/Workers/decodeGoogleEarthEnterprisePacket.js create mode 100644 public/cesium/Workers/decodeI3S.js create mode 100644 public/cesium/Workers/transcodeKTX2.js create mode 100644 public/cesium/Workers/transferTypedArrayTest.js create mode 100644 public/cesium/Workers/upsampleQuantizedTerrainMesh.js create mode 100644 public/cesium/index.cjs create mode 100644 public/cesium/index.js create mode 100644 public/dark-thumb.png create mode 100644 public/empty-box.png create mode 100644 public/empty-mapset.png create mode 100644 public/feedback-button.svg create mode 100644 public/file.svg create mode 100644 public/globe.svg create mode 100644 public/icons/emoji-0.svg create mode 100644 public/icons/emoji-1.svg create mode 100644 public/icons/emoji-2.svg create mode 100644 public/icons/emoji-3.svg create mode 100644 public/icons/emoji-4.svg create mode 100644 public/illustration-map.png create mode 100644 public/ilustration-login.svg create mode 100644 public/jatim.json create mode 100644 public/landing/hero.webp create mode 100644 public/landing/icons/icon_downloads.png create mode 100644 public/landing/icons/icon_fb.webp create mode 100644 public/landing/icons/icon_instagram.webp create mode 100644 public/landing/icons/icon_mapset.webp create mode 100644 public/landing/icons/icon_metadata.webp create mode 100644 public/landing/icons/icon_opd.webp create mode 100644 public/landing/icons/icon_twitter.webp create mode 100644 public/landing/icons/icon_visitors.webp create mode 100644 public/landing/icons/icon_youtube.webp create mode 100644 public/landing/logo_pemprov_jatim.png create mode 100644 public/landing/ornaments/ornament1.webp create mode 100644 public/landing/ornaments/ornament2.webp create mode 100644 public/light-thumb.png create mode 100644 public/logo-vertical.svg create mode 100644 public/logo-white.png create mode 100644 public/logo-white_.png create mode 100644 public/logo.png create mode 100644 public/logo.svg create mode 100644 public/logo_satu peta_white.webp create mode 100644 public/marker-icon-2x.png create mode 100644 public/marker-icon.png create mode 100644 public/marker-shadow.png create mode 100644 public/next.svg create mode 100644 public/osm-thumb.png create mode 100644 public/pattern-01.png create mode 100644 public/rbi-thumb.png create mode 100644 public/satellite-thumb.png create mode 100644 public/template-news-2.png create mode 100644 public/template-news.png create mode 100644 public/template-organization.png create mode 100644 public/terrain-thumb.png create mode 100644 public/vercel.svg create mode 100644 public/window.svg create mode 100644 shared/components/auth/admin-route-guard.tsx create mode 100644 shared/components/button/button.tsx create mode 100644 shared/components/client-wrapper.tsx create mode 100644 shared/components/data-table.tsx create mode 100644 shared/components/ds/badge.tsx create mode 100644 shared/components/ds/button.tsx create mode 100644 shared/components/ds/card.tsx create mode 100644 shared/components/ds/form-button.tsx create mode 100644 shared/components/ds/form-field.tsx create mode 100644 shared/components/ds/input.tsx create mode 100644 shared/components/ds/success-dialog.tsx create mode 100644 shared/components/error-state.tsx create mode 100644 shared/components/forms/form-input.tsx create mode 100644 shared/components/forms/form-organization-select.tsx create mode 100644 shared/components/forms/form-topic-select.tsx create mode 100644 shared/components/icons.tsx create mode 100644 shared/components/image-upload.tsx create mode 100644 shared/components/layout/footer.tsx create mode 100644 shared/components/layout/header.tsx create mode 100644 shared/components/layout/menu-header.tsx create mode 100644 shared/components/loading-spinner.tsx create mode 100644 shared/components/map-legend.tsx create mode 100644 shared/components/popup-attribute.tsx create mode 100644 shared/components/preview-map.tsx create mode 100644 shared/components/search-input.tsx create mode 100644 shared/components/status-validation-badge.tsx create mode 100644 shared/components/text-editor.tsx create mode 100644 shared/components/ui/accordion.tsx create mode 100644 shared/components/ui/alert-dialog.tsx create mode 100644 shared/components/ui/avatar.tsx create mode 100644 shared/components/ui/badge.tsx create mode 100644 shared/components/ui/breadcrumb.tsx create mode 100644 shared/components/ui/button.tsx create mode 100644 shared/components/ui/card.tsx create mode 100644 shared/components/ui/checkbox.tsx create mode 100644 shared/components/ui/command.tsx create mode 100644 shared/components/ui/dialog.tsx create mode 100644 shared/components/ui/dropdown-menu.tsx create mode 100644 shared/components/ui/form.tsx create mode 100644 shared/components/ui/input.tsx create mode 100644 shared/components/ui/label.tsx create mode 100644 shared/components/ui/pagination.tsx create mode 100644 shared/components/ui/popover.tsx create mode 100644 shared/components/ui/radio-group.tsx create mode 100644 shared/components/ui/scroll-area.tsx create mode 100644 shared/components/ui/select.tsx create mode 100644 shared/components/ui/separator.tsx create mode 100644 shared/components/ui/sheet.tsx create mode 100644 shared/components/ui/sidebar.tsx create mode 100644 shared/components/ui/skeleton.tsx create mode 100644 shared/components/ui/slider.tsx create mode 100644 shared/components/ui/sonner.tsx create mode 100644 shared/components/ui/switch.tsx create mode 100644 shared/components/ui/table.tsx create mode 100644 shared/components/ui/tabs.tsx create mode 100644 shared/components/ui/textarea.tsx create mode 100644 shared/components/ui/tooltip.tsx create mode 100644 shared/components/virtual-select.tsx create mode 100644 shared/config/access-admin.ts create mode 100644 shared/config/app-config.ts create mode 100644 shared/config/coverage.ts create mode 100644 shared/config/feature-flag.ts create mode 100644 shared/config/layer-type.ts create mode 100644 shared/config/map-config.ts create mode 100644 shared/config/role.ts create mode 100644 shared/config/route-permission-map.ts create mode 100644 shared/config/status-validation.ts create mode 100644 shared/hooks/use-auth-api.ts create mode 100644 shared/hooks/use-mobile.ts create mode 100644 shared/hooks/use-session.ts create mode 100644 shared/hooks/use-success-dialog.ts create mode 100644 shared/providers/global-dialog-provider.tsx create mode 100644 shared/providers/index.tsx create mode 100644 shared/providers/theme-provider.tsx create mode 100644 shared/schemas/category.ts create mode 100644 shared/schemas/credential.ts create mode 100644 shared/schemas/feedback.ts create mode 100644 shared/schemas/map-source.ts create mode 100644 shared/schemas/news.ts create mode 100644 shared/schemas/organization.ts create mode 100644 shared/schemas/user.ts create mode 100644 shared/services/api.ts create mode 100644 shared/services/auth.ts create mode 100644 shared/services/category.ts create mode 100644 shared/services/classification.ts create mode 100644 shared/services/color-scale.ts create mode 100644 shared/services/count.ts create mode 100644 shared/services/credential.ts create mode 100644 shared/services/feedback.ts create mode 100644 shared/services/file.ts create mode 100644 shared/services/history.ts create mode 100644 shared/services/map-layer.ts create mode 100644 shared/services/map-projection-system.ts create mode 100644 shared/services/map-source.ts create mode 100644 shared/services/mapset.ts create mode 100644 shared/services/metadata-url.ts create mode 100644 shared/services/news.ts create mode 100644 shared/services/organization.ts create mode 100644 shared/services/role.ts create mode 100644 shared/services/statistic-count.ts create mode 100644 shared/services/topic.ts create mode 100644 shared/services/user.ts create mode 100644 shared/state/dialog.ts create mode 100644 shared/state/theme.ts create mode 100644 shared/state/user.ts create mode 100644 shared/types/api-response.ts create mode 100644 shared/types/attribute-kugi.ts create mode 100644 shared/types/auth-user.ts create mode 100644 shared/types/auth.d.ts create mode 100644 shared/types/category.ts create mode 100644 shared/types/classification.ts create mode 100644 shared/types/credential.ts create mode 100644 shared/types/feedback.ts create mode 100644 shared/types/global.d.ts create mode 100644 shared/types/history-draft.ts create mode 100644 shared/types/history.ts create mode 100644 shared/types/map-projection-system.ts create mode 100644 shared/types/map-source.ts create mode 100644 shared/types/mapset-source.ts create mode 100644 shared/types/mapset-type.ts create mode 100644 shared/types/mapset.ts create mode 100644 shared/types/news.ts create mode 100644 shared/types/organization.ts create mode 100644 shared/types/pagination.ts create mode 100644 shared/types/role.ts create mode 100644 shared/types/select-option.ts create mode 100644 shared/types/topic.ts create mode 100644 shared/types/user.ts create mode 100644 shared/types/wilayah.ts create mode 100644 shared/utils/auth-transform.ts create mode 100644 shared/utils/create-theme.ts create mode 100644 shared/utils/date.ts create mode 100644 shared/utils/dialog.ts create mode 100644 shared/utils/download-mapset.ts create mode 100644 shared/utils/file.ts create mode 100644 shared/utils/form.ts create mode 100644 shared/utils/geonetwork.ts create mode 100644 shared/utils/mege-data-geojson.ts create mode 100644 shared/utils/query-client.ts create mode 100644 shared/utils/utils.ts create mode 100644 shared/utils/wms.ts create mode 100644 structure.txt create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb253bd --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# husky +.husky + +# editor configs (local only) +.vscode/ +.idea/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..394f7d5 --- /dev/null +++ b/.prettierrc @@ -0,0 +1 @@ +{ "plugins": ["prettier-plugin-tailwindcss"] } diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1274df4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,57 @@ +# ------------------------------------ +# Base image + pnpm +# ------------------------------------ +FROM node:20-alpine AS base +WORKDIR /app +RUN apk add --no-cache libc6-compat +RUN corepack enable && corepack prepare pnpm@9 --activate + +# ------------------------------------ +# Install dependencies +# ------------------------------------ +FROM base AS deps +WORKDIR /app +COPY package.json pnpm-lock.yaml* ./ +RUN --mount=type=cache,target=/root/.local/share/pnpm/store \ + pnpm install --no-frozen-lockfile + +# ------------------------------------ +# Build the application +# ------------------------------------ +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Jadikan build lebih netral tanpa API URL/SECRET +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN pnpm build + +# ------------------------------------ +# Production image +# ------------------------------------ +FROM node:20-alpine AS runner +WORKDIR /app +RUN apk add --no-cache libc6-compat + +RUN addgroup -g 1001 nodejs && \ + adduser -u 1001 -G nodejs -s /bin/sh -D nextjs + +COPY --from=builder /app/public ./public +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +# => ENV hanya untuk runtime, BUKAN build time! +ENV NODE_ENV=production +ENV HOSTNAME=0.0.0.0 +ENV PORT=4000 + +EXPOSE 4000 + +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD node -e "require('http').get('http://localhost:4000', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" + +CMD ["node", "server.js"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/app/(modules)/(landing)/components/catalog-section/_components/main-mapset-card-skeleton.tsx b/app/(modules)/(landing)/components/catalog-section/_components/main-mapset-card-skeleton.tsx new file mode 100644 index 0000000..3056b99 --- /dev/null +++ b/app/(modules)/(landing)/components/catalog-section/_components/main-mapset-card-skeleton.tsx @@ -0,0 +1,37 @@ +// MainMapsetCardSkeleton.tsx +import { Card, CardContent } from "@/shared/components/ui/card"; + +export function MainMapsetCardSkeleton() { + return ( + + + {/* Map preview placeholder */} +
+ + {/* Category badge */} +
+ + {/* Content */} +
+ {/* Title lines */} +
+
+ + {/* Stats row */} +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + ); +} diff --git a/app/(modules)/(landing)/components/catalog-section/index.tsx b/app/(modules)/(landing)/components/catalog-section/index.tsx new file mode 100644 index 0000000..62ae844 --- /dev/null +++ b/app/(modules)/(landing)/components/catalog-section/index.tsx @@ -0,0 +1,98 @@ +"use client"; + +import React from "react"; +import Link from "next/link"; +import { MainMapsetCard } from "./main-mapset-card"; +import { useQuery } from "@tanstack/react-query"; +import mapsetApi from "@/shared/services/mapset"; +import { Button } from "@/shared/components/button/button"; +import { MainMapsetCardSkeleton } from "./_components/main-mapset-card-skeleton"; +import { ErrorState } from "@/shared/components/error-state"; + +export function CatalogSection() { + const { + data: mapsets, + isLoading, + isError, + error, + isSuccess, + refetch, + isFetching, + } = useQuery({ + queryKey: ["mapsets-catalog"], + queryFn: () => + mapsetApi + .getMapsets( + { + limit: 5, + filter: JSON.stringify([ + "is_active=true", + "status_validation=approved", + ]), + }, + { skipAuth: true }, + ) + .then((res) => { + return res.items; + }), + staleTime: 5000, + retry: 1, + }); + + const showSkeleton = isLoading || (isFetching && !isSuccess); + + return ( + <> +
+
+
+
+

+ Katalog Mapset +

+
+ + + +
+

+ Koleksi lengkap peta dan data geospasial Jawa Timur +

+ + {(() => { + if (showSkeleton) { + return ( +
+ {[...Array(4)].map((_, i) => ( + + ))} +
+ ); + } + + if (isError) { + return ; + } + + if (isSuccess && (!mapsets || mapsets.length === 0)) { + return ( +
+ Belum ada mapset untuk ditampilkan. +
+ ); + } + + if (isSuccess && mapsets && mapsets.length > 0) { + return ( +
+ {mapsets.slice(0, 4).map((mapset) => ( + + ))} +
+ ); + } + })()} +
+ + ); +} diff --git a/app/(modules)/(landing)/components/catalog-section/main-mapset-card.tsx b/app/(modules)/(landing)/components/catalog-section/main-mapset-card.tsx new file mode 100644 index 0000000..a533246 --- /dev/null +++ b/app/(modules)/(landing)/components/catalog-section/main-mapset-card.tsx @@ -0,0 +1,62 @@ +import LoadingSpinner from "@/shared/components/loading-spinner"; +import { CardContent, Card } from "@/shared/components/ui/card"; +import { Mapset } from "@/shared/types/mapset"; +import { Download, Eye } from "lucide-react"; +import dynamic from "next/dynamic"; + +const PreviewMap = dynamic(() => import("@/shared/components/preview-map"), { + ssr: false, + loading: () => , +}); + +export function MainMapsetCard({ mapset }: Readonly<{ mapset: Mapset }>) { + return ( + + +
+ +
+ + {mapset?.category?.name} + + +
+ +

+ {mapset.name} +

+
+ +
+
+
+ + {mapset.view_count} +
+
+ + {mapset.download_count} +
+
+ {/* +
+
+ + 2.450 +
+
+ + 892 +
+
+
*/} +
+
+
+
+ ); +} diff --git a/app/(modules)/(landing)/components/category-section/category-card.tsx b/app/(modules)/(landing)/components/category-section/category-card.tsx new file mode 100644 index 0000000..3d08eff --- /dev/null +++ b/app/(modules)/(landing)/components/category-section/category-card.tsx @@ -0,0 +1,43 @@ +import { getFileThumbnailUrl } from "@/shared/utils/file"; +import Image from "next/image"; +import Link from "next/link"; + +export default function CategoryCard({ + name, + icon, + link, totalDataset, +}: Readonly<{ + id: string; + name: string; + description?: string | null; + icon?: string | null; + link: string; + totalDataset: number; +}>) { + return ( + +
+
+ {name} +
+
+ +
+

{name}

+ +
+ {totalDataset} Dataset +
+
+ + ); +} diff --git a/app/(modules)/(landing)/components/category-section/index.tsx b/app/(modules)/(landing)/components/category-section/index.tsx new file mode 100644 index 0000000..587f953 --- /dev/null +++ b/app/(modules)/(landing)/components/category-section/index.tsx @@ -0,0 +1,88 @@ +"use client"; +import React, { useState } from "react"; +import { useQuery } from "@tanstack/react-query"; +import categoryApi from "@/shared/services/category"; +import CategoryCard from "./category-card"; +import { ErrorState } from "@/shared/components/error-state"; +import { Button } from "@/shared/components/button/button"; + +export function CategorySection() { + const [showAll, setShowAll] = useState(false); + + const { data: categories, isLoading, isFetching, isSuccess, isError, error, refetch } = useQuery({ + queryKey: ["categories-list", showAll], + queryFn: () => + categoryApi + .getCategories( + { + ...(showAll ? {} : { limit: 6 }), + filter: ["is_active=true"], + }, + { skipAuth: true } + ) + .then((res) => res.items), + staleTime: 5000, + retry: 1, + }); + + const showSkeleton = isLoading || (isFetching && !isSuccess); + + return ( +
+
+
+
+

Topik

+
+ {!showAll ? ( + + ) : ( + + )} +
+

Telusuri ragam topik yang tersedia!

+ + {(() => { + if (showSkeleton) { + return ( +
+ {[...Array(6)].map((_, i) => ( +
+ ))} +
+ ); + } + if (isError) { + return ; + } + if (isSuccess && (!categories || categories.length === 0)) { + return ( +
Belum ada kategori untuk ditampilkan.
+ ); + } + if (isSuccess && categories && categories.length > 0) { + return ( +
+ {categories.map((cat) => ( + + ))} +
+ ); + } + return null; + })()} +
+ ); +} diff --git a/app/(modules)/(landing)/components/feedback/_components/emoji-rating.tsx b/app/(modules)/(landing)/components/feedback/_components/emoji-rating.tsx new file mode 100644 index 0000000..13ce374 --- /dev/null +++ b/app/(modules)/(landing)/components/feedback/_components/emoji-rating.tsx @@ -0,0 +1,110 @@ +"use client"; + +import { Label } from "@/shared/components/ui/label"; // atau pakai