Compare commits
64 Commits
d2785fe7f8
...
1.3a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8ed30cd73
|
||
|
|
c50933908c
|
||
| 77edae3585 | |||
|
|
50c152084e | ||
| b0a107c749 | |||
| 91050826b2 | |||
|
|
1004119fed | ||
| d262331d1b | |||
| 7440e85987 | |||
| 2351512af8 | |||
| ae2cde3545 | |||
|
|
1000319b8f
|
||
|
|
8c4c5e16e0
|
||
|
|
0ce1e604a8
|
||
|
|
757783534c
|
||
|
|
3eba48ea7d
|
||
| cf886b9581 | |||
|
|
f2ff152c07 | ||
| 19b152db8c | |||
|
|
18dff78e5b | ||
| 9b16a30c9a | |||
|
|
62bf040093 | ||
| 60bafc6798 | |||
| bf206efc1f | |||
|
|
c42f72a856 | ||
|
|
c6a890aee3 | ||
| 59450cf480 | |||
|
|
7f068ea10f | ||
| f9763d7b53 | |||
|
|
f2e9f44dee | ||
| 1039e220fb | |||
|
|
a810345e2b | ||
| 4dc5213e6f | |||
| 5f313a20d5 | |||
|
|
01eae6daf9 | ||
|
|
7ae7ebb9b3 | ||
| a4e64e43f3 | |||
|
|
a1e73f5844 | ||
| a6189c77ef | |||
|
|
1b36ae84d7 | ||
| c609cccdc6 | |||
| 1360c5eeef | |||
|
|
d087eddc29 | ||
|
|
1910a8672b | ||
| 787175ee37 | |||
|
|
90285d5efa | ||
| 66b06d608d | |||
|
|
cabaa02f59 | ||
| ee60dffa17 | |||
|
|
98a2558ad2 | ||
| d820c0e5fa | |||
|
|
61bba0c099 | ||
| c58f1359cd | |||
| 942e3a6235 | |||
|
|
d43535f772 | ||
|
|
e12c7194e6 | ||
| 47277d3609 | |||
| 2a8bb6d1b4 | |||
|
|
7ad2eff27b | ||
| b52c16c242 | |||
|
|
caeb0f69a5 | ||
|
|
74b4fe4ac4 | ||
| 504ae87174 | |||
|
|
06bba3ceaf |
10
.github/workflows/build.yml
vendored
10
.github/workflows/build.yml
vendored
@@ -24,7 +24,9 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: set up secrets
|
||||
run: |
|
||||
echo "${{ secrets.RELEASE_KEYSTORE }}" > keystore.asc
|
||||
@@ -42,14 +44,16 @@ jobs:
|
||||
- name: set up JDK
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
java-version: 17
|
||||
java-version: 21
|
||||
distribution: "temurin"
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v6
|
||||
|
||||
- name: Build APK
|
||||
run: ./gradlew assembleSignedRelease
|
||||
run: |
|
||||
VERSION_CODE=$(git rev-list --count HEAD)
|
||||
./gradlew assembleSignedRelease -PVERSION_CODE=$VERSION_CODE
|
||||
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v3
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
<p>A virtual scratchmap of the world</p>
|
||||
|
||||
<a href="https://ko-fi.com/I2I615VP5M"><img src="https://ko-fi.com/img/githubbutton_sm.svg" alt="ko-fi"></a>
|
||||
<br>
|
||||
<img src="https://forthebadge.com/images/badges/built-for-android.svg" alt="Built for Android">
|
||||
<img src="https://forthebadge.com/images/badges/built-with-love.svg" alt="Built with love">
|
||||
<br>
|
||||
|
||||
@@ -1,27 +1,25 @@
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
id 'org.jetbrains.kotlin.plugin.serialization' version '2.3.21'
|
||||
id 'org.jetbrains.kotlin.plugin.compose' version '2.3.21'
|
||||
id 'com.mikepenz.aboutlibraries.plugin' version '14.0.1'
|
||||
id 'com.mikepenz.aboutlibraries.plugin' version '14.2.0'
|
||||
}
|
||||
|
||||
|
||||
android {
|
||||
namespace 'net.helcel.beans'
|
||||
compileSdk 36
|
||||
compileSdk = 37
|
||||
|
||||
defaultConfig {
|
||||
buildConfigField("String", "APP_NAME", "\"Beans\"")
|
||||
manifestPlaceholders["APP_NAME"] = "Beans"
|
||||
applicationId 'net.helcel.beans'
|
||||
minSdk 28
|
||||
targetSdk 36
|
||||
versionCode 4
|
||||
versionName "1.1a"
|
||||
minSdk = 28
|
||||
targetSdk = 37
|
||||
versionName "1.3"
|
||||
versionCode project.hasProperty('VERSION_CODE') ? project.property('VERSION_CODE').toInteger() : 1
|
||||
}
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
register("release") {
|
||||
try {
|
||||
def keystorePropertiesFile = rootProject.file("app/keystore.properties")
|
||||
def keystoreProperties = new Properties()
|
||||
@@ -36,20 +34,18 @@ android {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
debuggable true
|
||||
}
|
||||
release {
|
||||
minifyEnabled true
|
||||
shrinkResources false
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
signedRelease {
|
||||
minifyEnabled true
|
||||
shrinkResources false
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
@@ -78,10 +74,6 @@ android {
|
||||
kotlinCompilerExtensionVersion = "2.2.20"
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(21)
|
||||
}
|
||||
|
||||
lint {
|
||||
disable 'UsingMaterialAndMaterial3Libraries'
|
||||
}
|
||||
@@ -91,12 +83,11 @@ aboutLibraries {
|
||||
library {
|
||||
exclusionPatterns = [~"androidx.*", ~"com.google.android.*", ~"org.jetbrains.*"]
|
||||
}
|
||||
excludeFields = ["generated"]
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'androidx.compose.material3:material3:1.4.0'
|
||||
implementation "androidx.compose.material:material:1.11.0"
|
||||
implementation "androidx.compose.material:material:1.11.2"
|
||||
implementation 'androidx.compose.material:material-icons-extended:1.7.8'
|
||||
implementation 'androidx.navigation:navigation-compose:2.9.8'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.5'
|
||||
@@ -108,17 +99,17 @@ dependencies {
|
||||
implementation "androidx.activity:activity-ktx:1.13.0"
|
||||
|
||||
implementation 'androidx.compose.ui:ui-tooling-preview'
|
||||
implementation 'com.google.android.material:material:1.13.0'
|
||||
implementation 'com.google.android.material:material:1.14.0'
|
||||
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.11.0'
|
||||
|
||||
implementation 'com.caverock:androidsvg-aar:1.4'
|
||||
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
||||
|
||||
implementation 'com.mikepenz:aboutlibraries:14.1.0'
|
||||
implementation 'com.mikepenz:aboutlibraries-compose-m3:14.1.0'
|
||||
implementation 'com.mikepenz:aboutlibraries-core:14.1.0'
|
||||
implementation 'com.mikepenz:aboutlibraries:14.2.1'
|
||||
implementation 'com.mikepenz:aboutlibraries-compose-m3:14.2.0'
|
||||
implementation 'com.mikepenz:aboutlibraries-core:14.2.0'
|
||||
|
||||
|
||||
implementation platform('androidx.compose:compose-bom:2026.04.01')
|
||||
debugImplementation 'androidx.compose.ui:ui-tooling:1.11.0'
|
||||
implementation platform('androidx.compose:compose-bom:2026.05.01')
|
||||
debugImplementation 'androidx.compose.ui:ui-tooling:1.11.2'
|
||||
}
|
||||
@@ -8,8 +8,7 @@
|
||||
android:hardwareAccelerated="false"
|
||||
android:icon="@mipmap/ic_launcher_round"
|
||||
android:label="${APP_NAME}"
|
||||
android:supportsRtl="true"
|
||||
tools:replace="android:allowBackup">
|
||||
android:supportsRtl="true">
|
||||
<activity
|
||||
android:name=".activity.MainScreen"
|
||||
android:exported="true">
|
||||
|
||||
@@ -9,20 +9,23 @@ import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.statusBarsPadding
|
||||
import androidx.compose.material.Icon
|
||||
import androidx.compose.material.IconButton
|
||||
import androidx.compose.material.MaterialTheme
|
||||
import androidx.compose.material.Scaffold
|
||||
import androidx.compose.material.Surface
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.TopAppBar
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.DateRange
|
||||
import androidx.compose.material.icons.filled.Edit
|
||||
import androidx.compose.material.icons.filled.Percent
|
||||
import androidx.compose.material.icons.filled.Settings
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.viewinterop.AndroidView
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.NavHost
|
||||
@@ -52,7 +55,7 @@ class MainScreen : ComponentActivity() {
|
||||
|
||||
setContent {
|
||||
SysTheme {
|
||||
Box(modifier = Modifier.fillMaxSize().background(MaterialTheme.colors.background)) {
|
||||
Box(modifier = Modifier.fillMaxSize().background(MaterialTheme.colors.background).statusBarsPadding(),) {
|
||||
AppNavHost(psvg, css)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,11 +152,17 @@ fun SettingsMainScreen(onExit: ()->Unit = {}) {
|
||||
fun SettingsScreen(navController: NavHostController = settingsNav()) {
|
||||
val context = LocalContext.current
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
val keyTheme = stringResource(R.string.key_theme)
|
||||
val defaultTheme = stringResource(R.string.system)
|
||||
val keyProjection = stringResource(R.string.key_projection)
|
||||
val keyGroup = stringResource(R.string.key_group)
|
||||
val offString = stringResource(R.string.off)
|
||||
|
||||
var showEdit by remember { mutableStateOf(false) }
|
||||
|
||||
var theme by remember { mutableStateOf(prefs.getString(context.getString(R.string.key_theme), context.getString(R.string.system))!!) }
|
||||
var projection by remember { mutableStateOf(prefs.getString(context.getString(R.string.key_projection), "default")!!) }
|
||||
var groups by remember { mutableStateOf(prefs.getString(context.getString(R.string.key_group), context.getString(R.string.off))!!) }
|
||||
var theme by remember { mutableStateOf(prefs.getString(keyTheme, defaultTheme)!!) }
|
||||
var projection by remember { mutableStateOf(prefs.getString(keyProjection, "default")!!) }
|
||||
var groups by remember { mutableStateOf(prefs.getString(keyGroup,offString)!!) }
|
||||
|
||||
if(showEdit)
|
||||
EditPlaceDialog(true) {
|
||||
@@ -179,7 +185,7 @@ fun SettingsScreen(navController: NavHostController = settingsNav()) {
|
||||
)
|
||||
MultiPreference(arrayOf(stringResource(R.string.system),stringResource(R.string.light),stringResource(R.string.dark)), theme) { newTheme ->
|
||||
theme = newTheme
|
||||
prefs.edit { putString(context.getString(R.string.key_theme), newTheme) }
|
||||
prefs.edit { putString(keyTheme, newTheme) }
|
||||
}
|
||||
HorizontalDivider()
|
||||
}
|
||||
@@ -192,7 +198,7 @@ fun SettingsScreen(navController: NavHostController = settingsNav()) {
|
||||
)
|
||||
MultiPreference(arrayOf(stringResource(R.string.mercator), stringResource(R.string.azimuthalequidistant)), projection) { newProj ->
|
||||
projection = newProj
|
||||
prefs.edit { putString(context.getString(R.string.key_projection), newProj) }
|
||||
prefs.edit { putString(keyProjection, newProj) }
|
||||
Settings.refreshProjection()
|
||||
}
|
||||
HorizontalDivider()
|
||||
@@ -219,11 +225,11 @@ fun SettingsScreen(navController: NavHostController = settingsNav()) {
|
||||
arrayOf(stringResource(R.string.on), stringResource(R.string.off)),
|
||||
groups
|
||||
) { key ->
|
||||
if (key == context.getString(R.string.off)) {
|
||||
if (key == offString) {
|
||||
showDialog=true
|
||||
}
|
||||
groups = key
|
||||
prefs.edit { putString(context.getString(R.string.key_group), key) }
|
||||
prefs.edit { putString(keyGroup, key) }
|
||||
}
|
||||
HorizontalDivider()
|
||||
}
|
||||
@@ -283,9 +289,13 @@ fun SettingsScreen(navController: NavHostController = settingsNav()) {
|
||||
@Composable
|
||||
fun RegionalScreen() {
|
||||
val context = LocalContext.current
|
||||
|
||||
val keyRegional = stringResource(R.string.key_regional)
|
||||
val offString = stringResource(R.string.off)
|
||||
val onString = stringResource(R.string.on)
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
var selected by remember { mutableStateOf(prefs.getString(context.getString(R.string.key_regional),context.getString(R.string.off))!!)}
|
||||
var regional by remember{ mutableStateOf(prefs.getString(context.getString(R.string.key_regional), context.getString(R.string.off))!!)}
|
||||
var selected by remember { mutableStateOf(prefs.getString(keyRegional, offString)!!)}
|
||||
var regional by remember{ mutableStateOf(prefs.getString(keyRegional, offString)!!)}
|
||||
var showDialog by remember{mutableStateOf(false)}
|
||||
var showLoad by remember{mutableStateOf(false)}
|
||||
|
||||
@@ -305,7 +315,7 @@ fun RegionalScreen() {
|
||||
regional= selected
|
||||
prefs.edit {
|
||||
putString(
|
||||
context.getString(R.string.key_regional),
|
||||
keyRegional,
|
||||
regional
|
||||
)
|
||||
}
|
||||
@@ -332,12 +342,12 @@ fun RegionalScreen() {
|
||||
val scope = rememberCoroutineScope()
|
||||
MultiPreference(arrayOf(stringResource(R.string.on),stringResource(R.string.off)),regional) { key ->
|
||||
when (key) {
|
||||
context.getString(R.string.off) -> { showDialog=true
|
||||
offString -> { showDialog=true
|
||||
selected=key
|
||||
}
|
||||
context.getString(R.string.on) -> {
|
||||
onString -> {
|
||||
regional = key
|
||||
prefs.edit { putString(context.getString(R.string.key_regional), key) }
|
||||
prefs.edit { putString(keyRegional, key) }
|
||||
showLoad=true
|
||||
scope.launch {
|
||||
withContext(Dispatchers.IO) {
|
||||
@@ -354,7 +364,7 @@ fun RegionalScreen() {
|
||||
@Composable
|
||||
fun MultiPreference(list: Array<String>, selected: String, onSelected: (String) -> Unit) {
|
||||
Column(Modifier.padding(2.dp)) {
|
||||
list.map { value ->
|
||||
list.forEach { value ->
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
|
||||
@@ -115,7 +115,6 @@ fun StatsList(activeMode: LocType, countMode: Boolean) {
|
||||
|
||||
@Composable
|
||||
fun StatsRow(group: Groups.Group, activeMode: LocType, countMode: Boolean) {
|
||||
val context = LocalContext.current
|
||||
|
||||
val visited = remember(group, activeMode) {
|
||||
Data.visits.getVisitedByValue(group.key)
|
||||
@@ -124,18 +123,18 @@ fun StatsRow(group: Groups.Group, activeMode: LocType, countMode: Boolean) {
|
||||
val count = when (activeMode) {
|
||||
LocType.WORLD -> World.WWW.children.filter { it.code in visited }.size
|
||||
LocType.COUNTRY -> World.WWW.children.flatMap { it.children.filter { c -> c.code in visited } }.size
|
||||
LocType.STATE -> World.WWW.children.flatMap { itc->itc.children.flatMap { it.children.filter { it.code in visited } } }.size
|
||||
LocType.STATE -> World.WWW.children.flatMap { a->a.children.flatMap { b->b.children.filter { c->c.code in visited } } }.size
|
||||
else -> 0
|
||||
}
|
||||
|
||||
val area = when (activeMode) {
|
||||
LocType.WORLD -> World.WWW.children.filter { it.code in visited }.sumOf { it.area }
|
||||
LocType.COUNTRY -> World.WWW.children.flatMap { it.children.filter { c -> c.code in visited } }.sumOf { it.area }
|
||||
LocType.STATE -> World.WWW.children.flatMap { it.children.flatMap { it.children.filter { it.code in visited } } }.sumOf { it.area }
|
||||
LocType.STATE -> World.WWW.children.flatMap { a->a.children.flatMap { b->b.children.filter { c->c.code in visited } } }.sumOf { it.area }
|
||||
else -> 0
|
||||
}
|
||||
|
||||
val displayValue = if (countMode) count.toString() else context.getString(R.string.number_with_unit, area, "km²")
|
||||
val displayValue = if (countMode) count.toString() else stringResource(R.string.number_with_unit, area, "km²")
|
||||
|
||||
val backgroundColor = group.color.color
|
||||
val textColor = getContrastColor(backgroundColor)
|
||||
|
||||
@@ -58,7 +58,7 @@ fun syncVisited(loc: GeoLoc?=World.WWW){
|
||||
loc?.children?.forEach { tt ->
|
||||
tt.children.forEach {itc->
|
||||
if(Data.visits.getVisited(itc) in listOf(AUTO_GROUP,NO_GROUP)) {
|
||||
if(itc.children.any { itcc -> Data.visits.getVisited(itcc) != NO_GROUP })
|
||||
if(itc.children.any { c -> Data.visits.getVisited(c) != NO_GROUP })
|
||||
Data.visits.setVisited(itc, AUTO_GROUP)
|
||||
else
|
||||
Data.visits.setVisited(itc, NO_GROUP)
|
||||
@@ -111,21 +111,20 @@ fun EditPlaceScreen(loc: GeoLoc, onExit:()->Unit={}) {
|
||||
|
||||
Column {
|
||||
val currentTab = tabs.getOrNull(selectedTab) ?: return@Column
|
||||
TabRow(
|
||||
selectedTabIndex = min(tabs.lastIndex, selectedTab),
|
||||
) {
|
||||
tabs.forEachIndexed { index, tab ->
|
||||
Tab(
|
||||
selected = selectedTab == index,
|
||||
onClick = {
|
||||
while (tabs.size > index + 1)
|
||||
tabs.removeAt(tabs.lastIndex)
|
||||
},
|
||||
text = { Text(tab.fullName) }
|
||||
)
|
||||
}
|
||||
TabRow(
|
||||
selectedTabIndex = min(tabs.lastIndex, selectedTab),
|
||||
) {
|
||||
tabs.forEachIndexed { index, tab ->
|
||||
Tab(
|
||||
selected = selectedTab == index,
|
||||
onClick = {
|
||||
while (tabs.size > index + 1)
|
||||
tabs.removeAt(tabs.lastIndex)
|
||||
},
|
||||
text = { Text(tab.fullName) }
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
LazyColumn(
|
||||
modifier = Modifier.fillMaxSize()
|
||||
|
||||
@@ -7,7 +7,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.mikepenz.aboutlibraries.ui.compose.DefaultChipColors
|
||||
import com.mikepenz.aboutlibraries.ui.compose.DefaultLibraryColors
|
||||
import com.mikepenz.aboutlibraries.ui.compose.android.rememberLibraries
|
||||
import com.mikepenz.aboutlibraries.ui.compose.android.produceLibraries
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
|
||||
import net.helcel.beans.R
|
||||
import net.helcel.beans.activity.SysTheme
|
||||
@@ -16,14 +16,14 @@ import net.helcel.beans.activity.SysTheme
|
||||
@Preview
|
||||
@Composable
|
||||
fun LicenseScreen() {
|
||||
val libraries = rememberLibraries(R.raw.aboutlibraries)
|
||||
val libraries = produceLibraries(R.raw.aboutlibraries)
|
||||
SysTheme {
|
||||
LibrariesContainer(
|
||||
libraries = libraries.value,
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
colors = DefaultLibraryColors(
|
||||
backgroundColor = MaterialTheme.colors.background,
|
||||
contentColor = MaterialTheme.colors.onBackground,
|
||||
libraryBackgroundColor = MaterialTheme.colors.background,
|
||||
libraryContentColor = MaterialTheme.colors.onBackground,
|
||||
licenseChipColors = DefaultChipColors(
|
||||
containerColor = MaterialTheme.colors.primary,
|
||||
contentColor = MaterialTheme.colors.onPrimary,
|
||||
@@ -37,6 +37,8 @@ fun LicenseScreen() {
|
||||
contentColor = MaterialTheme.colors.onSecondary,
|
||||
),
|
||||
dialogConfirmButtonColor = MaterialTheme.colors.primary,
|
||||
dialogBackgroundColor = MaterialTheme.colors.onPrimary,
|
||||
dialogContentColor = MaterialTheme.colors.primary,
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package net.helcel.beans.countries
|
||||
|
||||
import net.helcel.beans.countries.Country.*
|
||||
|
||||
@Suppress("RedundantSuppression", "SpellCheckingInspection", "unused")
|
||||
enum class Group(override val fullName: String, override val children: Set<GeoLoc>) : GeoLoc {
|
||||
|
||||
EEE(
|
||||
|
||||
@@ -3,6 +3,7 @@ package net.helcel.beans.helper
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.Serializer
|
||||
import kotlinx.serialization.json.Json
|
||||
@@ -24,53 +25,53 @@ const val AUTO_GROUP = -1
|
||||
|
||||
|
||||
@Serializable
|
||||
class Groups(val id: Int, private val grps: HashMap<Int, Group>) {
|
||||
class Groups(val id: Int, @SerialName("grps") private val groups: HashMap<Int, Group>) {
|
||||
@kotlinx.serialization.Transient
|
||||
private val _groupsFlow = MutableStateFlow<List<Group>>(grps.values.toList())
|
||||
private val _groupsFlow = MutableStateFlow<List<Group>>(groups.values.toList())
|
||||
@kotlinx.serialization.Transient
|
||||
val groupsFlow: StateFlow<List<Group>> = _groupsFlow.asStateFlow()
|
||||
|
||||
fun setGroup(key: Int, name: String, col: ColorDrawable) {
|
||||
grps[key] = Group(key, name, col)
|
||||
_groupsFlow.value = grps.values.toList()
|
||||
groups[key] = Group(key, name, col)
|
||||
_groupsFlow.value = groups.values.toList()
|
||||
}
|
||||
|
||||
fun deleteGroup(key: Int) {
|
||||
grps.remove(key)
|
||||
_groupsFlow.value = grps.values.toList()
|
||||
groups.remove(key)
|
||||
_groupsFlow.value = groups.values.toList()
|
||||
}
|
||||
|
||||
fun getGroupFromKey(key: Int): Group {
|
||||
return grps.getOrDefault(key, EmptyGroup())
|
||||
return groups.getOrDefault(key, EmptyGroup())
|
||||
}
|
||||
|
||||
fun genKey(): Int {
|
||||
val key = rnd.nextInt()
|
||||
if (grps.containsKey(key) || key in listOf(NO_GROUP, DEFAULT_GROUP, AUTO_GROUP)) return genKey()
|
||||
if (groups.containsKey(key) || key in listOf(NO_GROUP, DEFAULT_GROUP, AUTO_GROUP)) return genKey()
|
||||
return key
|
||||
}
|
||||
|
||||
fun size(): Int {
|
||||
return grps.size
|
||||
return groups.size
|
||||
}
|
||||
|
||||
fun getUniqueEntry(): Group? {
|
||||
assert(size() == 1)
|
||||
return if (grps.size == 1) {
|
||||
grps[grps.keys.first()]
|
||||
return if (groups.size == 1) {
|
||||
groups[groups.keys.first()]
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
fun getGroupFromPos(pos: Int): Pair<Int, Group> {
|
||||
if(grps.keys.isEmpty()) return Pair(NO_GROUP,Group(NO_GROUP,"-"))
|
||||
val key = grps.keys.toList()[pos]
|
||||
if(groups.keys.isEmpty()) return Pair(NO_GROUP,Group(NO_GROUP,"-"))
|
||||
val key = groups.keys.toList()[pos]
|
||||
return Pair(key, getGroupFromKey(key))
|
||||
}
|
||||
|
||||
fun findGroupPos(key: Int): Int {
|
||||
return grps.keys.toList().indexOf(key)
|
||||
return groups.keys.toList().indexOf(key)
|
||||
}
|
||||
|
||||
class EmptyGroup : Group(0, "")
|
||||
|
||||
50
app/src/main/res/drawable/ic_launcher_monochrome.xml
Normal file
50
app/src/main/res/drawable/ic_launcher_monochrome.xml
Normal file
@@ -0,0 +1,50 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="128"
|
||||
android:viewportHeight="128">
|
||||
<group android:scaleX="0.8918919"
|
||||
android:scaleY="0.8918919"
|
||||
android:translateX="6.918919"
|
||||
android:translateY="6.918919">
|
||||
|
||||
<group
|
||||
android:scaleX="1.5"
|
||||
android:scaleY="1.5"
|
||||
android:translateX="10"
|
||||
android:translateY="10">
|
||||
<path
|
||||
android:pathData="M36,36m-28,0a28,28 0,1 1,56 0a28,28 0,1 1,-56 0"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="@color/blue"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"/>
|
||||
|
||||
</group>
|
||||
<group
|
||||
android:scaleX="1.25"
|
||||
android:scaleY="1.25"
|
||||
android:translateX="18"
|
||||
android:translateY="18">
|
||||
<path
|
||||
android:pathData="M56.803,45.75c0.599,-0.299 1.157,-0.672 1.663,-1.11 0.804,-0.698 1.463,-1.546 1.94,-2.497 0.599,-1.303 0.883,-2.728 0.829,-4.161 0.034,-1.498 -0.154,-2.994 -0.558,-4.437 -0.451,-1.645 -1.104,-3.229 -1.944,-4.714 -0.967,-2.141 -2.28,-4.108 -3.887,-5.822 -1.242,-1.326 -2.757,-2.366 -4.44,-3.048 -0.877,-0.372 -1.821,-0.56 -2.774,-0.553 -1.402,0.074 -2.729,0.697 -3.882,1.389 -1.285,0.81 -2.244,1.735 -2.771,3.053 -0.739,2.362 0.827,4.821 1.113,5.269 0.003,0.005 0.187,0.281 0.555,0.832 1.512,2.264 1.589,2.358 1.666,2.495 0.646,1.221 1.114,2.528 1.389,3.882 1.043,4.001 1.565,6.001 2.223,6.932 1.208,1.71 3.455,3.414 5.826,3.325 1.059,-0.088 2.093,-0.371 3.05,-0.835Z"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="@color/white"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M22,41c-1.54,0.554 -2.83,1.642 -3.636,3.066 -0.714,1.365 -0.957,2.928 -0.693,4.445 0.178,1.247 0.632,2.439 1.329,3.488 2.032,3.228 5.383,4.423 7,5 1.613,0.561 3.295,0.897 5,1 2.387,0.205 6.923,0.535 11,-2 1.287,-0.665 2.335,-1.713 3,-3 0.661,-1.601 0.661,-3.399 0,-5 -0.389,-1.156 -1.121,-2.165 -2.099,-2.894 -0.919,-0.599 -1.974,-0.956 -3.069,-1.039 -2.057,-0.313 -2.756,0.139 -5.014,0.057 -1.271,-0.019 -2.534,-0.214 -3.753,-0.577 -3.036,-0.95 -3.33,-2.457 -5.889,-2.829 -1.066,-0.158 -2.155,-0.061 -3.177,0.282Z"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="@color/white"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M12.7,26.975c1.758,-3.604 5.311,-3.191 9.58,-7.091 2.701,-2.469 2.858,-4.078 5.613,-5.202 1.407,-0.644 2.984,-0.819 4.498,-0.5 2.053,0.475 3.761,1.891 4.61,3.819 1.116,2.742 -0.314,5.437 -1.398,7.482 -0.951,1.689 -2.167,3.215 -3.602,4.518 -1.479,1.552 -3.161,2.898 -5,4 -2.629,1.541 -6.332,3.711 -9.989,2.43 -1.481,-0.548 -2.768,-1.521 -3.699,-2.796 -1.496,-1.906 -1.735,-4.512 -0.612,-6.659Z"
|
||||
android:strokeWidth="2"
|
||||
android:fillColor="@color/white"
|
||||
android:strokeColor="#000000"
|
||||
android:strokeLineCap="round"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
@@ -2,4 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
@@ -1,6 +1,6 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
plugins {
|
||||
id 'com.android.application' version '9.2.0' apply false
|
||||
id 'com.android.application' version '9.2.1' apply false
|
||||
id 'com.android.library' version '9.2.1' apply false
|
||||
id 'org.jetbrains.kotlin.android' version '2.3.21' apply false
|
||||
}
|
||||
@@ -1,24 +1,9 @@
|
||||
# Project-wide Gradle settings.
|
||||
# IDE (e.g. Android Studio) users:
|
||||
# Gradle settings configured through the IDE *will override*
|
||||
# any settings specified in this file.
|
||||
# For more details on how to configure your build environment visit
|
||||
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||
# org.gradle.parallel=true
|
||||
# AndroidX package structure to make it clearer which packages are bundled with the
|
||||
# Android operating system, and which are packaged with your app's APK
|
||||
# https://developer.android.com/topic/libraries/support-library/androidx-rn
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=false
|
||||
# Kotlin code style for this project: "official" or "obsolete":
|
||||
kotlin.code.style=official
|
||||
# Enables namespacing of each library's R class so that its R class includes only the
|
||||
# resources declared in the library itself and none from the library's dependencies,
|
||||
# thereby reducing the size of the R class for that library
|
||||
android.nonTransitiveRClass=true
|
||||
android.nonTransitiveRClass=true
|
||||
android.uniquePackageNames=false
|
||||
android.dependency.useConstraints=false
|
||||
android.r8.strictFullModeForKeepRules=false
|
||||
|
||||
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,7 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=553c78f50dafcd54d65b9a444649057857469edf836431389695608536d6b746
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
|
||||
distributionSha256Sum=bafc141b619ad6350fd975fc903156dd5c151998cc8b058e8c1044ab5f7b031f
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
|
||||
networkTimeout=10000
|
||||
retries=0
|
||||
retryBackOffMs=500
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"@turf/area": "^7.0.0",
|
||||
"@turf/turf": "^7.0.0",
|
||||
"jsdom": "^29.0.0",
|
||||
"mapshaper": "^0.7.0"
|
||||
"@turf/area": "^7.3.5",
|
||||
"@turf/turf": "^7.3.5",
|
||||
"jsdom": "^29.1.1",
|
||||
"mapshaper": "^0.7.19"
|
||||
},
|
||||
"type": "module"
|
||||
}
|
||||
|
||||
@@ -6,6 +6,9 @@ pluginManagement {
|
||||
maven { url 'https://jitpack.io' }
|
||||
}
|
||||
}
|
||||
plugins {
|
||||
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
|
||||
}
|
||||
dependencyResolutionManagement {
|
||||
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
|
||||
repositories {
|
||||
|
||||
161
yarn.lock
161
yarn.lock
@@ -34,6 +34,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz#ad5549322dfe9d153d4b4dd6f7ff2ae234b06e24"
|
||||
integrity sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==
|
||||
|
||||
"@bokuweb/zstd-wasm@^0.0.27":
|
||||
version "0.0.27"
|
||||
resolved "https://registry.yarnpkg.com/@bokuweb/zstd-wasm/-/zstd-wasm-0.0.27.tgz#89d8ed8c37528c4b9d11f47826b9f603346dfc4c"
|
||||
integrity sha512-GDm2uOTK3ESjnYmSeLQifJnBsRCWajKLvN32D2ZcQaaCIJI/Hse9s74f7APXjHit95S10UImsRGkTsbwHmrtmg==
|
||||
|
||||
"@bramus/specificity@^2.4.2":
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@bramus/specificity/-/specificity-2.4.2.tgz#aa8db8eb173fdee7324f82284833106adeecc648"
|
||||
@@ -46,18 +51,18 @@
|
||||
resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-6.0.2.tgz#82c59fd30649cf0b4d3c82160489748666e6550b"
|
||||
integrity sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==
|
||||
|
||||
"@csstools/css-calc@^3.2.0":
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-3.2.0.tgz#15ca1a80a026ced0f6c4e12124c398e3db8e1617"
|
||||
integrity sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==
|
||||
"@csstools/css-calc@^3.2.0", "@csstools/css-calc@^3.2.1":
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-3.2.1.tgz#b30e061ca9f297ccb2b3b032bfee32fda02b1b27"
|
||||
integrity sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==
|
||||
|
||||
"@csstools/css-color-parser@^4.1.0":
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-4.1.0.tgz#1d64ea09c548d3ed331648ea0b831e16b80c891c"
|
||||
integrity sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-4.1.1.tgz#70c322112e2aafb0b09f34b51ce3482db6aab2ac"
|
||||
integrity sha512-eZ5XOtyhK+mggRafYUWzA0tvaYOFgdY8AkgQiCJF9qNAePnUo/zmsqqYubBBb3sQ8uNUaSKTY9s9klfRaAXL0g==
|
||||
dependencies:
|
||||
"@csstools/color-helpers" "^6.0.2"
|
||||
"@csstools/css-calc" "^3.2.0"
|
||||
"@csstools/css-calc" "^3.2.1"
|
||||
|
||||
"@csstools/css-parser-algorithms@^4.0.0":
|
||||
version "4.0.0"
|
||||
@@ -65,9 +70,9 @@
|
||||
integrity sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==
|
||||
|
||||
"@csstools/css-syntax-patches-for-csstree@^1.1.3":
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.3.tgz#3204cf40deb97db83e225b0baa9e37d9c3bd344d"
|
||||
integrity sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.4.tgz#8f4e5e23574e8c76005588984308d2b216993720"
|
||||
integrity sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw==
|
||||
|
||||
"@csstools/css-tokenizer@^4.0.0":
|
||||
version "4.0.0"
|
||||
@@ -75,9 +80,9 @@
|
||||
integrity sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==
|
||||
|
||||
"@exodus/bytes@^1.11.0", "@exodus/bytes@^1.15.0", "@exodus/bytes@^1.6.0":
|
||||
version "1.15.0"
|
||||
resolved "https://registry.yarnpkg.com/@exodus/bytes/-/bytes-1.15.0.tgz#54479e0f406cbad024d6fe1c3190ecca4468df3b"
|
||||
integrity sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==
|
||||
version "1.15.1"
|
||||
resolved "https://registry.yarnpkg.com/@exodus/bytes/-/bytes-1.15.1.tgz#b13bc464ca162c17abf0837fb3a11aeab79e45d1"
|
||||
integrity sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==
|
||||
|
||||
"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3":
|
||||
version "3.0.3"
|
||||
@@ -156,9 +161,9 @@
|
||||
integrity sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==
|
||||
|
||||
"@rollup/rollup-linux-x64-gnu@^4.44.1":
|
||||
version "4.60.3"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.3.tgz#df6bb38617a66a842bd2aeac9560cd729d084258"
|
||||
integrity sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==
|
||||
version "4.60.4"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz#23c9bf79771d804fb87415eb0767569f273261e5"
|
||||
integrity sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==
|
||||
|
||||
"@tmcw/togeojson@^5.6.0":
|
||||
version "5.8.1"
|
||||
@@ -195,7 +200,7 @@
|
||||
"@types/geojson" "^7946.0.10"
|
||||
tslib "^2.8.1"
|
||||
|
||||
"@turf/area@7.3.5", "@turf/area@^7.0.0":
|
||||
"@turf/area@7.3.5", "@turf/area@^7.3.5":
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@turf/area/-/area-7.3.5.tgz#97e3c94305a5f1674b542855ddfb9871cb0a5de2"
|
||||
integrity sha512-sSn80wPT7XfBIDN3vurCPxhk9W4U8ozS/XImSqeLN8qveTICOxzZkhsGDMp0CuncaN+plWut4a2TdNM7mzZB6Q==
|
||||
@@ -1663,7 +1668,7 @@
|
||||
"@types/geojson" "^7946.0.10"
|
||||
tslib "^2.8.1"
|
||||
|
||||
"@turf/turf@^7.0.0":
|
||||
"@turf/turf@^7.3.5":
|
||||
version "7.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@turf/turf/-/turf-7.3.5.tgz#a98b79933f03f2c2748582424b9fcd42f8257aef"
|
||||
integrity sha512-l5Z1ZFEizN9p5GxX3mzUGf+i4t7AP3YpWcNdf9+kIzJcQD3eYuGBabj2hLrfrluqFJ+uxsuo4RgPtortQ9Dwpg==
|
||||
@@ -1844,11 +1849,11 @@
|
||||
integrity sha512-tdJz7jaWFu4nR+8b2B+CdPZ6811ighYylWsu2hpsivapzW058yP0KdfZuNY89IiRe5jbKvBGXN3LQdN2KPXVdQ==
|
||||
|
||||
"@types/node@*":
|
||||
version "25.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-25.6.0.tgz#4e09bad9b469871f2d0f68140198cbd714f4edca"
|
||||
integrity sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==
|
||||
version "25.9.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-25.9.1.tgz#3bda556db500ae4319c08e7fc9ab94f19013ba0b"
|
||||
integrity sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==
|
||||
dependencies:
|
||||
undici-types "~7.19.0"
|
||||
undici-types ">=7.24.0 <7.24.7"
|
||||
|
||||
"@types/proj4@2.5.2":
|
||||
version "2.5.2"
|
||||
@@ -2263,11 +2268,16 @@ fast-deep-equal@^3.1.3:
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||
|
||||
fflate@0.8.2, fflate@^0.8.0:
|
||||
fflate@0.8.2:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea"
|
||||
integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==
|
||||
|
||||
fflate@^0.8.0:
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.3.tgz#bc27d8eb30343d4d512abb03480202ce65d825fc"
|
||||
integrity sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==
|
||||
|
||||
figures@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
|
||||
@@ -2382,7 +2392,12 @@ geokdbush@^1.1.0:
|
||||
dependencies:
|
||||
tinyqueue "^1.2.2"
|
||||
|
||||
"geotiff@^3.0.5 || ^3.1.0-beta.0":
|
||||
geotiff-geokeys-to-proj4@^2024.4.13:
|
||||
version "2024.4.13"
|
||||
resolved "https://registry.yarnpkg.com/geotiff-geokeys-to-proj4/-/geotiff-geokeys-to-proj4-2024.4.13.tgz#c2ac5bff653e79b1b29e302791307b7a875b2d76"
|
||||
integrity sha512-Jgtm/lcPkgB44wCqQHaVQx5/fyhmiVDRUKQcI/vMolsED8/GRWBnn5qkQo/CgutQg9xkGzig21DY9Px9mFRdvg==
|
||||
|
||||
geotiff@^3.0.5, "geotiff@^3.0.5 || ^3.1.0-beta.0":
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/geotiff/-/geotiff-3.0.5.tgz#2a15e8a9b8355ba0a311bdffca789f7a6853b445"
|
||||
integrity sha512-OWcL9S9+yDZ6iAlXMt32T1iwUApJM8UiD47xbm6ZP1h33d10fqkPs14EG/ttT5EnefpZSx3G15iDFC5FxUNUwA==
|
||||
@@ -2428,11 +2443,16 @@ hyparquet-writer@^0.14.0:
|
||||
dependencies:
|
||||
hyparquet "1.25.6"
|
||||
|
||||
hyparquet@1.25.6, hyparquet@^1.25.6:
|
||||
hyparquet@1.25.6:
|
||||
version "1.25.6"
|
||||
resolved "https://registry.yarnpkg.com/hyparquet/-/hyparquet-1.25.6.tgz#e4f4eb0589b1e4725d99987ff9048951d562aa69"
|
||||
integrity sha512-Q9W5IjkVch3ZMnYd4qFv2q8suu5Jc36yt7J+zUNM9grwnP1S189icp0jdEQKM5HJvQkTVy8NMiQ8n/dM5QAt1A==
|
||||
|
||||
hyparquet@^1.25.6:
|
||||
version "1.26.0"
|
||||
resolved "https://registry.yarnpkg.com/hyparquet/-/hyparquet-1.26.0.tgz#65b147befb99932e38c2bb1dd007eb7da0d7a0dc"
|
||||
integrity sha512-yxUiViPZ+z5h+xdX4rA1G+k30jXoEsG9I2xEpjaM84imGznbKjZzxuZFsdzqg6C4LxNnnAlDFvzpk4uxQWTbTQ==
|
||||
|
||||
hysnappy@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/hysnappy/-/hysnappy-1.0.0.tgz#c68dce897995dc17d8433231919c2bb80c702822"
|
||||
@@ -2453,9 +2473,9 @@ iconv-lite@^0.6.3:
|
||||
safer-buffer ">= 2.1.2 < 3.0.0"
|
||||
|
||||
idb-keyval@^6.2.0:
|
||||
version "6.2.2"
|
||||
resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.2.tgz#b0171b5f73944854a3291a5cdba8e12768c4854a"
|
||||
integrity sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==
|
||||
version "6.2.4"
|
||||
resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.4.tgz#9f6c374b9570264fea9005a554adc81eba723cad"
|
||||
integrity sha512-D/NzHWUmYJGXi++z67aMSrnisb9A3621CyRK5G89JyTlN13C8xf0g04DLxUKMufPem3e3L2JAXR6Z00OWy183Q==
|
||||
|
||||
ieee754@^1.1.13, ieee754@^1.2.1:
|
||||
version "1.2.1"
|
||||
@@ -2532,7 +2552,12 @@ is-wsl@^3.1.0:
|
||||
dependencies:
|
||||
is-inside-container "^1.0.0"
|
||||
|
||||
jsdom@^29.0.0:
|
||||
jpeg-js@^0.4.4:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa"
|
||||
integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==
|
||||
|
||||
jsdom@^29.1.1:
|
||||
version "29.1.1"
|
||||
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-29.1.1.tgz#5b9704906f3cd510c34aa941ae2f8f7f8179df01"
|
||||
integrity sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==
|
||||
@@ -2597,20 +2622,21 @@ lodash@^4.17.21:
|
||||
integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==
|
||||
|
||||
lru-cache@^11.3.5:
|
||||
version "11.3.5"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.3.5.tgz#29047d348c0b2793e3112a01c739bb7c6d855637"
|
||||
integrity sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==
|
||||
version "11.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.5.0.tgz#14117229fd25bc9c67936e32de90ca047488c97a"
|
||||
integrity sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==
|
||||
|
||||
map-stream@0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz#8a1f07896d82b10926bd3744a2420009f88974a8"
|
||||
integrity sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==
|
||||
|
||||
mapshaper@^0.7.0:
|
||||
version "0.7.9"
|
||||
resolved "https://registry.yarnpkg.com/mapshaper/-/mapshaper-0.7.9.tgz#d68ea83727b1fabdc30160869cb9341c3740929f"
|
||||
integrity sha512-bY7zDwh1N2xauI4mKqJsIcNTI5rSV5vsWoLGkYOk5kArB9pu/QGRC925YbYL3VYmeOn6mGJD51eY9ItZM4FC+g==
|
||||
mapshaper@^0.7.19:
|
||||
version "0.7.20"
|
||||
resolved "https://registry.yarnpkg.com/mapshaper/-/mapshaper-0.7.20.tgz#0b1643d89bdaf7d347e6abea97a3c890ada0799a"
|
||||
integrity sha512-YmH1Q0hh4G+zNBxQdkaPyvKnIkGPZwtTGSrGme6QcyhXb1B1NXzzJqTE/YdhmGOWKjR2ZTn+wQSYjFilYudegw==
|
||||
dependencies:
|
||||
"@bokuweb/zstd-wasm" "^0.0.27"
|
||||
"@ngageoint/geopackage" "^4.2.6"
|
||||
"@placemarkio/tokml" "^0.3.3"
|
||||
"@tmcw/togeojson" "^5.6.0"
|
||||
@@ -2628,18 +2654,21 @@ mapshaper@^0.7.0:
|
||||
flatgeobuf "^4.3.4"
|
||||
geographiclib-geodesic "^2.2.0"
|
||||
geokdbush "^1.1.0"
|
||||
geotiff "^3.0.5"
|
||||
geotiff-geokeys-to-proj4 "^2024.4.13"
|
||||
hyparquet "^1.25.6"
|
||||
hyparquet-compressors "^1.1.1"
|
||||
hyparquet-writer "^0.14.0"
|
||||
iconv-lite "^0.6.3"
|
||||
idb-keyval "^6.2.0"
|
||||
jpeg-js "^0.4.4"
|
||||
kdbush "^3.0.0"
|
||||
mproj "0.1.2"
|
||||
mproj "0.1.3"
|
||||
msgpackr "^1.10.1"
|
||||
open "^11.0.0"
|
||||
pngjs "^7.0.0"
|
||||
rw "~1.3.3"
|
||||
tinyqueue "^2.0.3"
|
||||
zstd-codec "^0.1.5"
|
||||
optionalDependencies:
|
||||
"@rollup/rollup-linux-x64-gnu" "^4.44.1"
|
||||
|
||||
@@ -2673,10 +2702,10 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
|
||||
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
|
||||
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
|
||||
|
||||
mproj@0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/mproj/-/mproj-0.1.2.tgz#9827ed5ff6a171a9be7dbd9d767c4615d969ec50"
|
||||
integrity sha512-kl38Oi47W7XMmA3jh1xPMiGpxpWJG5UdwJpa/yhVtQshFrxY6MnCWSupYrMmeYylp1shUvpGWPEBY7TfgqfWqw==
|
||||
mproj@0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/mproj/-/mproj-0.1.3.tgz#295b990970a80380dac85b29d605a5f4f66b25ff"
|
||||
integrity sha512-XPxty3HPv1j5eXfxId1FSGX7JB8+KgozVOyCu5l40u/I0pW7gpWTaxouA8MNKHfEXN5oE8r9eowkM+0LuQduIQ==
|
||||
dependencies:
|
||||
geographiclib "1.48.0"
|
||||
rw "~1.3.2"
|
||||
@@ -2713,9 +2742,9 @@ napi-build-utils@^2.0.0:
|
||||
integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==
|
||||
|
||||
node-abi@^3.3.0:
|
||||
version "3.90.0"
|
||||
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.90.0.tgz#5aca953aa58deb903738adf14a33fb79a32c48f3"
|
||||
integrity sha512-pZNQT7UnYlMwMBy5N1lV5X/YLTbZM5ncytN3xL7CHEzhDN8uVe0u55yaPUJICIJjaCW8NrM5BFdqr7HLweStNA==
|
||||
version "3.92.0"
|
||||
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.92.0.tgz#18e2214677499b8dda81ffcd095afc763d5a9802"
|
||||
integrity sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==
|
||||
dependencies:
|
||||
semver "^7.3.5"
|
||||
|
||||
@@ -2812,6 +2841,11 @@ peek-readable@^4.1.0:
|
||||
resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72"
|
||||
integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==
|
||||
|
||||
pngjs@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-7.0.0.tgz#a8b7446020ebbc6ac739db6c5415a65d17090e26"
|
||||
integrity sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==
|
||||
|
||||
point-in-polygon-hao@^1.1.0:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/point-in-polygon-hao/-/point-in-polygon-hao-1.2.4.tgz#8662abdcc84bcca230cc3ecbb0b0ab1a306f1bd6"
|
||||
@@ -3078,9 +3112,9 @@ saxes@^6.0.0:
|
||||
xmlchars "^2.2.0"
|
||||
|
||||
semver@^7.3.5:
|
||||
version "7.7.4"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"
|
||||
integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
|
||||
version "7.8.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.1.tgz#bf4970b5e70fda0686363cc18bfe8805d5ed957e"
|
||||
integrity sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==
|
||||
|
||||
signal-exit@^3.0.2:
|
||||
version "3.0.7"
|
||||
@@ -3237,17 +3271,17 @@ tinyqueue@^2.0.0, tinyqueue@^2.0.3:
|
||||
resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08"
|
||||
integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==
|
||||
|
||||
tldts-core@^7.0.29:
|
||||
version "7.0.29"
|
||||
resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.0.29.tgz#c3806f5af57b0351ed9415899be2a8dafa3f56dc"
|
||||
integrity sha512-W99NuU7b1DcG3uJ3v9k9VztCH3WialNbBkBft5wCs8V8mexu0XQqaZEYb9l9RNNzK8+3EJ9PKWB0/RUtTQ/o+Q==
|
||||
tldts-core@^7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.1.0.tgz#62dd1a0faa96d10a8ee52546215c741943f33714"
|
||||
integrity sha512-Ou+YJ467tR700sk2mZBB1/uFah6LDeH/VKO0N4xfjFOXE0hJkZgiOgXj16gEi1wQ4L6334UTKjxF6gum8ftZzQ==
|
||||
|
||||
tldts@^7.0.5:
|
||||
version "7.0.29"
|
||||
resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.0.29.tgz#5a246d4ffcdf8b34cd9cc2dea424162a653f69d1"
|
||||
integrity sha512-JIXCerhudr/N6OWLwLF1HVsTTUo7ry6qHa5eWZEkiMuxsIiAACL55tGLfqfHfoH7QaMQUW8fngD7u7TxWexYQg==
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.1.0.tgz#b271856a7bd507fa67d9a063b877a2c72eb944c6"
|
||||
integrity sha512-Y+iRHtDrPOlNH9ZZpqpIogonv7jwSPHIt3Gpe+kRvYJlBaK+QGNXu+xooJY0QEmb62/ERo3GF3zCxRMbMtKEEA==
|
||||
dependencies:
|
||||
tldts-core "^7.0.29"
|
||||
tldts-core "^7.1.0"
|
||||
|
||||
tmp@^0.0.33:
|
||||
version "0.0.33"
|
||||
@@ -3324,10 +3358,10 @@ typedarray@^0.0.6:
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
|
||||
|
||||
undici-types@~7.19.0:
|
||||
version "7.19.2"
|
||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.19.2.tgz#1b67fc26d0f157a0cba3a58a5b5c1e2276b8ba2a"
|
||||
integrity sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==
|
||||
"undici-types@>=7.24.0 <7.24.7":
|
||||
version "7.24.6"
|
||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.24.6.tgz#61275b485d7fd4e9d269c7cf04ec2873c9cc0f91"
|
||||
integrity sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==
|
||||
|
||||
undici@^7.25.0:
|
||||
version "7.25.0"
|
||||
@@ -3428,11 +3462,6 @@ zarrita@^0.7.1:
|
||||
"@zarrita/storage" "^0.2.0"
|
||||
numcodecs "^0.3.2"
|
||||
|
||||
zstd-codec@^0.1.5:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/zstd-codec/-/zstd-codec-0.1.5.tgz#c180193e4603ef74ddf704bcc835397d30a60e42"
|
||||
integrity sha512-v3fyjpK8S/dpY/X5WxqTK3IoCnp/ZOLxn144GZVlNUjtwAchzrVo03h+oMATFhCIiJ5KTr4V3vDQQYz4RU684g==
|
||||
|
||||
zstddec@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/zstddec/-/zstddec-0.2.0.tgz#91c8cde8f351ef5fe0bdfca66bb14a5fa0d16d71"
|
||||
|
||||
Reference in New Issue
Block a user