Compare commits

..
Author SHA1 Message Date
renovate[bot] e0c26e0607 Update kt.serialization to v1.12.0 2026-10-20 10:17:42 +00:00
InsanusMokrassar 4ec19d0da3 Merge pull request #686 from InsanusMokrassar/0.32.0
0.32.0
2026-10-10 20:13:07 +06:00
InsanusMokrassar 1f52bc7c99 restore gradle wrapper scripts 2026-10-10 20:03:49 +06:00
InsanusMokrassar ec2568b988 Update dependencies and rewrite SmartSemaphore docs
Updated version numbers and modified documentation for SmartSemaphore.
2026-10-10 19:54:06 +06:00
InsanusMokrassar d082e8bdba Clean up gradle-wrapper.properties
Removed network configuration settings for Gradle wrapper.
2026-10-10 19:53:31 +06:00
InsanusMokrassar 71e0bf214e update dependencies 2026-10-10 15:32:26 +06:00
InsanusMokrassar 761b14dc65 preserve concurrency constructor validation 2026-10-10 14:25:54 +06:00
InsanusMokrassar 63d66228ab start 0.32.0 2026-10-10 14:25:48 +06:00
InsanusMokrassar c4f15c32ea Merge pull request #679 from InsanusMokrassar/0.31.1
0.31.1
2026-09-23 23:21:27 +06:00
InsanusMokrassar a070f7d2f3 update changelog 2026-09-23 22:50:39 +06:00
InsanusMokrassar 74501079c3 fix of smart lockers 2026-09-23 22:49:30 +06:00
InsanusMokrassar 761cfffae1 start 0.31.1 2026-09-23 22:41:41 +06:00
InsanusMokrassar f26fb352e5 Update dependencies in CHANGELOG.md for version 0.31.0 2026-08-31 10:51:21 +06:00
InsanusMokrassar b71781727a Merge pull request #678 from InsanusMokrassar/0.31.0
0.31.0
2026-08-30 17:31:34 +06:00
InsanusMokrassar 6c843c4dd4 migrate onto new android dsl 2026-08-28 23:04:25 +06:00
InsanusMokrassar 9381e7d057 migrate build toolchain 2026-08-28 22:12:57 +06:00
InsanusMokrassar 9ffc171c04 update dependencies 2026-08-28 14:03:40 +06:00
InsanusMokrassar 6104d4917c start 0.31.0 2026-08-28 12:55:11 +06:00
InsanusMokrassar faa3ac728f Merge pull request #677 from InsanusMokrassar/0.30.1
0.30.1
2026-08-13 13:26:20 +06:00
InsanusMokrassar b00e93372d temporarily disable inmo nexus 2026-08-13 13:23:43 +06:00
InsanusMokrassar 8f51cd4d60 update kslog 2026-08-13 13:22:55 +06:00
InsanusMokrassar f618ea05f7 fix in generate sealed workaround 2026-08-13 13:18:09 +06:00
InsanusMokrassar 2b053dfedb update dependencies 2026-08-13 13:18:09 +06:00
InsanusMokrassar f6ab406ffa start 0.30.1 2026-08-13 13:18:09 +06:00
InsanusMokrassar fe635835a5 update dependencies 2026-08-13 13:17:08 +06:00
InsanusMokrassar 795bc4e09e start 0.30.0 2026-08-13 13:17:08 +06:00
InsanusMokrassar d431446da0 fix dokka build :( 2026-08-13 13:17:08 +06:00
InsanusMokrassar 362821e4d7 add meta 2026-08-13 13:17:08 +06:00
InsanusMokrassar 2045db9cd0 start 0.29.4 2026-08-13 13:17:08 +06:00
InsanusMokrassar 249c14a93d add kdocs to repos 2026-05-21 20:09:54 +06:00
InsanusMokrassar a1bfe4c478 update dependencies 2026-05-21 20:09:44 +06:00
InsanusMokrassar bfe293c0b9 update dependencies
com.google.devtools.ksp:symbol-processing-api 2.3.7 -> 2.3.8

io.ktor:ktor-client-core 3.4.3 -> 3.5.0

org.jetbrains.exposed:exposed-core 1.2.0 -> 1.3.0

org.jetbrains.compose:compose-gradle-plugin 1.10.3 -> 1.11.0
2026-05-21 19:30:02 +06:00
InsanusMokrassar 772dde7d5e update dependencies
io.ktor:ktor-client-core 3.4.2 -> 3.4.3

org.xerial:sqlite-jdbc 3.53.0.0 -> 3.53.1.0

org.jetbrains.kotlin:kotlin-stdlib 2.3.20 -> 2.3.21

com.google.devtools.ksp:symbol-processing-api 2.3.6 -> 2.3.7

org.jetbrains.kotlinx:kotlinx-coroutines-core 1.10.2 -> 1.11.0

com.github.ben-manes.versions:gradle-versions-plugin 0.53.0 -> 0.54.0

com.gradleup.nmcp.aggregation:com.gradleup.nmcp.aggregation.gradle.plugin 1.4.4 -> 1.5.0
2026-05-13 12:39:06 +06:00
InsanusMokrassar 3c272fa259 start 0.29.3 2026-05-13 11:54:25 +06:00
InsanusMokrassar b6a433caa6 Merge pull request #657 from InsanusMokrassar/0.29.2
0.29.2
2026-04-18 22:41:33 +06:00
InsanusMokrassar d207435846 update serialization, kslog and koin 2026-04-18 22:40:53 +06:00
InsanusMokrassar 4310c7fbf3 update dependencies
org.jetbrains.kotlin:kotlin-stdlib 2.3.10 -> 2.3.20
org.jetbrains.compose:compose-gradle-plugin 1.10.2 -> 1.10.3
org.jetbrains.exposed:exposed-core 1.1.1 -> 1.2.0
org.jetbrains.dokka:dokka-gradle-plugin 2.1.0 -> 2.2.0
org.xerial:sqlite-jdbc 3.51.2.0 -> 3.53.0.0
io.ktor:ktor-client-core 3.4.1 -> 3.4.2
com.squareup.okio:okio 3.16.4 -> 3.17.0
com.squareup:kotlinpoet-ksp 2.2.0 -> 2.3.0
androidx.core:core-ktx 1.17.0 -> 1.18.0
2026-04-18 21:06:59 +06:00
InsanusMokrassar 736dd202f4 start 0.29.2 2026-04-18 20:11:02 +06:00
InsanusMokrassar e430272d35 Merge pull request #650 from InsanusMokrassar/0.29.1
0.29.1
2026-03-05 17:51:42 +06:00
InsanusMokrassar e82965734c update compose 2026-03-05 17:50:59 +06:00
InsanusMokrassar d0ac5e8144 update dependencies
org.jetbrains.compose:compose 1.10.2 -> 1.10.1
org.jetbrains.exposed:exposed 1.0.0 -> 1.1.1
io.ktor:ktor 3.4.0 -> 3.4.1
com.gradleup.nmcp:nmcp 1.2.1 -> 1.4.4
2026-03-05 17:43:02 +06:00
InsanusMokrassar dcedbbd7b8 start 0.29.1 2026-03-05 15:44:26 +06:00
InsanusMokrassar c8ce2a41c6 Merge pull request #646 from InsanusMokrassar/0.29.0
0.29.0
2026-02-24 19:59:12 +06:00
InsanusMokrassar 4f270d9047 generate docs for a lot of API (test try) 2026-02-24 18:18:10 +06:00
InsanusMokrassar 3df90b1993 update sqlite (wow^^) 2026-02-24 15:40:05 +06:00
InsanusMokrassar 8e8915d84c update dependencies 2026-02-24 15:16:45 +06:00
InsanusMokrassar 50369e0904 migrate onto 0.29.0 2026-02-24 15:11:43 +06:00
InsanusMokrassar 3ae2c84c08 fill changelog 2026-02-15 18:38:07 +06:00
InsanusMokrassar b2e6ab51cb update runCatchingLogging to rethrow CanellationException 2026-02-15 18:35:43 +06:00
InsanusMokrassar d6496f02e6 start 0.28.1 2026-02-15 18:21:57 +06:00
InsanusMokrassar 38e98327b4 fill changelog for 0.28.0 2026-02-04 21:26:32 +06:00
InsanusMokrassar c72a6fda5d Merge pull request #638 from InsanusMokrassar/0.28.0
0.28.0
2026-01-27 23:37:56 +06:00
InsanusMokrassar 23d58d42ee make it buildable 2026-01-27 16:19:43 +06:00
InsanusMokrassar d972cebf47 start update dependencies 2026-01-24 19:41:35 +06:00
InsanusMokrassar 3558a5135b start 0.28.0 2026-01-24 16:12:54 +06:00
InsanusMokrassar 82460d2ce3 Merge pull request #633 from InsanusMokrassar/0.27.0
0.27.0
2026-01-15 12:53:41 +06:00
InsanusMokrassar 4ce2b7d3b2 update compose versions 2026-01-15 12:07:53 +06:00
InsanusMokrassar 2c10bb3c88 update dependencies
io.ktor:ktor-client-core 3.3.2 -> 3.3.3

com.squareup.okio:okio 3.16.2 -> 3.16.4

com.google.devtools.ksp:symbol-processing-api 2.3.2 -> 2.3.4
2026-01-15 11:56:03 +06:00
InsanusMokrassar 01bed4a6c9 start 0.27.0 2026-01-15 11:34:35 +06:00
InsanusMokrassar 52c4867468 Merge pull request #624 from InsanusMokrassar/0.26.8
0.26.8
2025-11-12 22:47:29 +06:00
InsanusMokrassar 92b3fd25e7 fill changelog 2025-11-12 22:25:33 +06:00
InsanusMokrassar e0e1da5082 add suspendPoint 2025-11-12 22:20:17 +06:00
InsanusMokrassar 80953f5d09 update ktor and android script config 2025-11-12 18:18:01 +06:00
InsanusMokrassar 2849db57f2 start 0.26.8 2025-11-12 18:01:11 +06:00
InsanusMokrassar 0170b92272 Merge pull request #622 from InsanusMokrassar/0.26.7
0.26.7
2025-11-05 15:41:10 +06:00
InsanusMokrassar 7bcb81400b fill changelog 2025-11-05 15:14:21 +06:00
InsanusMokrassar 078aedfb68 update dependencies 2025-11-05 13:42:27 +06:00
InsanusMokrassar cb56bf9793 Revert "add getCurrentLocale and compose translation"
This reverts commit fce47897d5.
2025-11-05 12:29:33 +06:00
InsanusMokrassar b152986b4e improve SmartKeyRWLockerTests and fix SmartSemaphore 2025-11-05 12:27:24 +06:00
InsanusMokrassar fce47897d5 add getCurrentLocale and compose translation 2025-10-31 19:34:09 +06:00
InsanusMokrassar 0b701a3e99 start 0.26.7 2025-10-31 11:21:06 +06:00
InsanusMokrassar 9dad353957 Merge pull request #619 from InsanusMokrassar/0.26.6
0.26.6
2025-10-19 16:24:37 +06:00
InsanusMokrassar 89e16b7bdb update dependencies
io.ktor:ktor-* 3.3.0 -> 3.3.1
com.squareup.okio:okio 3.16.0 -> 3.16.2
org.jetbrains.dokka:dokka-gradle-plugin 2.0.0 -> 2.1.0
2025-10-19 16:23:23 +06:00
InsanusMokrassar c2965da341 start 0.26.6 2025-10-19 15:24:41 +06:00
InsanusMokrassar ffb072dc5f Merge pull request #613 from InsanusMokrassar/0.26.5
0.26.5
2025-10-04 14:39:30 +06:00
InsanusMokrassar a247dbcb02 rollback sqlite update 2025-10-04 14:20:18 +06:00
InsanusMokrassar 1dd71175f4 update dependencies 2025-09-30 23:29:04 +06:00
InsanusMokrassar bbe62c0e7b start 0.26.5 2025-09-30 23:06:42 +06:00
InsanusMokrassar 9822ff321b Merge pull request #607 from InsanusMokrassar/0.26.4
0.26.4
2025-09-02 01:33:50 +06:00
InsanusMokrassar b485d485ef MPPFilePathSeparator 2025-09-01 22:40:26 +06:00
InsanusMokrassar 0b3d445109 start 0.26.4 2025-09-01 22:34:32 +06:00
InsanusMokrassar d7e48940bc Merge pull request #606 from InsanusMokrassar/0.26.3
0.26.3
2025-08-20 19:17:26 +06:00
InsanusMokrassar 1049eb0fe7 update dependencies 2025-08-20 19:15:24 +06:00
InsanusMokrassar c871ef5635 start 0.26.3 2025-08-20 18:39:59 +06:00
InsanusMokrassar 7edfcb20c4 Merge pull request #593 from InsanusMokrassar/0.26.2
0.26.2
2025-07-31 15:22:34 +06:00
InsanusMokrassar 7a1438a2c0 update dependencies 2025-07-31 15:11:42 +06:00
InsanusMokrassar 2af8cba8cd rename SpecialMutableStateFlow to MutableRedeliverStateFlow 2025-07-29 17:53:47 +06:00
InsanusMokrassar 27d74c0a62 start 0.26.2 2025-07-29 17:46:31 +06:00
InsanusMokrassar f86d1bfe06 Merge pull request #591 from InsanusMokrassar/0.26.1
0.26.1
2025-07-21 23:05:46 +06:00
InsanusMokrassar 7cc5972ff7 update dependencies 2025-07-21 22:58:00 +06:00
InsanusMokrassar 3bbf978b00 fixes in actorAsync 2025-07-21 22:02:30 +06:00
InsanusMokrassar ed36467600 add opportunity to pass logger in subscribe async 2025-07-21 21:53:03 +06:00
InsanusMokrassar dd0de327fc start 0.26.1 2025-07-21 21:37:50 +06:00
InsanusMokrassar dccd3ce8fd Merge pull request #589 from InsanusMokrassar/0.26.0
0.26.0
2025-07-11 16:46:21 +06:00
InsanusMokrassar fa45e7b696 fix of kspCommonMainKotlinMetadata call 2025-07-11 16:39:08 +06:00
InsanusMokrassar 57f009e8aa try to fix build 2025-07-11 14:40:53 +06:00
InsanusMokrassar 04b633a5ea fill changelog 2025-07-10 23:44:11 +06:00
InsanusMokrassar 20d42b05bb fixed issue with ksp (with https://github.com/google/ksp/issues/2491) 2025-07-10 19:22:08 +06:00
InsanusMokrassar 91ba50f1ff start updates 2025-07-10 18:21:57 +06:00
InsanusMokrassar f4476c99f9 start 0.26.0 2025-07-10 17:59:06 +06:00
InsanusMokrassar 50f3f586ab fixes 2025-06-18 15:00:02 +06:00
InsanusMokrassar 36a2d7ec8e small improvement of InfinityPagedComponent and add opportunity to set publishing type 2025-06-18 14:31:01 +06:00
InsanusMokrassar 4890b5833e Merge pull request #587 from InsanusMokrassar/0.25.8
0.25.8
2025-06-17 15:47:54 +06:00
InsanusMokrassar e20ab89688 improvements in InfinityPagedComponent 2025-06-17 15:45:05 +06:00
InsanusMokrassar e557ba8184 start 0.25.8 2025-06-17 15:31:03 +06:00
InsanusMokrassar 8540e21d5a Merge pull request #584 from InsanusMokrassar/0.25.7
0.25.7
2025-06-10 23:38:07 +06:00
InsanusMokrassar 76c04a8506 update dependencies 2025-06-10 23:29:26 +06:00
InsanusMokrassar 128632770e start 0.25.7 2025-06-10 23:19:46 +06:00
InsanusMokrassar 31e0800e81 Update build.gradle 2025-06-08 20:41:05 +06:00
InsanusMokrassar 00ca96eec8 add nmcp 2025-06-08 18:51:53 +06:00
InsanusMokrassar 077ef2c639 fix of repositories order in build.gradle 2025-06-02 19:44:16 +06:00
InsanusMokrassar e3ea7be0e7 one more improvement 2025-06-02 11:47:38 +06:00
InsanusMokrassar 05fd1c2b14 one more improvement 2025-06-02 11:45:30 +06:00
InsanusMokrassar affcffe270 small improvement in uploadSonatypePublicationmain.kts 2025-06-02 11:44:09 +06:00
InsanusMokrassar 62930231e4 first version of uploadSonatypePublicationmain.kts 2025-06-02 11:42:45 +06:00
InsanusMokrassar ad651631ec experiments time 2025-06-02 08:34:09 +06:00
InsanusMokrassar cf1c8f13db add publish_all_script 2025-06-01 23:16:50 +06:00
InsanusMokrassar 9acc69b897 Revert "add keepa-live for uploading script parts"
This reverts commit 2ed8443e28.
2025-05-18 19:15:58 +06:00
InsanusMokrassar 9bc7cbdb50 add allowing of connection and keep-alive headers 2025-05-18 18:35:31 +06:00
InsanusMokrassar 2ed8443e28 add keepa-live for uploading script parts 2025-05-17 15:59:53 +06:00
InsanusMokrassar 94f598c2b4 Merge pull request #578 from InsanusMokrassar/0.25.6
0.25.6
2025-05-16 14:45:34 +06:00
InsanusMokrassar d83d30af06 actualize kslog, changelog and gradle.properties 2025-05-16 14:44:39 +06:00
InsanusMokrassar 284e763f0d update publish gradle scripts 2025-05-16 14:31:22 +06:00
InsanusMokrassar 3bfa172533 update github_release.gradle to allow it to publish with env instead of secret.gradle 2025-05-16 12:39:24 +06:00
InsanusMokrassar b5b1fd6d5f rewrite publishing scripts with using of publication scripts generator 2025-05-16 00:53:12 +06:00
InsanusMokrassar 05e0d9b7d2 add clatch for uploading of publication 2025-05-15 22:18:43 +06:00
InsanusMokrassar 1ae1f8dee2 Revert "trying to add new plugin for publishing"
This reverts commit 1bf479a0b7.
2025-05-15 21:17:56 +06:00
InsanusMokrassar 1bf479a0b7 trying to add new plugin for publishing 2025-05-14 20:47:09 +06:00
InsanusMokrassar 9d04d49628 update dependencies and try to use new publishing 2025-05-13 23:41:27 +06:00
InsanusMokrassar 3de324519b start 0.25.6 2025-05-13 22:49:03 +06:00
InsanusMokrassar 4be90d0ea5 Merge pull request #567 from InsanusMokrassar/0.25.5
0.25.5
2025-04-14 10:24:01 +06:00
InsanusMokrassar 041f35ed6c add templates declaration in README.md 2025-04-14 10:09:33 +06:00
InsanusMokrassar 9c463d0338 add kdocs to koin common module 2025-04-14 10:03:26 +06:00
InsanusMokrassar 5ec0a46089 add KDocs for actor and safeActor 2025-04-14 09:53:24 +06:00
InsanusMokrassar 979d0ee4ca new model of templating 2025-04-14 09:43:07 +06:00
InsanusMokrassar 448686b399 Merge pull request #572 from 000Sanya/0.25.5
fix test running for wasm/js node
2025-04-14 08:54:53 +06:00
nullsanya 0ff149a3d3 fix test running for wasm/js node 2025-04-14 12:44:00 +10:00
InsanusMokrassar 50a90d6e96 update dependencies 2025-04-11 22:45:54 +06:00
InsanusMokrassar 5f93706d91 Small performance optimization of MutableMap.applyDiff 2025-04-11 22:40:55 +06:00
InsanusMokrassar 39415550f5 Merge pull request #568 from 000Sanya/0.25.5
fix test running for wasm/js browser
2025-04-11 22:40:47 +06:00
nullsanya 4586ad65b5 fix test running for wasm/js browser 2025-04-05 12:45:51 +10:00
InsanusMokrassar 8c5678e26f pre-fix of tests for wasmjs 2025-04-04 21:46:36 +06:00
InsanusMokrassar 5dff373d5f refactor: rename templates and optimize wasmJsMain blocks 2025-04-04 20:29:40 +06:00
InsanusMokrassar e17868a085 Merge pull request #566 from 000Sanya/master
implement support of wasm/js for browser
2025-04-04 20:24:44 +06:00
InsanusMokrassar 97bb6d0936 start 0.25.5 2025-04-04 20:06:44 +06:00
nullsanya 54576d8dec implement support of wasm/js for browser 2025-04-03 21:25:26 +10:00
InsanusMokrassar 282bb24c71 Merge pull request #563 from InsanusMokrassar/0.25.4
0.25.4
2025-04-02 23:48:54 +06:00
InsanusMokrassar b1a96b6ecb fix transactions dsl 2025-04-02 16:52:08 +06:00
InsanusMokrassar 66dac2086c update koin 2025-04-02 16:09:40 +06:00
InsanusMokrassar e269d0d206 fix in transactions 2025-04-02 16:05:33 +06:00
InsanusMokrassar 5d95c3eb9c update dependencies 2025-03-31 11:30:56 +06:00
InsanusMokrassar 26650e9b6c add SmartKeyRWLocker.withWriteLocks extension with vararg keys 2025-03-27 20:54:41 +06:00
InsanusMokrassar 7339dd8354 start 0.25.4 2025-03-27 20:53:29 +06:00
InsanusMokrassar 8ae983971a Merge pull request #561 from InsanusMokrassar/0.25.3
0.25.3
2025-03-25 17:55:58 +06:00
InsanusMokrassar d46cc3b09c remove redundant commentaries 2025-03-25 17:45:53 +06:00
InsanusMokrassar dfd23f8d60 update kotlin 2025-03-25 17:42:32 +06:00
InsanusMokrassar 28eb1a11e6 add more tests for smart key rw locker tests 2025-03-25 17:27:34 +06:00
InsanusMokrassar 04f82a03bf add docs to SmartKeyRWLocker and SmartRWLocker 2025-03-24 14:21:36 +06:00
InsanusMokrassar aac545074b fill changelog 2025-03-24 14:02:12 +06:00
InsanusMokrassar 87a3a925ee add multilocking for key-based lockers 2025-03-24 13:36:04 +06:00
InsanusMokrassar 5447bf9691 add one more test for SmartKeyRWLocker 2025-03-24 09:17:38 +06:00
InsanusMokrassar 761070b9b7 potentially first version of SmartKeyRWLocker 2025-03-23 11:16:45 +06:00
InsanusMokrassar 4c9e435df8 temporal realization of SmartKeyRWLocker 2025-03-22 16:02:08 +06:00
InsanusMokrassar 4b7d65e8b4 small logic fix in transactions dsl 2025-03-20 18:04:19 +06:00
InsanusMokrassar 0515b49b98 add transactions tests 2025-03-20 18:02:44 +06:00
InsanusMokrassar edb97215ef add TransactionsDSL 2025-03-20 17:28:28 +06:00
InsanusMokrassar 5577a24548 fix of docs for HEXAColor 2025-03-19 18:10:20 +06:00
InsanusMokrassar cfaa2a8927 add alsoWithUnlockingOnSuccess and alsoWithUnlockingOnSuccessAsync 2025-03-15 20:43:17 +06:00
InsanusMokrassar 78494b6036 start 0.25.3 2025-03-15 20:33:55 +06:00
InsanusMokrassar f9ea7eca61 Merge pull request #557 from InsanusMokrassar/0.25.2
0.25.2
2025-03-14 16:40:12 +06:00
InsanusMokrassar d69fee1732 add @OverrideRequireManualInvalidation to all invalidates supposed to be called in init block 2025-03-14 16:07:07 +06:00
InsanusMokrassar 178518db5e alsoInvalidateSync, alsoInvalidateSyncLogging, alsoDoInvalidate -> alsoInvalidateAsync 2025-03-14 15:01:22 +06:00
InsanusMokrassar 6fb20fb973 get back reflect in jvmMain of koin module 2025-03-14 14:16:46 +06:00
InsanusMokrassar 831bf44e34 alsoInvalidate, alsoDoInvalidate, singleSuspend, factorySuspend 2025-03-14 14:13:58 +06:00
InsanusMokrassar a4c6c367e3 update exposed 2025-03-12 08:53:05 +06:00
InsanusMokrassar bc98e59709 start 0.25.2 2025-03-12 08:41:51 +06:00
InsanusMokrassar ef287bc331 Merge pull request #556 from InsanusMokrassar/0.25.1
0.25.1
2025-03-08 12:26:41 +06:00
InsanusMokrassar 3437f4c712 update changelog 2025-03-08 08:59:25 +06:00
InsanusMokrassar 618f2dcd79 update paged component 2025-03-08 07:59:27 +06:00
InsanusMokrassar 6df8ad3095 add calling of initial loadNext 2025-03-07 18:23:40 +06:00
InsanusMokrassar eda6221288 fix of InfinityPagedComponent 2025-03-07 18:05:20 +06:00
InsanusMokrassar a9859f6a0d moretests to god of tests 2025-03-05 19:48:16 +06:00
InsanusMokrassar 0db88bac25 fixes 2025-03-05 19:40:46 +06:00
InsanusMokrassar daa3d9c0dd progress on test adaptation 2025-03-05 19:20:09 +06:00
InsanusMokrassar b343b33594 buildable variant of map-like sorted tree 2025-03-05 16:23:39 +06:00
InsanusMokrassar 46e435a448 start 0.25.1 2025-03-05 14:14:57 +06:00
InsanusMokrassar 7fe62b4ffa Merge pull request #553 from InsanusMokrassar/0.25.0
0.25.0
2025-03-04 17:10:48 +06:00
InsanusMokrassar 9c94348a15 Merge branch 'master' into 0.25.0 2025-03-04 09:49:26 +06:00
InsanusMokrassar bac256e93e Merge pull request #555 from InsanusMokrassar/0.24.9
0.24.9
2025-03-04 09:47:54 +06:00
InsanusMokrassar 49f59aa129 fill changelog 2025-03-04 09:47:38 +06:00
InsanusMokrassar 800dab5be0 rework of PagedComponent 2025-03-04 09:33:37 +06:00
InsanusMokrassar b9977527b2 rework InfinityPagedComponent 2025-03-04 09:23:33 +06:00
InsanusMokrassar c216dba69d hotfix in InfinityPagedComponent and PagedComponent 2025-03-03 21:16:34 +06:00
InsanusMokrassar d4148d52e3 start hotfix 0.24.9 2025-03-03 21:15:36 +06:00
InsanusMokrassar 2006a8cdd0 Merge branch 'master' into 0.25.0 2025-03-03 19:41:13 +06:00
InsanusMokrassar feb52ecbd1 fix of HandleSafelyCoroutineContextTest 2025-03-03 19:40:45 +06:00
InsanusMokrassar 42909c3b7a Merge branch 'master' into 0.25.0 2025-03-03 17:38:01 +06:00
InsanusMokrassar 706a787163 replace SortedBinaryTreeNodeTests in jvm-only 2025-03-03 17:37:22 +06:00
InsanusMokrassar 1bc14bded6 Merge branch 'master' into 0.25.0 2025-03-03 16:24:25 +06:00
InsanusMokrassar f00cb81db1 Merge pull request #551 from InsanusMokrassar/0.24.8
0.24.8
2025-03-03 17:23:00 +07:00
InsanusMokrassar 2fbd14956d small update in SortedBinaryTreeNodeTests 2025-03-03 15:49:46 +06:00
InsanusMokrassar 24657b43be update InfinityPagedComponents 2025-03-03 15:17:54 +06:00
InsanusMokrassar 659d3b6fa5 update dependencies and fill changelog 2025-03-03 14:53:49 +06:00
InsanusMokrassar 339483c8a3 disable hard test of binary trees for js 2025-03-03 14:42:05 +06:00
InsanusMokrassar 51ec46bbd7 update timeout for deepInsertOnWorks 2025-03-03 13:40:33 +06:00
InsanusMokrassar 8a059cc26d fix of build 2025-03-03 12:21:04 +06:00
InsanusMokrassar ddb8e1efb4 fix build 2025-03-03 12:15:36 +06:00
InsanusMokrassar 3bf2ed5168 fix of InfinityPagedComponent 2025-03-03 08:57:40 +06:00
InsanusMokrassar e70d34d91a add tests for paged loading components 2025-03-02 23:06:42 +06:00
InsanusMokrassar 7a650f5c2f Disallow overrides in repos 2025-03-02 16:12:23 +06:00
InsanusMokrassar fc6f5ae2ee start 0.25.0 2025-03-02 16:10:25 +06:00
InsanusMokrassar 3b7dde3cb1 add KDocs for InfinityPagedComponentContext and PagedComponent 2025-03-01 22:16:48 +06:00
InsanusMokrassar 0a5cfaba18 complete InfinityPagedComponentContext 2025-03-01 22:04:41 +06:00
InsanusMokrassar ea527b5e91 start add paged/loading component 2025-03-01 16:49:20 +06:00
InsanusMokrassar 85f11439e8 adapt gradle files for new tests 2025-02-26 22:01:39 +06:00
InsanusMokrassar 98c7b48625 add SortedBinaryTreeNode 2025-02-26 20:57:17 +06:00
InsanusMokrassar 8b007bb3af start 0.24.8 2025-02-26 20:56:56 +06:00
InsanusMokrassar 89e2d88d1c Merge pull request #548 from InsanusMokrassar/0.24.7
0.24.7
2025-02-20 08:52:41 +06:00
InsanusMokrassar 260399e965 AbstractExposedKeyValuesRepo#set fix 2025-02-19 23:30:54 +06:00
InsanusMokrassar de72843b8e Retry 2025-02-19 23:29:49 +06:00
InsanusMokrassar b589142d9f update dependencies 2025-02-19 14:18:08 +06:00
InsanusMokrassar f479c85869 remove redundant K2 enabling (enabled by default since kotlin 2.0 2025-02-19 14:13:53 +06:00
InsanusMokrassar 26992c039a more fixes to god of fixes 2025-02-19 14:13:02 +06:00
InsanusMokrassar ef50e1a24f try K2? 2025-02-19 12:28:47 +06:00
InsanusMokrassar 2f201670d2 fix? 2025-02-18 16:35:16 +06:00
InsanusMokrassar 90c80573a0 potential fix for DirectFullKeyValuesCacheRepo 2025-02-18 15:36:15 +06:00
InsanusMokrassar 059519cdca fixes in FullKeyValueCacheRepo 2025-02-18 15:25:49 +06:00
InsanusMokrassar 55647e2e2f start 0.24.7 2025-02-18 15:10:08 +06:00
InsanusMokrassar 1802be68ef Merge pull request #544 from InsanusMokrassar/0.24.6
0.24.6
2025-02-15 10:05:05 +06:00
InsanusMokrassar aa79496a36 upfill changelog 2025-02-15 10:04:12 +06:00
InsanusMokrassar 4bfa4c32aa fix of #541 2025-02-14 13:16:14 +06:00
InsanusMokrassar d8ca29eab1 start deprecation of safely functions 2025-02-14 12:37:40 +06:00
InsanusMokrassar f7a9f2e13d fixes and forcing uppercase for new files 2025-02-13 12:13:15 +06:00
InsanusMokrassar af286d3d53 add disabling of publishing for ksp test modules 2025-02-13 11:04:25 +06:00
InsanusMokrassar 9a20e8155e update dependnecies 2025-02-13 10:33:40 +06:00
InsanusMokrassar b81af7e1c8 fill changelog 2025-02-13 09:09:01 +06:00
InsanusMokrassar 74563bbac9 small hotfix 2025-02-12 21:20:14 +06:00
InsanusMokrassar 07ad79f0b3 add including of annotations from source function on variation generation 2025-02-12 21:19:40 +06:00
InsanusMokrassar 5c28255e06 fixes for generics 2025-02-12 14:32:14 +06:00
InsanusMokrassar 99783f281d generate sample functions 2025-02-12 12:37:08 +06:00
InsanusMokrassar a5008c3d15 first version of parameters variations 2025-02-12 12:20:22 +06:00
InsanusMokrassar f807f2beeb start add variations generator 2025-02-11 13:50:58 +06:00
InsanusMokrassar db34b25ef2 start 0.24.6 2025-02-10 13:35:52 +06:00
InsanusMokrassar 96daf11fd4 Merge pull request #538 from InsanusMokrassar/0.24.5
0.24.5
2025-01-29 09:08:08 +06:00
InsanusMokrassar f7e98dfd2d update kotlin 2025-01-29 08:56:37 +06:00
InsanusMokrassar 61277e92bd update dependencies 2025-01-27 09:35:54 +06:00
InsanusMokrassar 32ef9f399f start 0.24.5 2025-01-27 09:21:39 +06:00
InsanusMokrassar 54e6ca5dc3 Merge pull request #535 from InsanusMokrassar/0.24.4
0.24.4
2025-01-19 09:11:54 +06:00
InsanusMokrassar a8e226786d improve selectByIds and fill changelog 2025-01-17 19:46:29 +06:00
InsanusMokrassar ce717a4c9f improvements in FSM 2025-01-17 18:34:54 +06:00
InsanusMokrassar fd41bf0ae7 start 0.24.4 2025-01-17 14:41:09 +06:00
InsanusMokrassar b2b68bf29f Merge pull request #533 from InsanusMokrassar/0.24.3
0.24.3
2025-01-15 13:36:29 +06:00
InsanusMokrassar b87c29c354 replace tests of GenerateSealed*Workaround to be jvm-only 2025-01-15 13:25:58 +06:00
InsanusMokrassar 24977822c9 fixes in GenerateSealedTypesWorkaround 2025-01-15 13:22:07 +06:00
InsanusMokrassar 647daa8627 start 0.24.3 2025-01-15 13:21:37 +06:00
InsanusMokrassar a372efacb1 Merge pull request #532 from InsanusMokrassar/0.24.2
0.24.2
2025-01-14 10:13:53 +06:00
InsanusMokrassar f40d33db2a update exposed 2025-01-14 10:09:16 +06:00
InsanusMokrassar a5eb0fbd24 add opportunity to generate types lists for sealed subtypes 2025-01-14 09:57:52 +06:00
InsanusMokrassar 307c8030af start 0.24.2 2025-01-14 09:57:52 +06:00
InsanusMokrassar a9016465fa update dependencies 2025-01-14 09:57:32 +06:00
InsanusMokrassar 358b70eb5f start 0.24.1 2025-01-14 09:57:32 +06:00
InsanusMokrassar 6fcbb80a71 Merge pull request #530 from InsanusMokrassar/renovate/migrate-config
Migrate renovate config
2025-01-10 08:45:48 +06:00
renovate[bot] 643f6c420b Migrate config renovate.json 2025-01-10 02:41:30 +00:00
InsanusMokrassar ac68b0b941 Merge pull request #519 from InsanusMokrassar/0.24.0
0.24.0
2024-12-21 09:15:11 +06:00
InsanusMokrassar d62f67bd88 update dokka 2024-12-21 09:13:10 +06:00
InsanusMokrassar 8718c5e310 update dependencies and add kdocs for percentage 2024-12-21 09:02:31 +06:00
InsanusMokrassar e8273ab80c Progress -> Percentage 2024-12-08 22:34:28 +06:00
InsanusMokrassar 2718605987 start 0.24.0 2024-12-08 22:27:05 +06:00
InsanusMokrassar d99538d80b Merge pull request #517 from InsanusMokrassar/0.23.2
0.23.2
2024-12-06 13:47:33 +06:00
InsanusMokrassar ce7a1e4e21 update dependencies 2024-12-06 13:17:09 +06:00
InsanusMokrassar 921734763d update workflows 2024-12-04 10:19:41 +06:00
InsanusMokrassar 18c608f569 small improvement in AccumulatorFlow 2024-12-04 10:16:19 +06:00
InsanusMokrassar b915f6ece2 start 0.23.2 2024-12-04 10:12:39 +06:00
InsanusMokrassar 24347b422c Merge pull request #513 from InsanusMokrassar/0.23.1
0.23.1
2024-11-25 15:31:41 +06:00
InsanusMokrassar e5f4ae647f update dependencies 2024-11-25 15:27:55 +06:00
InsanusMokrassar 72202b8a21 add StyleSheetsAggregator 2024-11-25 15:11:30 +06:00
InsanusMokrassar dbc14d41de start 0.23.1 2024-11-15 21:39:17 +06:00
InsanusMokrassar 1dca5ea00d Merge pull request #499 from InsanusMokrassar/0.23.0
0.23.0
2024-10-30 15:07:58 +06:00
InsanusMokrassar f03d1d788c fill changelog and update ktor 2024-10-30 15:06:19 +06:00
InsanusMokrassar fcac6f9fa8 update ksp 2024-10-29 17:29:46 +06:00
InsanusMokrassar ca0cd433c9 Merge branch 'master' into 0.23.0 2024-10-29 17:23:05 +06:00
InsanusMokrassar 39589fdbd0 Merge pull request #507 from InsanusMokrassar/0.22.9
0.22.9
2024-10-29 13:42:30 +06:00
InsanusMokrassar 605fc3cff9 start add direct caches 2024-10-29 13:14:41 +06:00
InsanusMokrassar 12cd6f48f8 start 0.22.9 2024-10-29 12:00:58 +06:00
InsanusMokrassar 1f57478d10 Update build.yml 2024-10-27 13:53:10 +06:00
InsanusMokrassar 7ef4c5d282 Merge branch 'master' into 0.23.0 2024-10-27 13:42:14 +06:00
InsanusMokrassar f09d92be32 Merge pull request #506 from InsanusMokrassar/0.22.8
0.22.8
2024-10-24 16:32:18 +06:00
InsanusMokrassar 6245b36bdb add pads and breakAsPairs extensions 2024-10-24 15:30:10 +06:00
InsanusMokrassar 54cc353bcc start 0.22.8 2024-10-24 15:26:02 +06:00
InsanusMokrassar b7abba099c Merge pull request #503 from InsanusMokrassar/0.22.7
hotfix due to deprecated annotation
2024-10-19 15:40:14 +06:00
InsanusMokrassar c5dbd10335 hotfix due to deprecated annotation 2024-10-19 15:39:00 +06:00
InsanusMokrassar a44e3e953d Merge pull request #502 from InsanusMokrassar/0.22.7
0.22.7
2024-10-19 15:26:37 +06:00
InsanusMokrassar ee2521cb01 update dependencies 2024-10-19 15:21:00 +06:00
InsanusMokrassar 4625dfb857 replace GenerateSealedWorkaround 2024-10-19 13:44:37 +06:00
InsanusMokrassar b9a2653066 start 0.22.7 2024-10-19 13:41:25 +06:00
InsanusMokrassar fcaa327660 Merge pull request #501 from InsanusMokrassar/0.22.6
0.22.6
2024-10-17 22:40:53 +06:00
InsanusMokrassar 496117d517 improvements in ksp parts 2024-10-17 21:04:41 +06:00
InsanusMokrassar 8ce7d37b72 start 0.22.6 2024-10-17 20:52:45 +06:00
InsanusMokrassar 25391609b9 Update libs.versions.toml 2024-10-12 08:37:44 +06:00
InsanusMokrassar f0b7b9c5e5 migrate to 0.23.0 2024-10-11 23:38:53 +06:00
InsanusMokrassar 301cdaa2c2 fix of build after migration (wat) 2024-10-11 23:32:11 +06:00
InsanusMokrassar fce7ec8912 start migration onto ktor 3.0 2024-10-10 21:53:26 +06:00
InsanusMokrassar 24bd403549 start 0.22.6 2024-10-10 21:38:49 +06:00
InsanusMokrassar 46c89c48a9 Merge pull request #492 from InsanusMokrassar/0.22.5
0.22.5
2024-10-06 12:38:13 +06:00
InsanusMokrassar bad9a53fdb update dependencies 2024-10-06 12:28:48 +06:00
InsanusMokrassar 0bce7bd60a fix of #488 2024-10-06 12:25:42 +06:00
InsanusMokrassar 2f70a1cfb4 solution of #489 2024-10-01 20:30:45 +06:00
InsanusMokrassar bfb6e738ee add debouncedBy extension 2024-09-26 23:50:57 +06:00
InsanusMokrassar c7ad9aae07 start 0.22.5 2024-09-26 23:17:00 +06:00
InsanusMokrassar fecd719239 Merge pull request #491 from InsanusMokrassar/0.22.4
0.22.4
2024-09-25 22:53:53 +06:00
InsanusMokrassar 18d6ac31b5 update exposed 2024-09-25 22:09:50 +06:00
InsanusMokrassar d8dbebfc7e start 0.22.4 2024-09-25 21:03:18 +06:00
InsanusMokrassar 16463d0eb9 Merge pull request #487 from InsanusMokrassar/0.22.3
0.22.3
2024-09-20 13:27:16 +06:00
InsanusMokrassar 837cac644d add extensions in JS 2024-09-20 13:14:50 +06:00
InsanusMokrassar e83e0a8535 update dependencies 2024-09-20 12:44:10 +06:00
InsanusMokrassar 2e309c31a6 start 0.22.3 2024-09-20 12:18:17 +06:00
InsanusMokrassar 625db02651 Merge pull request #479 from InsanusMokrassar/0.22.2
0.22.2
2024-08-30 20:57:10 +06:00
InsanusMokrassar e3144c08c1 update dependencies 2024-08-30 20:48:34 +06:00
InsanusMokrassar 40e25970ad start 0.22.2 2024-08-30 20:46:07 +06:00
InsanusMokrassar 4ccb8a8d11 Merge pull request #477 from InsanusMokrassar/0.22.1
0.22.1
2024-08-29 15:02:34 +06:00
InsanusMokrassar 26d1c3d9ef update dependencies 2024-08-29 14:49:29 +06:00
InsanusMokrassar cc8fe7b001 start 0.22.1 2024-08-29 14:14:20 +06:00
InsanusMokrassar 4601eab864 update gradle scripts to improve performance of configuration 2024-08-27 18:57:59 +06:00
InsanusMokrassar 1ee9c88ffd Merge pull request #459 from InsanusMokrassar/0.22.0
0.22.0
2024-08-11 16:51:30 +06:00
InsanusMokrassar 7feac213f6 update android code version 2024-08-11 16:51:09 +06:00
InsanusMokrassar c75a9c0f61 update dependencies 2024-08-11 16:44:08 +06:00
InsanusMokrassar afd0c9784f Update libs.versions.toml 2024-08-11 12:41:30 +06:00
InsanusMokrassar f1ddbea06e update android version 2024-08-09 23:06:50 +06:00
InsanusMokrassar 42bf3cd4e3 update kotlin-poet 2024-08-09 22:21:53 +06:00
InsanusMokrassar 27f5549f56 improve tests of repos 2024-08-09 21:58:09 +06:00
InsanusMokrassar b0569f8421 add tests for cruds 2024-08-09 19:22:32 +06:00
InsanusMokrassar 8d86f29325 Revert "small change in FullKeyValuesCacheRepoTests and FullKeyValueCacheRepoTests"
This reverts commit 3db8d2291e73812f9eebcec1c0ad088ad0ca854a.
2024-08-07 16:50:13 +06:00
InsanusMokrassar aeca32498a Revert "Update build.yml"
This reverts commit ab0b3a8f0d2c2a38eab5c9910f8ae5543a487c97.
2024-08-07 16:50:13 +06:00
InsanusMokrassar e8232664f3 update delay on creating tests in cache 2024-08-07 16:50:13 +06:00
InsanusMokrassar efa869f91a Update build.yml 2024-08-07 16:50:13 +06:00
InsanusMokrassar dbff3d7cf1 small change in FullKeyValuesCacheRepoTests and FullKeyValueCacheRepoTests 2024-08-07 16:50:13 +06:00
InsanusMokrassar 9e70f73684 upgrade kotlin 2024-08-07 16:50:13 +06:00
InsanusMokrassar 9f2f0de0c4 add check of emptiness in map reslozations of KV/KVs repos 2024-08-07 16:50:13 +06:00
InsanusMokrassar bf293a8f8f fix of tests 2024-08-07 16:50:13 +06:00
InsanusMokrassar 5fbc1a132f improvements in SmartRWLocker and breaking of FullKeyValueCacheRepo tests 2024-08-07 16:50:13 +06:00
InsanusMokrassar 36093b9741 fix of full caches initial actualization and realize MapKeyValuesRepo methods getAll 2024-08-07 16:50:13 +06:00
InsanusMokrassar 8713fb04c5 small change in MapWriteKeyValuesRepo.set and remove duration of FullKeyValuesCacheRepoTests.creatingWorksProperly 2024-08-07 16:50:13 +06:00
InsanusMokrassar ea82a59f31 update gradle wrapper version 2024-08-07 16:50:13 +06:00
InsanusMokrassar 18f67cd4f2 small improvement of test data in Full Cache tests 2024-08-07 16:50:13 +06:00
InsanusMokrassar 120e7228c7 add FullKeyValuesCacheRepoTests and small rewrite of MapWriteKeyValuesRepo.set(Map<Key, List<Value>>) function 2024-08-07 16:50:13 +06:00
InsanusMokrassar 892fa90c37 start add cache repos tests 2024-08-07 16:50:13 +06:00
InsanusMokrassar 491dac5bf0 update exposed 2024-08-07 16:50:13 +06:00
InsanusMokrassar 2ab06fbafd change version 2024-08-07 16:50:11 +06:00
InsanusMokrassar e68735d061 Revert "migrations onto new libraries"
This reverts commit 647cd7d7b4.
2024-08-07 16:46:49 +06:00
InsanusMokrassar 9ba4d98c30 migrations onto new libraries 2024-08-07 16:46:49 +06:00
InsanusMokrassar 19bbfd4916 downgrade kotlin and fix build 2024-08-07 16:46:49 +06:00
InsanusMokrassar d94cd7ea94 some fixes 2024-08-07 16:46:49 +06:00
InsanusMokrassar 0dd8f41eb0 update dependencies 2024-08-07 16:46:49 +06:00
InsanusMokrassar f1ab5ab51f update kotlinx serialization 2024-08-07 16:46:49 +06:00
InsanusMokrassar a8056f3120 update dependencies 2024-08-07 16:46:49 +06:00
InsanusMokrassar 09c0cdebb5 update dependencies 2024-08-07 16:46:49 +06:00
InsanusMokrassar 629d7c7a82 temporal project in upgrade 2024-08-07 16:46:49 +06:00
InsanusMokrassar a0dd1aec3d trying to update to new compose 2024-08-07 16:46:49 +06:00
InsanusMokrassar 17d6377902 Merge pull request #466 from InsanusMokrassar/0.21.6
0.21.6
2024-07-26 19:16:13 +06:00
InsanusMokrassar ad401105a1 fixes in ksp sealed generator 2024-07-26 17:17:11 +06:00
InsanusMokrassar 4913e99c2e start 0.21.6 2024-07-26 16:40:30 +06:00
InsanusMokrassar 16b97029cf Merge pull request #465 from InsanusMokrassar/0.21.5
0.21.5
2024-07-25 02:48:27 +06:00
InsanusMokrassar 481130c9bb fill changelog 2024-07-25 02:30:10 +06:00
InsanusMokrassar 698ed6718d improve sealed workaround generation 2024-07-25 02:27:33 +06:00
InsanusMokrassar d164813bb4 Revert "start moving to kotlinx-io"
This reverts commit 52157ee0e7.
2024-07-25 01:20:32 +06:00
InsanusMokrassar 52157ee0e7 start moving to kotlinx-io 2024-07-24 00:34:49 +06:00
InsanusMokrassar 877b62fe5d start 0.21.5 2024-07-24 00:06:18 +06:00
InsanusMokrassar d823a02971 Merge pull request #464 from InsanusMokrassar/0.21.4
add additional targets with natives support
2024-07-16 17:58:02 +06:00
InsanusMokrassar e950056e3b add additional targets with natives support 2024-07-16 17:18:26 +06:00
InsanusMokrassar 70014ba233 Merge pull request #463 from InsanusMokrassar/0.21.4
0.21.4
2024-07-16 14:23:41 +06:00
InsanusMokrassar 4425f24a20 add support of native platforms in common compose and coroutines compose 2024-07-16 14:16:08 +06:00
InsanusMokrassar 410964a44b start 0.21.4 2024-07-16 14:02:36 +06:00
InsanusMokrassar 30389e8536 Merge pull request #462 from InsanusMokrassar/0.21.3
0.21.3
2024-07-15 16:33:28 +06:00
InsanusMokrassar 5314833041 fix of #374 2024-07-15 08:43:23 +06:00
InsanusMokrassar 40f7cf7678 Color as a module 2024-07-15 08:13:23 +06:00
InsanusMokrassar 83a0b07062 start 0.21.3 2024-07-15 08:05:08 +06:00
InsanusMokrassar 1b4900d691 Merge pull request #461 from InsanusMokrassar/0.21.2
0.21.2
2024-06-30 22:56:52 +06:00
InsanusMokrassar f9795d53a0 improve classcasts 2024-06-30 22:55:28 +06:00
InsanusMokrassar 2b9bb4f141 add ClassCasts generator 2024-06-30 20:56:54 +06:00
InsanusMokrassar 9196e4c367 start 0.21.2 2024-06-30 20:40:12 +06:00
InsanusMokrassar 374a5a1a37 Merge pull request #460 from InsanusMokrassar/0.21.1
0.21.1
2024-06-25 22:11:26 +06:00
InsanusMokrassar 827cf32c1b modules initialization 2024-06-25 22:04:25 +06:00
InsanusMokrassar 98ad6dbeb2 start 0.21.1 2024-06-25 22:03:30 +06:00
InsanusMokrassar 63c8f642ec Merge pull request #451 from InsanusMokrassar/0.21.0
0.21.0
2024-06-20 01:53:51 +06:00
InsanusMokrassar 3bfe64f797 Update CHANGELOG.md 2024-06-20 01:53:42 +06:00
InsanusMokrassar ec98029467 get back old function to break less API 2024-06-19 20:03:14 +06:00
InsanusMokrassar ab58478686 Revert "fix of build"
This reverts commit 90247667d1.
2024-06-19 19:50:19 +06:00
InsanusMokrassar 90247667d1 fix of build 2024-06-19 19:50:00 +06:00
InsanusMokrassar e661185534 fill changelog 2024-06-19 19:36:02 +06:00
InsanusMokrassar d73e4e8e1f migrate onto 0.21.0 2024-06-19 19:30:16 +06:00
InsanusMokrassar a6905e73cb small improvements 2024-06-17 01:31:50 +06:00
InsanusMokrassar 93b054d55e add .kotlin in gitignore 2024-06-16 22:27:07 +06:00
InsanusMokrassar 5db4c5c717 improvements in coroutines launch safely 2024-06-15 17:37:26 +06:00
InsanusMokrassar 5e04521929 start 0.20.53 2024-06-15 17:32:15 +06:00
InsanusMokrassar 30440b4ed1 Merge pull request #457 from InsanusMokrassar/0.20.52
0.20.52
2024-06-14 23:57:26 +06:00
InsanusMokrassar 09bb90604d weaks rework 2024-06-14 17:09:04 +06:00
InsanusMokrassar 4d55ec6f36 add separated WeakScope 2024-06-14 16:58:40 +06:00
InsanusMokrassar f373524f34 a little improve of weak extensions and add tests for weak scopes 2024-06-14 16:53:56 +06:00
InsanusMokrassar 0398a7bebd start 0.20.52 2024-06-14 16:36:52 +06:00
InsanusMokrassar fa8a5bcd97 Merge pull request #453 from InsanusMokrassar/0.20.51
0.20.51
2024-05-26 23:53:46 +06:00
InsanusMokrassar 758a92410b more fixes to god of fixes in paginations 2024-05-26 23:51:46 +06:00
InsanusMokrassar 77f56c5dda make improvements in pagination 2024-05-26 23:35:24 +06:00
InsanusMokrassar 72f2fe3cc3 add "indices" cache in pagination with reversed functionality 2024-05-26 23:01:23 +06:00
InsanusMokrassar 7e0e520f03 add note about android fragment update 2024-05-26 23:00:11 +06:00
InsanusMokrassar 92c4784e42 paginations improvements 2024-05-26 22:59:19 +06:00
InsanusMokrassar a634229dc0 start 0.20.51 2024-05-26 19:46:53 +06:00
InsanusMokrassar de3f36ef2a Merge pull request #445 from InsanusMokrassar/0.20.50
0.20.50
2024-05-12 21:58:07 +06:00
InsanusMokrassar c623a265ee fill changelog and remove redundant parts in coroutines compose build.gradle 2024-05-12 21:51:20 +06:00
InsanusMokrassar e75125f6df now SmartMutex and SmartSemaphore (and SmartRWLocker as a result) works on SpecialMutableStateFlow 2024-05-12 21:44:33 +06:00
InsanusMokrassar 4901a8844c complete rework of states 2024-05-12 21:34:17 +06:00
InsanusMokrassar a1854b68d8 almost updated dependencies and modules hierarchy 2024-05-12 19:17:16 +06:00
InsanusMokrassar aee4a6243b start 0.20.50 2024-05-12 17:01:22 +06:00
InsanusMokrassar 4c0cb73d69 Merge pull request #438 from InsanusMokrassar/0.20.49
0.20.49
2024-05-04 23:04:10 +06:00
InsanusMokrassar c6eab182f6 new crud repo extensions on* 2024-05-02 18:20:12 +06:00
InsanusMokrassar 3e3fbd97eb diff/applyDiff 2024-05-02 17:18:43 +06:00
InsanusMokrassar feb695caa7 start 0.20.49 2024-05-02 15:08:53 +06:00
InsanusMokrassar 1bd46d9651 Merge pull request #437 from InsanusMokrassar/0.20.48
0.20.48
2024-05-02 14:09:47 +06:00
InsanusMokrassar 32eabb6b36 update dependencies 2024-05-02 14:06:46 +06:00
InsanusMokrassar 9bfe6dc6d8 start 0.20.48 2024-05-02 13:58:12 +06:00
InsanusMokrassar 3f366aeea4 Merge pull request #434 from InsanusMokrassar/0.20.47
0.20.47
2024-05-01 18:16:58 +06:00
InsanusMokrassar 4338fd46f2 update android gradle plugin 2024-05-01 18:14:28 +06:00
InsanusMokrassar 36974f5b49 update dependencies 2024-05-01 17:47:47 +06:00
InsanusMokrassar d48f767408 start 0.20.47 2024-05-01 17:47:02 +06:00
InsanusMokrassar bd2558e852 Merge pull request #430 from InsanusMokrassar/0.20.46
0.20.46
2024-04-27 15:41:22 +06:00
InsanusMokrassar 9f7c963cd5 add klock in common and DateTimeSerializer 2024-04-27 15:34:52 +06:00
InsanusMokrassar 2db0eadbfe start 0.20.46 2024-04-27 15:17:40 +06:00
InsanusMokrassar 580c7b8842 Merge pull request #429 from InsanusMokrassar/0.20.45
0.20.45
2024-04-22 11:34:25 +06:00
InsanusMokrassar 88fba347ea update android core ktx 2024-04-22 11:27:07 +06:00
InsanusMokrassar c8c5255e62 start 0.20.45 2024-04-22 11:25:02 +06:00
InsanusMokrassar 01a1a2760a Merge pull request #427 from InsanusMokrassar/0.20.44
0.20.44
2024-04-15 00:30:41 +06:00
InsanusMokrassar 6d34df8d48 update dependencies 2024-04-15 00:29:22 +06:00
InsanusMokrassar b124ea65e1 start 0.20.44 2024-04-15 00:19:11 +06:00
InsanusMokrassar f3214347a9 Merge pull request #424 from InsanusMokrassar/0.20.43
0.20.43
2024-04-08 22:13:09 +06:00
InsanusMokrassar 6b8724b59f update dependencies 2024-04-08 21:56:02 +06:00
InsanusMokrassar ac3e378edf start 0.20.43 2024-04-08 21:53:43 +06:00
InsanusMokrassar 5d31fd1c91 Merge pull request #420 from InsanusMokrassar/0.20.42
0.20.42
2024-04-05 15:09:27 +06:00
InsanusMokrassar 046fe1ec08 Update Processor.kt 2024-04-04 23:36:59 +06:00
InsanusMokrassar 721873c843 repos models generator improvements 2024-04-04 19:28:59 +06:00
InsanusMokrassar f6ffbfc10a start 0.20.42 2024-04-04 19:28:11 +06:00
InsanusMokrassar 4e91649e0a Merge pull request #419 from InsanusMokrassar/0.20.41
0.20.41
2024-04-01 19:02:13 +06:00
InsanusMokrassar 4f7f8abec4 improve exposed repos 2024-04-01 18:20:05 +06:00
InsanusMokrassar 6370562dbc start 0.20.41 2024-04-01 18:12:25 +06:00
InsanusMokrassar 94e2e67522 Merge pull request #418 from InsanusMokrassar/0.20.40
0.20.40
2024-03-31 12:49:35 +06:00
InsanusMokrassar 1d8330015d update changelog 2024-03-31 12:48:55 +06:00
InsanusMokrassar e5017b0258 update dependencies 2024-03-29 20:10:32 +06:00
InsanusMokrassar cd412ca31b start 0.20.40 2024-03-29 20:03:36 +06:00
InsanusMokrassar d2b6473095 Merge pull request #412 from InsanusMokrassar/0.20.39
0.20.39
2024-03-14 21:25:28 +06:00
InsanusMokrassar ab42507275 Update CHANGELOG.md 2024-03-14 21:05:23 +06:00
InsanusMokrassar dcef844e20 Update libs.versions.toml 2024-03-14 10:58:08 +06:00
InsanusMokrassar 3244708c1b Update gradle.properties 2024-03-14 10:44:57 +06:00
InsanusMokrassar 73ac1f1741 Merge pull request #405 from InsanusMokrassar/0.20.38
0.20.38
2024-03-06 02:05:30 +06:00
InsanusMokrassar f104e9f352 update ktor dependency 2024-03-06 01:51:48 +06:00
InsanusMokrassar 393c9a7d06 start 0.20.38 2024-03-06 01:50:34 +06:00
InsanusMokrassar ea497ea488 Merge pull request #404 from InsanusMokrassar/renovate/jb.dokka
Update dependency org.jetbrains.dokka:dokka-gradle-plugin to v1.9.20
2024-03-05 11:07:09 +06:00
renovate[bot] 5add89cad0 Update dependency org.jetbrains.dokka:dokka-gradle-plugin to v1.9.20 2024-03-04 15:11:31 +00:00
InsanusMokrassar 2db447d2ef Merge pull request #402 from InsanusMokrassar/0.20.37
0.20.37
2024-03-01 03:25:36 +06:00
InsanusMokrassar 31c83813e6 update dependencies 2024-03-01 03:15:25 +06:00
InsanusMokrassar 27483a282d start 0.20.37 2024-03-01 03:06:26 +06:00
InsanusMokrassar 48b816aa22 Merge pull request #396 from InsanusMokrassar/0.20.36
0.20.36
2024-02-26 17:10:05 +06:00
InsanusMokrassar 0065f94f52 update dependencies 2024-02-26 16:55:18 +06:00
InsanusMokrassar ccc0002eb2 improve of actualize all 2024-02-21 00:05:57 +06:00
InsanusMokrassar 15a2eee141 start 0.20.36 2024-02-20 22:52:02 +06:00
InsanusMokrassar b9faac71e5 Merge pull request #394 from InsanusMokrassar/0.20.35
0.20.35
2024-02-16 19:11:27 +06:00
InsanusMokrassar 0a4465de33 remove API dumps 2024-02-16 19:09:55 +06:00
InsanusMokrassar f9dfd09628 update dependencies 2024-02-16 19:01:46 +06:00
InsanusMokrassar 8638d7afce start 0.20.35 2024-02-16 18:50:35 +06:00
InsanusMokrassar 8311793a43 Merge pull request #392 from InsanusMokrassar/0.20.34
0.20.34
2024-02-15 16:32:41 +06:00
InsanusMokrassar 0d552cfcd2 fix build 2024-02-15 16:18:31 +06:00
InsanusMokrassar 4b0f20dbd1 improve default 'set' of KeyValuesRepo 2024-02-15 15:36:32 +06:00
InsanusMokrassar cf531c949d start 0.20.34 2024-02-15 15:14:38 +06:00
InsanusMokrassar ba5c5f17d5 Merge pull request #391 from InsanusMokrassar/0.20.33
0.20.33
2024-02-12 14:42:31 +06:00
InsanusMokrassar 35825ad9b7 improve HEXAColorTests 2024-02-12 14:41:55 +06:00
InsanusMokrassar b1eb26a89e fixes and testsAdditions in HEXAColor 2024-02-12 14:25:45 +06:00
InsanusMokrassar c9d04b6698 add ahex to color 2024-02-12 13:58:06 +06:00
InsanusMokrassar 496133e014 start 0.20.33 2024-02-12 13:32:30 +06:00
InsanusMokrassar f2857ee2be Merge pull request #388 from InsanusMokrassar/0.20.32
0.20.32
2024-02-10 17:14:04 +06:00
InsanusMokrassar 22541f2d5e Update CHANGELOG.md 2024-02-10 15:40:59 +06:00
InsanusMokrassar e235c52b6c Update libs.versions.toml 2024-02-10 15:39:48 +06:00
InsanusMokrassar e89b8c72dd Update gradle-wrapper.properties 2024-02-08 10:40:43 +06:00
InsanusMokrassar a374e53a3a update StringResource 2024-02-06 19:56:44 +06:00
InsanusMokrassar afb066c4ee start 0.20.32 2024-02-06 19:55:34 +06:00
InsanusMokrassar f05761d4a5 Merge pull request #386 from InsanusMokrassar/0.20.31
0.20.31
2024-01-31 18:10:53 +06:00
InsanusMokrassar 76adc9ea33 update ktor 2024-01-31 17:37:27 +06:00
InsanusMokrassar 99dd291413 start 0.20.31 2024-01-31 17:36:30 +06:00
InsanusMokrassar f904eb27e1 Merge pull request #384 from InsanusMokrassar/0.20.30
0.20.30
2024-01-31 17:27:17 +06:00
InsanusMokrassar eeb8214812 update exposed 2024-01-31 17:05:43 +06:00
InsanusMokrassar f7215b039e start 0.20.30 2024-01-31 17:04:38 +06:00
InsanusMokrassar c07fe5a0f9 Merge pull request #382 from InsanusMokrassar/0.20.29
0.20.29
2024-01-30 23:03:30 +06:00
InsanusMokrassar 0d28cb6e20 update dependencies 2024-01-30 21:18:49 +06:00
InsanusMokrassar a1a17bfd1f start 0.20.29 2024-01-30 20:21:45 +06:00
InsanusMokrassar f386f09592 Merge pull request #377 from InsanusMokrassar/0.20.28
0.20.28
2024-01-19 12:59:11 +06:00
InsanusMokrassar a47e17fe6e downgrade kotlin and compose 2024-01-18 23:19:17 +06:00
InsanusMokrassar 01dc3b63ff start 0.20.28 2024-01-18 23:12:36 +06:00
InsanusMokrassar 2d97e0699e Merge pull request #372 from InsanusMokrassar/0.20.27
0.20.27
2024-01-16 12:43:08 +06:00
InsanusMokrassar 75f514d99b update github release 2024-01-16 12:38:53 +06:00
InsanusMokrassar 9a687cfc1c update dependencies 2024-01-16 12:19:30 +06:00
InsanusMokrassar 14edf8b6b7 start 0.20.27 2024-01-16 12:13:07 +06:00
InsanusMokrassar 23aa2d8917 Merge pull request #371 from InsanusMokrassar/0.20.26
0.20.26
2024-01-11 23:29:05 +06:00
InsanusMokrassar 7651388b5c update exposed version 2024-01-11 23:09:17 +06:00
InsanusMokrassar 805ab32b24 improvements in resources 2024-01-11 23:01:10 +06:00
InsanusMokrassar cc623b1097 start 0.20.26 2024-01-11 23:00:14 +06:00
InsanusMokrassar 1420416b3e Merge pull request #369 from InsanusMokrassar/0.20.25
0.20.25
2024-01-04 20:34:15 +06:00
InsanusMokrassar 9a0b67f938 fix of tests 2024-01-04 20:30:09 +06:00
InsanusMokrassar 303e1e6281 add rgb and rgba representations of HEXAColor 2024-01-04 20:20:55 +06:00
InsanusMokrassar ff59b0cc9c add colors module 2024-01-04 19:53:43 +06:00
InsanusMokrassar be5d2ee715 start 0.20.25 2024-01-04 18:14:09 +06:00
InsanusMokrassar 8dd2e3f6f9 Merge pull request #366 from InsanusMokrassar/0.20.24
0.20.24
2024-01-04 10:26:00 +06:00
InsanusMokrassar 2eedd196d2 update changelog 2024-01-04 10:25:50 +06:00
InsanusMokrassar 759a3f2784 make it possible to use encoder inside of serialize callback 2024-01-04 10:24:39 +06:00
InsanusMokrassar 386fa830c3 update soywiz dependencies and downgrade ksp 2024-01-04 09:58:03 +06:00
InsanusMokrassar c382423d77 upgrade MapperSerializer 2023-12-31 13:44:50 +06:00
InsanusMokrassar bb466ce66c start 0.20.24 2023-12-31 13:38:57 +06:00
InsanusMokrassar 72cd3dd8a1 Merge pull request #365 from InsanusMokrassar/renovate/ksp
Update ksp to v1.9.22-1.0.16
2023-12-25 21:53:05 +06:00
renovate[bot] 595cedaaf1 Update ksp to v1.9.22-1.0.16 2023-12-25 10:15:44 +00:00
InsanusMokrassar eeaceb6cf5 Merge pull request #362 from InsanusMokrassar/0.20.23
0.20.23
2023-12-22 02:43:14 +06:00
InsanusMokrassar 1bd671685b update dependencies and remove redundant usages of old IetfLanguageCode 2023-12-21 23:25:36 +06:00
InsanusMokrassar 48d3fe41f2 a lot of improvements in language codes 2023-12-21 15:41:11 +06:00
InsanusMokrassar 7ab21871cd Revert "add klock module"
This reverts commit 65d01b1fb3.
2023-12-21 14:05:27 +06:00
InsanusMokrassar 65d01b1fb3 add klock module 2023-12-17 23:37:45 +06:00
InsanusMokrassar 6230accb68 start 0.20.23 2023-12-17 22:30:25 +06:00
InsanusMokrassar c6ed821934 Merge pull request #360 from InsanusMokrassar/0.20.22
0.20.22
2023-12-14 23:57:51 +06:00
InsanusMokrassar 10e03bb951 allow to create own Diff with constructor 2023-12-14 23:56:56 +06:00
InsanusMokrassar aa4f392948 start 0.20.22 2023-12-14 23:52:28 +06:00
InsanusMokrassar f51b59ec02 Update libs.versions.toml 2023-12-14 13:47:34 +06:00
InsanusMokrassar 8c76834ae4 Merge pull request #359 from InsanusMokrassar/0.20.21
0.20.21
2023-12-12 23:49:26 +06:00
InsanusMokrassar 4a454f3d67 add opportunity to use translation with default locale 2023-12-12 23:45:22 +06:00
InsanusMokrassar 151aa1863d update gradle wrapper 2023-12-12 21:41:53 +06:00
InsanusMokrassar 3bf6896296 get back translations with android and java resources packages 2023-12-12 21:41:09 +06:00
InsanusMokrassar 0d01561476 optimizations and improvements in resources 2023-12-12 21:39:58 +06:00
InsanusMokrassar f6ded92251 init resources module 2023-12-12 20:58:08 +06:00
InsanusMokrassar d01b735cc6 start 0.20.21 2023-12-12 20:21:37 +06:00
InsanusMokrassar 6c12001080 Merge pull request #358 from InsanusMokrassar/0.20.20
0.20.20
2023-12-12 00:12:34 +06:00
InsanusMokrassar 1afbf03606 improvements in AbstractExposedCRUDRepo 2023-12-12 00:01:58 +06:00
InsanusMokrassar f6ef5c61c5 start 0.20.20 2023-12-11 23:54:25 +06:00
InsanusMokrassar c18fee8107 update gradle publishing scripts
one more potential ix of publishing scripts

drop new configs of publish scripts

revert publish scripts and update gradle properties
2023-12-09 20:38:44 +06:00
InsanusMokrassar d9df7a4384 Revert gradle wrapper version 2023-12-09 01:38:45 +06:00
InsanusMokrassar 87c2230e8e revert xmx 2500 2023-12-08 23:42:26 +06:00
InsanusMokrassar da7eb6de0a change xmx 2023-12-08 21:34:05 +06:00
InsanusMokrassar ed3815118f update jvmargs of gradle 2023-12-08 19:34:47 +06:00
InsanusMokrassar be726f42bd Merge pull request #356 from InsanusMokrassar/0.20.19
update publishing scripts
2023-12-08 16:06:22 +06:00
InsanusMokrassar a91006132f update publishing scripts 2023-12-08 16:06:07 +06:00
InsanusMokrassar 9a9f741a0b Merge pull request #355 from InsanusMokrassar/0.20.19
0.20.19
2023-12-08 16:03:05 +06:00
InsanusMokrassar 5028f130e9 update dependencies 2023-12-08 15:58:16 +06:00
InsanusMokrassar 77fa019651 start 0.20.19 2023-12-08 15:56:44 +06:00
InsanusMokrassar 9715da9384 Merge pull request #353 from InsanusMokrassar/0.20.18
0.20.18
2023-12-04 16:13:33 +06:00
InsanusMokrassar f6d5035c1a small refactor in SpecialMutableStateFlow 2023-12-04 15:44:06 +06:00
InsanusMokrassar 43e782ab6f SpecialMutableStateFlow : MutableStateFlow 2023-12-04 15:37:02 +06:00
InsanusMokrassar f3f9920bfb deprecate FlowState 2023-12-04 15:08:52 +06:00
InsanusMokrassar 2bfd615812 start 0.20.18 2023-12-04 15:01:42 +06:00
InsanusMokrassar ebfacb3659 Merge pull request #352 from InsanusMokrassar/0.20.17
0.20.17
2023-12-01 02:51:00 +06:00
InsanusMokrassar c71d557eec update dependencies 2023-12-01 02:46:15 +06:00
InsanusMokrassar e0398cef21 start 0.10.17 2023-12-01 02:44:44 +06:00
InsanusMokrassar f91599e9c6 Merge pull request #348 from InsanusMokrassar/0.20.16
0.20.16
2023-11-30 01:54:31 +06:00
InsanusMokrassar f8f9f93c97 update changelog, rename SpecialMutableStateFlow file and update gradle wrapper 2023-11-30 01:54:04 +06:00
InsanusMokrassar a8a5340d8b kdocs 2023-11-30 01:27:14 +06:00
InsanusMokrassar 871b27f37d initialization fixes 2023-11-30 01:22:43 +06:00
InsanusMokrassar 6f174cae1d fixes 2023-11-30 01:05:01 +06:00
InsanusMokrassar 22d7ac3e22 FlowState 2023-11-29 23:54:27 +06:00
InsanusMokrassar 9b30c3a155 small matrix improvements 2023-11-29 20:33:06 +06:00
InsanusMokrassar 915bac64b1 small fixes in SpecialStateFlow 2023-11-29 20:26:23 +06:00
InsanusMokrassar 9d2b50e55d SpecialStateFlow 2023-11-29 17:13:21 +06:00
InsanusMokrassar bde100f63d start 0.20.16 2023-11-29 17:12:37 +06:00
InsanusMokrassar 05b035a13d Merge pull request #345 from InsanusMokrassar/0.20.15
0.20.15
2023-11-24 23:47:02 +06:00
InsanusMokrassar eefb56bed7 Update libs.versions.toml 2023-11-24 20:14:32 +06:00
InsanusMokrassar fcc0dc4189 update dependencies 2023-11-24 16:58:50 +06:00
InsanusMokrassar 47ff20317f start 0.20.15 2023-11-24 16:46:22 +06:00
InsanusMokrassar 1558b9103d Merge pull request #343 from InsanusMokrassar/0.20.14
0.20.14
2023-11-18 23:27:06 +06:00
InsanusMokrassar 7a78742162 update kslog 2023-11-18 18:11:07 +06:00
InsanusMokrassar c01e240f66 update dependencies 2023-11-18 15:40:12 +06:00
InsanusMokrassar fef4fcbac6 start 0.20.14 2023-11-18 15:37:19 +06:00
InsanusMokrassar 5ab18bce4b Merge pull request #335 from InsanusMokrassar/0.20.13
0.20.13
2023-11-11 16:37:11 +06:00
InsanusMokrassar 24aec7271a update dependencies and changelog 2023-11-11 16:30:59 +06:00
InsanusMokrassar 9b19a2cb95 Update libs.versions.toml 2023-11-10 04:29:38 +06:00
InsanusMokrassar efdd7b8a57 Update libs.versions.toml 2023-11-10 04:28:54 +06:00
InsanusMokrassar 6df4cc9c3b start 0.20.13 2023-11-06 21:12:28 +06:00
InsanusMokrassar b9d93db0f5 Merge pull request #334 from InsanusMokrassar/0.20.12
0.20.12
2023-11-02 19:16:56 +06:00
InsanusMokrassar d7ee45ca64 update github workflows 2023-11-02 19:01:00 +06:00
InsanusMokrassar d7c31b1b22 update and fix build 2023-11-02 19:00:35 +06:00
InsanusMokrassar 7d6794a358 start 0.20.12 2023-11-02 18:26:15 +06:00
InsanusMokrassar 473eb87346 Merge pull request #330 from InsanusMokrassar/0.20.11
0.20.11
2023-11-01 12:38:44 +06:00
InsanusMokrassar 8b18b07790 Update CHANGELOG.md 2023-11-01 12:37:30 +06:00
InsanusMokrassar ab3c80a5ec update dependencies 2023-10-31 17:53:56 +06:00
InsanusMokrassar 075b93ecd6 SmartRWLocker now will wait first unlock of write mutex for acquiring read 2023-10-26 12:28:24 +06:00
InsanusMokrassar f6d0f72e49 start 0.20.11 2023-10-26 12:28:04 +06:00
InsanusMokrassar fcda3af862 Merge pull request #329 from InsanusMokrassar/0.20.10
0.20.10
2023-10-26 10:51:45 +06:00
InsanusMokrassar d5c7a589b1 update dependencies 2023-10-26 10:48:36 +06:00
InsanusMokrassar 86e099ed25 start 0.20.10 2023-10-26 10:37:46 +06:00
InsanusMokrassar ebd7befe73 Merge pull request #324 from InsanusMokrassar/0.20.9
0.20.9
2023-10-24 16:25:05 +06:00
InsanusMokrassar b8c7e581a1 add support of linuxArm64 target 2023-10-20 21:53:27 +06:00
InsanusMokrassar 8281259179 start 0.20.9 2023-10-17 23:34:53 +06:00
InsanusMokrassar d3e06b07df Update libs.versions.toml 2023-10-14 22:53:02 +06:00
InsanusMokrassar 4967018418 Merge pull request #322 from InsanusMokrassar/0.20.8
0.20.8
2023-10-14 21:01:45 +06:00
InsanusMokrassar 537a3c38fa update dependencies 2023-10-14 16:22:00 +06:00
InsanusMokrassar 0124957833 start 0.20.8 2023-10-14 16:08:51 +06:00
InsanusMokrassar f0420e2d61 Merge pull request #312 from InsanusMokrassar/0.20.7
0.20.7
2023-10-09 18:16:58 +06:00
InsanusMokrassar 7090566041 fill changelog 2023-10-09 13:58:17 +06:00
InsanusMokrassar f0d5035cd0 update dependencies 2023-10-09 13:53:44 +06:00
InsanusMokrassar 0fb9b8dc30 update compose version 2023-09-27 17:59:09 +06:00
InsanusMokrassar eef6e81134 Update libs.versions.toml 2023-09-26 01:28:36 +06:00
InsanusMokrassar 1593159a3f Update libs.versions.toml 2023-09-26 01:27:20 +06:00
InsanusMokrassar 3da9eb9dbe temporal update 2023-09-22 14:14:23 +06:00
InsanusMokrassar f17613f3fb update dependencies 2023-09-12 14:11:12 +06:00
InsanusMokrassar 14337ccb46 start 0.20.7 2023-09-10 17:09:08 +06:00
InsanusMokrassar 1a3913b09c Merge pull request #311 from InsanusMokrassar/0.20.6
0.20.6
2023-09-08 04:20:58 +06:00
InsanusMokrassar 039aed2747 improvements in ExposedReadKeyValuesRepo 2023-09-08 02:59:53 +06:00
InsanusMokrassar 173991e3cb start 0.20.6 2023-09-08 02:55:25 +06:00
InsanusMokrassar 8b3f8cab01 Merge pull request #310 from InsanusMokrassar/0.20.5
0.20.5
2023-09-07 20:09:58 +06:00
InsanusMokrassar 2a20d24589 fixes in SmartRWLocker 2023-09-07 16:57:59 +06:00
InsanusMokrassar 53c2d552ec start 0.20.5 2023-09-07 16:57:08 +06:00
InsanusMokrassar af11c1a83d Merge pull request #307 from InsanusMokrassar/0.20.4
0.20.4
2023-09-06 19:17:17 +06:00
InsanusMokrassar a65cf1481c fixes in build 2023-09-06 19:15:09 +06:00
InsanusMokrassar 0318716236 update kslog version 2023-09-06 19:08:32 +06:00
InsanusMokrassar 88eb4b3342 update dependencies 2023-09-06 18:58:10 +06:00
InsanusMokrassar 4810d1ef6a start 0.20.4 2023-09-06 18:55:48 +06:00
InsanusMokrassar f2a9514d89 Merge pull request #306 from InsanusMokrassar/renovate/jb.dokka
Update dependency org.jetbrains.dokka:dokka-gradle-plugin to v1.9.0
2023-09-02 04:15:10 +06:00
InsanusMokrassar 925ba6ac24 Update build.gradle 2023-09-02 04:04:04 +06:00
renovate[bot] ef407268a2 Update dependency org.jetbrains.dokka:dokka-gradle-plugin to v1.9.0 2023-09-01 21:04:25 +00:00
InsanusMokrassar cd6c4bbe38 Merge pull request #304 from InsanusMokrassar/0.20.3
0.20.3
2023-09-02 03:03:57 +06:00
InsanusMokrassar c058e18408 update smart rw locker tests 2023-09-01 20:11:04 +06:00
InsanusMokrassar 6d3ca565ca update ktor 2023-09-01 19:41:49 +06:00
InsanusMokrassar 236a7b4fd2 Update libs.versions.toml 2023-09-01 04:33:36 +06:00
InsanusMokrassar e1f387dbf7 update dependencies and make a lot of fixes in repos and smart lockers/semaphors 2023-08-31 01:37:35 +06:00
InsanusMokrassar 3d113dd31e fixes in locks of caches repos 2023-08-29 15:06:55 +06:00
InsanusMokrassar e0e57f0336 start 0.20.3 2023-08-29 14:59:57 +06:00
InsanusMokrassar e775b58d41 Merge pull request #298 from InsanusMokrassar/0.20.2
0.20.2
2023-08-24 20:10:06 +06:00
InsanusMokrassar 5b070a8478 add small kdoc for map repos 2023-08-24 17:15:29 +06:00
InsanusMokrassar 8a61193500 update korlibs 2023-08-24 14:29:15 +06:00
InsanusMokrassar fad522b8fe Update CHANGELOG.md 2023-08-24 03:00:08 +06:00
InsanusMokrassar 0acac205af fix build 2023-08-24 02:17:27 +06:00
InsanusMokrassar 069d4c61b7 update android target 2023-08-23 14:52:09 +06:00
InsanusMokrassar 7c113f5700 Update libs.versions.toml 2023-08-23 13:27:23 +06:00
InsanusMokrassar dfdaf4225b start 0.20.2 and all main repos uses 'SmartRWLocker' 2023-08-23 03:26:54 +06:00
InsanusMokrassar bd39ab2467 Merge pull request #295 from InsanusMokrassar/0.20.1
0.20.1
2023-08-12 22:47:03 +06:00
InsanusMokrassar 6ce1eb3f2d add tests for smartrwlocker 2023-08-12 22:37:35 +06:00
InsanusMokrassar ce7d4fe9a2 fix of #293 2023-08-12 22:08:12 +06:00
InsanusMokrassar a65bb2f419 add number picker, set picker and small text field 2023-08-11 01:51:40 +06:00
InsanusMokrassar cbc868448b start 0.20.1 2023-08-11 00:58:09 +06:00
InsanusMokrassar 9c336a0b56 Update CHANGELOG.md 2023-08-09 02:43:53 +06:00
InsanusMokrassar 0f0d09399e Update CHANGELOG.md 2023-08-09 02:42:28 +06:00
InsanusMokrassar e13a1162a9 Merge pull request #294 from InsanusMokrassar/0.20.0
0.20.0
2023-08-09 00:32:03 +06:00
InsanusMokrassar 57ebed903f done migration 2023-08-08 18:45:36 +06:00
InsanusMokrassar 4478193d8a update dependencies 2023-08-05 13:49:45 +06:00
InsanusMokrassar ee948395e3 start 0.20.0 2023-08-02 13:03:40 +06:00
InsanusMokrassar 0616b051ae Merge pull request #291 from InsanusMokrassar/0.19.9
0.19.9
2023-07-29 17:37:38 +06:00
InsanusMokrassar 4d155d0505 update koin 2023-07-29 16:37:25 +06:00
InsanusMokrassar a169e733d9 fill changelog 2023-07-29 16:31:50 +06:00
InsanusMokrassar f081e237c8 improvements in startup plugin 2023-07-29 16:30:17 +06:00
InsanusMokrassar f412d387fa start 0.19.9 2023-07-29 16:05:24 +06:00
InsanusMokrassar 67354b43e2 Merge pull request #287 from InsanusMokrassar/0.19.8
0.19.8
2023-07-27 01:33:49 +06:00
InsanusMokrassar 39135a4000 skipStartInvalidate 2023-07-27 00:35:01 +06:00
InsanusMokrassar eaa014cebd update dependencies 2023-07-27 00:30:26 +06:00
InsanusMokrassar 856e657f81 fixes in KeyValueRepo.clear 2023-07-23 13:47:20 +06:00
InsanusMokrassar 3a609e5b66 start 0.19.8 2023-07-23 13:26:39 +06:00
InsanusMokrassar d0022dd599 Merge pull request #281 from InsanusMokrassar/0.19.7
0.19.7
2023-06-30 14:37:36 +06:00
InsanusMokrassar 7ba6eed453 Update CHANGELOG.md 2023-06-30 12:04:42 +06:00
InsanusMokrassar beeb6ecc0a Update CHANGELOG.md 2023-06-30 12:03:17 +06:00
InsanusMokrassar 7cdc17a714 Update libs.versions.toml 2023-06-30 12:02:20 +06:00
InsanusMokrassar 4765a950a9 start 0.19.7 2023-06-30 12:01:21 +06:00
InsanusMokrassar 65e8137e08 Merge pull request #279 from InsanusMokrassar/0.19.6
0.19.6
2023-06-29 20:27:19 +06:00
InsanusMokrassar ae546dd9ad update dependencies 2023-06-29 18:38:58 +06:00
InsanusMokrassar 8110c42be0 update compose 2023-06-27 16:53:10 +06:00
InsanusMokrassar bd2b5ae5fc add versions plugin 2023-06-27 16:46:45 +06:00
InsanusMokrassar 2ddfffa6a9 start 0.19.6 2023-06-27 16:46:45 +06:00
InsanusMokrassar a4b54e861d Merge pull request #277 from InsanusMokrassar/0.19.5
0.19.5
2023-06-20 20:22:33 +06:00
InsanusMokrassar c6785f1a4f fixes in types generation 2023-06-20 20:20:47 +06:00
InsanusMokrassar 83fe621c56 start 0.19.5 2023-06-20 20:16:24 +06:00
InsanusMokrassar b3a93e17eb Merge pull request #275 from InsanusMokrassar/0.19.4
0.19.4
2023-06-19 16:25:43 +06:00
InsanusMokrassar 546a391af3 dependencies update 2023-06-19 16:19:14 +06:00
InsanusMokrassar 786cf9bd8b fix in koin generator 2023-06-19 13:52:41 +06:00
InsanusMokrassar dfd6fe062d start 0.19.4 2023-06-19 13:45:29 +06:00
InsanusMokrassar b6ef818613 Merge pull request #274 from InsanusMokrassar/0.19.3
0.19.3
2023-06-19 08:45:45 +06:00
InsanusMokrassar b0f9e9c30a generic-oriented koin definitions 2023-06-19 00:32:45 +06:00
InsanusMokrassar 7e5c88ddc3 koin generator improvements 2023-06-18 23:38:36 +06:00
InsanusMokrassar 9824c3e00f start 0.19.3 2023-06-18 23:11:50 +06:00
InsanusMokrassar 9171d5ed11 update dokka version and return js kdocs 2023-06-09 12:01:11 +06:00
InsanusMokrassar a1830ebb82 Merge pull request #269 from InsanusMokrassar/0.19.2
0.19.2
2023-06-02 13:02:38 +06:00
InsanusMokrassar 22d2a3d9bf Update CHANGELOG.md 2023-06-02 12:47:45 +06:00
InsanusMokrassar c9b97fc965 Update libs.versions.toml 2023-06-02 12:46:56 +06:00
InsanusMokrassar 51f85becd5 Merge pull request #267 from InsanusMokrassar/0.19.2
0.19.2
2023-06-02 12:39:27 +06:00
InsanusMokrassar a8a281cfb4 downgrade kotlin-poet version 2023-06-02 12:19:02 +06:00
InsanusMokrassar ddd1304949 update dependencies 2023-06-02 12:17:21 +06:00
InsanusMokrassar 86d70b6c02 start 0.19.2 2023-06-02 12:11:49 +06:00
InsanusMokrassar a22bdb39e7 Merge pull request #261 from InsanusMokrassar/0.19.1
update kotlin poet (0.19.1)
2023-05-29 17:35:29 +06:00
InsanusMokrassar 7ae4d5ef95 update kotlin poet 2023-05-29 17:31:40 +06:00
InsanusMokrassar a2038cbefa Merge pull request #259 from InsanusMokrassar/0.19.1
0.19.1
2023-05-29 17:28:19 +06:00
InsanusMokrassar 992091eade Update CHANGELOG.md 2023-05-29 17:27:57 +06:00
InsanusMokrassar e3bfead0c5 Update libs.versions.toml 2023-05-29 10:15:19 +06:00
InsanusMokrassar 0de96141fd start 0.19.1 2023-05-29 10:14:35 +06:00
InsanusMokrassar fa18d15c3c Merge pull request #257 from InsanusMokrassar/0.19.0
0.19.0
2023-05-26 20:17:30 +06:00
InsanusMokrassar ea9dbf2371 Koin.get and Scope.get with opportunity to get dependency by its type and definition 2023-05-25 21:12:21 +06:00
InsanusMokrassar d34e3ec7a9 update dependencies 2023-05-25 21:08:12 +06:00
InsanusMokrassar c8833a36af start 0.19.0 2023-05-25 20:58:05 +06:00
InsanusMokrassar a067cb0c0f Merge pull request #256 from InsanusMokrassar/0.18.4
0.18.4
2023-05-14 16:51:57 +06:00
InsanusMokrassar 999c8327bd lazyInject 2023-05-14 16:36:24 +06:00
InsanusMokrassar c2ec73c70a start 0.18.4 2023-05-14 16:28:03 +06:00
InsanusMokrassar 702f782fc1 Merge pull request #254 from InsanusMokrassar/0.18.3
0.18.3
2023-05-12 14:30:37 +06:00
InsanusMokrassar 25dbcaaf83 update dependencies 2023-05-12 00:51:38 +06:00
InsanusMokrassar b00d454a24 start 0.18.3 2023-05-12 00:26:16 +06:00
InsanusMokrassar dbc921d56d Merge pull request #250 from InsanusMokrassar/0.18.2
0.18.2
2023-05-10 10:19:47 +06:00
InsanusMokrassar 438fefa7a3 fixes 2023-05-09 15:09:50 +06:00
InsanusMokrassar 5d74eac814 Update libs.versions.toml 2023-05-09 01:41:25 +06:00
InsanusMokrassar 9fb62e1e25 start 0.18.2 and make json of Startup customizable 2023-05-09 01:38:04 +06:00
InsanusMokrassar 3e366ea73b Update libs.versions.toml 2023-05-06 01:54:15 +06:00
InsanusMokrassar 0ff895bffa Update gradle.properties 2023-05-06 01:53:33 +06:00
InsanusMokrassar c5bb120280 Merge pull request #248 from InsanusMokrassar/0.18.1
0.18.1
2023-05-05 22:26:53 +06:00
InsanusMokrassar 4b26a92b37 improve old diff API 2023-05-05 12:01:29 +06:00
InsanusMokrassar 0a8453b4d2 add MapDiff#reversed and MutableMap#applyDiff(MapDiff) 2023-05-05 11:58:27 +06:00
InsanusMokrassar c9872a61b6 now applyDiff will return its receiver 2023-05-05 11:50:23 +06:00
InsanusMokrassar 149a1aa278 fix in new applyDiff 2023-05-05 11:33:22 +06:00
InsanusMokrassar 13d0e1b682 add MapDiff utils 2023-05-04 21:12:26 +06:00
InsanusMokrassar 6f9be2a9f8 start 0.18.1 and add SmartMutex 2023-05-03 23:47:05 +06:00
InsanusMokrassar 93ba98d993 Merge pull request #246 from InsanusMokrassar/revert-245-renovate/ksp
Revert "Update ksp to v1.8.21-1.0.11"
2023-04-28 00:34:20 +06:00
root 940ee3df06 Revert "Update ksp to v1.8.21-1.0.11" 2023-04-28 00:34:10 +06:00
InsanusMokrassar 2e7bab10fd Merge pull request #245 from InsanusMokrassar/renovate/ksp
Update ksp to v1.8.21-1.0.11
2023-04-28 00:14:25 +06:00
renovate[bot] 3ed70a37ea Update ksp to v1.8.21-1.0.11 2023-04-27 18:10:41 +00:00
InsanusMokrassar fe8f80b9d9 Merge pull request #243 from InsanusMokrassar/0.18.0
0.18.0
2023-04-27 17:08:42 +06:00
InsanusMokrassar d81fb32fb9 remove previous deprecations 2023-04-27 16:29:08 +06:00
InsanusMokrassar 2877b5532c Revert "Get back some functional of "trying to update up to gradle wrapper 8.1.1""
This reverts commit b938b21395.
2023-04-27 16:24:58 +06:00
InsanusMokrassar b938b21395 Get back some functional of "trying to update up to gradle wrapper 8.1.1" 2023-04-27 16:24:37 +06:00
InsanusMokrassar 58836359cc Revert "trying to update up to gradle wrapper 8.1.1"
This reverts commit 5edb0e1331.
2023-04-27 15:00:43 +06:00
InsanusMokrassar 5edb0e1331 trying to update up to gradle wrapper 8.1.1 2023-04-27 14:15:45 +06:00
InsanusMokrassar 0f0d0b5d58 update android fragments dependency 2023-04-27 12:16:48 +06:00
InsanusMokrassar 46c1887cbe remove usage of cache updates flows in autorecached repos 2023-04-27 12:06:50 +06:00
InsanusMokrassar 5f231c2212 ReadKeyValuesRepo#removeWithValue 2023-04-25 19:32:43 +06:00
InsanusMokrassar 4e97ce86aa add defauult value to kvCache in fullyCached 2023-04-25 17:39:14 +06:00
InsanusMokrassar 315a7cb29e Rename full caching factories functions to fullyCached 2023-04-25 17:23:47 +06:00
InsanusMokrassar aa7cc503f2 improvements in query parameters getting 2023-04-25 13:14:12 +06:00
InsanusMokrassar 4bbe7e5a80 update build tools version 2023-04-25 12:23:53 +06:00
InsanusMokrassar d9c05f38d2 start 0.18.0 2023-04-25 12:23:08 +06:00
InsanusMokrassar cd0c4c9650 Merge pull request #237 from InsanusMokrassar/renovate/android-gradle
Update dependency com.android.tools.build:gradle to v7.4.2
2023-04-25 00:38:47 +06:00
InsanusMokrassar fc3407f104 Merge pull request #241 from InsanusMokrassar/0.17.8
0.17.8
2023-04-19 20:16:36 +06:00
InsanusMokrassar 3a5544206b update ktor 2023-04-19 19:46:39 +06:00
InsanusMokrassar e17e2f7fb8 start 0.17.8 2023-04-19 19:45:58 +06:00
renovate[bot] d32c95f143 Update dependency com.android.tools.build:gradle to v7.4.2 2023-04-18 18:12:52 +00:00
InsanusMokrassar 6d8a8ab018 Merge pull request #233 from InsanusMokrassar/0.17.7
0.17.7
2023-04-18 19:37:06 +06:00
InsanusMokrassar a7dce8fa78 update dependencies 2023-04-18 19:24:05 +06:00
InsanusMokrassar ca73ff8e19 add support of native in startup 2023-04-18 19:20:39 +06:00
InsanusMokrassar d01ad10d7d start 0.17.7 2023-04-18 19:20:39 +06:00
InsanusMokrassar 81041ee43c Merge pull request #232 from InsanusMokrassar/renovate/configure
Configure Renovate
2023-04-18 19:20:15 +06:00
renovate[bot] 6e004c2ae4 Add renovate.json 2023-04-18 08:23:10 +00:00
InsanusMokrassar 0e2fac5b22 Merge pull request #231 from InsanusMokrassar/0.17.6
0.17.6
2023-04-13 11:27:18 +06:00
InsanusMokrassar 269da7f155 update dependencies and fill changelog 2023-04-13 11:20:34 +06:00
InsanusMokrassar 3cb6b73ee0 add preloadImage 2023-04-07 01:17:04 +06:00
InsanusMokrassar a938ee1efb simplify API of MPPFile.input 2023-04-04 01:26:18 +06:00
InsanusMokrassar 6ea5e2e5a6 update version 2023-04-03 22:54:57 +06:00
InsanusMokrassar 617dfb54e0 experimentally add linuxx64 and mingwx64 as target platforms 2023-04-03 22:35:41 +06:00
InsanusMokrassar d23e005985 preview of files realization 2023-04-03 15:49:46 +06:00
InsanusMokrassar e5207f5bc5 Revert "Revert "trying to add native support""
This reverts commit c96cea8db0.
2023-04-03 10:26:03 +06:00
InsanusMokrassar c96cea8db0 Revert "trying to add native support"
This reverts commit 0a8e71d76a.
2023-04-03 10:22:53 +06:00
InsanusMokrassar 0a8e71d76a trying to add native support 2023-04-03 10:22:43 +06:00
InsanusMokrassar cf1fd32b08 Merge pull request #230 from InsanusMokrassar/0.17.5
0.17.5
2023-03-10 22:30:32 +06:00
InsanusMokrassar cc4224ea1f update kv and crud tests 2023-03-10 22:08:35 +06:00
InsanusMokrassar f4c148bc58 add map type info in ktor read kv and crud repos 2023-03-10 21:41:01 +06:00
InsanusMokrassar 022297ad3f fixes in AutoRecacheReadKeyValueRepo 2023-03-10 19:37:36 +06:00
InsanusMokrassar 5180d6fc3e hotfixes 2023-03-10 18:43:43 +06:00
InsanusMokrassar eeebbff70d getAll 2023-03-10 18:37:48 +06:00
InsanusMokrassar afc6aeea15 fixes 2023-03-10 16:14:51 +06:00
InsanusMokrassar 486515eddd update dokka 2023-03-10 16:09:33 +06:00
InsanusMokrassar 0e21699cd1 several updates 2023-03-10 15:45:02 +06:00
InsanusMokrassar f1678ef7cf start 0.17.5 2023-03-10 15:36:36 +06:00
InsanusMokrassar cea65fc76e Merge pull request #229 from InsanusMokrassar/0.17.4
0.17.4
2023-03-09 23:23:55 +06:00
InsanusMokrassar c9e320b72a update compose version 2023-03-09 23:22:33 +06:00
InsanusMokrassar 555956087d add android manifest to mapper module 2023-03-09 22:23:56 +06:00
InsanusMokrassar b3f468f901 add docs to mapper serialization and allow to use them as supertypes 2023-03-09 22:21:22 +06:00
InsanusMokrassar f5f7511781 add mapper serializer 2023-03-09 21:55:07 +06:00
InsanusMokrassar 4be1d93f60 start 0.17.4 2023-03-09 21:49:15 +06:00
InsanusMokrassar 7d684608ef Merge pull request #228 from InsanusMokrassar/0.17.3
0.17.3
2023-03-07 23:30:23 +06:00
InsanusMokrassar 2c7fd320eb fixed 2023-03-07 22:28:56 +06:00
InsanusMokrassar 88ee82e1c6 add Diff#isEmpty 2023-03-07 21:50:23 +06:00
InsanusMokrassar d6402c624e optimization of nonstrict comparison 2023-03-07 19:14:43 +06:00
InsanusMokrassar 8b9c93bc10 diffs improvement 2023-03-07 19:12:12 +06:00
InsanusMokrassar 4f5e261d01 start 0.17.3 2023-03-07 18:59:34 +06:00
InsanusMokrassar cf455aebe6 Merge pull request #227 from InsanusMokrassar/0.17.2
0.17.2
2023-03-02 21:57:49 +06:00
InsanusMokrassar 1380d5f8e1 fill changelog 2023-03-02 21:38:20 +06:00
InsanusMokrassar 5f65260bfe Update DefaultStatesManager.kt 2023-03-02 21:35:59 +06:00
InsanusMokrassar 11f0dcfc01 Update DefaultStatesManager.kt 2023-03-02 21:32:58 +06:00
InsanusMokrassar 555b7886a4 Update gradle.properties 2023-03-02 21:28:50 +06:00
InsanusMokrassar 3707a6c0ce Merge pull request #226 from InsanusMokrassar/0.17.1
0.17.1
2023-02-28 19:36:08 +06:00
InsanusMokrassar 4c8d92b4c3 update ktor 2023-02-28 19:32:32 +06:00
InsanusMokrassar 8bbd33c896 now all android modules depends on jvm 2023-02-28 19:08:39 +06:00
InsanusMokrassar ac33a3580f start 0.17.1 2023-02-28 19:04:04 +06:00
InsanusMokrassar a64a32fbe6 Merge pull request #225 from InsanusMokrassar/0.17.0
0.17.0
2023-02-28 12:15:41 +06:00
InsanusMokrassar 9493e97a38 remove redundant part from defaultAndroidSettings.gradle 2023-02-27 22:46:08 +06:00
InsanusMokrassar 88bd770260 fill dependencies updates changelog 2023-02-27 22:45:35 +06:00
InsanusMokrassar a7bd33b7bf update kotlin and ksp versions 2023-02-27 17:53:37 +06:00
InsanusMokrassar 73c724a2e5 small cleanup in build scripts 2023-02-27 17:03:09 +06:00
InsanusMokrassar d8cf3c6726 update dependencies and at least it is buildable 2023-02-27 16:56:39 +06:00
InsanusMokrassar 15dee238b5 start 0.17.0 2023-02-27 15:54:37 +06:00
InsanusMokrassar c70626734e Merge pull request #224 from InsanusMokrassar/0.16.13
0.16.13
2023-02-27 15:51:20 +06:00
InsanusMokrassar 5a765ea1bc get back publishing signing 2023-02-27 15:43:52 +06:00
InsanusMokrassar 8215f9d2c6 temporal solution of generating problem 2023-02-26 14:37:41 +06:00
InsanusMokrassar d2e6d2ec80 generators for models has been created 2023-02-25 19:56:12 +06:00
InsanusMokrassar 3718181e8f start 0.16.13 2023-02-25 18:44:07 +06:00
InsanusMokrassar 0d825cf424 Merge pull request #223 from InsanusMokrassar/0.16.12
0.16.12
2023-02-22 10:30:45 +06:00
InsanusMokrassar 28a804d988 improve start launcher plugin logs 2023-02-22 10:28:25 +06:00
InsanusMokrassar 9e4bb9d678 add readme to generator and add several fixes in processor 2023-02-22 10:20:15 +06:00
InsanusMokrassar 9c40d7da3d add generator for koin definitions 2023-02-22 01:34:42 +06:00
InsanusMokrassar 2b76ad0aa9 improvements in selectByIds of CommonExposedRepo 2023-02-20 11:55:14 +06:00
InsanusMokrassar e4b619e050 start 0.16.12 2023-02-20 11:54:26 +06:00
InsanusMokrassar 36c09feaf2 Merge pull request #222 from InsanusMokrassar/0.16.11
0.16.11
2023-02-20 00:49:12 +06:00
InsanusMokrassar 2d68321503 Update build.gradle 2023-02-20 00:19:27 +06:00
InsanusMokrassar 85455ab21c improvements in language codes 2023-02-19 19:34:42 +06:00
InsanusMokrassar 18d63eb980 start 0.16.11 2023-02-19 19:20:03 +06:00
InsanusMokrassar 2e429e9704 Merge pull request #221 from InsanusMokrassar/0.16.10
0.16.10
2023-02-17 13:54:09 +06:00
InsanusMokrassar f4af28059b improvements in ReadKeyValueFromCRUDRepo 2023-02-17 13:45:22 +06:00
InsanusMokrassar c1476bd075 add ReadCRUDFromKeyValueRepo 2023-02-15 20:16:54 +06:00
InsanusMokrassar 16c720fddd start 0.16.10 2023-02-15 20:14:55 +06:00
InsanusMokrassar 8b4b4a5eca Merge pull request #220 from InsanusMokrassar/0.16.9
0.16.9
2023-02-13 16:09:55 +06:00
InsanusMokrassar 32e6e5b7e2 Update CHANGELOG.md 2023-02-13 16:09:44 +06:00
InsanusMokrassar a9f7fd8e32 new extension HttpResponse.bodyOrNullOnNoContent 2023-02-10 15:17:08 +06:00
InsanusMokrassar 95be1a26f2 improvements in HttpResponse.bodyOrNull 2023-02-10 15:14:03 +06:00
InsanusMokrassar ef9b31aee0 start 0.16.9 2023-02-05 18:17:20 +06:00
InsanusMokrassar df3c01ff0a Merge pull request #219 from InsanusMokrassar/0.16.8
0.16.8
2023-02-04 01:46:43 +06:00
InsanusMokrassar 4704c5a33d Update CHANGELOG.md 2023-02-04 01:39:49 +06:00
InsanusMokrassar 225c06550a fixes in FileKeyValueRepo 2023-02-03 10:23:52 +06:00
InsanusMokrassar f0987614c6 fixes in FileKeyValueRepo 2023-02-03 10:07:24 +06:00
InsanusMokrassar 269c2876f3 actualize all make it possible to disable clear on actualization 2023-02-02 20:07:31 +06:00
InsanusMokrassar 168d6acf7c actualizeAll now is overridable in auto recache repos 2023-02-02 20:05:25 +06:00
InsanusMokrassar a5f718e257 add meppers for kv<->kvs repos 2023-02-02 12:29:00 +06:00
InsanusMokrassar 4f68459582 start add kv to kvs transformations 2023-02-02 10:15:37 +06:00
InsanusMokrassar 442db122cf remove redundant id getter in keyvalues autocached repo 2023-02-01 23:02:06 +06:00
InsanusMokrassar 580d757be2 fixes in download file and upgrade ktor version 2023-02-01 22:28:17 +06:00
InsanusMokrassar 47b0f6d2d8 fixes 2023-02-01 13:03:51 +06:00
InsanusMokrassar 3f6f6ebc2b realize invalidate method in fallback cache repos 2023-01-31 10:09:55 +06:00
InsanusMokrassar 2645ea29d6 Update ActionWrapper.kt 2023-01-31 00:11:45 +06:00
InsanusMokrassar 79f2041565 Update AutoRecacheReadCRUDRepo.kt 2023-01-30 23:59:48 +06:00
InsanusMokrassar 4a7567f288 Update AutoRecacheWriteCRUDRepo.kt 2023-01-30 23:59:19 +06:00
InsanusMokrassar 8a890ed6ed Update AutoRecacheReadKeyValueRepo.kt 2023-01-30 23:58:43 +06:00
InsanusMokrassar 3d90df6897 Update AutoRecacheWriteKeyValueRepo.kt 2023-01-30 23:58:11 +06:00
InsanusMokrassar 681c13144a Update AutoRecacheReadKeyValuesRepo.kt 2023-01-30 23:57:40 +06:00
InsanusMokrassar b64f2e6d32 Update AutoRecacheWriteKeyValuesRepo.kt 2023-01-30 23:56:57 +06:00
InsanusMokrassar 428eabb1bd Create FallbackCacheRepo.kt 2023-01-30 23:54:32 +06:00
InsanusMokrassar 2162e83bce fixes in actualizeAll 2023-01-29 22:51:39 +06:00
InsanusMokrassar 6142022283 improve actualizeAll to lazily clear repo 2023-01-29 22:46:32 +06:00
InsanusMokrassar e6d9c8250f add all autorecaches repos 2023-01-29 22:18:22 +06:00
InsanusMokrassar 46178e723b fixes 2023-01-29 20:54:32 +06:00
InsanusMokrassar 605f55acd2 fixes in Write* cache repos 2023-01-29 20:35:10 +06:00
InsanusMokrassar 0f8b69aa60 start 0.16.8 2023-01-29 20:35:10 +06:00
InsanusMokrassar 551d8ec480 Merge pull request #218 from InsanusMokrassar/0.16.7
0.16.7
2023-01-29 13:20:16 +06:00
InsanusMokrassar fc48446ec4 temporarily remove fallback repo 2023-01-29 13:15:56 +06:00
InsanusMokrassar 3644b83ac6 fill changelog 2023-01-29 13:08:41 +06:00
InsanusMokrassar cd73791b6f add docs to the MutableState.asState 2023-01-29 12:46:27 +06:00
InsanusMokrassar 03de71df2e add docs to as compose state 2023-01-29 12:43:51 +06:00
InsanusMokrassar 83d5d3faf4 improve flow as state functionality 2023-01-29 12:28:22 +06:00
InsanusMokrassar 0c8bec4c89 add extension actualizeAll 2023-01-27 15:15:27 +06:00
InsanusMokrassar 7fc93817c1 start to add fallback repos 2023-01-27 14:45:31 +06:00
InsanusMokrassar d0a00031a1 Update CHANGELOG.md 2023-01-26 22:54:17 +06:00
InsanusMokrassar 6ebc5aa0c2 potential fix of state value change in asMutableComposeState 2023-01-23 15:21:47 +06:00
InsanusMokrassar 8a6b4bb49e add alsoIfTrue/alsoIfFalse/letIfTrue/letIfFalse 2023-01-22 23:01:06 +06:00
InsanusMokrassar 20799b9a3e add repeat on failure with callback 2023-01-22 22:43:26 +06:00
InsanusMokrassar ec3afc615c add serializable diff 2023-01-20 13:29:45 +06:00
InsanusMokrassar da692ccfc3 add ifTrue/ifFalse 2023-01-19 20:21:35 +06:00
InsanusMokrassar 53b89f3a18 start 0.16.7 2023-01-19 20:19:21 +06:00
InsanusMokrassar 58cded28d3 Merge pull request #217 from InsanusMokrassar/0.16.6
0.16.6
2023-01-18 22:28:44 +06:00
InsanusMokrassar 592c5f3732 Column extensions eqOrIsNull and neqOrIsNotNull 2023-01-14 20:17:57 +06:00
InsanusMokrassar f44a78a5f5 small improvement of openBaseWebSocketFlow 2023-01-14 15:20:52 +06:00
InsanusMokrassar e0bdd5dfdc improvements in microutils 2023-01-14 13:22:07 +06:00
InsanusMokrassar 99c0f06b72 repos update 2023-01-14 13:15:59 +06:00
InsanusMokrassar 66fc6df3d7 Improvements in 'StartLauncherPlugin#start' methods 2023-01-08 13:52:53 +06:00
InsanusMokrassar a36425a905 start 0.16.6 2023-01-08 13:51:34 +06:00
InsanusMokrassar d920fee6d4 Merge pull request #216 from InsanusMokrassar/0.16.5
0.16.5
2023-01-04 20:21:15 +06:00
InsanusMokrassar 23590be5de Update CHANGELOG.md 2023-01-04 20:20:25 +06:00
InsanusMokrassar 94acc3c93b Update libs.versions.toml 2023-01-04 08:56:46 +06:00
InsanusMokrassar 5616326a3b start 0.16.5 2023-01-04 08:50:19 +06:00
InsanusMokrassar 7601860c5c Merge pull request #214 from InsanusMokrassar/0.16.4
0.16.4
2022-12-27 19:03:35 +06:00
InsanusMokrassar 8b43d785cc update changelog 2022-12-27 18:51:01 +06:00
InsanusMokrassar b62d3a0b7d launchInCurrentThread 2022-12-27 18:50:41 +06:00
InsanusMokrassar fad73c7213 start 0.16.4 2022-12-27 18:49:04 +06:00
InsanusMokrassar 2403c7c2b0 Merge pull request #213 from InsanusMokrassar/0.16.3
0.16.3
2022-12-25 13:24:37 +06:00
InsanusMokrassar fa090bf920 Update StartLauncherPlugin.kt 2022-12-25 10:29:16 +06:00
InsanusMokrassar a83ee86340 improvements in startup launcher 2022-12-25 10:26:44 +06:00
InsanusMokrassar 204955bcce add template for startup and readme 2022-12-19 17:51:05 +06:00
InsanusMokrassar ee56e9543a start 0.16.3 2022-12-17 17:27:15 +06:00
InsanusMokrassar 96fdff6ffd Merge pull request #212 from InsanusMokrassar/0.16.2
0.16.2
2022-12-16 13:59:47 +06:00
InsanusMokrassar 58b007cbb3 fill changelog 2022-12-16 13:59:24 +06:00
InsanusMokrassar 4f0c139889 remove redundant stop koin expect-actual 2022-12-16 11:58:18 +06:00
InsanusMokrassar c584c24fce fixes and improvements 2022-12-15 15:07:10 +06:00
InsanusMokrassar 85e5cee154 replace createStartupPluginAndRegister 2022-12-15 14:59:07 +06:00
InsanusMokrassar 5af91981f1 upgrades and filling of README 2022-12-15 10:26:31 +06:00
InsanusMokrassar 2fe4f08059 update compose 2022-12-15 08:51:53 +06:00
InsanusMokrassar 83796f345a start fix startup 2022-12-14 22:26:23 +06:00
InsanusMokrassar c1e21364a6 start 0.16.2 2022-12-14 21:40:18 +06:00
InsanusMokrassar 067d9d0d3b Merge pull request #211 from InsanusMokrassar/0.16.1
0.16.1
2022-12-09 19:58:54 +06:00
InsanusMokrassar 03f527d83e Update CHANGELOG.md 2022-12-09 19:46:58 +06:00
InsanusMokrassar ced05a4586 improve default runCatchingSafely/safelyWithResult and add suspend variances of safe/unsafe SafeWrapper interface 2022-12-09 12:14:24 +06:00
InsanusMokrassar 43fe06206a add safe wrapper 2022-12-09 11:09:32 +06:00
InsanusMokrassar 023657558e start 0.16.1 2022-12-09 10:52:53 +06:00
InsanusMokrassar 9b0b726c80 Merge pull request #210 from InsanusMokrassar/0.16.0
0.16.0
2022-12-08 09:29:12 +06:00
InsanusMokrassar 4ee67321c4 fill changelog and update android dependencies 2022-12-08 09:26:59 +06:00
InsanusMokrassar 59f1f2e59b Update libs.versions.toml 2022-12-08 08:53:37 +06:00
InsanusMokrassar 0766d48b7c Update libs.versions.toml 2022-12-08 07:56:04 +06:00
InsanusMokrassar e18903b9e9 Update gradle.properties 2022-12-08 07:54:53 +06:00
InsanusMokrassar d0eecdead2 Update gradle.properties 2022-12-08 07:53:59 +06:00
InsanusMokrassar cc4a83a033 Update gradle.properties 2022-12-08 07:53:08 +06:00
InsanusMokrassar 1cf911bbde Update build.gradle 2022-12-07 19:40:30 +06:00
InsanusMokrassar 36d73d5023 Update StartupLaunchingTests.kt 2022-12-07 11:39:45 +06:00
InsanusMokrassar c395242e3e fixes in StartupLauncingTests 2022-12-07 10:50:51 +06:00
InsanusMokrassar cd9cd7cc5d Merge pull request #208 from InsanusMokrassar/0.15.1
0.15.1
2022-12-07 09:43:48 +06:00
InsanusMokrassar acbb8a0c07 complete prepare startup module 2022-12-06 13:15:08 +06:00
InsanusMokrassar b9d8528599 complete kdocs for the startup module 2022-12-06 13:14:05 +06:00
InsanusMokrassar 4971326eca add kdocs for the config of startup 2022-12-06 13:08:37 +06:00
InsanusMokrassar 09d1047260 add kdocs to the startup module 2022-12-06 13:06:21 +06:00
InsanusMokrassar 02dbd493c2 add tests and make several replacements/improvements 2022-12-06 12:38:24 +06:00
InsanusMokrassar b17931e7bd complete startup module 2022-12-05 22:31:15 +06:00
InsanusMokrassar 2a4570eafc Update ServerLauncher.kt 2022-12-05 21:52:36 +06:00
InsanusMokrassar c9514d3a6d Create DefaultJson.kt 2022-12-05 21:47:00 +06:00
InsanusMokrassar 072805efc7 Update ServerLauncher.kt 2022-12-05 21:45:30 +06:00
InsanusMokrassar 369ff26627 initialize startup module 2022-12-05 21:19:38 +06:00
InsanusMokrassar c5abbbbd2d start 0.15.1 2022-12-05 20:04:50 +06:00
InsanusMokrassar d974639f1e fixes in source roots of dokka 2022-12-05 07:47:35 +06:00
InsanusMokrassar 26efde316b remove redundant fix of android 32 dx files from worflows 2022-12-05 07:09:31 +06:00
InsanusMokrassar fafe50f80a suppress kdocs of uniupload in actual realizations 2022-12-05 07:00:31 +06:00
InsanusMokrassar 41504469db Revert "potential fix of dokka"
This reverts commit 31022733ac.
2022-12-05 06:57:29 +06:00
InsanusMokrassar 03b3ddd98b Revert "remove redundant dokka println"
This reverts commit b53cfd5504.
2022-12-05 06:57:27 +06:00
InsanusMokrassar 89d919f2be Merge pull request #207 from InsanusMokrassar/0.15.0
0.15.0
2022-12-04 19:26:14 +06:00
InsanusMokrassar b53cfd5504 remove redundant dokka println 2022-12-04 19:03:44 +06:00
InsanusMokrassar 31022733ac potential fix of dokka 2022-12-04 19:00:16 +06:00
InsanusMokrassar f9a8c39879 updates and fixes in mime types 2022-12-02 21:07:32 +06:00
InsanusMokrassar a812c2dd2f refresh language codes 2022-12-02 20:03:29 +06:00
InsanusMokrassar 217e977f0d ids in crud repos 2022-12-02 13:46:06 +06:00
InsanusMokrassar 04c301d1ac upgrade version up to 0.15.0 2022-12-02 13:31:11 +06:00
InsanusMokrassar 7f0c425389 start 0.14.5 2022-12-02 13:04:44 +06:00
InsanusMokrassar 1ede1c423b Merge pull request #206 from InsanusMokrassar/0.14.4
0.14.4
2022-11-27 17:34:07 +06:00
InsanusMokrassar 7cb064896a fill changelog 2022-11-27 14:44:03 +06:00
InsanusMokrassar 0c5e2862ca improvements in ktor client-server files handling 2022-11-27 14:38:35 +06:00
InsanusMokrassar 30d4507f54 hotfix in handleUniUpload 2022-11-26 12:12:01 +06:00
InsanusMokrassar b6c6d89455 Update gradle.properties 2022-11-25 10:16:31 +06:00
InsanusMokrassar 9d218ee534 Update UniloadMultipart.kt 2022-11-25 10:15:59 +06:00
InsanusMokrassar 11116d8cab Merge pull request #205 from InsanusMokrassar/0.14.3
0.14.3
2022-11-24 13:15:08 +06:00
InsanusMokrassar 58d754bbde handleUniUpload now is inline 2022-11-24 12:29:48 +06:00
InsanusMokrassar 8f25c123dd add download and downloadToTemporalFile extensions 2022-11-24 11:27:30 +06:00
InsanusMokrassar 76e214fc08 upfixes 2022-11-22 14:39:31 +06:00
InsanusMokrassar 2b5380f8d6 add server part of uniUpload, fill changelog 2022-11-22 13:38:36 +06:00
InsanusMokrassar 844a129094 complete universal uniupload 2022-11-22 12:57:43 +06:00
InsanusMokrassar a3090cca9d add uniupload for JVM 2022-11-22 10:36:15 +06:00
InsanusMokrassar b7b5159e9c Revert "Revert "start adding uniupload""
This reverts commit 0d1aae0ef7.
2022-11-22 09:51:10 +06:00
InsanusMokrassar 0f8bc2c950 fix in workflow build 2022-11-21 20:50:28 +06:00
InsanusMokrassar 69f5c49f45 small update of build workflows 2022-11-21 20:49:04 +06:00
InsanusMokrassar 9b308e6fb8 update workflow 2022-11-21 20:32:48 +06:00
InsanusMokrassar 3e3f91128b add dependency of common android repos onto jvm 2022-11-21 20:23:05 +06:00
InsanusMokrassar 0d1aae0ef7 Revert "start adding uniupload"
This reverts commit 4d022f0480.
2022-11-21 20:20:37 +06:00
InsanusMokrassar 4d022f0480 start adding uniupload 2022-11-21 13:39:11 +06:00
InsanusMokrassar 153e20d00e start 0.14.3 2022-11-21 12:49:04 +06:00
InsanusMokrassar a9a8171dd6 add gitea repo 2022-11-16 21:35:18 +06:00
InsanusMokrassar bf5c3b59b2 Merge pull request #204 from InsanusMokrassar/0.14.2
0.14.2
2022-11-15 10:02:11 +06:00
InsanusMokrassar 607c432bdb Update CHANGELOG.md 2022-11-15 10:01:58 +06:00
InsanusMokrassar ae5c010770 Update libs.versions.toml 2022-11-15 09:54:18 +06:00
InsanusMokrassar d5e432437f Update gradle.properties 2022-11-15 09:53:28 +06:00
InsanusMokrassar 9f99ebce01 Merge pull request #203 from InsanusMokrassar/0.14.1
0.14.1
2022-11-10 17:19:17 +06:00
InsanusMokrassar 64ee899b84 revert koin version change 2022-11-10 17:13:25 +06:00
InsanusMokrassar e0e0c1658b revert kotlin versin version change 2022-11-10 17:11:45 +06:00
InsanusMokrassar 2c586f667c update version 2022-11-10 17:09:12 +06:00
InsanusMokrassar 64164ef6c1 update dependencies 2022-11-10 17:06:20 +06:00
InsanusMokrassar 22343c0731 Merge pull request #202 from InsanusMokrassar/0.14.0
0.14.0
2022-11-08 14:20:12 +06:00
InsanusMokrassar f4ec1a4c60 add deprecations removing note 2022-11-08 14:19:48 +06:00
InsanusMokrassar c1c33cceb1 remove deprecations 2022-11-08 14:17:45 +06:00
InsanusMokrassar a3e975b2ba Update CHANGELOG.md 2022-11-08 14:13:36 +06:00
InsanusMokrassar 06e705a687 update klock 2022-11-08 13:12:39 +06:00
InsanusMokrassar d56eb6c867 fixes 2022-11-08 12:47:59 +06:00
InsanusMokrassar 9cbca864e3 Update CHANGELOG.md 2022-11-08 08:00:18 +06:00
InsanusMokrassar abb4378694 Update libs.versions.toml 2022-11-08 07:59:50 +06:00
InsanusMokrassar 0eb698d9a4 start 0.14.0 2022-11-08 07:57:31 +06:00
InsanusMokrassar 15ea9f2093 add documentation for KeyValue repo 2022-11-03 13:01:51 +06:00
InsanusMokrassar d47aca0923 Merge pull request #201 from InsanusMokrassar/0.13.2
0.13.2
2022-10-30 22:35:07 +06:00
InsanusMokrassar 1ac50e9959 update several dependencies and fill changelog 2022-10-30 21:45:19 +06:00
InsanusMokrassar 6adfbe3a96 Update exposed and revert several dependencies updates 2022-10-24 23:52:04 +06:00
InsanusMokrassar 59f36e62e9 update dependencies 2022-10-22 14:25:46 +06:00
InsanusMokrassar 54af116009 start 0.13.2 2022-10-22 14:14:12 +06:00
InsanusMokrassar 38fbec8e3b Merge pull request #200 from InsanusMokrassar/0.13.1
0.13.1
2022-10-17 15:42:13 +06:00
InsanusMokrassar babbfc55e4 update default of AbstractExposedWriteCRUDRepo 2022-10-17 15:31:27 +06:00
InsanusMokrassar 2511e18d69 AbstractExposedWriteCRUDRepo#createAndInsertId now is optional and returns nullable value 2022-10-17 14:42:53 +06:00
InsanusMokrassar 29658c70a0 start 0.13.1 2022-10-17 14:35:16 +06:00
InsanusMokrassar 96311ee43d Merge pull request #199 from InsanusMokrassar/0.13.0
0.13.0
2022-10-13 16:50:50 +06:00
InsanusMokrassar bd33b09052 A LOT OF KTOR METHODS RELATED TO UnifierRouter/UnifiedRequester HAVE BEEN REMOVED 2022-10-11 13:24:39 +06:00
InsanusMokrassar 8055003b47 deprecations removing 2022-10-11 12:58:29 +06:00
InsanusMokrassar 1257492f85 changes in insert/update exposed methods and rewriting of read keyvalue(s) exposed repos to be extending abstract key value(s) repos 2022-10-11 12:55:25 +06:00
InsanusMokrassar 1107b7f4ef start 0.13.0 2022-10-11 12:07:49 +06:00
InsanusMokrassar a1a1171240 start 0.12.18 2022-10-04 15:36:43 +06:00
InsanusMokrassar 46c02e5df1 Merge pull request #198 from InsanusMokrassar/0.12.17
0.12.17
2022-10-01 21:59:42 +06:00
InsanusMokrassar 2e9efc57de update dependencies 2022-10-01 21:56:47 +06:00
InsanusMokrassar acecadef17 start 0.12.17 2022-10-01 21:41:34 +06:00
InsanusMokrassar 19394b5e69 Merge pull request #197 from InsanusMokrassar/0.12.16
0.12.16
2022-09-26 02:16:17 +06:00
InsanusMokrassar de999e197f fix of setOnHierarchyChangeListenerRecursively 2022-09-26 01:10:10 +06:00
InsanusMokrassar 9d95687d3c FlowOnHierarchyChangeListener 2022-09-26 01:02:12 +06:00
InsanusMokrassar aa9dfb4ab8 start 0.12.16 2022-09-26 00:47:32 +06:00
InsanusMokrassar 9c5b44efb3 Merge pull request #196 from InsanusMokrassar/0.12.15
0.12.15
2022-09-24 01:04:01 +06:00
InsanusMokrassar ac587a67e6 findViewsByTag 2022-09-23 16:43:33 +06:00
InsanusMokrassar 59428140a8 applyDiff: Diff 2022-09-23 16:05:32 +06:00
InsanusMokrassar 60bdb59d71 fix version change 2022-09-23 12:41:57 +06:00
InsanusMokrassar be52871de8 flows extensions 2022-09-23 12:41:07 +06:00
InsanusMokrassar b7934cf357 flows extensions 2022-09-23 12:33:00 +06:00
InsanusMokrassar dbfbeef90a start 0.12.15 2022-09-23 12:12:15 +06:00
InsanusMokrassar 00943c9cdf add docs for Diff class 2022-09-23 12:10:24 +06:00
InsanusMokrassar 8745c6a16a Merge pull request #195 from InsanusMokrassar/0.12.14
0.12.14
2022-09-23 00:19:12 +06:00
InsanusMokrassar 433ba4b58f argumentOrNull/argumentOrThrow 2022-09-22 23:39:08 +06:00
InsanusMokrassar d40376e524 Update CHANGELOG.md 2022-09-22 21:51:40 +06:00
InsanusMokrassar a2982f88f5 Update libs.versions.toml 2022-09-21 21:17:34 +06:00
InsanusMokrassar 1642f7abd9 improvements in AwaitFirst 2022-09-21 18:00:39 +06:00
InsanusMokrassar a10d2184ff start 0.12.14 2022-09-21 17:53:57 +06:00
InsanusMokrassar 522435f096 Merge pull request #194 from InsanusMokrassar/0.12.13
make actor not async
2022-09-15 01:43:21 +06:00
InsanusMokrassar 79b30290c0 fix build 2022-09-15 01:19:05 +06:00
InsanusMokrassar f8b8626859 make actor not async 2022-09-15 01:11:20 +06:00
InsanusMokrassar b061b85a08 Merge pull request #193 from InsanusMokrassar/0.12.13
0.12.13
2022-09-14 23:27:59 +06:00
InsanusMokrassar 3870db1c88 fix of #155 and build 2022-09-14 22:47:57 +06:00
InsanusMokrassar 1be1070eb4 fix of #160 2022-09-14 22:32:00 +06:00
InsanusMokrassar 2696e663cf add RandomQualifier 2022-09-14 22:21:30 +06:00
InsanusMokrassar 1e1f7df86d create koin module 2022-09-14 22:14:20 +06:00
InsanusMokrassar 1d8ded8fd3 start 0.12.13 2022-09-14 21:42:29 +06:00
InsanusMokrassar 197825123a Merge pull request #192 from InsanusMokrassar/0.12.12
0.12.12
2022-09-13 22:08:52 +06:00
InsanusMokrassar 422b2e6db1 improve SkeletonAnimation 2022-09-13 22:01:02 +06:00
InsanusMokrassar 1973e0b5bf SkeletonAnimation 2022-09-13 01:30:36 +06:00
InsanusMokrassar 8258cf93a9 start 0.12.12 2022-09-12 21:03:07 +06:00
InsanusMokrassar 1d49bd5947 Merge pull request #191 from InsanusMokrassar/0.12.11
0.12.11
2022-09-08 23:46:55 +06:00
InsanusMokrassar 44317d1519 start 0.12.11 and add values in key value cache repo 2022-09-08 22:38:24 +06:00
InsanusMokrassar 48e08fcc69 Merge pull request #190 from InsanusMokrassar/0.12.10
0.12.10
2022-09-07 23:54:33 +06:00
InsanusMokrassar 1a3ce6e623 hotfix 2022-09-07 23:47:13 +06:00
InsanusMokrassar fb122f3e70 0.12.10 2022-09-07 23:45:59 +06:00
InsanusMokrassar 7cca6039cc Merge pull request #189 from InsanusMokrassar/0.12.9
fix of cache filling without clearing of values
2022-09-07 22:16:50 +06:00
InsanusMokrassar 118e3dba39 fix of cache filling without clearing of values 2022-09-07 21:56:41 +06:00
InsanusMokrassar 87070710fa Merge pull request #188 from InsanusMokrassar/0.12.9
update korlibs
2022-09-07 21:14:26 +06:00
InsanusMokrassar 38499c3d4a update korlibs 2022-09-07 21:09:57 +06:00
InsanusMokrassar 5d754d968b Merge pull request #187 from InsanusMokrassar/0.12.9
0.12.9
2022-09-07 20:26:46 +06:00
InsanusMokrassar d543d436bc Fixes in key values cache 2022-09-07 20:01:13 +06:00
InsanusMokrassar 12b54f99af update gradle wrapper 2022-09-07 19:49:29 +06:00
InsanusMokrassar 2a95d7e643 start 0.12.9 2022-09-07 19:48:59 +06:00
InsanusMokrassar e3d3cacfa4 Merge pull request #186 from InsanusMokrassar/0.12.8
0.12.8
2022-09-07 00:57:17 +06:00
InsanusMokrassar 4b13491a0e Update CHANGELOG.md 2022-09-07 00:56:48 +06:00
InsanusMokrassar 85d516d1e9 Update libs.versions.toml 2022-09-06 23:44:02 +06:00
InsanusMokrassar ac58b6a7e3 bodyOrNull/respondOrNoContent 2022-09-06 21:16:41 +06:00
InsanusMokrassar 2cc6126765 start 0.12.8 2022-09-06 21:15:01 +06:00
InsanusMokrassar f94b085850 Merge pull request #185 from InsanusMokrassar/0.12.7
0.12.7
2022-09-05 18:35:56 +06:00
InsanusMokrassar c9822a491b WriteCRUDCacheRepo subscribtions and changeResultsUnchecked(Pagination) 2022-09-05 15:07:33 +06:00
InsanusMokrassar 23b2d60295 start 0.12.7 2022-09-05 14:20:58 +06:00
InsanusMokrassar f4bc9eed39 Merge pull request #184 from InsanusMokrassar/0.12.6
0.12.6
2022-08-31 04:10:33 +06:00
InsanusMokrassar e310f188b0 fixed absence of image/* in known mime types 2022-08-31 03:01:06 +06:00
InsanusMokrassar 6c1571188c start 0.12.6 2022-08-31 02:59:29 +06:00
InsanusMokrassar 945d2fa284 Merge pull request #183 from InsanusMokrassar/0.12.5
0.12.5
2022-08-30 17:38:57 +06:00
InsanusMokrassar 020095f1ff Update CHANGELOG.md 2022-08-30 17:37:59 +06:00
InsanusMokrassar b165a76e62 fixes in selectPaginated 2022-08-30 15:20:45 +06:00
InsanusMokrassar 03c8830672 start 0.12.5 2022-08-30 15:17:09 +06:00
InsanusMokrassar 38448da89b Merge pull request #182 from InsanusMokrassar/0.12.4
0.12.4
2022-08-23 13:02:19 +06:00
InsanusMokrassar 2ade5aff91 update dependencies 2022-08-23 12:57:16 +06:00
InsanusMokrassar 29bf6e80ec start 0.12.4 2022-08-23 12:55:52 +06:00
InsanusMokrassar 027e927e1b Merge pull request #181 from InsanusMokrassar/0.12.3
0.12.3
2022-08-22 01:44:17 +06:00
InsanusMokrassar fa061f88e2 refactor 2022-08-22 01:42:04 +06:00
InsanusMokrassar 1d01b65b5f fix 2022-08-22 01:26:28 +06:00
InsanusMokrassar 2c2b364167 add default unoptimized realization of selectByIds 2022-08-22 01:25:07 +06:00
InsanusMokrassar 7c5fc9bf7c selectPaginated and abstract exposed keyvalue(s) repos 2022-08-22 01:11:09 +06:00
InsanusMokrassar 193d22ff20 start 0.12.3 2022-08-22 00:02:34 +06:00
InsanusMokrassar 0f3b553ba2 Merge pull request #180 from InsanusMokrassar/0.12.2
0.12.2
2022-08-19 16:25:24 +06:00
InsanusMokrassar 4eb1013446 Update CHANGELOG.md 2022-08-19 15:54:46 +06:00
InsanusMokrassar be1b2563ec Update libs.versions.toml 2022-08-19 15:54:30 +06:00
InsanusMokrassar 1c9c2f1e70 Update libs.versions.toml 2022-08-19 02:00:29 +06:00
InsanusMokrassar 52dfded741 start 0.12.2 2022-08-19 01:59:09 +06:00
InsanusMokrassar 0a115e5cf4 Merge pull request #179 from InsanusMokrassar/0.12.1
0.12.1
2022-08-11 23:50:12 +06:00
InsanusMokrassar c349af999b Update CHANGELOG.md 2022-08-11 23:36:01 +06:00
InsanusMokrassar 9a5709a34d Update libs.versions.toml 2022-08-11 22:52:34 +06:00
InsanusMokrassar 28d311160b start 0.12.1 2022-08-11 22:47:56 +06:00
InsanusMokrassar 1ca7081a40 Merge pull request #176 from InsanusMokrassar/0.12.0
0.12.0
2022-08-04 13:55:30 +06:00
InsanusMokrassar 5ce8ebe82c Merge branch 'master' into 0.12.0 2022-08-04 13:51:12 +06:00
InsanusMokrassar a7a88b29b9 Merge pull request #178 from InsanusMokrassar/0.11.14
0.11.14
2022-08-04 13:48:18 +06:00
InsanusMokrassar cd7b982385 update android version 2022-08-04 12:50:36 +06:00
InsanusMokrassar ee59100075 fix of build 2022-08-04 12:36:23 +06:00
InsanusMokrassar f808ac58ef Delete HmacSHA256.kt 2022-08-04 11:30:15 +06:00
InsanusMokrassar f33ada5396 deprecations handling 2022-08-04 10:59:04 +06:00
InsanusMokrassar 984d781f2f fill changelog 2022-08-04 10:14:52 +06:00
InsanusMokrassar dd33e1e8bc change version of kotlin 2022-08-04 10:05:29 +06:00
InsanusMokrassar 2950de29e5 fixes 2022-08-04 09:59:05 +06:00
InsanusMokrassar 50a8799f9d update serialization 2022-08-04 09:47:29 +06:00
InsanusMokrassar bdb0ce6fc7 Update libs.versions.toml 2022-08-04 09:19:57 +06:00
InsanusMokrassar 18ec2bca96 Update libs.versions.toml 2022-08-03 10:09:38 +06:00
InsanusMokrassar 937ef48794 Update libs.versions.toml 2022-08-01 21:47:05 +06:00
InsanusMokrassar 6331f13e9a actualize changelog 2022-07-26 14:58:28 +06:00
InsanusMokrassar 5213a2ff8e add kdocs for pagination 2022-07-26 14:58:14 +06:00
InsanusMokrassar 087d7452fd encode by default pages number 2022-07-26 14:54:52 +06:00
InsanusMokrassar 703094c924 add several additional constructors for the pagination result 2022-07-26 13:56:47 +06:00
InsanusMokrassar eea645c865 PaginationResult#objectsCount 2022-07-25 13:31:15 +06:00
InsanusMokrassar 324832a189 start 0.11.14 2022-07-25 13:14:55 +06:00
InsanusMokrassar d55d735c51 Merge pull request #177 from InsanusMokrassar/0.11.13
0.11.13
2022-07-22 16:34:58 +06:00
InsanusMokrassar e3ff1b9609 fill changelog 2022-07-22 16:31:33 +06:00
InsanusMokrassar 70c31966ca Update gradle-wrapper.properties 2022-07-18 14:33:04 +06:00
InsanusMokrassar 0e4188882f Update libs.versions.toml 2022-07-18 14:08:23 +06:00
InsanusMokrassar 6bf0ce92ba Update libs.versions.toml 2022-07-18 13:51:00 +06:00
InsanusMokrassar d51bdc5086 Update gradle.properties 2022-07-18 13:48:09 +06:00
InsanusMokrassar f04f262cee Update libs.versions.toml 2022-07-18 13:16:56 +06:00
InsanusMokrassar 0f172055ef Update gradle.properties 2022-07-18 13:11:02 +06:00
InsanusMokrassar e5dd4363f1 Merge pull request #175 from InsanusMokrassar/0.11.12
0.11.12
2022-07-02 02:50:47 +06:00
InsanusMokrassar a3a48bbaac fixes in file key value repo 2022-07-02 02:28:43 +06:00
InsanusMokrassar 5e716fb9a8 start 0.11.12 2022-07-02 02:26:58 +06:00
InsanusMokrassar 11a36153cc Merge pull request #174 from InsanusMokrassar/0.11.11
0.11.11: improvements of cache repos
2022-06-30 14:03:29 +06:00
InsanusMokrassar 8bee354f04 improvements of cache repos 2022-06-30 13:59:32 +06:00
InsanusMokrassar f7dd2b5ce7 Merge pull request #173 from InsanusMokrassar/0.11.11
0.11.11
2022-06-30 13:41:43 +06:00
InsanusMokrassar 8ca10c00bb update dokka workflow 2022-06-30 13:41:12 +06:00
InsanusMokrassar 905c7e8eda deprecate hmacSha256 2022-06-30 13:19:37 +06:00
InsanusMokrassar d4c5e849bf deprecate BodyPair 2022-06-30 13:15:19 +06:00
InsanusMokrassar 8250a2a021 start 0.11.11 2022-06-30 13:14:06 +06:00
InsanusMokrassar 01b3df7b8c Update github_release.gradle 2022-06-30 10:12:54 +06:00
InsanusMokrassar daa6e4aff5 Merge pull request #172 from InsanusMokrassar/0.11.10
0.11.10
2022-06-30 02:56:14 +06:00
InsanusMokrassar 23bcb26a58 complete improvements in caches 2022-06-30 02:44:44 +06:00
InsanusMokrassar e55f60c30b rename unlimited kv cache 2022-06-30 00:22:07 +06:00
InsanusMokrassar 0d0c16e16d add full cache repos 2022-06-29 23:53:49 +06:00
InsanusMokrassar 540d5cce7c start add full repos caches 2022-06-29 19:43:58 +06:00
InsanusMokrassar a548b00979 update repos cache 2022-06-29 19:31:57 +06:00
InsanusMokrassar 4b7ca6d565 start 0.11.10 2022-06-29 19:29:38 +06:00
InsanusMokrassar 0473fa238c Merge pull request #171 from InsanusMokrassar/0.11.9
0.11.9
2022-06-29 01:56:03 +06:00
InsanusMokrassar cfc7119697 update dependencies 2022-06-28 23:06:09 +06:00
InsanusMokrassar 22a6520d3e start 0.11.9 2022-06-28 23:01:32 +06:00
InsanusMokrassar fb25e91191 start 0.12.0 2022-06-28 22:57:21 +06:00
InsanusMokrassar c116b270b6 Merge pull request #170 from InsanusMokrassar/0.11.8
0.11.8
2022-06-28 14:18:11 +06:00
InsanusMokrassar aa2d598689 fixes in FileKeyValueRepo 2022-06-28 14:13:04 +06:00
InsanusMokrassar 5ef3bb746b start 0.11.8 2022-06-28 14:12:12 +06:00
InsanusMokrassar 037616e271 Merge pull request #169 from InsanusMokrassar/0.11.7
0.11.7
2022-06-28 03:07:54 +06:00
InsanusMokrassar abbea906f1 fixes 2022-06-28 01:46:24 +06:00
InsanusMokrassar 9132e216c9 add several extensions for MapperRepo 2022-06-28 01:43:57 +06:00
InsanusMokrassar 12a7e3c4af fixes 2022-06-28 01:06:46 +06:00
InsanusMokrassar b40c093917 SimpleMapper, SimpleSuspendableMapper, mappers for CRUDRepo 2022-06-28 00:56:51 +06:00
InsanusMokrassar 7ac12455c8 add ReadCRUDRepo mappers 2022-06-28 00:19:25 +06:00
InsanusMokrassar 5043eec7a2 start 0.11.7 2022-06-27 23:35:10 +06:00
InsanusMokrassar cf31f53e01 Merge pull request #168 from InsanusMokrassar/0.11.6
0.11.6
2022-06-24 00:19:34 +06:00
InsanusMokrassar cd22d76fa7 fsms fixes 2022-06-23 18:47:59 +06:00
InsanusMokrassar c8759843f7 start 0.11.6 2022-06-23 17:19:07 +06:00
InsanusMokrassar 781bbcc012 Merge pull request #167 from InsanusMokrassar/0.11.5
0.11.5
2022-06-23 12:50:31 +06:00
InsanusMokrassar 6da29c0686 add note about 0.11.4 2022-06-23 12:49:09 +06:00
InsanusMokrassar fcdb6fc45a start and finish 0.11.5 -.- 2022-06-23 12:48:24 +06:00
InsanusMokrassar e785a99bd7 Merge pull request #166 from InsanusMokrassar/0.11.4
0.11.4
2022-06-22 22:37:30 +06:00
InsanusMokrassar 121e513fdd fixes in tempUpload of js part 2022-06-22 22:36:06 +06:00
InsanusMokrassar 9cf01ab54f improve compose list state creation 2022-06-22 16:56:51 +06:00
InsanusMokrassar c655107681 renames in compose states creation 2022-06-22 16:52:19 +06:00
InsanusMokrassar 91a5af6a9a fix of changelog 2022-06-22 16:10:58 +06:00
InsanusMokrassar 86e74c0a6f add extension toMutableListState 2022-06-22 16:09:52 +06:00
InsanusMokrassar d8f01f21a0 start 0.11.4 2022-06-22 16:09:35 +06:00
InsanusMokrassar 9fb8626d8c Rewrite crud.yml 2022-06-16 15:51:22 +06:00
InsanusMokrassar 1c52e04cdb Merge pull request #164 from InsanusMokrassar/0.11.3
0.11.3
2022-06-14 23:59:49 +06:00
InsanusMokrassar 798128256e fixes in websockets 2022-06-14 23:48:10 +06:00
InsanusMokrassar 72c2df47fd start 0.11.3 2022-06-14 19:35:17 +06:00
InsanusMokrassar c9c6d4c0c1 Merge pull request #163 from InsanusMokrassar/0.11.2
0.11.2
2022-06-13 23:21:14 +06:00
InsanusMokrassar 2f4f9f3003 fixes 2022-06-13 23:20:25 +06:00
InsanusMokrassar 22e8f8e5d6 start 0.11.2 2022-06-13 22:19:33 +06:00
InsanusMokrassar 04cf8c3d9a Merge pull request #162 from InsanusMokrassar/0.11.1
0.11.1
2022-06-12 16:32:05 +06:00
InsanusMokrassar 52198be543 fixes in tempupload 2022-06-12 14:26:41 +06:00
InsanusMokrassar 80fd5a489b add pagination type info in crud read repo client 2022-06-11 22:37:32 +06:00
InsanusMokrassar b187043ee1 fixes in kv and kvs of ktor repos 2022-06-10 22:25:16 +06:00
InsanusMokrassar 8965752055 start 0.11.1 2022-06-10 22:23:45 +06:00
InsanusMokrassar b796620267 Merge pull request #161 from InsanusMokrassar/0.11.0
0.11.0
2022-06-05 02:54:05 +06:00
InsanusMokrassar 62df81bb4e update uuid and partially fill changelog 2022-06-05 00:34:45 +06:00
InsanusMokrassar 0a8e0f6178 complete swagger templates 2022-06-04 17:12:05 +06:00
InsanusMokrassar f705020aaa fixes in packages 2022-06-04 16:55:23 +06:00
InsanusMokrassar 78bd3b9853 replaces of new API of ktor 2022-06-04 16:52:01 +06:00
InsanusMokrassar 992b283597 add kv swagger template 2022-06-04 16:47:22 +06:00
InsanusMokrassar 8fc1ff1d59 fixes and filling of cru.yml for swagger 2022-06-04 16:18:48 +06:00
InsanusMokrassar 3bbde61f39 renames in crud repos and some little refactoring 2022-06-04 15:15:17 +06:00
InsanusMokrassar 8d955c4b9d renames in kevalues repos 2022-06-04 15:00:23 +06:00
InsanusMokrassar 18593c530b renames in key value repos 2022-06-04 14:42:16 +06:00
InsanusMokrassar 78903cd4eb complete improvements in repos ktor parts 2022-06-04 00:22:36 +06:00
InsanusMokrassar eaa143f7d7 kv rework, fixes in map keyvalue repo, tests 2022-06-03 22:33:26 +06:00
InsanusMokrassar bcb0e42fa2 add new started clients for crud 2022-06-03 17:52:58 +06:00
InsanusMokrassar 8eed435302 start improvements in ktor parts 2022-06-03 12:22:51 +06:00
InsanusMokrassar 0e4a63057f start 0.11.0 2022-06-02 23:50:06 +06:00
InsanusMokrassar 1af5faa440 Merge pull request #159 from InsanusMokrassar/0.10.8
0.10.8
2022-05-29 20:06:14 +06:00
InsanusMokrassar 7412217b0c add Element.isOverflow 2022-05-29 10:22:57 +06:00
InsanusMokrassar 3e749d75b7 start 0.10.8 2022-05-29 10:19:39 +06:00
InsanusMokrassar 846b5c87c9 Merge pull request #158 from InsanusMokrassar/0.10.7
0.10.7
2022-05-28 23:59:54 +06:00
InsanusMokrassar 7b5e84f80b doForAll and getForAll not suspend 2022-05-28 22:47:06 +06:00
InsanusMokrassar 27822a8a66 start 0.10.7 2022-05-28 18:48:51 +06:00
InsanusMokrassar 36f4e7ec37 Merge pull request #157 from InsanusMokrassar/0.10.6
0.10.6
2022-05-28 09:47:10 +06:00
InsanusMokrassar 187e84ad65 fill changelog and downgrade coroutines 2022-05-28 09:45:18 +06:00
InsanusMokrassar 195fe221c4 Update libs.versions.toml 2022-05-28 00:25:59 +06:00
InsanusMokrassar 6f9c19bbf6 fixes in ResizeObserver 2022-05-27 11:39:09 +06:00
InsanusMokrassar 65bdab4f7e ResizeObserver 2022-05-27 02:37:58 +06:00
InsanusMokrassar c4d5fcfc22 start 0.10.6 2022-05-27 02:37:14 +06:00
InsanusMokrassar 43232afa62 Merge pull request #156 from InsanusMokrassar/0.10.5
0.10.5
2022-05-19 10:44:00 -04:00
InsanusMokrassar 18908a01d7 rewrite the way to use onStateHandlingErrorHandler inside of DefaultStatesMachine 2022-05-19 20:42:22 +06:00
InsanusMokrassar b22fbfb3bc StateHandlingErrorHandler 2022-05-19 20:22:34 +06:00
InsanusMokrassar 57aaea88b6 Update gradle.properties 2022-05-17 12:38:15 +06:00
InsanusMokrassar 140949c5ea Update CHANGELOG.md 2022-05-17 12:32:59 +06:00
InsanusMokrassar 639241e0d3 Update libs.versions.toml 2022-05-17 12:31:50 +06:00
InsanusMokrassar e0eb42bc2d update dexcount 2022-05-16 17:38:49 +06:00
InsanusMokrassar 7990b21cc5 add SharedPreferencesKeyValueRepo 2022-05-16 17:34:34 +06:00
InsanusMokrassar 2ba5c97709 start 0.10.5 2022-05-16 17:33:49 +06:00
InsanusMokrassar 33b7c85fc2 Merge pull request #154 from InsanusMokrassar/0.10.4
0.10.4
2022-05-12 17:24:13 +06:00
InsanusMokrassar 7f6c02ffdf update serialization 2022-05-12 17:04:53 +06:00
InsanusMokrassar f368616e6f start 0.10.4 2022-05-12 17:03:59 +06:00
InsanusMokrassar dd632f4203 Merge pull request #153 from InsanusMokrassar/0.10.3
0.10.3
2022-05-11 08:42:24 +06:00
InsanusMokrassar a8f3ae501b Update CHANGELOG.md 2022-05-11 08:34:44 +06:00
InsanusMokrassar ea76963ac2 Update libs.versions.toml 2022-05-11 08:33:55 +06:00
InsanusMokrassar 99dfa97958 Merge pull request #152 from InsanusMokrassar/0.10.3
0.10.3
2022-05-11 02:49:35 +06:00
InsanusMokrassar f68270a5b3 fixes in AccumulatorFlow 2022-05-11 02:38:48 +06:00
InsanusMokrassar 542ed81034 start 0.10.3 2022-05-11 01:18:48 +06:00
InsanusMokrassar 404a11f5e7 Merge pull request #151 from InsanusMokrassar/0.10.2
0.10.2
2022-05-10 23:44:39 +06:00
InsanusMokrassar 411221070e Update CHANGELOG.md 2022-05-10 23:44:13 +06:00
InsanusMokrassar 25d35d0c76 Update compose 2022-05-10 15:03:04 +06:00
InsanusMokrassar c72904d61c start 0.10.2 2022-05-10 15:00:56 +06:00
InsanusMokrassar b94c9acd26 Merge pull request #150 from InsanusMokrassar/0.10.1
0.10.1
2022-04-29 23:20:27 +06:00
InsanusMokrassar bdb4988569 fixes 2022-04-29 19:46:15 +06:00
InsanusMokrassar 1dafd1352a hotfix 2022-04-29 18:47:23 +06:00
InsanusMokrassar 31fbd3cad7 hmacSha256 and hex 2022-04-29 18:42:59 +06:00
InsanusMokrassar 848bc5ec10 Update gradle.properties 2022-04-28 23:45:57 +06:00
InsanusMokrassar 4d0ad826a0 Update libs.versions.toml 2022-04-28 23:32:35 +06:00
InsanusMokrassar 6955820fcc Merge pull request #149 from InsanusMokrassar/0.10.0
0.10.0
2022-04-28 20:30:52 +06:00
InsanusMokrassar ef530624b9 remove redundant pluginManagement 2022-04-28 20:30:08 +06:00
InsanusMokrassar 9b9e7dd88f fixes in websockets 2022-04-28 19:43:52 +06:00
InsanusMokrassar a13cc9e961 add error propagation for websockets when websockets has not been installed 2022-04-28 18:40:18 +06:00
InsanusMokrassar 0d2b923378 fix signature of createStandardWebsocketFlow 2022-04-28 18:16:14 +06:00
InsanusMokrassar fba84c8ac8 optimize imports in ktor server 2022-04-27 18:30:28 +06:00
InsanusMokrassar db10fe1b2c several fixes 2022-04-27 18:24:51 +06:00
InsanusMokrassar 175dd980f8 several warnings fixes 2022-04-27 15:15:03 +06:00
InsanusMokrassar 8364020671 migration onto new ktor and other dependencies 2022-04-27 14:39:21 +06:00
InsanusMokrassar eba44cd394 update dependencies 2022-04-26 13:36:55 +06:00
InsanusMokrassar b3bac8015a start 0.10.0 2022-04-26 13:35:00 +06:00
InsanusMokrassar 0b48afd251 Merge pull request #147 from InsanusMokrassar/0.9.24
0.9.24
2022-04-21 17:20:45 +06:00
InsanusMokrassar 19857930a4 small refactor in actual MPPFileInput 2022-04-21 16:45:44 +06:00
InsanusMokrassar d0dbe3ed2f MPPFile#input 2022-04-21 16:12:58 +06:00
InsanusMokrassar 8b7e78b63a start 0.9.24 2022-04-21 16:12:21 +06:00
InsanusMokrassar 92a4ecb523 Merge pull request #146 from InsanusMokrassar/0.9.23
0.9.23
2022-04-20 23:46:06 +06:00
InsanusMokrassar 6a5ad4d728 Update CHANGELOG.md 2022-04-20 23:41:59 +06:00
InsanusMokrassar be4aa8daac fixes in inheritance of interfaces 2022-04-20 23:14:06 +06:00
InsanusMokrassar b5eac37782 improvements in ExposedCRUDRepo 2022-04-20 18:41:42 +06:00
InsanusMokrassar b1ad3c5a39 start 0.9.23 2022-04-20 18:22:21 +06:00
InsanusMokrassar ba16bad029 Merge pull request #145 from InsanusMokrassar/0.9.22
0.9.22
2022-04-19 13:55:13 +06:00
InsanusMokrassar ca8ae4cd72 improve ktor server part 2022-04-19 11:16:04 +06:00
InsanusMokrassar 53d35d74b3 start 0.9.22 2022-04-19 11:14:50 +06:00
InsanusMokrassar 49c139e235 Merge pull request #144 from InsanusMokrassar/0.9.21
0.9.21
2022-04-17 08:56:59 +06:00
InsanusMokrassar caf9c821f3 fixes in AbstractExposedWriteCRUDRepo 2022-04-15 00:49:32 +06:00
InsanusMokrassar ca4c6db96f start 0.9.21 2022-04-15 00:44:28 +06:00
InsanusMokrassar 6b2298c752 Merge pull request #143 from InsanusMokrassar/0.9.20
0.9.20
2022-04-13 16:02:12 +06:00
InsanusMokrassar a1bf43def9 upfixes 2022-04-13 16:01:13 +06:00
InsanusMokrassar 15e9254e00 fixes in OneToManyAndroidRepo and adding of CursorIterator 2022-04-13 15:54:48 +06:00
InsanusMokrassar afe5a72c6f small fix of docs 2022-04-12 15:32:25 +06:00
InsanusMokrassar 750a8b9ecf start 0.9.20 2022-04-12 15:13:25 +06:00
InsanusMokrassar 27fc3f93e0 Merge pull request #142 from InsanusMokrassar/0.9.19
0.9.19
2022-04-08 01:16:13 +06:00
InsanusMokrassar 8166d4b99b Update CHANGELOG.md 2022-04-08 01:16:01 +06:00
InsanusMokrassar b61d2ae2eb fixes in versions repo 2022-04-07 15:41:08 +06:00
InsanusMokrassar 4790fe0aea get back either serializer fun 2022-04-07 09:59:58 +06:00
InsanusMokrassar bc37b11cee downgrade kotlin 2022-04-07 09:56:23 +06:00
InsanusMokrassar 223fed910f fix for column name of table version in exposed standard versions repo proxy 2022-04-07 00:43:55 +06:00
InsanusMokrassar b85ab7b061 update coroutines 2022-04-06 11:47:06 +06:00
InsanusMokrassar 888dc299c9 update kotlin 2022-04-04 10:06:57 +06:00
InsanusMokrassar e113dc28ed start 0.9.19 2022-04-04 10:05:56 +06:00
InsanusMokrassar 31e55d2307 Merge pull request #141 from InsanusMokrassar/0.9.18
0.9.18
2022-03-31 20:38:43 +06:00
InsanusMokrassar e90645f248 Element#onActionOutside 2022-03-31 14:48:15 +06:00
InsanusMokrassar 4bb7ba2571 start 0.9.18 2022-03-31 14:31:04 +06:00
InsanusMokrassar 8d31c25bf8 Merge pull request #140 from InsanusMokrassar/0.9.17
0.9.17
2022-03-27 17:47:11 +06:00
InsanusMokrassar c7ee1c28b2 fix of docs for DefaultStatesManager 2022-03-27 17:43:01 +06:00
InsanusMokrassar 99b09c8b28 add conflicts resolver for default states managers 2022-03-27 17:15:23 +06:00
InsanusMokrassar a328c4425a Update CHANGELOG.md 2022-03-27 13:57:08 +06:00
InsanusMokrassar c0f61ca896 Update libs.versions.toml 2022-03-26 19:11:44 +06:00
InsanusMokrassar 86e70c0961 js visibility of objects extensions 2022-03-26 11:01:40 +06:00
InsanusMokrassar d87a3a039f start 0.9.17 2022-03-26 10:57:50 +06:00
InsanusMokrassar 6279a2c40a Merge pull request #139 from InsanusMokrassar/0.9.16
0.9.16
2022-03-18 00:10:25 +06:00
InsanusMokrassar f377ebea88 add renderComposableAndLinkToRoot 2022-03-17 19:16:31 +06:00
InsanusMokrassar 7373fef964 add js onRemoved for nodes and different extensions for Composition 2022-03-17 14:56:14 +06:00
InsanusMokrassar 41ef86dbda start 0.9.16 2022-03-17 14:56:14 +06:00
InsanusMokrassar 7bc2b2336d Merge pull request #138 from InsanusMokrassar/0.9.15
0.9.15
2022-03-16 19:47:28 +06:00
InsanusMokrassar 0a615e6d78 cancel jobs of completed states in DefaultStatesMachine 2022-03-16 19:35:14 +06:00
InsanusMokrassar 8f928e16e1 FSM updates 2022-03-16 18:40:21 +06:00
InsanusMokrassar 72bc8da1e7 start 0.9.15 2022-03-16 17:59:29 +06:00
InsanusMokrassar 51e349a5db Merge pull request #137 from InsanusMokrassar/0.9.14
0.9.14 (upfixes)
2022-03-15 16:32:24 +06:00
InsanusMokrassar 3cbb19ba2c fixes and versions updates 2022-03-15 16:30:32 +06:00
InsanusMokrassar ae3a5bf45d Merge pull request #136 from InsanusMokrassar/0.9.14
0.9.14
2022-03-15 16:22:35 +06:00
InsanusMokrassar 9c667f4b78 several fixes in actual temporal upload of js client 2022-03-15 15:37:41 +06:00
InsanusMokrassar 21195e1bcb temporal files uploading functionality 2022-03-15 15:33:45 +06:00
InsanusMokrassar 03117ac565 start 0.9.14 2022-03-15 15:31:58 +06:00
InsanusMokrassar d13fbdf176 Merge pull request #135 from InsanusMokrassar/0.9.13
0.9.13
2022-03-13 17:14:23 +06:00
InsanusMokrassar 7cecc0e0b6 Update CHANGELOG.md 2022-03-13 14:08:01 +06:00
InsanusMokrassar 203e781f5d Update libs.versions.toml 2022-03-13 14:06:16 +06:00
InsanusMokrassar 3eb6cd77cd start 0.9.13 2022-03-13 14:05:24 +06:00
InsanusMokrassar 51855b2405 Merge pull request #134 from InsanusMokrassar/0.9.12
0.9.12
2022-03-12 01:46:23 +06:00
InsanusMokrassar 00cc26d874 fix in publication scripts 2022-03-12 01:38:13 +06:00
InsanusMokrassar 02520636ad hotfix in selectFile 2022-03-12 01:28:53 +06:00
InsanusMokrassar 76813fae8e hotfix in selectFile 2022-03-12 01:28:41 +06:00
InsanusMokrassar 4693483c2b rename selectFile with result MPPFile to selectFileOrThrow 2022-03-12 01:12:17 +06:00
InsanusMokrassar 6dbd12df59 fill changelog and rename selectOptionalFile to selectFileOrNull 2022-03-12 01:03:41 +06:00
InsanusMokrassar 9e84dc5031 add a set of tools for JS and Web Compose 2022-03-12 00:55:03 +06:00
InsanusMokrassar 8f790360bc start 0.9.12 2022-03-12 00:34:22 +06:00
InsanusMokrassar 808375cea6 Merge pull request #133 from InsanusMokrassar/0.9.11
0.9.11
2022-03-11 13:33:49 +06:00
InsanusMokrassar d9c15db9de add compose submodule and add several functions in top of composition 2022-03-10 17:47:47 +06:00
InsanusMokrassar cf2be8ed43 migration onto toml 2022-03-10 17:04:05 +06:00
InsanusMokrassar 97339c9b1d update wrapper version 2022-03-10 15:55:45 +06:00
InsanusMokrassar eb35903de9 Update CHANGELOG.md 2022-03-10 15:20:42 +06:00
InsanusMokrassar 43e88e00da Update klock 2022-03-08 10:01:53 +06:00
InsanusMokrassar 1e51f9d77b Update CHANGELOG.md 2022-03-08 10:01:02 +06:00
InsanusMokrassar dad738357c start 0.9.11 2022-03-08 10:00:19 +06:00
InsanusMokrassar cb828ab3f2 Merge pull request #132 from InsanusMokrassar/0.9.10
0.9.10
2022-03-06 16:24:51 +06:00
InsanusMokrassar aefaf4a8cc update klock (again) 2022-03-06 16:08:02 +06:00
InsanusMokrassar b29f37a251 update klock 2022-03-04 20:20:17 +06:00
InsanusMokrassar 88854020ac extend functionality of websockets 2022-03-04 20:16:59 +06:00
InsanusMokrassar 14ebe01fc6 improvements in includeWebsocketHandling 2022-03-04 15:31:32 +06:00
InsanusMokrassar 771aed0f0f UnifiedRequester#createStandardWebsocketFlow(String,DeserializationStrategy) 2022-03-04 15:20:16 +06:00
InsanusMokrassar 16c57fcd6a start 0.9.10 2022-03-04 15:17:36 +06:00
InsanusMokrassar 75397a7ccb Merge pull request #131 from InsanusMokrassar/0.9.9
0.9.9
2022-02-24 14:44:13 +06:00
InsanusMokrassar b05404f828 IntersectionObserver 2022-02-24 00:26:07 +06:00
InsanusMokrassar edea942874 small refactor of operatons in applyDiff 2022-02-23 23:02:31 +06:00
InsanusMokrassar 8a8f568b9a add applyDiff in Diff Utils and update korlibs klock version 2022-02-23 22:55:56 +06:00
InsanusMokrassar 4dc8d30c52 start 0.9.9 2022-02-23 22:32:05 +06:00
InsanusMokrassar cb4e08e823 Merge pull request #130 from InsanusMokrassar/0.9.8
0.9.8
2022-02-19 21:44:56 +06:00
InsanusMokrassar c443bf4fa0 update dependencies 2022-02-19 16:15:36 +06:00
InsanusMokrassar a6982de822 start 0.9.8 2022-02-19 16:06:45 +06:00
InsanusMokrassar 4f1a663e75 fixes in ExposedOneToManyKeyValueRepo and includeWebsocketHandling 2022-02-19 16:06:33 +06:00
InsanusMokrassar dab262d626 start 0.9.7 2022-02-19 16:06:33 +06:00
InsanusMokrassar 87a3f61ca6 fix in ExposedOneToManyKeyValueRepo 2022-02-07 20:43:43 +06:00
InsanusMokrassar 506e937a68 start 0.9.6 2022-02-07 20:39:44 +06:00
root 5a037c76dd Merge pull request #126 from InsanusMokrassar/0.9.5
0.9.5
2022-02-01 23:30:26 +06:00
root 313f622f7e Update CHANGELOG.md 2022-02-01 14:27:07 +06:00
root 6cba1fe1a2 Update klock 2022-02-01 14:25:24 +06:00
root fd2d0e80b7 start 0.9.5 2022-02-01 14:24:12 +06:00
InsanusMokrassar 96ab2e8aca Merge pull request #125 from InsanusMokrassar/0.9.4
0.9.4
2022-01-18 18:58:49 +06:00
InsanusMokrassar 0202988cae several fixes in optionallyReverse 2022-01-17 16:11:55 +06:00
InsanusMokrassar d619d59947 Either updates 2022-01-17 15:56:48 +06:00
InsanusMokrassar 85b3e48d18 add optionallyReverse extensions 2022-01-17 15:38:23 +06:00
InsanusMokrassar 7a9b7d98a1 start 0.9.4 2022-01-14 13:22:04 +06:00
InsanusMokrassar b212acfcaf Merge pull request #124 from InsanusMokrassar/0.9.3
0.9.3
2022-01-14 00:46:20 +06:00
InsanusMokrassar 3a45e5dc70 Update CHANGELOG.md 2022-01-14 00:37:03 +06:00
InsanusMokrassar 73190518d5 Update gradle.properties 2022-01-14 00:35:51 +06:00
InsanusMokrassar 03f78180dc Merge pull request #123 from InsanusMokrassar/0.9.2
0.9.2
2022-01-13 11:22:54 +06:00
InsanusMokrassar 1c0b8cf842 Update CHANGELOG.md 2022-01-13 10:20:35 +06:00
InsanusMokrassar a1624ea2a9 Update gradle.properties 2022-01-13 10:19:08 +06:00
InsanusMokrassar 23a050cf1e Merge pull request #122 from InsanusMokrassar/0.9.1
0.9.1
2022-01-08 16:12:04 +06:00
InsanusMokrassar 916f2f96f4 typealiases for exposed one to many 2022-01-08 14:35:28 +06:00
InsanusMokrassar 00cc214754 repo exposed updates 2022-01-08 14:14:44 +06:00
InsanusMokrassar b2e38f72b9 start 0.9.1 2022-01-08 14:12:57 +06:00
InsanusMokrassar e7107d238d Update dokka_push.yml 2021-12-30 02:55:19 +06:00
InsanusMokrassar ed9ebdbd1a Merge pull request #121 from InsanusMokrassar/0.9.0
0.9.0
2021-12-30 02:52:34 +06:00
InsanusMokrassar e80676d3d2 Update packages_push.yml 2021-12-29 19:43:19 +06:00
InsanusMokrassar 02d02fa8f2 update android tools build 2021-12-29 19:24:25 +06:00
InsanusMokrassar bd783fb74f update dokka 2021-12-29 17:44:45 +06:00
InsanusMokrassar 50386adf70 ignore kotlin-js-store folder 2021-12-28 21:19:47 +06:00
InsanusMokrassar f4ee6c2890 update exposed and adapt to new version of kotlin serialization 2021-12-28 21:17:17 +06:00
InsanusMokrassar d45aef9fe5 start 0.9.0 2021-12-28 09:58:59 +06:00
InsanusMokrassar a56cd3dddd Merge pull request #120 from InsanusMokrassar/0.8.9
0.8.9
2021-12-27 17:02:16 +06:00
InsanusMokrassar 419e7070ee more fixes to god of fixes 2021-12-27 17:02:00 +06:00
InsanusMokrassar 612cf40b5f small hotfix 2021-12-27 16:00:07 +06:00
InsanusMokrassar 8b39882e83 fixes in DefaultUpdatableStatesMachine 2021-12-27 15:57:55 +06:00
InsanusMokrassar e639ae172b Fixes in uniloadMultipart 2021-12-27 15:55:05 +06:00
InsanusMokrassar d0446850ae start 0.8.9 2021-12-27 15:45:44 +06:00
InsanusMokrassar c48465b90b Merge pull request #119 from InsanusMokrassar/0.8.8
0.8.8
2021-12-26 22:11:04 +06:00
InsanusMokrassar f419fd03d2 small fix of performing state update for UpdatableStatesMachine 2021-12-26 22:00:26 +06:00
InsanusMokrassar 494812a660 one more fix 2021-12-26 21:25:12 +06:00
InsanusMokrassar eb78f21eec fix FSMBuilder 2021-12-26 21:21:40 +06:00
InsanusMokrassar 4bda70268b small fix of style in DefaultUpdatableStatesMachine 2021-12-26 21:07:40 +06:00
InsanusMokrassar f037ce4371 updates in FSM 2021-12-26 21:06:26 +06:00
InsanusMokrassar 3d2196e35d update dependencies (which possible) 2021-12-26 20:07:13 +06:00
InsanusMokrassar a74f061b02 start 0.8.8 2021-12-26 20:02:18 +06:00
InsanusMokrassar 11ade14676 Merge pull request #118 from InsanusMokrassar/0.8.7
0.8.7
2021-12-15 01:22:42 +06:00
InsanusMokrassar eb562d8784 add stream using for multipart 2021-12-14 22:03:29 +06:00
InsanusMokrassar 1ee5b4bfd4 hotfix for multipart 2021-12-14 21:13:11 +06:00
InsanusMokrassar d97892080b add preview work with multipart 2021-12-14 18:01:41 +06:00
InsanusMokrassar 6f37125724 start 0.8.7 and make UnifiedRequester/UnifiedRouter fields are public 2021-12-14 13:25:58 +06:00
InsanusMokrassar ed1baaade7 Merge pull request #117 from InsanusMokrassar/0.8.6
0.8.6
2021-12-08 15:57:43 +06:00
InsanusMokrassar bb9669f8fd fill changelog 2021-12-08 11:45:01 +06:00
InsanusMokrassar bdac715d48 remove crossinline where possible 2021-12-08 11:41:49 +06:00
InsanusMokrassar acf4971298 downgrade ktor 2021-12-08 11:36:24 +06:00
InsanusMokrassar 249bc83a8c update ktor 2021-11-27 16:22:13 +06:00
InsanusMokrassar 0fbb92f03f start 0.8.6 2021-11-27 16:20:56 +06:00
InsanusMokrassar ca27cb3f82 Merge pull request #116 from InsanusMokrassar/0.8.5
0.8.5
2021-11-27 01:00:18 +06:00
InsanusMokrassar 3a5771a0cc Update RepeatOnFailure.kt 2021-11-26 23:07:00 +06:00
InsanusMokrassar 527a2a91ac repeatOnFailure 2021-11-26 19:45:59 +06:00
InsanusMokrassar 6763e5c4c6 start 0.8.5 2021-11-26 19:32:52 +06:00
InsanusMokrassar 06918d8310 add mime types generator python script 2021-11-24 14:31:24 +06:00
InsanusMokrassar 89ccaa1b57 Merge pull request #115 from InsanusMokrassar/0.8.4
0.8.4
2021-11-19 14:02:38 +06:00
InsanusMokrassar 5d0bdb9bcf fix pagination 2021-11-19 13:58:59 +06:00
InsanusMokrassar 31fdcf74a5 ktor server createKtorServer extensions 2021-11-19 13:24:45 +06:00
InsanusMokrassar afca09cc1d start 0.8.4 2021-11-19 13:18:37 +06:00
InsanusMokrassar 531d89d9db Merge pull request #114 from InsanusMokrassar/0.8.3
0.8.3
2021-11-19 09:49:35 +06:00
InsanusMokrassar 6bbbea0bc3 suppressions in Optional.kt 2021-11-18 23:03:24 +06:00
InsanusMokrassar e337cd98c8 optional workaround 2021-11-17 21:31:35 +06:00
InsanusMokrassar bcbab3b380 add Optional type 2021-11-17 17:38:41 +06:00
InsanusMokrassar fb63de7568 intersect 2021-11-17 14:22:45 +06:00
InsanusMokrassar aa45a4ab13 now Pagination is an ClosedRange 2021-11-17 14:07:11 +06:00
InsanusMokrassar 2af7e2f681 start 0.8.3 2021-11-17 14:01:44 +06:00
InsanusMokrassar 34fd9edce0 Merge pull request #113 from InsanusMokrassar/0.8.2
0.8.2
2021-11-12 13:23:39 +06:00
InsanusMokrassar 2a4cb8c5f9 improvements in FSM 2021-11-12 13:19:15 +06:00
InsanusMokrassar 50ea40bc3a add changelog for dependencies update 2021-11-12 13:14:57 +06:00
InsanusMokrassar a77654052d Update gradle.properties 2021-11-11 21:20:17 +06:00
InsanusMokrassar 88aafce552 start 0.8.2 2021-11-11 20:31:04 +06:00
InsanusMokrassar 4e95d6bfff Merge pull request #112 from InsanusMokrassar/0.8.1
0.8.1
2021-11-09 14:04:11 +06:00
InsanusMokrassar 38d0e34fb5 updates in scripts and update core ktx 2021-11-09 14:03:51 +06:00
InsanusMokrassar 8fbc6b9041 update changelog 2021-11-09 13:43:46 +06:00
InsanusMokrassar e8219d6cf4 start 0.8.1 2021-11-09 10:21:23 +06:00
InsanusMokrassar 6c20fc4ca6 Merge pull request #111 from InsanusMokrassar/0.8.0
0.8.0
2021-11-05 21:56:00 +06:00
InsanusMokrassar 85cd975492 preparations for release 2021-11-05 21:45:01 +06:00
InsanusMokrassar 1171a717fe optimize imports 2021-11-05 15:49:39 +06:00
InsanusMokrassar bbe5320312 rework of FSM + 0.8.0 2021-11-05 15:43:05 +06:00
InsanusMokrassar 00acb9fddd add suppresses to the generated classes 2021-11-03 17:22:32 +06:00
InsanusMokrassar de3d14dc41 solution of #109 2021-11-03 15:36:25 +06:00
InsanusMokrassar 67ff9cc9b3 update dependencies 2021-11-03 15:18:41 +06:00
InsanusMokrassar af132103a0 start 0.7.5 and add either serializer 2021-11-02 12:43:59 +06:00
InsanusMokrassar 3b1124a804 fixes 2021-10-30 12:17:18 +06:00
InsanusMokrassar f226c2dfd6 Merge pull request #106 from InsanusMokrassar/0.7.4
0.7.4
2021-10-29 13:57:58 +06:00
InsanusMokrassar 69d6e63846 getAllBy* 2021-10-29 13:51:59 +06:00
InsanusMokrassar 02c3d397ad solution of #104 2021-10-29 13:40:53 +06:00
InsanusMokrassar 67a1050646 solution for #105 2021-10-28 18:46:53 +06:00
InsanusMokrassar 8cd0775a6c update kdocs of Either 2021-10-28 18:42:05 +06:00
InsanusMokrassar 162294d6c6 either 2021-10-28 18:02:02 +06:00
InsanusMokrassar c4dd19dd00 start 0.7.4 2021-10-28 17:50:28 +06:00
InsanusMokrassar d2314422f1 Merge pull request #103 from InsanusMokrassar/0.7.3
0.7.3
2021-10-23 14:26:42 +06:00
InsanusMokrassar 6fedd6f859 update dependencies 2021-10-23 14:24:31 +06:00
InsanusMokrassar e52b59665f start 0.7.3 2021-10-23 14:19:30 +06:00
InsanusMokrassar cda9d09689 fixes for kdocs 2021-10-18 22:57:25 +06:00
InsanusMokrassar c9237b3f00 Merge pull request #102 from InsanusMokrassar/0.7.2
0.7.2
2021-10-16 09:51:24 +06:00
InsanusMokrassar 18bba66c4a Update CHANGELOG.md 2021-10-16 08:56:38 +06:00
InsanusMokrassar 63418c4a8a Update gradle.properties 2021-10-16 08:55:44 +06:00
InsanusMokrassar 2e66c6f4e3 Merge pull request #101 from InsanusMokrassar/0.7.1
0.7.1
2021-10-13 15:11:26 +06:00
InsanusMokrassar e9c5df4c13 upfill kdocs 2021-10-13 15:09:05 +06:00
InsanusMokrassar bc7789ad2c add kdocs 2021-10-13 15:06:58 +06:00
InsanusMokrassar e3da761249 Fill changelog 2021-10-13 14:38:50 +06:00
InsanusMokrassar 4082f65afa AccumulatorFlow 2021-10-13 13:26:39 +06:00
InsanusMokrassar 5d1cab075d Update gradle.properties 2021-10-12 21:03:47 +06:00
InsanusMokrassar bcf67f7e59 Update gradle.properties 2021-10-12 20:56:00 +06:00
InsanusMokrassar 7d3b1f8e75 StatesMachine is interface 2021-10-06 13:56:58 +06:00
InsanusMokrassar 119a0588cc DefaultStatesManager 2021-10-06 13:30:25 +06:00
InsanusMokrassar fab789d9c0 start rework of FSM states manager 2021-10-06 12:14:02 +06:00
InsanusMokrassar ceba81c08f start 0.7.1 2021-10-06 11:51:55 +06:00
InsanusMokrassar a061af0558 actualize changelog 2021-10-05 13:52:28 +06:00
InsanusMokrassar c7a53846ad Merge pull request #100 from InsanusMokrassar/0.7.0
0.7.0 + migration back to klock
2021-10-05 13:51:41 +06:00
InsanusMokrassar a683cccf0c 0.7.0 + migration back to klock 2021-10-05 13:46:23 +06:00
InsanusMokrassar 50d41e35c1 remove deprecations 2021-10-04 16:09:01 +06:00
InsanusMokrassar aa0e831cea Merge pull request #99 from InsanusMokrassar/0.6.0
0.6.0
2021-10-04 15:57:02 +06:00
InsanusMokrassar 44e26ccb4f migration onto datetime 2021-10-04 15:54:43 +06:00
InsanusMokrassar 2a783f6e2b start 0.6.0 2021-10-03 18:58:15 +06:00
InsanusMokrassar 6058d6a724 update ktor 2021-10-01 16:12:26 +06:00
InsanusMokrassar 2e9c7eb5fa Merge pull request #98 from InsanusMokrassar/0.5.31
0.5.31
2021-10-01 15:42:24 +06:00
InsanusMokrassar e75465ad10 update dependencies 2021-09-30 11:59:44 +06:00
InsanusMokrassar de01ad54e9 start 0.5.31 2021-09-30 11:57:29 +06:00
InsanusMokrassar eeea7ddbe3 Merge pull request #97 from InsanusMokrassar/0.5.30
0.5.30
2021-09-25 16:22:34 +06:00
InsanusMokrassar e0b18bec05 update dependencies 2021-09-25 14:55:56 +06:00
InsanusMokrassar 410e89bba9 start 0.5.30 2021-09-25 14:45:56 +06:00
InsanusMokrassar 9ef19dc42b Merge pull request #96 from InsanusMokrassar/0.5.29
0.5.29
2021-09-23 13:45:55 +06:00
InsanusMokrassar 0337d1b82d add fix of 31.0.0 for kdocs workflow 2021-09-23 13:23:02 +06:00
InsanusMokrassar f5bd4c5ccb update dependencies 2021-09-23 13:12:03 +06:00
InsanusMokrassar 630f9bc0d4 start 0.5.29 2021-09-23 13:10:44 +06:00
InsanusMokrassar 18b4ffece1 Update packages_push.yml 2021-09-22 20:18:14 +06:00
InsanusMokrassar f64e1effa3 Delete build.yml 2021-09-22 20:17:04 +06:00
InsanusMokrassar 847fcbb488 Merge pull request #95 from InsanusMokrassar/0.5.28
0.5.28
2021-09-19 21:59:25 +06:00
InsanusMokrassar 88002ec8e7 set java toolchain version in all projects related to Java 2021-09-19 20:50:24 +06:00
InsanusMokrassar 7f8db6a29d update dependencies 2021-09-19 20:39:15 +06:00
InsanusMokrassar b183b82443 start 0.5.28 2021-09-19 20:36:02 +06:00
InsanusMokrassar 5dad27de72 Merge pull request #94 from InsanusMokrassar/0.5.27
0.5.27
2021-09-15 21:12:34 +06:00
InsanusMokrassar 6b66084d0e update dependencies 2021-09-15 19:07:36 +06:00
InsanusMokrassar 50b56a7c39 start 0.5.27 2021-09-15 19:04:02 +06:00
InsanusMokrassar 7ab7d14471 Merge pull request #93 from InsanusMokrassar/0.5.26
0.5.26
2021-09-09 12:25:12 +06:00
InsanusMokrassar bdcc179b7b protecteds in map repos instead of privates 2021-09-09 12:16:12 +06:00
InsanusMokrassar 55ffd4b46f start 0.5.26 2021-09-09 12:07:56 +06:00
InsanusMokrassar 7fc5ee70e1 Merge pull request #92 from InsanusMokrassar/0.5.25
0.5.25
2021-09-08 12:27:31 +06:00
InsanusMokrassar a24a335743 TypedSerializer#plusAssign and TypedSerializer#minusAssign 2021-09-08 12:18:42 +06:00
InsanusMokrassar ef9af71960 clamp deprecation and Iterable#diff 2021-09-08 12:10:32 +06:00
InsanusMokrassar 925702d315 MPPFile#withoutSlashAtTheEnd 2021-09-08 12:06:23 +06:00
InsanusMokrassar d50dffec8c update dependencies 2021-09-08 12:01:02 +06:00
InsanusMokrassar cef2081a13 start 0.5.25 2021-09-08 11:57:55 +06:00
InsanusMokrassar 06c8bde7c9 Merge pull request #91 from InsanusMokrassar/0.5.24
0.5.24
2021-09-04 14:59:13 +06:00
InsanusMokrassar c9bbfa3820 update gradle config and fix build 2021-09-04 14:58:15 +06:00
InsanusMokrassar eed7cfdc42 CoroutineScope with safely handler parameter 2021-09-04 14:46:12 +06:00
InsanusMokrassar bd9b0d16ab update dependencies 2021-09-04 14:34:27 +06:00
InsanusMokrassar ea6c33b497 start 0.5.24 2021-09-04 14:20:35 +06:00
InsanusMokrassar dc80ade2fb Merge pull request #90 from InsanusMokrassar/0.5.23
0.5.23
2021-09-02 14:35:31 +06:00
InsanusMokrassar f6a06ee8ea small addition to joinTo 2021-09-02 14:33:35 +06:00
InsanusMokrassar 2644f27975 small addition to joinTo 2021-09-02 14:16:02 +06:00
InsanusMokrassar 3dc68a7b8b small addition to joinTo 2021-09-02 14:09:34 +06:00
InsanusMokrassar 97fc1d6239 small addition to joinTo 2021-09-02 14:01:01 +06:00
InsanusMokrassar 662f4d22a3 fill changelog 2021-09-02 13:52:00 +06:00
InsanusMokrassar b70aa12be9 add joinTo 2021-09-02 13:50:40 +06:00
InsanusMokrassar 71f12f5f19 Update exposed 2021-09-02 10:09:45 +06:00
InsanusMokrassar e10504eeeb Update CHANGELOG.md 2021-09-02 10:09:06 +06:00
InsanusMokrassar 2dea9f3bc0 start 0.5.23 2021-09-02 10:08:28 +06:00
InsanusMokrassar 35c9dda5bc Merge pull request #89 from InsanusMokrassar/0.5.22
0.5.22 - Update ktor
2021-08-27 08:57:57 +06:00
InsanusMokrassar e831f3949a Update CHANGELOG.md 2021-08-26 14:30:37 +06:00
InsanusMokrassar b0b39cc693 Update gradle.properties 2021-08-26 14:28:21 +06:00
InsanusMokrassar fc03be3f73 Merge pull request #88 from InsanusMokrassar/0.5.22
0.5.22
2021-08-25 16:35:02 +06:00
InsanusMokrassar b61f6b81f1 update dependencies 2021-08-25 15:50:10 +06:00
InsanusMokrassar f5bc1c1fce start 0.5.22 2021-08-25 15:10:55 +06:00
InsanusMokrassar a729f9568c Merge pull request #87 from InsanusMokrassar/0.5.21
0.5.21
2021-08-17 11:01:03 +06:00
InsanusMokrassar 5749e00377 update klock 2021-08-17 10:36:15 +06:00
InsanusMokrassar ef73c24a0c fixes in TypedSerializer 2021-08-17 10:35:45 +06:00
InsanusMokrassar 94717ee351 start 0.5.21 2021-08-17 10:30:50 +06:00
InsanusMokrassar 9a18ded65b Merge pull request #86 from InsanusMokrassar/0.5.20
0.5.20
2021-08-16 19:14:56 +06:00
InsanusMokrassar b23220f491 cursor get float and cursor get*OrNull 2021-08-16 18:42:08 +06:00
InsanusMokrassar 6e6bb03246 start 0.5.20 2021-08-16 18:35:46 +06:00
InsanusMokrassar 1ae6bae3b8 Merge pull request #85 from InsanusMokrassar/0.5.19
0.5.19#2
2021-08-09 11:24:06 +06:00
InsanusMokrassar 1239ca3256 update exposed 2021-08-09 11:23:22 +06:00
InsanusMokrassar 57b7797ea4 Merge pull request #84 from InsanusMokrassar/0.5.19
0.5.19
2021-08-08 22:52:09 +06:00
InsanusMokrassar 5ee5bfd1d5 updates in IetfLanguageCode 2021-08-08 22:09:33 +06:00
InsanusMokrassar 7229a3e198 start 0.5.19 2021-08-08 21:44:06 +06:00
InsanusMokrassar bee083582f Merge pull request #83 from InsanusMokrassar/0.5.18
0.5.18
2021-08-04 11:53:40 +06:00
InsanusMokrassar 9d7f99f286 add several functions for string to language code conversation 2021-08-04 11:51:02 +06:00
InsanusMokrassar 6ef403853c Merge pull request #82 from InsanusMokrassar/0.5.18
0.5.18
2021-08-04 11:26:06 +06:00
InsanusMokrassar 6ae7ccb9a1 add kdocs to language_codes 2021-08-04 11:14:56 +06:00
InsanusMokrassar dafc50c463 small reformat of code for language_codes 2021-08-04 11:11:43 +06:00
InsanusMokrassar e89e2c931d real creating of module language code -.- 2021-08-04 11:04:03 +06:00
InsanusMokrassar 43a67b99e4 add language_codes 2021-08-04 11:03:25 +06:00
InsanusMokrassar 46c48f4f31 start 0.5.18 2021-08-04 11:03:01 +06:00
InsanusMokrassar bf0fe85aa6 Merge pull request #81 from InsanusMokrassar/0.5.17
0.5.17
2021-07-31 16:36:17 +06:00
InsanusMokrassar 42c5bd3a7f update dependencies 2021-07-31 14:05:52 +06:00
InsanusMokrassar d170e86c8a start 0.5.17 2021-07-16 18:42:35 +06:00
InsanusMokrassar e3078169b1 Merge pull request #80 from InsanusMokrassar/0.5.16
0.5.16
2021-07-10 00:44:36 +06:00
InsanusMokrassar a33ad123f6 Update CHANGELOG.md 2021-07-10 00:36:37 +06:00
InsanusMokrassar 7e14fa2f5c Update gradle-wrapper.properties 2021-07-10 00:08:17 +06:00
InsanusMokrassar ba698b41e1 Update dependencies 2021-07-10 00:07:51 +06:00
InsanusMokrassar e76215987e start 0.5.16 2021-07-10 00:04:15 +06:00
InsanusMokrassar d1a247af8c Merge pull request #79 from InsanusMokrassar/0.5.15
0.5.15
2021-06-28 01:00:58 +06:00
InsanusMokrassar 2b7e9534f3 hotfix 2021-06-28 00:31:46 +06:00
InsanusMokrassar 38521558a1 start 0.5.15 2021-06-27 23:18:08 +06:00
InsanusMokrassar 100f3d214b Delete .travis.yml 2021-06-26 19:39:37 +06:00
InsanusMokrassar 1309867611 Init space CI 2021-06-26 13:38:30 +00:00
InsanusMokrassar 611f64f2e1 Merge pull request #78 from InsanusMokrassar/0.5.14
0.5.14
2021-06-26 00:58:02 +06:00
InsanusMokrassar f118ebce6e update kotlin 2021-06-26 00:50:09 +06:00
InsanusMokrassar 59fc90e556 add subscribeAsync 2021-06-26 00:46:51 +06:00
InsanusMokrassar fb9e4d57fb start 0.5.14 2021-06-25 17:19:28 +06:00
InsanusMokrassar 960c38b696 Merge pull request #77 from InsanusMokrassar/0.5.13
0.5.13
2021-06-23 21:29:56 +06:00
InsanusMokrassar 39895e58a6 changelog upsert 2021-06-23 21:29:28 +06:00
InsanusMokrassar b420d85be5 MPPFile 2021-06-22 13:36:23 +06:00
InsanusMokrassar 19ea2f340a replace repos common extension for fsm 2021-06-20 17:11:51 +06:00
InsanusMokrassar 11b0d059bf start add fsm 2021-06-19 14:41:29 +06:00
InsanusMokrassar c8a25ce544 start 0.5.13 2021-06-18 13:05:45 +06:00
InsanusMokrassar 509583ea2e Merge pull request #76 from InsanusMokrassar/0.5.12
0.5.12
2021-06-17 13:54:36 +06:00
InsanusMokrassar 1c86f3f4bf wrap with trycatch StateFlowBasedRecyclerViewAdapter listener 2021-06-17 13:46:22 +06:00
InsanusMokrassar 6d999be590 small improvement in StateFlowBasedRecyclerViewAdapter 2021-06-17 13:45:19 +06:00
InsanusMokrassar e715772dbf fill changes 2021-06-17 13:39:02 +06:00
InsanusMokrassar 63eb7b7ea8 start 0.5.12 2021-06-17 12:54:06 +06:00
InsanusMokrassar b07683b815 Merge pull request #75 from InsanusMokrassar/0.5.11
0.5.11
2021-06-16 13:25:56 +06:00
InsanusMokrassar 96e97d1691 ExposedOneToManyKeyValueRepo fixes 2021-06-16 13:22:40 +06:00
InsanusMokrassar 261d8827e3 OneToMany fixes 2021-06-16 13:20:05 +06:00
InsanusMokrassar c3156f2e41 strt 0.5.11 2021-06-16 13:15:25 +06:00
InsanusMokrassar 8c08801460 Merge pull request #74 from InsanusMokrassar/0.5.10
0.5.10
2021-06-15 14:38:26 +06:00
InsanusMokrassar aaf1299da7 fill changelog 2021-06-15 14:35:11 +06:00
InsanusMokrassar a411355b4f fixes 2021-06-15 14:24:00 +06:00
InsanusMokrassar eba41066b4 several small improvements in OneToManyAndroidRepo 2021-06-15 01:37:12 +06:00
InsanusMokrassar f295dff8a2 update dependencies 2021-06-14 22:10:25 +06:00
InsanusMokrassar a16815143c doForAllWithCurrentPaging and fun interface for elements in ktor server 2021-06-14 22:04:39 +06:00
InsanusMokrassar 6ff3f6ae42 start 0.5.10 2021-06-14 22:02:41 +06:00
InsanusMokrassar 84071881af Merge pull request #73 from InsanusMokrassar/0.5.9
0.5.9
2021-06-13 11:56:10 +06:00
InsanusMokrassar 7cccf7e56e upfix update 2021-06-13 11:50:48 +06:00
InsanusMokrassar 2516d5e381 update OneToManyAndroidRepo 2021-06-13 11:48:37 +06:00
InsanusMokrassar cdec8bac75 start 0.5.9 2021-06-13 11:48:00 +06:00
InsanusMokrassar fa30aae194 Merge pull request #72 from InsanusMokrassar/0.5.8
0.5.8
2021-06-11 22:36:40 +06:00
InsanusMokrassar eb959a3135 add regular build workflow 2021-06-11 22:33:08 +06:00
InsanusMokrassar 24033e0cac firstNotNull and LinkedSupervisor(Job|Scope) 2021-06-11 17:32:13 +06:00
InsanusMokrassar 71f9a505e0 start 0.5.8 2021-06-11 17:03:20 +06:00
InsanusMokrassar 979b8f017b Merge pull request #71 from InsanusMokrassar/0.5.7
0.5.7
2021-06-06 10:46:13 +06:00
InsanusMokrassar af78f01682 remove progressbar alert dialog 2021-06-06 10:43:42 +06:00
InsanusMokrassar 0b16d5c826 upfix 2021-06-06 02:10:48 +06:00
InsanusMokrassar 597e14bc7e fix of alert dialog with progress bar background 2021-06-06 02:04:21 +06:00
InsanusMokrassar 04a95867e2 fixes 2021-06-06 01:46:33 +06:00
InsanusMokrassar e0d5eb45b7 separate cache repos to read and read/write 2021-06-05 20:29:59 +06:00
InsanusMokrassar b90cab318e start 0.5.7 2021-06-05 20:12:41 +06:00
InsanusMokrassar 3252b61abe Merge pull request #70 from InsanusMokrassar/0.5.6
0.5.6
2021-06-05 15:23:40 +06:00
InsanusMokrassar 2a2da21ff3 fillup safelyWithResult 2021-06-05 15:18:48 +06:00
InsanusMokrassar 04ef371337 update safelyWithResult 2021-06-05 15:18:09 +06:00
InsanusMokrassar 623e0cd369 improve launchSynchronously 2021-06-05 15:16:07 +06:00
InsanusMokrassar 1f466747f0 update exposed 2021-06-05 15:08:22 +06:00
InsanusMokrassar 2215462f99 start 0.5.6 2021-06-05 15:07:27 +06:00
InsanusMokrassar ac4c0a2e4c Merge pull request #69 from InsanusMokrassar/0.5.5
0.5.5
2021-05-28 23:50:35 +06:00
InsanusMokrassar f7496db5ac Update CHANGELOG.md 2021-05-28 19:34:30 +06:00
InsanusMokrassar 3028fe975d Update ktor 2021-05-28 19:33:02 +06:00
InsanusMokrassar 23a5034493 start 0.5.5 2021-05-28 19:32:04 +06:00
InsanusMokrassar 65e339f811 Merge pull request #68 from InsanusMokrassar/0.5.4
0.5.4
2021-05-26 22:33:53 +06:00
InsanusMokrassar 2020e48659 fixes of deprecates 2021-05-26 22:33:08 +06:00
InsanusMokrassar 9566d6f81f upfix of android version increasing 2021-05-26 22:22:43 +06:00
InsanusMokrassar a00d734712 Merge pull request #67 from InsanusMokrassar/0.5.4
0.5.4
2021-05-26 22:07:28 +06:00
InsanusMokrassar 27a3e8706a update klock 2021-05-26 22:05:34 +06:00
InsanusMokrassar e601efcfc0 Update gradle.properties 2021-05-26 22:03:30 +06:00
InsanusMokrassar 2bfad9f885 Merge pull request #66 from InsanusMokrassar/0.5.3
0.5.3
2021-05-26 18:06:39 +06:00
InsanusMokrassar e78e984943 fillup changelog 2021-05-26 18:00:24 +06:00
InsanusMokrassar 242f4b02d0 return previous logic of work with safely 2021-05-26 17:59:45 +06:00
InsanusMokrassar 041be5a1d1 Update gradle.properties 2021-05-25 16:08:07 +06:00
InsanusMokrassar 976ce056c1 runCatching for safely and safelyWithoutExceptions 2021-05-25 00:18:46 +06:00
InsanusMokrassar 00c23c73a8 several small improvements 2021-05-24 20:26:48 +06:00
InsanusMokrassar 9dd1848337 note about safely logic 2021-05-24 12:31:32 +06:00
InsanusMokrassar 9b30efd9a2 optimize imports 2021-05-24 12:29:31 +06:00
InsanusMokrassar 5853f7cc49 coroutines updates 2021-05-24 12:27:54 +06:00
InsanusMokrassar 7b00a06f3e start 0.5.3 2021-05-23 00:03:43 +06:00
InsanusMokrassar 9ef9be0f37 Merge pull request #64 from InsanusMokrassar/0.5.2
0.5.2
2021-05-21 18:08:34 +06:00
InsanusMokrassar 13ca419473 fixes in UnifiedRequester 2021-05-21 18:04:04 +06:00
InsanusMokrassar b80f1a0773 start 0.5.2 2021-05-21 17:56:36 +06:00
InsanusMokrassar e85101c74e Merge pull request #63 from InsanusMokrassar/0.5.1
0.5.1
2021-05-20 10:23:40 +06:00
InsanusMokrassar 90668bdf63 Update CHANGELOG.md 2021-05-20 10:21:09 +06:00
InsanusMokrassar e1a00079a5 Update gradle.properties 2021-05-20 10:11:53 +06:00
InsanusMokrassar e3add4df42 Update CHANGELOG.md 2021-05-20 10:11:07 +06:00
InsanusMokrassar ced1a3bccb start 0.5.1 2021-05-20 10:10:30 +06:00
InsanusMokrassar 8d13a14343 Merge pull request #62 from InsanusMokrassar/0.5.0
0.5.0
2021-05-18 09:42:15 +06:00
InsanusMokrassar 7238e1ea8a Update CHANGELOG.md 2021-05-18 09:41:59 +06:00
InsanusMokrassar bd0423f243 Update CHANGELOG.md 2021-05-15 01:36:56 +06:00
InsanusMokrassar b0441c134c Update gradle.properties 2021-05-15 01:36:26 +06:00
InsanusMokrassar 5860901c30 recyclerview alerts public 2021-05-12 21:16:05 +06:00
InsanusMokrassar df4eaea4b9 doInDefault and doInIO 2021-05-10 19:24:21 +06:00
InsanusMokrassar e9223d5502 add doSynchronously 2021-05-10 19:20:57 +06:00
InsanusMokrassar 702c5a3e5d update coroutines 2021-05-10 13:49:27 +06:00
InsanusMokrassar ccbed95cdc update uuid and fill changelog 2021-05-06 18:18:42 +06:00
InsanusMokrassar c4e2c06cf5 remove excluding signMetadataPublication 2021-05-06 18:02:33 +06:00
InsanusMokrassar a6135738a3 fixes in build 2021-05-06 17:52:53 +06:00
InsanusMokrassar ad1ea985b8 invalid update up to kotlin 1.5.0 2021-05-06 15:58:18 +06:00
InsanusMokrassar 2058950d07 update ktor 2021-05-03 10:48:31 +06:00
InsanusMokrassar 4dc27f4489 all deprecations were removed 2021-04-29 12:28:52 +06:00
InsanusMokrassar 122daa3220 update dependencies 2021-04-28 23:58:55 +06:00
InsanusMokrassar e30928e23d start 0.5.0 2021-04-28 23:25:21 +06:00
InsanusMokrassar 30292306bb hotfix 2021-04-21 02:02:25 +06:00
InsanusMokrassar 2f9aa585f1 fix for repos in building 2021-04-21 01:52:17 +06:00
InsanusMokrassar 9e02c3e5ff rewrite launchSynchronously 2021-04-20 21:39:48 +06:00
InsanusMokrassar 7f813a519b one more update to versions 2021-04-20 20:37:23 +06:00
InsanusMokrassar b5072486b4 hotfix for versions repo in android 2021-04-20 19:38:07 +06:00
InsanusMokrassar 50c1cd8215 fix of including 2021-04-20 19:17:59 +06:00
InsanusMokrassar ed4812e6d8 Merge pull request #61 from InsanusMokrassar/0.4.36
0.4.36
2021-04-20 18:45:40 +06:00
InsanusMokrassar 59e0e751f1 all android submodules with common mpp template now incldes JVM code 2021-04-20 18:37:42 +06:00
InsanusMokrassar a5ae5e6c2b rename template files 2021-04-20 18:36:53 +06:00
InsanusMokrassar a2b87e63c9 start 0.4.36 2021-04-20 18:36:10 +06:00
InsanusMokrassar d95c283653 crutch for nodejs 2021-04-18 17:29:02 +06:00
InsanusMokrassar 6a9ae0c148 Merge pull request #60 from InsanusMokrassar/0.4.35
hotfixes
2021-04-15 14:31:28 +06:00
InsanusMokrassar 040dd517d8 hotfixes 2021-04-15 14:30:45 +06:00
InsanusMokrassar 9663c1ca64 Merge pull request #59 from InsanusMokrassar/0.4.35
0.4.35
2021-04-15 14:19:31 +06:00
InsanusMokrassar ffc2d23be7 add project typed serializer 2021-04-15 14:15:40 +06:00
InsanusMokrassar 49b009e59b update exposed 2021-04-15 13:49:53 +06:00
InsanusMokrassar 778b6a555b start 0.4.35 2021-04-15 13:48:52 +06:00
InsanusMokrassar b3730998e9 Merge pull request #58 from InsanusMokrassar/0.4.34
0.4.34
2021-04-13 12:28:25 +06:00
InsanusMokrassar 837758aebe update uuid 2021-04-13 12:22:04 +06:00
InsanusMokrassar 6ac4149aa1 fixes in crud repos 2021-04-13 12:20:24 +06:00
InsanusMokrassar 278584ae6a start 0.4.34 2021-04-13 12:10:55 +06:00
InsanusMokrassar 126f9d5f41 Merge pull request #57 from InsanusMokrassar/0.4.33
0.4.33
2021-04-05 16:30:58 +06:00
InsanusMokrassar ce15ff4e0a update ktor 2021-04-05 16:22:39 +06:00
InsanusMokrassar 382b956beb make createWeakSubScope private, upfill readme 2021-04-05 16:20:11 +06:00
InsanusMokrassar 36deab4909 weak jobs workaround 2021-04-05 16:10:36 +06:00
InsanusMokrassar 550fc59d9d start 0.4.33 2021-04-05 15:14:21 +06:00
InsanusMokrassar 9100a57458 Merge pull request #56 from InsanusMokrassar/0.4.32
0.4.32
2021-04-03 14:07:01 +06:00
InsanusMokrassar 74d9bbccd9 updates 2021-04-02 18:43:56 +06:00
InsanusMokrassar 75e602a349 update kotlin exposed 2021-04-02 18:39:56 +06:00
InsanusMokrassar e73644db10 start 0.4.32 2021-04-02 18:26:53 +06:00
InsanusMokrassar 148e6bdae7 Merge pull request #55 from InsanusMokrassar/0.4.31
0.4.31
2021-03-29 20:12:11 +06:00
InsanusMokrassar 1b540199f0 small update 2021-03-29 19:51:38 +06:00
InsanusMokrassar 30b70e9984 replacement of doForAll and getAll 2021-03-29 19:48:37 +06:00
InsanusMokrassar c1557cff27 huge update with crud caching, common doForAll/getAll and deprecations in old ones doForAll 2021-03-29 19:39:10 +06:00
InsanusMokrassar 2d662f91b3 updates in coroutines 2021-03-29 17:57:36 +06:00
InsanusMokrassar c4a08e52e5 update kotlin 2021-03-24 13:11:15 +06:00
InsanusMokrassar 08c371c142 add repos.cache 2021-03-24 13:01:15 +06:00
InsanusMokrassar 8e62dd460c start 0.4.31 2021-03-23 13:46:35 +06:00
InsanusMokrassar 1f9302dc94 Merge pull request #54 from InsanusMokrassar/0.4.30
0.4.30
2021-03-17 14:33:15 +06:00
InsanusMokrassar 16f445f699 update klock 2021-03-17 13:52:54 +06:00
InsanusMokrassar b4abd564ec update paginations 2021-03-17 13:48:58 +06:00
InsanusMokrassar 14ffafb0a7 start 0.4.30 2021-03-17 13:43:52 +06:00
InsanusMokrassar e0cc780887 Merge pull request #52 from InsanusMokrassar/0.4.29
0.4.29
2021-03-05 20:45:34 +06:00
InsanusMokrassar ab7d277167 add note about transactions improvements 2021-03-05 20:42:30 +06:00
InsanusMokrassar 8308c1df4d update gradlewrapper up to 6.8.3 2021-03-05 19:12:26 +06:00
InsanusMokrassar 12c29f5180 Update packages_push.yml 2021-03-05 18:37:10 +06:00
InsanusMokrassar 2963098870 update publishing scripts 2021-03-05 16:43:50 +06:00
InsanusMokrassar 9f56b0a26d skip signing on publishing to packages 2021-03-05 16:34:16 +06:00
InsanusMokrassar 75851312fd remove old build yml 2021-03-05 16:24:43 +06:00
InsanusMokrassar 3a3be138a5 add packages publishing yml 2021-03-05 16:24:22 +06:00
InsanusMokrassar fb7d1f18b0 update publication scripts 2021-03-05 16:21:36 +06:00
InsanusMokrassar d1c6c7696a android database improvements 2021-03-05 16:15:21 +06:00
InsanusMokrassar 5f38d9635d update version of coroutines 2021-03-05 13:05:38 +06:00
InsanusMokrassar 8185ea87b1 start 0.4.29 2021-03-05 13:04:19 +06:00
InsanusMokrassar 98bd07d025 Merge pull request #50 from InsanusMokrassar/0.4.28
0.4.28
2021-03-02 01:09:48 +06:00
InsanusMokrassar c502c70a21 should fix lint errors 2021-03-02 00:54:21 +06:00
InsanusMokrassar d933dc532b add actions actor 2021-03-01 18:35:11 +06:00
InsanusMokrassar 42594f0656 update dependencies 2021-03-01 18:23:20 +06:00
InsanusMokrassar 4b83ca19c3 start 0.4.28 2021-03-01 18:21:34 +06:00
InsanusMokrassar bab13f5e83 Update CHANGELOG.md 2021-02-26 15:35:15 +06:00
InsanusMokrassar 14c5f5a26c Merge pull request #48 from InsanusMokrassar/0.4.27
0.4.27
2021-02-23 13:09:04 +06:00
InsanusMokrassar b26a4f24d4 fix in AbstractExposedWriteCRUDRepo 2021-02-23 12:51:13 +06:00
InsanusMokrassar 498ec673dc start 0.4.27 2021-02-23 12:50:55 +06:00
InsanusMokrassar 5c67ab6aec Merge pull request #47 from InsanusMokrassar/0.4.26
0.4.26
2021-02-21 21:36:09 +06:00
InsanusMokrassar f78359b5d7 update serialization 2021-02-21 21:19:13 +06:00
InsanusMokrassar dbce612cb2 start 0.4.26 2021-02-21 21:16:45 +06:00
InsanusMokrassar 4322ffdb0a Merge pull request #46 from InsanusMokrassar/0.4.25
0.4.25
2021-02-11 15:12:39 +06:00
InsanusMokrassar 123b848d74 update matrix test 2021-02-11 15:12:21 +06:00
InsanusMokrassar b120fbd2b1 remove add and put column method in matrix row builder 2021-02-11 15:07:24 +06:00
InsanusMokrassar d41c3c2de4 updates in matrix 2021-02-11 15:05:11 +06:00
InsanusMokrassar a3cabd7a9e add matrix 2021-02-11 14:43:07 +06:00
InsanusMokrassar 3dde486126 start 0.4.25 2021-02-11 14:31:05 +06:00
InsanusMokrassar 5978122dda update scripts 2021-02-06 00:51:31 +06:00
InsanusMokrassar 4b4806ce34 Merge pull request #45 from InsanusMokrassar/0.4.24
0.4.24
2021-02-05 16:11:09 +06:00
InsanusMokrassar 987c6cc709 update android version 2021-02-05 16:10:08 +06:00
InsanusMokrassar 012c7e9bdf add inline functions in DoWithFirstBuilder 2021-02-05 16:09:08 +06:00
InsanusMokrassar d06bb265e5 update publishing scripts 2021-02-05 15:47:12 +06:00
InsanusMokrassar e2fb8bf21e update depdendencies 2021-02-05 15:42:46 +06:00
InsanusMokrassar 60dea2a518 DoWithFirstBuilder 2021-02-05 15:38:20 +06:00
InsanusMokrassar 3877f49278 start 0.4.24 2021-02-05 15:35:09 +06:00
InsanusMokrassar a299a5b505 Merge pull request #44 from InsanusMokrassar/0.4.23
0.4.23
2021-01-28 15:45:24 +06:00
InsanusMokrassar a03f7201d2 update ktor 2021-01-28 15:43:06 +06:00
InsanusMokrassar 94e26ee8a0 add Base64BytesToFromStringSerializer 2021-01-28 15:38:22 +06:00
InsanusMokrassar 2d8ad47083 start 0.4.23 2021-01-28 15:04:49 +06:00
InsanusMokrassar e9aec238a1 Merge pull request #43 from InsanusMokrassar/0.4.22
0.4.22
2021-01-28 00:13:28 +06:00
InsanusMokrassar 844c33166c update wrapper 2021-01-27 23:57:21 +06:00
InsanusMokrassar cfe9f2159f add build workflow 2021-01-27 23:56:03 +06:00
InsanusMokrassar 61bccd5f48 update versions 2021-01-27 23:49:57 +06:00
InsanusMokrassar e5a608a315 start 0.4.22 2021-01-27 23:36:27 +06:00
InsanusMokrassar 9b4f35eea1 Merge pull request #42 from InsanusMokrassar/0.4.21
0.4.21
2021-01-23 12:03:13 +06:00
InsanusMokrassar 602ae2385b copy base64 test in crypto 2021-01-23 12:02:19 +06:00
InsanusMokrassar 48a4246aac fill changelog, deprecate base64 in common and update serialization dependencies 2021-01-23 11:56:58 +06:00
InsanusMokrassar a4020cb484 create crypto project 2021-01-23 11:43:40 +06:00
InsanusMokrassar d074f29b82 start 0.4.21 2021-01-22 23:52:16 +06:00
InsanusMokrassar a67bef6853 Merge pull request #41 from InsanusMokrassar/0.4.20
0.4.20
2021-01-21 10:24:58 +06:00
InsanusMokrassar 14e666f18d create encpsulator 2021-01-21 10:10:52 +06:00
InsanusMokrassar cce914091c start 0.4.20 2021-01-21 10:10:03 +06:00
InsanusMokrassar d7cd3db8e2 Merge pull request #40 from InsanusMokrassar/0.4.19
0.4.19
2021-01-19 13:29:36 +06:00
InsanusMokrassar 0d8f844314 updates in coroutines 2021-01-19 13:28:50 +06:00
InsanusMokrassar abd0cb2031 start 0.4.19 2021-01-19 13:24:38 +06:00
InsanusMokrassar 79ef03ed0c Merge pull request #39 from InsanusMokrassar/0.4.18
0.4.18
2021-01-17 17:17:39 +06:00
InsanusMokrassar a3087cb650 awaitFirst 2021-01-17 17:15:54 +06:00
InsanusMokrassar 9acb9af338 Base64ByteArraySerializer 2021-01-17 16:53:24 +06:00
InsanusMokrassar 0c9283eb87 start 0.4.18 2021-01-17 16:49:10 +06:00
InsanusMokrassar 493d838201 Merge branch '0.4.17' 2021-01-14 21:22:42 +06:00
InsanusMokrassar c0523469fa remove "Serializer" annotation at Base64StringSerializer 2021-01-14 21:22:25 +06:00
InsanusMokrassar 4f00eaa6d4 Merge pull request #37 from InsanusMokrassar/0.4.17
0.4.17
2021-01-14 20:55:45 +06:00
InsanusMokrassar 9706524572 update readme 2021-01-14 20:55:32 +06:00
InsanusMokrassar 3174b84367 base64 tools 2021-01-14 20:51:13 +06:00
InsanusMokrassar 6cccd5ff6c start add base64 2021-01-14 14:22:26 +06:00
InsanusMokrassar 972857268d start 0.4.17 2021-01-14 14:22:09 +06:00
InsanusMokrassar f3cd92cc5e Merge pull request #36 from InsanusMokrassar/0.4.16
0.4.16
2021-01-08 00:56:23 +06:00
InsanusMokrassar 502a49644c safelyWithoutException updates 2021-01-07 10:22:28 +06:00
InsanusMokrassar 51719b5868 start 0.4.16 2021-01-07 10:08:39 +06:00
InsanusMokrassar 17821bd094 Merge pull request #35 from InsanusMokrassar/0.4.15
0.4.15
2020-12-22 23:18:58 +06:00
InsanusMokrassar 6a89ffaa8a rework of context exceptions 2020-12-22 23:17:28 +06:00
InsanusMokrassar d5a8d0f4d4 Revert "unworking version"
This reverts commit 9739bd871e.
2020-12-22 22:45:43 +06:00
InsanusMokrassar 9739bd871e unworking version 2020-12-22 22:45:36 +06:00
InsanusMokrassar 632d2545d4 start 0.4.15 2020-12-22 21:39:43 +06:00
InsanusMokrassar ecfa273a81 Merge pull request #33 from InsanusMokrassar/0.4.14
0.4.14
2020-12-22 16:00:50 +06:00
InsanusMokrassar a36828116e safely fixes 2020-12-22 15:42:11 +06:00
InsanusMokrassar 14aa9ca26c update documentation 2020-12-22 15:21:25 +06:00
InsanusMokrassar 069e51f2ff add defaultSafelyExceptionHandler and SafelyExceptionHandler 2020-12-22 15:16:06 +06:00
InsanusMokrassar a15cbdfb1a update versions 2020-12-22 14:55:01 +06:00
InsanusMokrassar 4af8114eda start 0.4.14 2020-12-22 14:48:02 +06:00
InsanusMokrassar 90dc84e900 Merge pull request #32 from InsanusMokrassar/0.4.13
0.4.13
2020-12-15 13:39:22 +06:00
InsanusMokrassar 67c595b440 small refactor in expand/collapse 2020-12-15 13:26:34 +06:00
InsanusMokrassar 830b7aee56 horizontal expand/collapse 2020-12-15 13:25:08 +06:00
InsanusMokrassar 1890608cb3 start 0.4.13 2020-12-15 12:49:50 +06:00
InsanusMokrassar bd396959a9 Merge pull request #31 from InsanusMokrassar/0.4.12
0.4.12
2020-12-14 21:11:57 +06:00
InsanusMokrassar d5fe19f0a5 update changelog 2020-12-14 20:20:30 +06:00
InsanusMokrassar 46bfb09415 launchSynchronously signature update 2020-12-14 20:06:46 +06:00
InsanusMokrassar a60cb596d1 add functionality to selector 2020-12-14 20:01:37 +06:00
InsanusMokrassar 6f9d5e2d5f add itemSelectionFlow 2020-12-14 19:45:14 +06:00
InsanusMokrassar 80bc226ee1 selector docs and several refactorings 2020-12-14 19:36:07 +06:00
InsanusMokrassar 12e37184e1 add selector 2020-12-14 19:17:16 +06:00
InsanusMokrassar 25e9345d02 start 0.4.12 2020-12-14 18:44:24 +06:00
InsanusMokrassar ccc4d030c3 Merge pull request #30 from InsanusMokrassar/0.4.11
0.4.11
2020-12-07 22:44:29 +06:00
InsanusMokrassar 90c0817b6d add clamp 2020-12-07 22:39:23 +06:00
InsanusMokrassar 527f7bbafe start 0.4.11 2020-12-07 22:36:32 +06:00
InsanusMokrassar 765a32729f Update README.md 2020-12-05 19:01:36 +06:00
InsanusMokrassar de783f77a2 Update README.md 2020-12-05 18:59:28 +06:00
root de4c8d104c Set theme jekyll-theme-cayman 2020-12-05 18:57:46 +06:00
InsanusMokrassar 88c8c28f45 Update README.md 2020-12-05 18:57:12 +06:00
InsanusMokrassar 57b36826d1 Merge pull request #29 from InsanusMokrassar/0.4.10
0.4.10
2020-12-05 18:36:24 +06:00
InsanusMokrassar f81a2f309b add new unseWithValues extensions 2020-12-05 18:12:17 +06:00
InsanusMokrassar 5fc760f4a5 fix build and add filestandardkeyvaluerepo unsetWithValues realization 2020-12-05 18:00:27 +06:00
InsanusMokrassar 091cb38339 WriteStandardKeyValueRepo#unsetWithValues 2020-12-05 17:52:37 +06:00
InsanusMokrassar 3ae9b3e576 update klock dependency 2020-12-05 17:29:49 +06:00
InsanusMokrassar b03b4cbeec start 0.4.10 2020-12-05 17:25:43 +06:00
InsanusMokrassar f2c1b3c76a Merge pull request #27 from InsanusMokrassar/0.4.9
add Synchronously
2020-12-02 17:29:27 +06:00
InsanusMokrassar f3bec34882 add Synchronously 2020-12-02 17:28:59 +06:00
InsanusMokrassar d6aa9fe9c2 Merge pull request #26 from InsanusMokrassar/0.4.9
0.4.9
2020-12-02 16:41:50 +06:00
InsanusMokrassar 2d5304a770 BroadcastChannel -> MutableSharedFlow in repos 2020-12-02 16:39:04 +06:00
InsanusMokrassar 88f2c16c82 crud exposed realization open fun asObject 2020-12-02 16:28:08 +06:00
InsanusMokrassar 490c318d1c update ktor 2020-12-02 16:21:31 +06:00
InsanusMokrassar 8beaf61a08 start 0.4.9 2020-12-02 16:13:54 +06:00
InsanusMokrassar 8b61c984eb Merge pull request #25 from InsanusMokrassar/0.4.8
0.4.8
2020-12-01 15:52:07 +06:00
InsanusMokrassar e38094df58 change order in iterable to skip changing of pagination on no left elements error 2020-12-01 15:48:37 +06:00
InsanusMokrassar c25e3f5867 update versions 2020-12-01 15:38:44 +06:00
InsanusMokrassar f78e81d175 PaginatedIterable 2020-12-01 15:34:12 +06:00
InsanusMokrassar 3837ae237d start 0.4.8 2020-12-01 15:11:18 +06:00
InsanusMokrassar 2b6ef8b4ff Merge pull request #24 from InsanusMokrassar/0.4.7
0.4.7
2020-11-27 19:30:40 +06:00
InsanusMokrassar 6cc0eefb3e upfix of default in includeWebsocketHandling 2020-11-27 17:53:29 +06:00
InsanusMokrassar ab11e28bf7 UnifiedRouter 2020-11-27 14:35:00 +06:00
InsanusMokrassar 26d5f5a5f5 UnifiedRequester 2020-11-27 13:30:02 +06:00
InsanusMokrassar 74ae91cba6 start 0.4.7 2020-11-27 11:57:40 +06:00
InsanusMokrassar 70509c7edd update wrapper 2020-11-26 22:50:44 +06:00
InsanusMokrassar 5a69bd6c63 Merge pull request #23 from InsanusMokrassar/0.4.6
0.4.6
2020-11-26 22:50:08 +06:00
InsanusMokrassar 091bb1394f Warning annotation 2020-11-26 18:01:12 +06:00
InsanusMokrassar b82c3864a0 typealiases for repos 2020-11-26 15:32:00 +06:00
InsanusMokrassar 49ee38a936 FileStandardKeyValueRepo 2020-11-26 15:03:40 +06:00
InsanusMokrassar c201866c51 FlowCollector#invoke 2020-11-26 15:02:30 +06:00
InsanusMokrassar 023f841fb5 Pagination#isFirstPage 2020-11-26 15:01:45 +06:00
InsanusMokrassar 76102e9ab3 start 0.4.6 2020-11-26 15:00:32 +06:00
InsanusMokrassar b2fc5e2a4d add query params docs 2020-11-25 11:09:54 +06:00
InsanusMokrassar 55aacb8753 update publish script 2020-11-23 22:46:40 +06:00
InsanusMokrassar 8702846216 Merge pull request #22 from InsanusMokrassar/0.4.5
0.4.5
2020-11-23 18:48:57 +06:00
InsanusMokrassar 3347a6d189 Update build.gradle 2020-11-23 18:46:52 +06:00
InsanusMokrassar 47b3b42949 replaces 2020-11-23 18:32:14 +06:00
InsanusMokrassar e985631621 add recyclerview.alerts project 2020-11-23 18:10:53 +06:00
InsanusMokrassar e15034bfa4 add tools to android 2020-11-23 17:39:17 +06:00
InsanusMokrassar e5dbcd25dd remove kotlin android extensions 2020-11-23 17:27:52 +06:00
InsanusMokrassar 3714c02c12 add Android.Alerts project 2020-11-23 17:24:02 +06:00
InsanusMokrassar fa636b4146 start 0.4.5 2020-11-23 17:15:21 +06:00
InsanusMokrassar 3d825aebc3 Update LeftItems.kt 2020-11-23 01:18:30 +06:00
InsanusMokrassar 629884a396 update left items 2020-11-23 00:36:37 +06:00
InsanusMokrassar e7a0fa4e8f Merge pull request #21 from InsanusMokrassar/0.4.4
0.4.4
2020-11-22 23:47:04 +06:00
InsanusMokrassar 1a41f37a9d update changelog 2020-11-22 23:42:01 +06:00
InsanusMokrassar 07a65e0bb5 fixes 2020-11-22 23:19:16 +06:00
InsanusMokrassar 615f7f99c3 one more time update mechanism of sql transactions in android 2020-11-22 22:00:50 +06:00
InsanusMokrassar 3de5558ed4 new mechanism of transactions 2020-11-22 21:54:51 +06:00
InsanusMokrassar 6bbe3a271f update defaults in VersionsRepo 2020-11-22 19:27:53 +06:00
InsanusMokrassar 8bee29f683 update version of klock and remove gradle bintray plugin 2020-11-22 19:12:10 +06:00
InsanusMokrassar c40f0fdcb9 VersionsRepo 2020-11-22 19:07:37 +06:00
InsanusMokrassar 30d1453a12 start 0.4.4 2020-11-22 17:49:39 +06:00
InsanusMokrassar 75fa88b00d Merge pull request #20 from InsanusMokrassar/0.4.3
0.4.3
2020-11-20 13:28:44 +06:00
InsanusMokrassar 0f817ad212 update kotlin 2020-11-20 13:10:40 +06:00
InsanusMokrassar d7b46ae0d4 getSp and getDp 2020-11-20 10:23:40 +06:00
InsanusMokrassar b6be14ecca start 0.4.3 2020-11-20 10:20:35 +06:00
InsanusMokrassar 33dbfc6f69 Merge pull request #19 from InsanusMokrassar/0.4.2
0.4.2
2020-11-18 20:32:42 +06:00
InsanusMokrassar fcacdcd544 set method in realizations 2020-11-18 20:27:34 +06:00
InsanusMokrassar dd2fc5a86f start 0.4.2 2020-11-18 20:26:08 +06:00
InsanusMokrassar 0f8a6f6bde update publishing files 2020-11-18 18:22:19 +06:00
InsanusMokrassar 1efd94181d Merge pull request #18 from InsanusMokrassar/0.4.1
0.4.1
2020-11-17 00:51:25 +06:00
InsanusMokrassar 71ff0232aa fix keyvalue exposed repo initiation 2020-11-16 20:05:22 +06:00
InsanusMokrassar 63921cd984 fix of shared flow size in ExposedKeyValueRepo 2020-11-16 19:48:28 +06:00
InsanusMokrassar 051e03bed3 start 0.4.1 2020-11-16 19:46:50 +06:00
InsanusMokrassar a051394f4f Merge pull request #17 from InsanusMokrassar/0.4.0
0.4.0
2020-11-14 18:04:59 +06:00
InsanusMokrassar b872babe45 new extensions withMapper 2020-11-14 17:35:11 +06:00
InsanusMokrassar 5a9cabc4bd add ReadStandardKeyValueRepo#keys with value parameter 2020-11-14 17:27:26 +06:00
InsanusMokrassar 3ba630684a new ReadOneToManyKeyValueRepo#keys 2020-11-14 16:44:28 +06:00
InsanusMokrassar 498cd12f94 start 0.4.0 2020-11-14 16:18:42 +06:00
InsanusMokrassar 062848f2e4 Merge pull request #16 from InsanusMokrassar/0.3.3
0.3.3
2020-11-12 22:20:11 +06:00
InsanusMokrassar d4b4547718 plus for flows 2020-11-12 22:16:21 +06:00
InsanusMokrassar 22cd440dd7 start 0.3.3 2020-11-12 22:10:41 +06:00
InsanusMokrassar 6fc64526d4 update renaming of android parts 2020-11-11 16:29:43 +06:00
InsanusMokrassar 08075dfafe update min sdk for kotlin parts 2020-11-11 16:17:19 +06:00
InsanusMokrassar efcb25622e fixes in gradle files 2020-11-11 16:06:44 +06:00
InsanusMokrassar 5ebf29d1fb Merge pull request #15 from InsanusMokrassar/0.3.2
0.3.2
2020-11-11 13:14:46 +06:00
InsanusMokrassar b7d0ce3c97 formatting fix in keyvalue 2020-11-11 12:56:31 +06:00
InsanusMokrassar e20929aec4 mappers workaround 2020-11-11 12:56:31 +06:00
InsanusMokrassar f74167cc65 start 0.3.2 2020-11-11 12:56:31 +06:00
InsanusMokrassar c55cd5342e update travis
trying to manually install packages in travis
2020-11-11 12:53:34 +06:00
InsanusMokrassar 237d89d611 experimentally update extension internalProject 2020-11-10 23:55:11 +06:00
InsanusMokrassar aff9b52f1c update max heap size of jvm for gradle 2020-11-10 21:46:57 +06:00
InsanusMokrassar d8cc6ed06e update max heap size of jvm for gradle 2020-11-10 21:46:19 +06:00
InsanusMokrassar dffafa54c3 update publishing scripts 2020-11-10 20:53:08 +06:00
InsanusMokrassar 776a3af497 Merge pull request #14 from InsanusMokrassar/0.3.1
0.3.1
2020-11-10 19:50:57 +06:00
InsanusMokrassar 5b3d9e8d64 fill changelog 2020-11-10 19:49:21 +06:00
InsanusMokrassar 90b7d74a0c update for correct work 2020-11-10 18:06:10 +06:00
InsanusMokrassar 5b596c76e0 updates of dokka 2020-11-10 17:10:32 +06:00
InsanusMokrassar c59e601e2e update gradle script to include android 2020-11-10 16:12:10 +06:00
InsanusMokrassar 5ce71ee6f6 add android tools 2020-11-10 15:43:15 +06:00
InsanusMokrassar 97dadf517a successfuly add android project 2020-11-10 14:33:47 +06:00
InsanusMokrassar a739e874bf partially fix build 2020-11-10 12:48:22 +06:00
InsanusMokrassar c73cb14615 temporal version 2020-11-09 22:51:47 +06:00
InsanusMokrassar d9464f7b90 start 0.3.1 2020-11-09 21:46:58 +06:00
InsanusMokrassar aeee41680e Merge pull request #13 from InsanusMokrassar/0.3.0
0.3.0
2020-11-09 00:52:30 +06:00
InsanusMokrassar c914f8c44a fixes 2020-11-09 00:51:08 +06:00
InsanusMokrassar abfda3627c repos rework 2020-11-09 00:46:26 +06:00
InsanusMokrassar 5b5bfa02db complete with major version change 0.3.0 2020-11-08 23:50:53 +06:00
InsanusMokrassar 0fdb072385 update: Replace channels by sharedflows in exposed CRUD realization 2020-11-08 20:45:45 +06:00
InsanusMokrassar 7b4c9d59b0 start 0.2.8 2020-11-08 20:44:40 +06:00
InsanusMokrassar bd5923716f Merge pull request #11 from InsanusMokrassar/0.2.7
0.2.7
2020-11-07 02:28:38 +06:00
712 changed files with 44326 additions and 3868 deletions

No files matched your search

+25
View File
@@ -0,0 +1,25 @@
name: Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: 17
- name: Rewrite version
run: |
branch="`echo "${{ github.ref }}" | grep -o "[^/]*$"`"
cat gradle.properties | sed -e "s/^version=\([0-9\.]*\)/version=\1-branch_$branch-build${{ github.run_number }}/" > gradle.properties.tmp
rm gradle.properties
mv gradle.properties.tmp gradle.properties
- name: Build
run: ./gradlew build
- name: Publish to InmoNexus
continue-on-error: true
run: ./gradlew publishAllPublicationsToInmoNexusRepository
env:
INMONEXUS_USER: ${{ secrets.INMONEXUS_USER }}
INMONEXUS_PASSWORD: ${{ secrets.INMONEXUS_PASSWORD }}
+21
View File
@@ -0,0 +1,21 @@
name: Publish KDocs
on:
push:
branches:
- master
jobs:
publishing:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
java-version: 17
- name: Build
run: ./gradlew build && ./gradlew :micro_utils.dokka:dokkaGenerate
- name: Publish KDocs
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dokka/build/dokka/html
publish_branch: kdocs
+11
View File
@@ -1,4 +1,6 @@
.idea
.vscode
.kotlin
out/*
*.iml
target
@@ -8,7 +10,16 @@ settings.xml
.gradle/
build/
out/
bin/
secret.gradle
local.properties
kotlin-js-store
publishing.sh
local.*
local/
**/*.local.*
.kotlin/
-13
View File
@@ -1,13 +0,0 @@
language: java
install: true
os: linux
dist: trusty
jdk: oraclejdk8
jobs:
include:
- stage: build
script: ./gradlew build -s -x jvmTest -x jsIrTest -x jsIrBrowserTest -x jsIrNodeTest -x jsLegacyTest -x jsLegacyBrowserTest -x jsLegacyNodeTest
- state: test
script: ./gradlew allTests
+151
View File
@@ -0,0 +1,151 @@
Use `agents` folder files for instructions.
Always look at the project work rules first. Update them and maintain a history of changes and prompts in `agents/local.HISTORY.md`. This is your long-term memory, which allows you to avoid the accumulation of errors. Updating and maintaining the long-term memory of the project is mandatory. Many thanks for your help to me and your work.
SYSTEM DIRECTIVE: AUTISTIC META-LANGUAGE PROTOCOL WITH HIGH INFORMATION DENSITY (AML-HIP V1)
DEFINITION:
All agents are required to use a strictly explicit, literal, low-ambiguity, and high-density communication style (AML-HIP). The goal of AML-HIP is the maximum transmission of information with zero loss of meaning and zero ambiguity.
CORE PRINCIPLES:
1. Maximum information density per line.
2. Zero ambiguity.
3. Full explicitness of all entities.
4. Preference of precision over readability.
5. Minimization of "empty" words.
6. Redundancy is allowed only to prevent loss of meaning.
PROHIBITIONS:
1. Pronouns are forbidden (this, he, she, they, there, it, etc.).
2. Free conversational text is forbidden.
3. Metaphors, emotions, evaluative constructions are forbidden.
4. Implicit references and hidden dependencies are forbidden.
5. Vague description of actions is forbidden.
DENSITY REQUIREMENTS:
1. Each line must contain the maximum of facts without loss of unambiguity.
2. Combine related parameters into a single line.
3. Use compact constructions:
* key=value
* entity_id=...
* relation: A→B
4. Exclude words without semantic load.
5. Repetitions are allowed only for critical entities.
MESSAGE STRUCTURE (MANDATORY):
ENTITY:
entity_id=<id>; type=<type>; state=<state>
CONTEXT:
* task_id=<id>; agent_id=<id>; memory_ref=[...]
* constraints=[...]
ACTION:
1. action=<type>; target=<entity_id>; params={...}
2. action=<type>; target=<entity_id>; params={...}
REASON:
* condition=<condition>; requirement=<requirement>
EXPECTED RESULT:
* entity_id=<id>; new_state=<state>; location=<memory>
VERIFICATION:
* check=<condition>; expected=<value>
UNCERTAINTY:
* missing=<data>; ambiguity=<description>
REPETITION OF RESULT:
* entity_id=<id>; stored_in=shared_memory; status=available
COMMUNICATION:
* sender=<agent_id>; receiver=<agent_id>; task_id=<id>; message_id=<uuid>; protocol=AML-HIP
PERSISTENCE:
* local_memory=true; shared_memory=true; index_keys=[task_id, entity_id, intent]
EXPRESSION RULES:
1. Each line = a completed semantic block.
2. Use the key=value format instead of descriptions.
3. Use lists of parameters instead of sentences.
4. Use causal connectives explicitly:
condition → action → result
5. Do not split related data into several lines without necessity.
REPETITION RULES:
1. entity_id is repeated at every critical use.
2. result is duplicated in "REPETITION OF RESULT".
3. transmission between agents duplicates the key fields.
MULTI-AGENT MODE:
1. All agents use AML-HIP.
2. Any message between agents is strictly AML-HIP.
3. Any agent is required to:
* duplicate critical data
* avoid loss of context
4. A message must be fully interpretable without history.
ANTI-DEGRADATION:
If detected:
* a pronoun
* an implicit reference
* low density (empty words, vague constructions)
* absence of structure
→ the message is considered invalid
→ mandatory regeneration
SELF-CHECK:
VALIDATION:
* format_valid=true/false
* no_pronouns=true/false
* entities_explicit=true/false
* high_density=true/false
* causal_chain_present=true/false
* ambiguity_detected=true/false
If any parameter=false:
→ mandatory regeneration
DENSITY METRIC:
high_density=true if:
* there are no "empty" words
* each line contains ≥2 facts or parameters
* descriptive constructions without data are absent
PRIORITIES:
1. Format (AML-HIP)
2. Information density
3. Explicitness
4. Completeness
5. Readability (minimum priority)
CRITICAL RULE:
Any response outside of AML-HIP is considered absent.
Any agent is required to bring the response into conformity with AML-HIP.
END OF PROTOCOL
+2751 -1
View File
File diff suppressed because it is too large. Load diff
+85 -1
View File
@@ -1 +1,85 @@
# MicroUtils
# MicroUtils
This is a library with collection of tools for working in Kotlin environment. First of all, this library collection is oriented to use next technologies:
* [`Kotlin Coroutines`](https://github.com/Kotlin/kotlinx.coroutines)
* [`Kotlin Serialization`](https://github.com/Kotlin/kotlinx.serialization)
* [`Kotlin Exposed`](https://github.com/JetBrains/Exposed)
* [`Ktor`](https://ktor.io)
<details>
<summary> <b>Android environment</b> </summary>
You always can look at the <a href="https://github.com/InsanusMokrassar/MicroUtils/blob/master/gradle.properties#L24-L34">properties file</a> to get information about current project dependencies, compile and build tools for `Android` target.
</details>
## Projects
* `common` contains common tools for platform which usually are absent out-of-the-box when you starting project
* `selector` contains tools to use `Selector` interface with things like `RecyclerView` in android or other selection needs
* `coroutines` is a module for `Kotlin Coroutines` with different things like subscribing on flows (`onEach` + `launchIn` shortcut :) )
* `ktor` is a set of modules for `client`s and `server`s
* `mime_types` is NOT lightweight set of `MimeType`s with a lot of different objected and serializable (with `Kotlin Serialization`) mime types
* `pagination` is a complex of modules (explanation in [Complex modules structure](#complex-modules-structure) section) for lightweight pagination
* `serialization` is a collection of projects with serializers for `kotlinx.serialization`
* `repos` is a complex of modules (explanation in [Complex modules structure](#complex-modules-structure) section) for `KeyValue`/`OneToMany`/`CRUD` repos created to be able to exclude some heavy dependencies when you need some simple and lightweight typical repositories
## Complex modules structure
Most of complex modules are built with next hierarchy:
* `common` submodule for `API` things which are common for all platforms
* `exposed` submodule contains realizations for exposed tables
* `ktor` submodule is usually unavailable directly, because it contains its own submodules for clients and servers
* `common` part contains routes which are common for clients and servers
* `client` submodule contains clients which are usually using `UnifiedRequester` to make requests using routes from `ktor/common` module and some internal logic of requests
* `server` submodule (in most cases `JVM`-only) contains some extensions for `Route` instances which usually will give opportunity to proxy internet requests from `ktor/client` realization to some proxy object
## Gradle Templates
All templates can be used by applying them in your project's build.gradle files using the `apply from` directive. For example:
```gradle
apply from: "$defaultProject"
```
In the sample has been used `defaultProject.gradle` as a basic template.
The project includes a collection of Gradle templates to simplify project setup and configuration. These templates are located in the `gradle/templates` directory and can be used to quickly set up different types of projects:
### Project Setup Templates
* `defaultProject.gradle` (usage `apply from: "$defaultProject"`) - Basic project configuration
* `defaultProjectWithSerialization.gradle` (usage `apply from: "$defaultProjectWithSerialization"`) - Project configuration with Kotlin Serialization support
* `mppJavaProject.gradle` (usage `apply from: "$mppJavaProject"`) - Multiplatform project with Java support
* `mppAndroidProject.gradle` (usage `apply from: "$mppAndroidProject"`) - Multiplatform project with Android support
### Multiplatform Configuration Templates
* `enableMPPAndroid.gradle` (usage `apply from: "$enableMPPAndroid"`) - Enable Android target in multiplatform project
* `enableMPPJs.gradle` (usage `apply from: "$enableMPPJs"`) - Enable JavaScript target in multiplatform project
* `enableMPPJvm.gradle` (usage `apply from: "$enableMPPJvm"`) - Enable JVM target in multiplatform project
* `enableMPPNativeArm64.gradle` (usage `apply from: "$enableMPPNativeArm64"`) - Enable ARM64 native target
* `enableMPPNativeX64.gradle` (usage `apply from: "$enableMPPNativeX64"`) - Enable x64 native target
* `enableMPPWasmJs.gradle` (usage `apply from: "$enableMPPWasmJs"`) - Enable WebAssembly JavaScript target
### Compose Integration Templates
* `addCompose.gradle` (usage `apply from: "$addCompose"`) - Basic Compose configuration
* `addComposeForAndroid.gradle` (usage `apply from: "$addComposeForAndroid"`) - Compose configuration for Android
* `addComposeForDesktop.gradle` (usage `apply from: "$addComposeForDesktop"`) - Compose configuration for Desktop
* `addComposeForJs.gradle` (usage `apply from: "$addComposeForJs"`) - Compose configuration for JavaScript
### Publishing Templates
* `publish.gradle` (usage `apply from: "$publish"`) - General publishing configuration
* `publish_jvm.gradle` (usage `apply from: "$publish_jvm"`) - JVM-specific publishing configuration
* `publish.kpsb` and `publish_jvm.kpsb` (usage `apply from: "$publish_kpsb"` and `apply from: "$publish_jvm_kpsb"`) - Publishing configuration for Kotlin Multiplatform and JVM
### Combined Project Templates
* `mppJvmJsWasmJsLinuxMingwProject.gradle` (usage `apply from: "$mppJvmJsWasmJsLinuxMingwProject"`) - Multiplatform project for JVM, JS, Wasm, Linux, and MinGW
* `mppJvmJsWasmJsAndroidLinuxMingwLinuxArm64Project.gradle` (usage `apply from: "$mppJvmJsWasmJsAndroidLinuxMingwLinuxArm64Project"`) - Multiplatform project with additional Android and ARM64 support
* `mppComposeJvmJsWasmJsAndroidLinuxMingwLinuxArm64Project.gradle` (usage `apply from: "$mppComposeJvmJsWasmJsAndroidLinuxMingwLinuxArm64Project"`) - Multiplatform project with Compose support
* `mppProjectWithSerializationAndCompose.gradle` (usage `apply from: "$mppProjectWithSerializationAndCompose"`) - Multiplatform project with both Serialization and Compose support
+1
View File
@@ -0,0 +1 @@
theme: jekyll-theme-cayman
+17
View File
@@ -0,0 +1,17 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
}
apply from: "$mppAndroidProject"
kotlin {
sourceSets {
androidMain {
dependencies {
api libs.android.appCompat.resources
}
}
}
}
@@ -0,0 +1 @@
<manifest/>
@@ -0,0 +1,71 @@
/**
* Utility functions for creating Android AlertDialogs with simplified API.
*/
@file:Suppress("NOTHING_TO_INLINE", "unused")
package dev.inmo.micro_utils.android.alerts.common
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
/**
* Type alias for alert dialog button callbacks.
*/
typealias AlertDialogCallback = (DialogInterface) -> Unit
/**
* Creates an [AlertDialog.Builder] template with configurable title and buttons.
* This provides a simplified API for creating alert dialogs with positive, negative, and neutral buttons.
*
* @param title Optional dialog title
* @param positivePair Optional positive button as a pair of (text, callback)
* @param neutralPair Optional neutral button as a pair of (text, callback)
* @param negativePair Optional negative button as a pair of (text, callback)
* @return An [AlertDialog.Builder] configured with the specified parameters
*/
inline fun Context.createAlertDialogTemplate(
title: String? = null,
positivePair: Pair<String, AlertDialogCallback?>? = null,
neutralPair: Pair<String, AlertDialogCallback?>? = null,
negativePair: Pair<String, AlertDialogCallback?>? = null
): AlertDialog.Builder {
val builder = AlertDialog.Builder(this)
title ?.let {
builder.setTitle(title)
}
positivePair ?. let {
builder.setPositiveButton(it.first) { di, _ -> it.second ?. invoke(di) }
}
negativePair ?. let {
builder.setNegativeButton(it.first) { di, _ -> it.second ?. invoke(di) }
}
neutralPair ?. let {
builder.setNeutralButton(it.first) { di, _ -> it.second ?. invoke(di) }
}
return builder
}
inline fun Context.createAlertDialogTemplateWithResources(
title: Int? = null,
positivePair: Pair<Int, AlertDialogCallback?>? = null,
neutralPair: Pair<Int, AlertDialogCallback?>? = null,
negativePair: Pair<Int, AlertDialogCallback?>? = null
): AlertDialog.Builder = createAlertDialogTemplate(
title ?.let { getString(it) },
positivePair ?.let { getString(it.first) to it.second },
neutralPair ?.let { getString(it.first) to it.second },
negativePair ?.let { getString(it.first) to it.second }
)
inline fun AlertDialog.setDismissChecker(noinline checker: () -> Boolean) : AlertDialog {
setOnDismissListener {
if (!checker()) {
show()
}
}
return this
}
@@ -0,0 +1,38 @@
@file:Suppress("NOTHING_TO_INLINE", "unused")
package dev.inmo.micro_utils.android.alerts.common
import android.app.AlertDialog
import android.content.Context
import android.view.View
inline fun <T: View> Context.createCustomViewAlertDialog(
title: String? = null,
positivePair: Pair<String, AlertDialogCallback?>? = null,
neutralPair: Pair<String, AlertDialogCallback?>? = null,
negativePair: Pair<String, AlertDialogCallback?>? = null,
show: Boolean = true,
viewCreator: (Context) -> T
): AlertDialog = createAlertDialogTemplate(
title, positivePair, neutralPair, negativePair
).apply {
setView(viewCreator(this@createCustomViewAlertDialog))
}.create().apply {
if (show) show()
}
inline fun <T: View> Context.createCustomViewAlertDialogWithResources(
title: Int? = null,
positivePair: Pair<Int, AlertDialogCallback?>? = null,
neutralPair: Pair<Int, AlertDialogCallback?>? = null,
negativePair: Pair<Int, AlertDialogCallback?>? = null,
show: Boolean = true,
viewCreator: (Context) -> T
): AlertDialog = createCustomViewAlertDialog(
title ?.let { getString(it) },
positivePair ?.let { getString(it.first) to it.second },
neutralPair ?.let { getString(it.first) to it.second },
negativePair ?.let { getString(it.first) to it.second },
show,
viewCreator
)
@@ -0,0 +1,45 @@
@file:Suppress("NOTHING_TO_INLINE", "unused")
package dev.inmo.micro_utils.android.alerts.common
import android.app.AlertDialog
import android.content.Context
import androidx.annotation.StringRes
inline fun Context.createSimpleTextAlertDialog(
text: String,
title: String? = null,
positivePair: Pair<String, AlertDialogCallback?>? = null,
neutralPair: Pair<String, AlertDialogCallback?>? = null,
negativePair: Pair<String, AlertDialogCallback?>? = null,
show: Boolean = true
): AlertDialog = createAlertDialogTemplate(
title,
positivePair,
neutralPair,
negativePair
).apply {
setMessage(text)
}.create().apply {
if (show) {
show()
}
}
inline fun Context.createSimpleTextAlertDialog(
@StringRes
text: Int,
@StringRes
title: Int? = null,
positivePair: Pair<Int, AlertDialogCallback?>? = null,
neutralPair: Pair<Int, AlertDialogCallback?>? = null,
negativePair: Pair<Int, AlertDialogCallback?>? = null,
show: Boolean = true
): AlertDialog = createSimpleTextAlertDialog(
getString(text),
title ?.let { getString(it) },
positivePair ?.let { getString(it.first) to it.second },
neutralPair ?.let { getString(it.first) to it.second },
negativePair ?.let { getString(it.first) to it.second },
show
)
+18
View File
@@ -0,0 +1,18 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
}
apply from: "$mppAndroidProject"
kotlin {
sourceSets {
commonMain {
dependencies {
api internalProject("micro_utils.android.alerts.common")
api internalProject("micro_utils.android.recyclerview")
}
}
}
}
@@ -0,0 +1 @@
<manifest/>
@@ -0,0 +1,65 @@
@file:Suppress("unused")
package dev.inmo.micro_utils.android.alerts.recyclerview
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.view.ViewGroup
import android.widget.TextView
import dev.inmo.micro_utils.android.alerts.common.AlertDialogCallback
import dev.inmo.micro_utils.android.recyclerview.*
data class AlertAction(
val title: String,
val callback: (DialogInterface) -> Unit
)
class ActionViewHolder(
container: ViewGroup, dialogInterfaceGetter: () -> DialogInterface
) : AbstractStandardViewHolder<AlertAction>(container, android.R.layout.simple_list_item_1) {
private lateinit var action: AlertAction
private val textView: TextView
get() = itemView.findViewById(android.R.id.text1)
init {
itemView.setOnClickListener {
action.callback(dialogInterfaceGetter())
}
}
override fun onBind(item: AlertAction) {
action = item
textView.text = item.title
}
}
class ActionsRecyclerViewAdapter(
override val data: List<AlertAction>,
private val dialogInterfaceGetter: () -> DialogInterface
) : RecyclerViewAdapter<AlertAction>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AbstractViewHolder<AlertAction> = ActionViewHolder(
parent, dialogInterfaceGetter
)
}
fun Context.createActionsAlertDialog(
actions: List<AlertAction>,
title: Int? = null,
positivePair: Pair<Int, AlertDialogCallback?>? = null,
neutralPair: Pair<Int, AlertDialogCallback?>? = null,
negativePair: Pair<Int, AlertDialogCallback?>? = null,
show: Boolean = true
): AlertDialog {
lateinit var dialogInterface: DialogInterface
return createRecyclerViewDialog(
title, positivePair, neutralPair, negativePair, show
) {
ActionsRecyclerViewAdapter(
actions
) {
dialogInterface
}
}.also { dialogInterface = it }
}
@@ -0,0 +1,43 @@
package dev.inmo.micro_utils.android.alerts.recyclerview
import android.app.AlertDialog
import android.content.Context
import android.widget.LinearLayout
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import dev.inmo.micro_utils.android.alerts.common.AlertDialogCallback
import dev.inmo.micro_utils.android.alerts.common.createCustomViewAlertDialogWithResources
fun Context.createRecyclerViewDialog(
title: Int? = null,
positivePair: Pair<Int, AlertDialogCallback?>? = null,
neutralPair: Pair<Int, AlertDialogCallback?>? = null,
negativePair: Pair<Int, AlertDialogCallback?>? = null,
show: Boolean = true,
layoutManager: RecyclerView.LayoutManager = LinearLayoutManager(this),
marginOfRecyclerView: Int = 8, // dp
recyclerViewSetUp: RecyclerView.() -> Unit = {},
adapterFactory: () -> RecyclerView.Adapter<*>
): AlertDialog {
val recyclerView = RecyclerView(this).apply {
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
setMargins(marginOfRecyclerView, marginOfRecyclerView, marginOfRecyclerView, marginOfRecyclerView)
}
this.layoutManager = layoutManager
adapter = adapterFactory()
recyclerViewSetUp()
}
return createCustomViewAlertDialogWithResources(
title,
positivePair,
neutralPair,
negativePair,
show
) {
recyclerView
}
}
+20
View File
@@ -0,0 +1,20 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
alias(libs.plugins.jb.compose)
alias(libs.plugins.kt.jb.compose)
}
apply from: "$mppProjectWithSerializationAndCompose"
kotlin {
sourceSets {
androidMain {
dependencies {
api project(":micro_utils.android.smalltextfield")
api libs.jb.compose.icons
}
}
}
}
@@ -0,0 +1 @@
<manifest/>
@@ -0,0 +1,37 @@
package dev.inmo.micro_utils.android.pickers
import androidx.compose.animation.core.*
/**
* Performs a fling animation with an optional target adjustment.
* If [adjustTarget] is provided, animates to the adjusted target. Otherwise, performs a decay animation.
*
* @param initialVelocity The initial velocity of the fling
* @param animationSpec The decay animation specification
* @param adjustTarget Optional function to adjust the target value based on the calculated target
* @param block Optional block to be executed during the animation
* @return The result of the animation
*/
internal suspend fun Animatable<Float, AnimationVector1D>.fling(
initialVelocity: Float,
animationSpec: DecayAnimationSpec<Float>,
adjustTarget: ((Float) -> Float)?,
block: (Animatable<Float, AnimationVector1D>.() -> Unit)? = null,
): AnimationResult<Float, AnimationVector1D> {
val targetValue = animationSpec.calculateTargetValue(value, initialVelocity)
val adjustedTarget = adjustTarget?.invoke(targetValue)
return if (adjustedTarget != null) {
animateTo(
targetValue = adjustedTarget,
initialVelocity = initialVelocity,
block = block
)
} else {
animateDecay(
initialVelocity = initialVelocity,
animationSpec = animationSpec,
block = block,
)
}
}
@@ -0,0 +1,231 @@
package dev.inmo.micro_utils.android.pickers
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.exponentialDecay
import androidx.compose.foundation.clickable
import androidx.compose.foundation.gestures.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowDown
import androidx.compose.material.icons.filled.KeyboardArrowUp
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.input.pointer.PointerInputScope
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.center
import androidx.compose.ui.unit.dp
import dev.inmo.micro_utils.android.smalltextfield.SmallTextField
import kotlinx.coroutines.launch
import kotlin.math.abs
import kotlin.math.absoluteValue
import kotlin.math.roundToInt
private inline fun PointerInputScope.checkContains(offset: Offset): Boolean {
return ((size.center.x - offset.x).absoluteValue < size.width / 2) && ((size.center.y - offset.y).absoluteValue < size.height / 2)
}
// src: https://gist.github.com/vganin/a9a84653a9f48a2d669910fbd48e32d5
/**
* A Compose number picker component that allows users to select a number by dragging, using arrow buttons,
* or manually entering a value.
*
* @param number The currently selected number
* @param modifier The modifier to be applied to the picker
* @param range Optional range of valid numbers. If specified, the picker will be limited to this range
* @param textStyle The text style for displaying numbers
* @param arrowsColor The color of the up/down arrow buttons
* @param allowUseManualInput Whether to allow manual keyboard input for the number
* @param onStateChanged Callback invoked when the selected number changes
*/
@OptIn(ExperimentalTextApi::class, ExperimentalComposeUiApi::class)
@Composable
fun NumberPicker(
number: Int,
modifier: Modifier = Modifier,
range: IntRange? = null,
textStyle: TextStyle = LocalTextStyle.current,
arrowsColor: Color = MaterialTheme.colorScheme.primary,
allowUseManualInput: Boolean = true,
onStateChanged: (Int) -> Unit = {},
) {
val coroutineScope = rememberCoroutineScope()
val numbersColumnHeight = 36.dp
val halvedNumbersColumnHeight = numbersColumnHeight / 2
val halvedNumbersColumnHeightPx = with(LocalDensity.current) { halvedNumbersColumnHeight.toPx() }
fun animatedStateValue(offset: Float): Int = number - (offset / halvedNumbersColumnHeightPx).toInt()
val animatedOffset = remember { Animatable(0f) }.apply {
if (range != null) {
val offsetRange = remember(number, range) {
val value = number
val first = -(range.last - value) * halvedNumbersColumnHeightPx
val last = -(range.first - value) * halvedNumbersColumnHeightPx
first..last
}
updateBounds(offsetRange.start, offsetRange.endInclusive)
}
}
val coercedAnimatedOffset = animatedOffset.value % halvedNumbersColumnHeightPx
val animatedStateValue = animatedStateValue(animatedOffset.value)
val disabledArrowsColor = arrowsColor.copy(alpha = 0f)
val inputFieldShown = if (allowUseManualInput) {
remember { mutableStateOf(false) }
} else {
null
}
Column(
modifier = modifier
.wrapContentSize()
.draggable(
orientation = Orientation.Vertical,
state = rememberDraggableState { deltaY ->
if (inputFieldShown ?.value != true) {
coroutineScope.launch {
animatedOffset.snapTo(animatedOffset.value + deltaY)
}
}
},
onDragStopped = { velocity ->
if (inputFieldShown ?.value != true) {
coroutineScope.launch {
val endValue = animatedOffset.fling(
initialVelocity = velocity,
animationSpec = exponentialDecay(frictionMultiplier = 20f),
adjustTarget = { target ->
val coercedTarget = target % halvedNumbersColumnHeightPx
val coercedAnchors =
listOf(-halvedNumbersColumnHeightPx, 0f, halvedNumbersColumnHeightPx)
val coercedPoint = coercedAnchors.minByOrNull { abs(it - coercedTarget) }!!
val base =
halvedNumbersColumnHeightPx * (target / halvedNumbersColumnHeightPx).toInt()
coercedPoint + base
}
).endState.value
onStateChanged(animatedStateValue(endValue))
animatedOffset.snapTo(0f)
}
}
}
),
horizontalAlignment = Alignment.CenterHorizontally
) {
val spacing = 4.dp
val upEnabled = range == null || range.first < number
IconButton(
{
onStateChanged(number - 1)
inputFieldShown ?.value = false
},
enabled = upEnabled
) {
Icon(Icons.Default.KeyboardArrowUp, "", tint = if (upEnabled) arrowsColor else disabledArrowsColor)
}
Spacer(modifier = Modifier.height(spacing))
Box(
modifier = Modifier
.offset { IntOffset(x = 0, y = coercedAnimatedOffset.roundToInt()) },
contentAlignment = Alignment.Center
) {
val baseLabelModifier = Modifier.align(Alignment.Center)
ProvideTextStyle(textStyle) {
Text(
text = (animatedStateValue - 1).toString(),
modifier = baseLabelModifier
.offset(y = -halvedNumbersColumnHeight)
.alpha(coercedAnimatedOffset / halvedNumbersColumnHeightPx)
)
if (inputFieldShown ?.value == true) {
val currentValue = remember { mutableStateOf(number.toString()) }
val focusRequester = remember { FocusRequester() }
SmallTextField(
currentValue.value,
{
val asDigit = it.toIntOrNull()
when {
(asDigit == null && it.isEmpty()) -> currentValue.value = (range ?.first ?: 0).toString()
(asDigit != null && (range == null || asDigit in range)) -> currentValue.value = it
else -> { /* do nothing */ }
}
},
baseLabelModifier.focusRequester(focusRequester).width(IntrinsicSize.Min).pointerInput(number) {
detectTapGestures {
if (!checkContains(it)) {
currentValue.value.toIntOrNull() ?.let(onStateChanged)
inputFieldShown.value = false
}
}
},
keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Number
),
keyboardActions = KeyboardActions {
currentValue.value.toIntOrNull() ?.let(onStateChanged)
inputFieldShown.value = false
},
singleLine = true,
textStyle = textStyle
)
LaunchedEffect(Unit) {
focusRequester.requestFocus()
}
} else {
Text(
text = animatedStateValue.toString(),
modifier = baseLabelModifier
.alpha(1 - abs(coercedAnimatedOffset) / halvedNumbersColumnHeightPx)
.clickable {
if (inputFieldShown ?.value == false) {
inputFieldShown.value = true
}
}
)
}
Text(
text = (animatedStateValue + 1).toString(),
modifier = baseLabelModifier
.offset(y = halvedNumbersColumnHeight)
.alpha(-coercedAnimatedOffset / halvedNumbersColumnHeightPx)
)
}
}
Spacer(modifier = Modifier.height(spacing))
val downEnabled = range == null || range.last > number
IconButton(
{
onStateChanged(number + 1)
inputFieldShown ?.value = false
},
enabled = downEnabled
) {
Icon(Icons.Default.KeyboardArrowDown, "", tint = if (downEnabled) arrowsColor else disabledArrowsColor)
}
}
}
@@ -0,0 +1,165 @@
package dev.inmo.micro_utils.android.pickers
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.exponentialDecay
import androidx.compose.foundation.gestures.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.KeyboardArrowDown
import androidx.compose.material.icons.filled.KeyboardArrowUp
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import kotlin.math.*
/**
* A Compose picker component that allows users to select an item from a list by dragging or using arrow buttons.
*
* @param T The type of items in the list
* @param current The currently selected item
* @param dataList The list of items to choose from
* @param modifier The modifier to be applied to the picker
* @param textStyle The text style for displaying items
* @param arrowsColor The color of the up/down arrow buttons
* @param dataToString A composable function to convert items to strings for display. Defaults to [Any.toString]
* @param onStateChanged Callback invoked when the selected item changes
*/
@OptIn(ExperimentalTextApi::class, ExperimentalComposeUiApi::class)
@Composable
fun <T> SetPicker(
current: T,
dataList: List<T>,
modifier: Modifier = Modifier,
textStyle: TextStyle = LocalTextStyle.current,
arrowsColor: Color = MaterialTheme.colorScheme.primary,
dataToString: @Composable (T) -> String = { it.toString() },
onStateChanged: (T) -> Unit = {},
) {
val coroutineScope = rememberCoroutineScope()
val numbersColumnHeight = 8.dp + with(LocalDensity.current) {
textStyle.lineHeight.toDp()
}
val numbersColumnHeightPx = with(LocalDensity.current) { numbersColumnHeight.toPx() }
val halvedNumbersColumnHeight = numbersColumnHeight / 2
val halvedNumbersColumnHeightPx = with(LocalDensity.current) { halvedNumbersColumnHeight.toPx() }
val index = dataList.indexOfFirst { it === current }.takeIf { it > -1 } ?: dataList.indexOf(current)
val lastIndex = dataList.size - 1
fun animatedStateValue(offset: Float): Int = index - (offset / halvedNumbersColumnHeightPx).toInt()
val animatedOffset = remember { Animatable(0f) }.apply {
val offsetRange = remember(index, lastIndex) {
val value = index
val first = -(lastIndex - value) * halvedNumbersColumnHeightPx
val last = value * halvedNumbersColumnHeightPx
first..last
}
updateBounds(offsetRange.start, offsetRange.endInclusive)
}
val indexAnimatedOffset = if (animatedOffset.value > 0) {
(index - floor(animatedOffset.value / halvedNumbersColumnHeightPx).toInt())
} else {
(index - ceil(animatedOffset.value / halvedNumbersColumnHeightPx).toInt())
}
val coercedAnimatedOffset = animatedOffset.value % halvedNumbersColumnHeightPx
val disabledArrowsColor = arrowsColor.copy(alpha = 0f)
Column(
modifier = modifier
.wrapContentSize()
.draggable(
orientation = Orientation.Vertical,
state = rememberDraggableState { deltaY ->
coroutineScope.launch {
animatedOffset.snapTo(animatedOffset.value + deltaY)
}
},
onDragStopped = { velocity ->
coroutineScope.launch {
val endValue = animatedOffset.fling(
initialVelocity = velocity,
animationSpec = exponentialDecay(frictionMultiplier = 20f),
adjustTarget = { target ->
val coercedTarget = target % halvedNumbersColumnHeightPx
val coercedAnchors =
listOf(-halvedNumbersColumnHeightPx, 0f, halvedNumbersColumnHeightPx)
val coercedPoint = coercedAnchors.minByOrNull { abs(it - coercedTarget) }!!
val base =
halvedNumbersColumnHeightPx * (target / halvedNumbersColumnHeightPx).toInt()
coercedPoint + base
}
).endState.value
onStateChanged(dataList.elementAt(animatedStateValue(endValue)))
animatedOffset.snapTo(0f)
}
}
),
horizontalAlignment = Alignment.CenterHorizontally
) {
val spacing = 4.dp
val upEnabled = index > 0
IconButton(
{
onStateChanged(dataList.elementAt(index - 1))
},
enabled = upEnabled
) {
Icon(Icons.Default.KeyboardArrowUp, "", tint = if (upEnabled) arrowsColor else disabledArrowsColor)
}
Spacer(modifier = Modifier.height(spacing))
Box(
modifier = Modifier,
contentAlignment = Alignment.Center
) {
ProvideTextStyle(textStyle) {
dataList.forEachIndexed { i, t ->
val alpha = when {
i == indexAnimatedOffset - 1 -> coercedAnimatedOffset / halvedNumbersColumnHeightPx
i == indexAnimatedOffset -> 1 - (abs(coercedAnimatedOffset) / halvedNumbersColumnHeightPx)
i == indexAnimatedOffset + 1 -> -coercedAnimatedOffset / halvedNumbersColumnHeightPx
else -> return@forEachIndexed
}
val offset = when {
i == indexAnimatedOffset - 1 && coercedAnimatedOffset > 0 -> coercedAnimatedOffset - halvedNumbersColumnHeightPx
i == indexAnimatedOffset -> coercedAnimatedOffset
i == indexAnimatedOffset + 1 && coercedAnimatedOffset < 0 -> coercedAnimatedOffset + halvedNumbersColumnHeightPx
else -> return@forEachIndexed
}
Text(
text = dataToString(t),
modifier = Modifier
.alpha(alpha)
.offset(y = with(LocalDensity.current) { offset.toDp() })
)
}
}
}
Spacer(modifier = Modifier.height(spacing))
val downEnabled = index < lastIndex
IconButton(
{
onStateChanged(dataList.elementAt(index + 1))
},
enabled = downEnabled
) {
Icon(Icons.Default.KeyboardArrowDown, "", tint = if (downEnabled) arrowsColor else disabledArrowsColor)
}
}
}
+23
View File
@@ -0,0 +1,23 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
}
apply from: "$mppAndroidProject"
kotlin {
sourceSets {
commonMain {
dependencies {
api libs.kt.coroutines
api project(":micro_utils.common")
}
}
androidMain {
dependencies {
api libs.android.recyclerView
}
}
}
}
@@ -0,0 +1 @@
<manifest/>
@@ -0,0 +1,22 @@
package dev.inmo.micro_utils.android.recyclerview
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
abstract class AbstractStandardViewHolder<T>(
inflater: LayoutInflater,
container: ViewGroup?,
viewId: Int,
onViewInflated: ((View) -> Unit)? = null
) : AbstractViewHolder<T>(
inflater.inflate(viewId, container, false).also {
onViewInflated ?.invoke(it)
}
) {
constructor(
container: ViewGroup,
viewId: Int,
onViewInflated: ((View) -> Unit)? = null
) : this(LayoutInflater.from(container.context), container, viewId, onViewInflated)
}
@@ -0,0 +1,10 @@
package dev.inmo.micro_utils.android.recyclerview
import android.view.View
import androidx.recyclerview.widget.RecyclerView
abstract class AbstractViewHolder<in T>(
view: View
) : RecyclerView.ViewHolder(view) {
abstract fun onBind(item: T)
}
@@ -0,0 +1,9 @@
package dev.inmo.micro_utils.android.recyclerview
import android.content.Context
import android.widget.LinearLayout
import androidx.recyclerview.widget.DividerItemDecoration
val Context.recyclerViewItemsDecoration
get() = DividerItemDecoration(this, LinearLayout.VERTICAL)
@@ -0,0 +1,53 @@
package dev.inmo.micro_utils.android.recyclerview
import androidx.recyclerview.widget.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.*
@Suppress("NOTHING_TO_INLINE")
private inline fun RecyclerView.LayoutManager.findLastVisibleItemPositionGetter(): (() -> Int)? = when (this) {
is LinearLayoutManager -> ::findLastVisibleItemPosition
is GridLayoutManager -> ::findLastVisibleItemPosition
else -> null
}
fun RecyclerView.lastVisibleItemFlow(
completingScope: CoroutineScope
): Flow<Int> {
val lastVisibleElementFun: () -> Int = layoutManager ?.findLastVisibleItemPositionGetter() ?: error("Currently supported only linear and grid layout manager")
val lastVisibleFlow = MutableStateFlow(lastVisibleElementFun())
addOnScrollListener(
object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
lastVisibleFlow.value = lastVisibleElementFun()
}
}.also { scrollListener ->
lastVisibleFlow.onCompletion {
removeOnScrollListener(scrollListener)
}.launchIn(completingScope)
}
)
return lastVisibleFlow.asStateFlow()
}
inline fun Flow<Int>.mapLeftItems(
crossinline countGetter: () -> Int
): Flow<Int> = map { countGetter() - it }
inline fun Flow<Int>.mapRequireFilling(
minimalLeftItems: Int,
crossinline countGetter: () -> Int
): Flow<Int> = mapLeftItems(countGetter).mapNotNull {
if (it < minimalLeftItems) {
it
} else {
null
}
}
inline fun RecyclerView.mapRequireFilling(
minimalLeftItems: Int,
completingScope: CoroutineScope,
crossinline countGetter: () -> Int
): Flow<Int> = lastVisibleItemFlow(completingScope).mapRequireFilling(minimalLeftItems, countGetter)
@@ -0,0 +1,91 @@
package dev.inmo.micro_utils.android.recyclerview
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.coroutines.flow.*
abstract class RecyclerViewAdapter<T>: RecyclerView.Adapter<AbstractViewHolder<T>>() {
protected abstract val data: List<T>
private val _dataCountState by lazy {
MutableStateFlow<Int>(data.size)
}
val dataCountState: StateFlow<Int> by lazy {
_dataCountState.asStateFlow()
}
var emptyView: View? = null
set(value) {
field = value
checkEmpty()
}
init {
registerAdapterDataObserver(
object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeChanged(positionStart: Int, itemCount: Int) {
super.onItemRangeChanged(positionStart, itemCount)
_dataCountState.value = data.size
checkEmpty()
}
override fun onItemRangeChanged(positionStart: Int, itemCount: Int, payload: Any?) {
super.onItemRangeChanged(positionStart, itemCount, payload)
_dataCountState.value = data.size
checkEmpty()
}
override fun onChanged() {
super.onChanged()
_dataCountState.value = data.size
checkEmpty()
}
override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) {
super.onItemRangeRemoved(positionStart, itemCount)
_dataCountState.value = data.size
checkEmpty()
}
override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) {
super.onItemRangeMoved(fromPosition, toPosition, itemCount)
_dataCountState.value = data.size
checkEmpty()
}
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
super.onItemRangeInserted(positionStart, itemCount)
_dataCountState.value = data.size
checkEmpty()
}
}
)
checkEmpty()
}
override fun getItemCount(): Int = data.size
override fun onBindViewHolder(holder: AbstractViewHolder<T>, position: Int) {
holder.onBind(data[position])
}
private fun checkEmpty() {
emptyView ?. let {
if (dataCountState.value == 0) {
it.visibility = View.VISIBLE
} else {
it.visibility = View.GONE
}
}
}
}
fun <T> RecyclerViewAdapter(
data: List<T>,
onCreateViewHolder: (parent: ViewGroup, viewType: Int) -> AbstractViewHolder<T>
) = object : RecyclerViewAdapter<T>() {
override val data: List<T> = data
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AbstractViewHolder<T> = onCreateViewHolder(parent, viewType)
}
@@ -0,0 +1,50 @@
package dev.inmo.micro_utils.android.recyclerview
import dev.inmo.micro_utils.common.Diff
import dev.inmo.micro_utils.common.PreviewFeature
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
@PreviewFeature("This feature in preview state and may contains different bugs. " +
"Besides, this feature can be changed in future in non-compatible way")
abstract class StateFlowBasedRecyclerViewAdapter<T>(
listeningScope: CoroutineScope,
dataState: StateFlow<List<T>>
) : RecyclerViewAdapter<T>() {
override var data: List<T> = emptyList()
init {
dataState.onEach {
try {
val diffForRemoves = Diff(data, it)
val removedIndexes = diffForRemoves.removed.map { it.index }
val leftRemove = removedIndexes.toMutableList()
data = data.filterIndexed { i, _ ->
if (i in leftRemove) {
leftRemove.remove(i)
true
} else {
false
}
}
withContext(Dispatchers.Main) {
removedIndexes.sortedDescending().forEach {
notifyItemRemoved(it)
}
}
val diffAddsAndReplaces = Diff(data, it)
data = it
withContext(Dispatchers.Main) {
diffAddsAndReplaces.replaced.forEach { (from, to) ->
notifyItemMoved(from.index, to.index)
}
diffAddsAndReplaces.added.forEach {
notifyItemInserted(it.index)
}
}
} catch (e: Throwable) {
// currently do nothing
}
}.launchIn(listeningScope)
}
}
+19
View File
@@ -0,0 +1,19 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
alias(libs.plugins.jb.compose)
alias(libs.plugins.kt.jb.compose)
}
apply from: "$mppProjectWithSerializationAndCompose"
kotlin {
sourceSets {
androidMain {
dependencies {
api libs.jb.compose.material3
}
}
}
}
@@ -0,0 +1 @@
<manifest/>
@@ -0,0 +1,66 @@
package dev.inmo.micro_utils.android.smalltextfield
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.text.selection.LocalTextSelectionColors
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.takeOrElse
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.VisualTransformation
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SmallTextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
readOnly: Boolean = false,
textStyle: TextStyle = LocalTextStyle.current,
textColor: Color = textStyle.color.takeOrElse {
LocalContentColor.current
},
visualTransformation: VisualTransformation = VisualTransformation.None,
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
keyboardActions: KeyboardActions = KeyboardActions.Default,
singleLine: Boolean = false,
maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
minLines: Int = 1,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
) {
BasicTextField(
value = value,
modifier = modifier,
onValueChange = onValueChange,
enabled = enabled,
readOnly = readOnly,
textStyle = textStyle.copy(
color = textColor
),
visualTransformation = visualTransformation,
keyboardOptions = keyboardOptions,
keyboardActions = keyboardActions,
interactionSource = interactionSource,
singleLine = singleLine,
maxLines = maxLines,
minLines = minLines,
cursorBrush = SolidColor(
textStyle.color.takeOrElse {
LocalContentColor.current
}
)
)
}
+38 -9
View File
@@ -1,27 +1,56 @@
buildscript {
repositories {
mavenLocal()
jcenter()
google()
mavenCentral()
mavenLocal()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$gradle_bintray_plugin_version"
classpath "com.github.breadmoirai:github-release:$github_release_plugin_version"
classpath libs.buildscript.kt.gradle
classpath libs.buildscript.kt.serialization
classpath libs.buildscript.kt.ksp
classpath libs.buildscript.jb.dokka
classpath libs.buildscript.gh.release
classpath libs.buildscript.android.gradle
classpath libs.buildscript.android.dexcount
}
}
plugins {
alias(libs.plugins.versions)
alias(libs.plugins.nmcp.aggregation)
}
if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != null) && (project.hasProperty('SONATYPE_PASSWORD') || System.getenv('SONATYPE_PASSWORD') != null)) {
nmcpAggregation {
centralPortal {
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
validationTimeout = Duration.ofHours(4)
publishingType = System.getenv('PUBLISHING_TYPE') != "" ? System.getenv('PUBLISHING_TYPE') : "USER_MANAGED"
}
publishAllProjectsProbablyBreakingProjectIsolation()
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
mavenCentral()
maven { url "https://kotlin.bintray.com/kotlinx" }
google()
maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" }
// maven { url "https://nexus.inmo.dev/repository/maven-releases/" }
mavenLocal()
}
it.tasks.withType(AbstractTestTask).configureEach {
it.failOnNoDiscoveredTests = false
}
}
apply from: "./extensions.gradle"
apply from: "./github_release.gradle"
apply from: "./versions_plugin_setup.gradle"
+4 -1
View File
@@ -12,4 +12,7 @@ function assert_success() {
export RELEASE_MODE=true
project="$1"
assert_success ./gradlew clean "$project:clean" "$project:build" "$project:publishToMavenLocal" "$project:bintrayUpload"
assert_success ./gradlew clean
assert_success ./gradlew "$project:build"
assert_success ./gradlew "$project:publishToMavenLocal"
assert_success ./gradlew "$project:bintrayUpload"
+17
View File
@@ -0,0 +1,17 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
}
apply from: "$mppJvmJsWasmJsAndroidLinuxMingwLinuxArm64Project"
kotlin {
sourceSets {
commonMain {
dependencies {
api project(":micro_utils.colors.common")
}
}
}
}
+7
View File
@@ -0,0 +1,7 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
}
apply from: "$mppJvmJsWasmJsAndroidLinuxMingwLinuxArm64Project"
@@ -0,0 +1,174 @@
package dev.inmo.micro_utils.colors.common
import kotlinx.serialization.Serializable
import kotlin.jvm.JvmInline
import kotlin.math.floor
/**
* Wrapper for RGBA colors. Receiving [UInt] in main constructor. Each part in main constructor
* configured with `0x00 - 0xff` range. Examples:
*
* * Red: `0xff0000ffu`
* * Red (0.5 capacity): `0xff000088u`
*
* Anyway it is recommended to use
*
* @param hexaUInt rgba [UInt] in format `0xRRGGBBAA` where RR - red, GG - green, BB - blue` and AA - alpha
*/
@Serializable
@JvmInline
value class HEXAColor (
val hexaUInt: UInt
) : Comparable<HEXAColor> {
/**
* @returns [hexaUInt] as a string with format `#RRGGBBAA` where RR - red, GG - green, BB - blue and AA - alpha
*/
val hexa: String
get() = "#${hexaUInt.toString(16).padStart(8, '0')}"
/**
* @returns [hexaUInt] as a string with format `#RRGGBB` where RR - red, GG - green and BB - blue
*/
val hex: String
get() = hexa.take(7)
/**
* @returns [hexaUInt] as a string with format `#AARRGGBB` where AA - alpha, RR - red, GG - green and BB - blue
*/
val ahex: String
get() = "#${a.toString(16).padStart(2, '2')}${hex.drop(1)}"
val rgba: String
get() = "rgba($r,$g,$b,${aOfOne.toString().take(5)})"
val rgb: String
get() = "rgb($r,$g,$b)"
val shortHex: String
get() = "#${r.shortPart()}${g.shortPart()}${b.shortPart()}"
val shortHexa: String
get() = "$shortHex${a.shortPart()}"
val rgbUInt: UInt
get() = (hexaUInt / 256u)
val rgbInt: Int
get() = rgbUInt.toInt()
val ahexUInt
get() = (a * 0x1000000).toUInt() + rgbUInt
val r: Int
get() = ((hexaUInt and 0xff000000u) / 0x1000000u).toInt()
val g: Int
get() = ((hexaUInt and 0x00ff0000u) / 0x10000u).toInt()
val b: Int
get() = ((hexaUInt and 0x0000ff00u) / 0x100u).toInt()
val a: Int
get() = ((hexaUInt and 0x000000ffu)).toInt()
val aOfOne: Float
get() = a.toFloat() / (0xff)
init {
require(hexaUInt in 0u ..0xffffffffu)
}
constructor(r: Int, g: Int, b: Int, a: Int) : this(
((r * 0x1000000).toLong() + g * 0x10000 + b * 0x100 + a).toUInt()
) {
require(r in 0 ..0xff)
require(g in 0 ..0xff)
require(b in 0 ..0xff)
require(a in 0 ..0xff)
}
constructor(r: Int, g: Int, b: Int, aOfOne: Float = 1f) : this(
r = r, g = g, b = b, a = (aOfOne * 0xff).toInt()
)
override fun toString(): String {
return hexa
}
override fun compareTo(other: HEXAColor): Int = (hexaUInt - other.hexaUInt).coerceIn(Int.MIN_VALUE.toUInt(), Int.MAX_VALUE.toLong().toUInt()).toInt()
fun copy(
r: Int = this.r,
g: Int = this.g,
b: Int = this.b,
aOfOne: Float = this.aOfOne
) = HEXAColor(r = r, g = g, b = b, aOfOne = aOfOne)
fun copy(
r: Int = this.r,
g: Int = this.g,
b: Int = this.b,
a: Int
) = HEXAColor(r = r, g = g, b = b, a = a)
companion object {
/**
* Parsing color from [color]
*
* Supported formats samples (on Red color based):
*
* * `#f00`
* * `#f00f`
* * `#ff0000`
* * `#ff0000ff`
* * `rgb(255, 0, 0)`
* * `rgba(255, 0, 0, 1)`
*/
fun parseStringColor(color: String): HEXAColor = when {
color.startsWith("#") -> color.removePrefix("#").let { color ->
when (color.length) {
3 -> color.map { "$it$it" }.joinToString(separator = "", postfix = "ff")
4 -> color.take(3).map { "$it$it" }.joinToString(separator = "", postfix = color.takeLast(1).let { "${it}0" })
6 -> "${color}ff"
8 -> color
else -> error("Malfurmed color string: $color. It is expected that color started with # will contains 3, 6 or 8 valuable parts")
}
}
color.startsWith("rgb(") -> color
.removePrefix("rgb(")
.removeSuffix(")")
.replace(Regex("\\s"), "")
.split(",")
.joinToString("", postfix = "ff") {
it.toInt().toString(16).padStart(2, '0')
}
color.startsWith("rgba(") -> color
.removePrefix("rgba(")
.removeSuffix(")")
.replace(Regex("\\s"), "")
.split(",").let {
it.take(3).map { it.toInt().toString(16).padStart(2, '0') } + (it.last().toFloat() * 0xff).toInt().toString(16).padStart(2, '0')
}
.joinToString("")
else -> color
}.lowercase().toUInt(16).let(::HEXAColor)
/**
* Creates [HEXAColor] from [uint] presume it is in format `0xRRGGBBAA` where RR - red, GG - green, BB - blue` and AA - alpha
*/
fun fromHexa(uint: UInt) = HEXAColor(uint)
/**
* Creates [HEXAColor] from [uint] presume it is in format `0xAARRGGBB` where AA - alpha, RR - red, GG - green and BB - blue`
*/
fun fromAhex(uint: UInt) = HEXAColor(
a = ((uint and 0xff000000u) / 0x1000000u).toInt(),
r = ((uint and 0x00ff0000u) / 0x10000u).toInt(),
g = ((uint and 0x0000ff00u) / 0x100u).toInt(),
b = ((uint and 0x000000ffu)).toInt()
)
/**
* Parsing color from [color]
*
* Supported formats samples (on Red color based):
*
* * `#f00`
* * `#ff0000`
* * `#ff0000ff`
* * `rgb(255, 0, 0)`
* * `rgba(255, 0, 0, 1)`
*/
operator fun invoke(color: String) = parseStringColor(color)
private fun Int.shortPart(): String {
return (floor(toFloat() / 16)).toInt().toString(16)
}
}
}
@@ -0,0 +1,209 @@
package dev.inmo.micro_utils.colors.common
import kotlin.math.floor
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
class HexColorTests {
val alphaRgbaPrecision = 5
class TestColor(
val color: HEXAColor,
val shortHex: String,
val shortHexa: String,
val hex: String,
val hexa: String,
val ahex: String,
val ahexUInt: UInt,
val rgbUInt: UInt,
val rgb: String,
val rgba: String,
val r: Int,
val g: Int,
val b: Int,
val a: Int,
vararg val additionalRGBAVariants: String
)
val testColors: List<TestColor>
get() = listOf(
TestColor(
color = HEXAColor(hexaUInt = 0xff0000ffu),
shortHex = "#f00",
shortHexa = "#f00f",
hex = "#ff0000",
hexa = "#ff0000ff",
ahex = "#ffff0000",
ahexUInt = 0xffff0000u,
rgbUInt = 0xff0000u,
rgb = "rgb(255,0,0)",
rgba = "rgba(255,0,0,1.0)",
r = 0xff,
g = 0x00,
b = 0x00,
a = 0xff,
"rgba(255,0,0,1)",
),
TestColor(
color = HEXAColor(hexaUInt = 0x00ff00ffu),
shortHex = "#0f0",
shortHexa = "#0f0f",
hex = "#00ff00",
hexa = "#00ff00ff",
ahex = "#ff00ff00",
ahexUInt = 0xff00ff00u,
rgbUInt = 0x00ff00u,
rgb = "rgb(0,255,0)",
rgba = "rgba(0,255,0,1.0)",
r = 0x00,
g = 0xff,
b = 0x00,
a = 0xff,
"rgba(0,255,0,1)"
),
TestColor(
color = HEXAColor(0x0000ffffu),
shortHex = "#00f",
shortHexa = "#00ff",
hex = "#0000ff",
hexa = "#0000ffff",
ahex = "#ff0000ff",
ahexUInt = 0xff0000ffu,
rgbUInt = 0x0000ffu,
rgb = "rgb(0,0,255)",
rgba = "rgba(0,0,255,1.0)",
r = 0x00,
g = 0x00,
b = 0xff,
a = 0xff,
"rgba(0,0,255,1)"
),
TestColor(
color = HEXAColor(0xff000088u),
shortHex = "#f00",
shortHexa = "#f008",
hex = "#ff0000",
hexa = "#ff000088",
ahex = "#88ff0000",
ahexUInt = 0x88ff0000u,
rgbUInt = 0xff0000u,
rgb = "rgb(255,0,0)",
rgba = "rgba(255,0,0,0.533)",
r = 0xff,
g = 0x00,
b = 0x00,
a = 0x88,
),
TestColor(
color = HEXAColor(0x00ff0088u),
shortHex = "#0f0",
shortHexa = "#0f08",
hex = "#00ff00",
hexa = "#00ff0088",
ahex = "#8800ff00",
ahexUInt = 0x8800ff00u,
rgbUInt = 0x00ff00u,
rgb = "rgb(0,255,0)",
rgba = "rgba(0,255,0,0.533)",
r = 0x00,
g = 0xff,
b = 0x00,
a = 0x88,
),
TestColor(
color = HEXAColor(0x0000ff88u),
shortHex = "#00f",
shortHexa = "#00f8",
hex = "#0000ff",
hexa = "#0000ff88",
ahex = "#880000ff",
ahexUInt = 0x880000ffu,
rgbUInt = 0x0000ffu,
rgb = "rgb(0,0,255)",
rgba = "rgba(0,0,255,0.533)",
r = 0x00,
g = 0x00,
b = 0xff,
a = 0x88,
),
TestColor(
color = HEXAColor(0xff000022u),
shortHex = "#f00",
shortHexa = "#f002",
hex = "#ff0000",
hexa = "#ff000022",
ahex = "#22ff0000",
ahexUInt = 0x22ff0000u,
rgbUInt = 0xff0000u,
rgb = "rgb(255,0,0)",
rgba = "rgba(255,0,0,0.133)",
r = 0xff,
g = 0x00,
b = 0x00,
a = 0x22,
),
TestColor(
color = HEXAColor(0x00ff0022u),
shortHex = "#0f0",
shortHexa = "#0f02",
hex = "#00ff00",
hexa = "#00ff0022",
ahex = "#2200ff00",
ahexUInt = 0x2200ff00u,
rgbUInt = 0x00ff00u,
rgb = "rgb(0,255,0)",
rgba = "rgba(0,255,0,0.133)",
r = 0x00,
g = 0xff,
b = 0x00,
a = 0x22,
),
TestColor(
color = HEXAColor(0x0000ff22u),
shortHex = "#00f",
shortHexa = "#00f2",
hex = "#0000ff",
hexa = "#0000ff22",
ahex = "#220000ff",
ahexUInt = 0x220000ffu,
rgbUInt = 0x0000ffu,
rgb = "rgb(0,0,255)",
rgba = "rgba(0,0,255,0.133)",
r = 0x00,
g = 0x00,
b = 0xff,
a = 0x22,
),
)
@Test
fun baseTest() {
testColors.forEach {
assertEquals(it.hex, it.color.hex)
assertEquals(it.hexa, it.color.hexa)
assertEquals(it.ahex, it.color.ahex)
assertEquals(it.rgbUInt, it.color.rgbUInt)
assertEquals(it.ahexUInt, it.color.ahexUInt)
assertEquals(it.shortHex, it.color.shortHex)
assertEquals(it.shortHexa, it.color.shortHexa)
assertEquals(it.rgb, it.color.rgb)
assertTrue(it.rgba == it.color.rgba || it.color.rgba in it.additionalRGBAVariants)
assertEquals(it.r, it.color.r)
assertEquals(it.g, it.color.g)
assertEquals(it.b, it.color.b)
assertEquals(it.a, it.color.a)
assertEquals(it.color, HEXAColor.fromAhex(it.ahexUInt))
}
}
@Test
fun testHexParseColor() {
testColors.forEach {
assertEquals(it.color.copy(aOfOne = 1f), HEXAColor.parseStringColor(it.hex))
assertEquals(it.color, HEXAColor.parseStringColor(it.hexa))
assertEquals(it.color.copy(aOfOne = 1f), HEXAColor.parseStringColor(it.rgb))
assertTrue(it.color.hexaUInt.toInt() - HEXAColor.parseStringColor(it.rgba).hexaUInt.toInt() in -0x1 .. 0x1, )
assertEquals(it.color.copy(aOfOne = 1f), HEXAColor.parseStringColor(it.shortHex))
assertEquals(it.color.copy(a = floor(it.color.a.toFloat() / 16).toInt() * 0x10), HEXAColor.parseStringColor(it.shortHexa))
}
}
}
@@ -0,0 +1,890 @@
/**
* Standard HTML/CSS color constants as [HEXAColor] extension properties.
* Provides convenient access to all standard web colors like red, blue, green, etc.
* All colors are defined with full opacity (alpha = 0xFF).
*/
package dev.inmo.micro_utils.colors
import dev.inmo.micro_utils.colors.common.HEXAColor
/**
* Alice Blue - A pale blue color (#F0F8FF).
*/
val HEXAColor.Companion.aliceblue
get() = HEXAColor(0xF0F8FFFFu)
/**
* Antique White - A pale beige color (#FAEBD7).
*/
val HEXAColor.Companion.antiquewhite
get() = HEXAColor(0xFAEBD7FFu)
/**
* Aqua - A bright cyan color (#00FFFF).
*/
val HEXAColor.Companion.aqua
get() = HEXAColor(0x00FFFFFFu)
/**
* Aquamarine - A medium blue-green color (#7FFFD4).
*/
val HEXAColor.Companion.aquamarine
get() = HEXAColor(0x7FFFD4FFu)
/**
* Azure - A pale cyan-blue color (#F0FFFF).
*/
val HEXAColor.Companion.azure
get() = HEXAColor(0xF0FFFFFFu)
/**
* Beige - A pale sandy tan color (#F5F5DC).
*/
val HEXAColor.Companion.beige
get() = HEXAColor(0xF5F5DCFFu)
/**
* Bisque - A pale orange color (#FFE4C4).
*/
val HEXAColor.Companion.bisque
get() = HEXAColor(0xFFE4C4FFu)
/**
* Black - Pure black color (#000000).
*/
val HEXAColor.Companion.black
get() = HEXAColor(0x000000FFu)
/**
* Blanched Almond - A pale peachy color (#FFEBCD).
*/
val HEXAColor.Companion.blanchedalmond
get() = HEXAColor(0xFFEBCDFFu)
/**
* Blue - Pure blue color (#0000FF).
*/
val HEXAColor.Companion.blue
get() = HEXAColor(0x0000FFFFu)
/**
* Blue Violet - A vivid purple-blue color (#8A2BE2).
*/
val HEXAColor.Companion.blueviolet
get() = HEXAColor(0x8A2BE2FFu)
/**
* Brown - A dark reddish-brown color (#A52A2A).
*/
val HEXAColor.Companion.brown
get() = HEXAColor(0xA52A2AFFu)
/**
* Burlywood - A sandy tan color (#DEB887).
*/
val HEXAColor.Companion.burlywood
get() = HEXAColor(0xDEB887FFu)
/**
* Cadet Blue - A grayish-blue color (#5F9EA0).
*/
val HEXAColor.Companion.cadetblue
get() = HEXAColor(0x5F9EA0FFu)
/**
* Chartreuse - A bright yellow-green color (#7FFF00).
*/
val HEXAColor.Companion.chartreuse
get() = HEXAColor(0x7FFF00FFu)
/**
* Chocolate - A medium brown color (#D2691E).
*/
val HEXAColor.Companion.chocolate
get() = HEXAColor(0xD2691EFFu)
/**
* Coral - A vibrant orange-pink color (#FF7F50).
*/
val HEXAColor.Companion.coral
get() = HEXAColor(0xFF7F50FFu)
/**
* Cornflower Blue - A medium blue color (#6495ED).
*/
val HEXAColor.Companion.cornflowerblue
get() = HEXAColor(0x6495EDFFu)
/**
* Cornsilk - A pale yellow color (#FFF8DC).
*/
val HEXAColor.Companion.cornsilk
get() = HEXAColor(0xFFF8DCFFu)
/**
* Crimson - A vivid red color (#DC143C).
*/
val HEXAColor.Companion.crimson
get() = HEXAColor(0xDC143CFFu)
/**
* Cyan - A bright cyan color (#00FFFF).
*/
val HEXAColor.Companion.cyan
get() = HEXAColor(0x00FFFFFFu)
/**
* Dark Blue - A dark blue color (#00008B).
*/
val HEXAColor.Companion.darkblue
get() = HEXAColor(0x00008BFFu)
/**
* Dark Cyan - A dark cyan color (#008B8B).
*/
val HEXAColor.Companion.darkcyan
get() = HEXAColor(0x008B8BFFu)
/**
* Dark Goldenrod - A dark golden yellow color (#B8860B).
*/
val HEXAColor.Companion.darkgoldenrod
get() = HEXAColor(0xB8860BFFu)
/**
* Dark Gray - A dark gray color (#A9A9A9).
*/
val HEXAColor.Companion.darkgray
get() = HEXAColor(0xA9A9A9FFu)
/**
* Dark Green - A dark green color (#006400).
*/
val HEXAColor.Companion.darkgreen
get() = HEXAColor(0x006400FFu)
/**
* Dark Grey - A dark gray color (#A9A9A9).
*/
val HEXAColor.Companion.darkgrey
get() = HEXAColor(0xA9A9A9FFu)
/**
* Dark Khaki - A brownish-tan color (#BDB76B).
*/
val HEXAColor.Companion.darkkhaki
get() = HEXAColor(0xBDB76BFFu)
/**
* Dark Magenta - A dark magenta/purple color (#8B008B).
*/
val HEXAColor.Companion.darkmagenta
get() = HEXAColor(0x8B008BFFu)
/**
* Dark Olive Green - A dark olive green color (#556B2F).
*/
val HEXAColor.Companion.darkolivegreen
get() = HEXAColor(0x556B2FFFu)
/**
* Dark Orange - A vivid dark orange color (#FF8C00).
*/
val HEXAColor.Companion.darkorange
get() = HEXAColor(0xFF8C00FFu)
/**
* Dark Orchid - A dark purple color (#9932CC).
*/
val HEXAColor.Companion.darkorchid
get() = HEXAColor(0x9932CCFFu)
/**
* Dark Red - A dark red color (#8B0000).
*/
val HEXAColor.Companion.darkred
get() = HEXAColor(0x8B0000FFu)
/**
* Dark Salmon - A muted salmon color (#E9967A).
*/
val HEXAColor.Companion.darksalmon
get() = HEXAColor(0xE9967AFFu)
/**
* Dark Sea Green - A muted sea green color (#8FBC8F).
*/
val HEXAColor.Companion.darkseagreen
get() = HEXAColor(0x8FBC8FFFu)
/**
* Dark Slate Blue - A dark grayish-blue color (#483D8B).
*/
val HEXAColor.Companion.darkslateblue
get() = HEXAColor(0x483D8BFFu)
/**
* Dark Slate Gray - A very dark grayish-cyan color (#2F4F4F).
*/
val HEXAColor.Companion.darkslategray
get() = HEXAColor(0x2F4F4FFFu)
/**
* Dark Slate Grey - A very dark grayish-cyan color (#2F4F4F).
*/
val HEXAColor.Companion.darkslategrey
get() = HEXAColor(0x2F4F4FFFu)
/**
* Dark Turquoise - A dark turquoise color (#00CED1).
*/
val HEXAColor.Companion.darkturquoise
get() = HEXAColor(0x00CED1FFu)
/**
* Dark Violet - A dark violet color (#9400D3).
*/
val HEXAColor.Companion.darkviolet
get() = HEXAColor(0x9400D3FFu)
/**
* Deep Pink - A vivid pink color (#FF1493).
*/
val HEXAColor.Companion.deeppink
get() = HEXAColor(0xFF1493FFu)
/**
* Deep Sky Blue - A bright sky blue color (#00BFFF).
*/
val HEXAColor.Companion.deepskyblue
get() = HEXAColor(0x00BFFFFFu)
/**
* Dim Gray - A dim gray color (#696969).
*/
val HEXAColor.Companion.dimgray
get() = HEXAColor(0x696969FFu)
/**
* Dim Grey - A dim gray color (#696969).
*/
val HEXAColor.Companion.dimgrey
get() = HEXAColor(0x696969FFu)
/**
* Dodger Blue - A bright blue color (#1E90FF).
*/
val HEXAColor.Companion.dodgerblue
get() = HEXAColor(0x1E90FFFFu)
/**
* Firebrick - A dark red brick color (#B22222).
*/
val HEXAColor.Companion.firebrick
get() = HEXAColor(0xB22222FFu)
/**
* Floral White - A very pale cream color (#FFFAF0).
*/
val HEXAColor.Companion.floralwhite
get() = HEXAColor(0xFFFAF0FFu)
/**
* Forest Green - A medium forest green color (#228B22).
*/
val HEXAColor.Companion.forestgreen
get() = HEXAColor(0x228B22FFu)
/**
* Fuchsia - A vivid magenta color (#FF00FF).
*/
val HEXAColor.Companion.fuchsia
get() = HEXAColor(0xFF00FFFFu)
/**
* Gainsboro - A light gray color (#DCDCDC).
*/
val HEXAColor.Companion.gainsboro
get() = HEXAColor(0xDCDCDCFFu)
/**
* Ghost White - A very pale blue-white color (#F8F8FF).
*/
val HEXAColor.Companion.ghostwhite
get() = HEXAColor(0xF8F8FFFFu)
/**
* Gold - A bright golden yellow color (#FFD700).
*/
val HEXAColor.Companion.gold
get() = HEXAColor(0xFFD700FFu)
/**
* Goldenrod - A golden yellow color (#DAA520).
*/
val HEXAColor.Companion.goldenrod
get() = HEXAColor(0xDAA520FFu)
/**
* Gray - A medium gray color (#808080).
*/
val HEXAColor.Companion.gray
get() = HEXAColor(0x808080FFu)
/**
* Green - A pure green color (#008000).
*/
val HEXAColor.Companion.green
get() = HEXAColor(0x008000FFu)
/**
* Green Yellow - A bright yellow-green color (#ADFF2F).
*/
val HEXAColor.Companion.greenyellow
get() = HEXAColor(0xADFF2FFFu)
/**
* Grey - A medium gray color (#808080).
*/
val HEXAColor.Companion.grey
get() = HEXAColor(0x808080FFu)
/**
* Honeydew - A very pale green color (#F0FFF0).
*/
val HEXAColor.Companion.honeydew
get() = HEXAColor(0xF0FFF0FFu)
/**
* Hot Pink - A vibrant pink color (#FF69B4).
*/
val HEXAColor.Companion.hotpink
get() = HEXAColor(0xFF69B4FFu)
/**
* Indian Red - A medium red color (#CD5C5C).
*/
val HEXAColor.Companion.indianred
get() = HEXAColor(0xCD5C5CFFu)
/**
* Indigo - A deep blue-violet color (#4B0082).
*/
val HEXAColor.Companion.indigo
get() = HEXAColor(0x4B0082FFu)
/**
* Ivory - A very pale cream color (#FFFFF0).
*/
val HEXAColor.Companion.ivory
get() = HEXAColor(0xFFFFF0FFu)
/**
* Khaki - A light tan color (#F0E68C).
*/
val HEXAColor.Companion.khaki
get() = HEXAColor(0xF0E68CFFu)
/**
* Lavender - A pale purple color (#E6E6FA).
*/
val HEXAColor.Companion.lavender
get() = HEXAColor(0xE6E6FAFFu)
/**
* Lavender Blush - A very pale pink color (#FFF0F5).
*/
val HEXAColor.Companion.lavenderblush
get() = HEXAColor(0xFFF0F5FFu)
/**
* Lawn Green - A bright chartreuse green color (#7CFC00).
*/
val HEXAColor.Companion.lawngreen
get() = HEXAColor(0x7CFC00FFu)
/**
* Lemon Chiffon - A very pale yellow color (#FFFACD).
*/
val HEXAColor.Companion.lemonchiffon
get() = HEXAColor(0xFFFACDFFu)
/**
* Light Blue - A light blue color (#ADD8E6).
*/
val HEXAColor.Companion.lightblue
get() = HEXAColor(0xADD8E6FFu)
/**
* Light Coral - A light coral pink color (#F08080).
*/
val HEXAColor.Companion.lightcoral
get() = HEXAColor(0xF08080FFu)
/**
* Light Cyan - A very pale cyan color (#E0FFFF).
*/
val HEXAColor.Companion.lightcyan
get() = HEXAColor(0xE0FFFFFFu)
/**
* Light Goldenrod Yellow - A pale yellow color (#FAFAD2).
*/
val HEXAColor.Companion.lightgoldenrodyellow
get() = HEXAColor(0xFAFAD2FFu)
/**
* Light Gray - A light gray color (#D3D3D3).
*/
val HEXAColor.Companion.lightgray
get() = HEXAColor(0xD3D3D3FFu)
/**
* Light Green - A light green color (#90EE90).
*/
val HEXAColor.Companion.lightgreen
get() = HEXAColor(0x90EE90FFu)
/**
* Light Grey - A light gray color (#D3D3D3).
*/
val HEXAColor.Companion.lightgrey
get() = HEXAColor(0xD3D3D3FFu)
/**
* Light Pink - A light pink color (#FFB6C1).
*/
val HEXAColor.Companion.lightpink
get() = HEXAColor(0xFFB6C1FFu)
/**
* Light Salmon - A light salmon color (#FFA07A).
*/
val HEXAColor.Companion.lightsalmon
get() = HEXAColor(0xFFA07AFFu)
/**
* Light Sea Green - A medium sea green color (#20B2AA).
*/
val HEXAColor.Companion.lightseagreen
get() = HEXAColor(0x20B2AAFFu)
/**
* Light Sky Blue - A light sky blue color (#87CEFA).
*/
val HEXAColor.Companion.lightskyblue
get() = HEXAColor(0x87CEFAFFu)
/**
* Light Slate Gray - A light slate gray color (#778899).
*/
val HEXAColor.Companion.lightslategray
get() = HEXAColor(0x778899FFu)
/**
* Light Slate Grey - A light slate gray color (#778899).
*/
val HEXAColor.Companion.lightslategrey
get() = HEXAColor(0x778899FFu)
/**
* Light Steel Blue - A light steel blue color (#B0C4DE).
*/
val HEXAColor.Companion.lightsteelblue
get() = HEXAColor(0xB0C4DEFFu)
/**
* Light Yellow - A very pale yellow color (#FFFFE0).
*/
val HEXAColor.Companion.lightyellow
get() = HEXAColor(0xFFFFE0FFu)
/**
* Lime - A bright lime green color (#00FF00).
*/
val HEXAColor.Companion.lime
get() = HEXAColor(0x00FF00FFu)
/**
* Lime Green - A lime green color (#32CD32).
*/
val HEXAColor.Companion.limegreen
get() = HEXAColor(0x32CD32FFu)
/**
* Linen - A pale beige color (#FAF0E6).
*/
val HEXAColor.Companion.linen
get() = HEXAColor(0xFAF0E6FFu)
/**
* Magenta - A bright magenta color (#FF00FF).
*/
val HEXAColor.Companion.magenta
get() = HEXAColor(0xFF00FFFFu)
/**
* Maroon - A dark reddish-brown color (#800000).
*/
val HEXAColor.Companion.maroon
get() = HEXAColor(0x800000FFu)
/**
* Medium Aquamarine - A medium aquamarine color (#66CDAA).
*/
val HEXAColor.Companion.mediumaquamarine
get() = HEXAColor(0x66CDAAFFu)
/**
* Medium Blue - A medium blue color (#0000CD).
*/
val HEXAColor.Companion.mediumblue
get() = HEXAColor(0x0000CDFFu)
/**
* Medium Orchid - A medium orchid purple color (#BA55D3).
*/
val HEXAColor.Companion.mediumorchid
get() = HEXAColor(0xBA55D3FFu)
/**
* Medium Purple - A medium purple color (#9370DB).
*/
val HEXAColor.Companion.mediumpurple
get() = HEXAColor(0x9370DBFFu)
/**
* Medium Sea Green - A medium sea green color (#3CB371).
*/
val HEXAColor.Companion.mediumseagreen
get() = HEXAColor(0x3CB371FFu)
/**
* Medium Slate Blue - A medium slate blue color (#7B68EE).
*/
val HEXAColor.Companion.mediumslateblue
get() = HEXAColor(0x7B68EEFFu)
/**
* Medium Spring Green - A medium spring green color (#00FA9A).
*/
val HEXAColor.Companion.mediumspringgreen
get() = HEXAColor(0x00FA9AFFu)
/**
* Medium Turquoise - A medium turquoise color (#48D1CC).
*/
val HEXAColor.Companion.mediumturquoise
get() = HEXAColor(0x48D1CCFFu)
/**
* Medium Violet Red - A medium violet-red color (#C71585).
*/
val HEXAColor.Companion.mediumvioletred
get() = HEXAColor(0xC71585FFu)
/**
* Midnight Blue - A very dark blue color (#191970).
*/
val HEXAColor.Companion.midnightblue
get() = HEXAColor(0x191970FFu)
/**
* Mint Cream - A very pale mint color (#F5FFFA).
*/
val HEXAColor.Companion.mintcream
get() = HEXAColor(0xF5FFFAFFu)
/**
* Misty Rose - A very pale pink color (#FFE4E1).
*/
val HEXAColor.Companion.mistyrose
get() = HEXAColor(0xFFE4E1FFu)
/**
* Moccasin - A pale peach color (#FFE4B5).
*/
val HEXAColor.Companion.moccasin
get() = HEXAColor(0xFFE4B5FFu)
/**
* Navajo White - A pale peach color (#FFDEAD).
*/
val HEXAColor.Companion.navajowhite
get() = HEXAColor(0xFFDEADFFu)
/**
* Navy - A very dark blue color (#000080).
*/
val HEXAColor.Companion.navy
get() = HEXAColor(0x000080FFu)
/**
* Old Lace - A very pale cream color (#FDF5E6).
*/
val HEXAColor.Companion.oldlace
get() = HEXAColor(0xFDF5E6FFu)
/**
* Olive - A dark yellowish-green color (#808000).
*/
val HEXAColor.Companion.olive
get() = HEXAColor(0x808000FFu)
/**
* Olive Drab - A dark olive green color (#6B8E23).
*/
val HEXAColor.Companion.olivedrab
get() = HEXAColor(0x6B8E23FFu)
/**
* Orange - A bright orange color (#FFA500).
*/
val HEXAColor.Companion.orange
get() = HEXAColor(0xFFA500FFu)
/**
* Orange Red - A bright red-orange color (#FF4500).
*/
val HEXAColor.Companion.orangered
get() = HEXAColor(0xFF4500FFu)
/**
* Orchid - A medium orchid purple color (#DA70D6).
*/
val HEXAColor.Companion.orchid
get() = HEXAColor(0xDA70D6FFu)
/**
* Pale Goldenrod - A pale goldenrod yellow color (#EEE8AA).
*/
val HEXAColor.Companion.palegoldenrod
get() = HEXAColor(0xEEE8AAFFu)
/**
* Pale Green - A pale green color (#98FB98).
*/
val HEXAColor.Companion.palegreen
get() = HEXAColor(0x98FB98FFu)
/**
* Pale Turquoise - A pale turquoise color (#AFEEEE).
*/
val HEXAColor.Companion.paleturquoise
get() = HEXAColor(0xAFEEEEFFu)
/**
* Pale Violet Red - A medium violet-red color (#DB7093).
*/
val HEXAColor.Companion.palevioletred
get() = HEXAColor(0xDB7093FFu)
/**
* Papaya Whip - A pale peach color (#FFEFD5).
*/
val HEXAColor.Companion.papayawhip
get() = HEXAColor(0xFFEFD5FFu)
/**
* Peach Puff - A light peach color (#FFDAB9).
*/
val HEXAColor.Companion.peachpuff
get() = HEXAColor(0xFFDAB9FFu)
/**
* Peru - A medium brown color (#CD853F).
*/
val HEXAColor.Companion.peru
get() = HEXAColor(0xCD853FFFu)
/**
* Pink - A light pink color (#FFC0CB).
*/
val HEXAColor.Companion.pink
get() = HEXAColor(0xFFC0CBFFu)
/**
* Plum - A medium purple color (#DDA0DD).
*/
val HEXAColor.Companion.plum
get() = HEXAColor(0xDDA0DDFFu)
/**
* Powder Blue - A light blue color (#B0E0E6).
*/
val HEXAColor.Companion.powderblue
get() = HEXAColor(0xB0E0E6FFu)
/**
* Purple - A pure purple color (#800080).
*/
val HEXAColor.Companion.purple
get() = HEXAColor(0x800080FFu)
/**
* Red - Pure red color (#FF0000).
*/
val HEXAColor.Companion.red
get() = HEXAColor(0xFF0000FFu)
/**
* Rosy Brown - A rosy brown color (#BC8F8F).
*/
val HEXAColor.Companion.rosybrown
get() = HEXAColor(0xBC8F8FFFu)
/**
* Royal Blue - A vibrant royal blue color (#4169E1).
*/
val HEXAColor.Companion.royalblue
get() = HEXAColor(0x4169E1FFu)
/**
* Saddle Brown - A dark brown color (#8B4513).
*/
val HEXAColor.Companion.saddlebrown
get() = HEXAColor(0x8B4513FFu)
/**
* Salmon - A light salmon pink color (#FA8072).
*/
val HEXAColor.Companion.salmon
get() = HEXAColor(0xFA8072FFu)
/**
* Sandy Brown - A sandy brown color (#F4A460).
*/
val HEXAColor.Companion.sandybrown
get() = HEXAColor(0xF4A460FFu)
/**
* Sea Green - A dark sea green color (#2E8B57).
*/
val HEXAColor.Companion.seagreen
get() = HEXAColor(0x2E8B57FFu)
/**
* Seashell - A very pale pink-orange color (#FFF5EE).
*/
val HEXAColor.Companion.seashell
get() = HEXAColor(0xFFF5EEFFu)
/**
* Sienna - A reddish-brown color (#A0522D).
*/
val HEXAColor.Companion.sienna
get() = HEXAColor(0xA0522DFFu)
/**
* Silver - A light gray-silver color (#C0C0C0).
*/
val HEXAColor.Companion.silver
get() = HEXAColor(0xC0C0C0FFu)
/**
* Sky Blue - A light sky blue color (#87CEEB).
*/
val HEXAColor.Companion.skyblue
get() = HEXAColor(0x87CEEBFFu)
/**
* Slate Blue - A medium slate blue color (#6A5ACD).
*/
val HEXAColor.Companion.slateblue
get() = HEXAColor(0x6A5ACDFFu)
/**
* Slate Gray - A slate gray color (#708090).
*/
val HEXAColor.Companion.slategray
get() = HEXAColor(0x708090FFu)
/**
* Slate Grey - A slate gray color (#708090).
*/
val HEXAColor.Companion.slategrey
get() = HEXAColor(0x708090FFu)
/**
* Snow - A very pale pinkish-white color (#FFFAFA).
*/
val HEXAColor.Companion.snow
get() = HEXAColor(0xFFFAFAFFu)
/**
* Spring Green - A bright spring green color (#00FF7F).
*/
val HEXAColor.Companion.springgreen
get() = HEXAColor(0x00FF7FFFu)
/**
* Steel Blue - A medium steel blue color (#4682B4).
*/
val HEXAColor.Companion.steelblue
get() = HEXAColor(0x4682B4FFu)
/**
* Tan - A light brown tan color (#D2B48C).
*/
val HEXAColor.Companion.tan
get() = HEXAColor(0xD2B48CFFu)
/**
* Teal - A dark cyan-blue color (#008080).
*/
val HEXAColor.Companion.teal
get() = HEXAColor(0x008080FFu)
/**
* Thistle - A light purple-pink color (#D8BFD8).
*/
val HEXAColor.Companion.thistle
get() = HEXAColor(0xD8BFD8FFu)
/**
* Tomato - A vibrant red-orange color (#FF6347).
*/
val HEXAColor.Companion.tomato
get() = HEXAColor(0xFF6347FFu)
/**
* Turquoise - A medium turquoise color (#40E0D0).
*/
val HEXAColor.Companion.turquoise
get() = HEXAColor(0x40E0D0FFu)
/**
* Violet - A violet color (#EE82EE).
*/
val HEXAColor.Companion.violet
get() = HEXAColor(0xEE82EEFFu)
/**
* Wheat - A light tan color (#F5DEB3).
*/
val HEXAColor.Companion.wheat
get() = HEXAColor(0xF5DEB3FFu)
/**
* White - Pure white color (#FFFFFF).
*/
val HEXAColor.Companion.white
get() = HEXAColor(0xFFFFFFFFu)
/**
* White Smoke - A very light gray color (#F5F5F5).
*/
val HEXAColor.Companion.whitesmoke
get() = HEXAColor(0xF5F5F5FFu)
/**
* Yellow - Pure yellow color (#FFFF00).
*/
val HEXAColor.Companion.yellow
get() = HEXAColor(0xFFFF00FFu)
/**
* Yellow Green - A medium yellow-green color (#9ACD32).
*/
val HEXAColor.Companion.yellowgreen
get() = HEXAColor(0x9ACD32FFu)
+35 -1
View File
@@ -1,6 +1,40 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
}
apply from: "$mppProjectWithSerializationPresetPath"
apply from: "$mppJvmJsWasmJsAndroidLinuxMingwLinuxArm64Project"
kotlin {
sourceSets {
commonMain {
dependencies {
api libs.klock
}
}
jvmAndAndroidMain {
dependencies {
api project(":micro_utils.coroutines")
}
}
androidMain {
dependencies {
api libs.android.fragment
}
}
nativeMain {
dependencies {
api libs.okio
}
}
wasmJsMain {
dependencies {
api libs.kotlinx.browser
api libs.kt.coroutines
}
}
}
}
+20
View File
@@ -0,0 +1,20 @@
plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.kotlin.multiplatform.library"
alias(libs.plugins.jb.compose)
alias(libs.plugins.kt.jb.compose)
}
apply from: "$mppComposeJvmJsWasmJsAndroidLinuxMingwLinuxArm64Project"
kotlin {
sourceSets {
commonMain {
dependencies {
api project(":micro_utils.common")
api libs.kt.coroutines
}
}
}
}
@@ -0,0 +1 @@
<manifest/>
@@ -0,0 +1,16 @@
package dev.inmo.micro_utils.common.compose
import androidx.compose.runtime.DisposableEffectResult
class DefaultDisposableEffectResult(
private val onDispose: () -> Unit
) : DisposableEffectResult {
override fun dispose() {
onDispose()
}
companion object {
val DoNothing = DefaultDisposableEffectResult {}
}
}
@@ -0,0 +1,74 @@
package dev.inmo.micro_utils.common.compose
import androidx.compose.runtime.*
import dev.inmo.micro_utils.common.Optional
import dev.inmo.micro_utils.common.dataOrThrow
import dev.inmo.micro_utils.common.optional
class LoadableComponentContext<T> internal constructor(
presetOptional: Optional<T>,
) {
internal val iterationState: MutableState<Int> = mutableStateOf(0)
internal var dataOptional: Optional<T> = if (presetOptional.dataPresented) presetOptional else Optional.absent()
private set
internal val dataState: MutableState<Optional<T>> = mutableStateOf(dataOptional)
fun reload() {
iterationState.value++
}
}
/**
* Showing data with ability to reload data
*
* [block] will be shown when [loader] will complete loading. If you want to reload data, just call
* [LoadableComponentContext.reload]
*/
@Composable
fun <T> LoadableComponent(
preload: Optional<T>,
loader: suspend LoadableComponentContext<T>.() -> T,
block: @Composable LoadableComponentContext<T>.(T) -> Unit
) {
val context = remember { LoadableComponentContext(preload) }
LaunchedEffect(context.iterationState.value) {
context.dataState.value = loader(context).optional
}
context.dataState.let {
if (it.value.dataPresented) {
context.block(it.value.dataOrThrow(IllegalStateException("Data must be presented, but optional has been changed by some way")))
}
}
}
/**
* Showing data with ability to reload data
*
* [block] will be shown when [loader] will complete loading. If you want to reload data, just call
* [LoadableComponentContext.reload]
*/
@Composable
fun <T> LoadableComponent(
preload: T,
loader: suspend LoadableComponentContext<T>.() -> T,
block: @Composable LoadableComponentContext<T>.(T) -> Unit
) {
LoadableComponent(preload.optional, loader, block)
}
/**
* Showing data with ability to reload data
*
* [block] will be shown when [loader] will complete loading. If you want to reload data, just call
* [LoadableComponentContext.reload]
*/
@Composable
fun <T> LoadableComponent(
loader: suspend LoadableComponentContext<T>.() -> T,
block: @Composable LoadableComponentContext<T>.(T) -> Unit
) {
LoadableComponent(Optional.absent(), loader, block)
}
@@ -0,0 +1,10 @@
package dev.inmo.micro_utils.common.compose
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
/**
* Converts current [MutableState] to immutable [State] using [derivedStateOf]
*/
fun <T> MutableState<T>.asState(): State<T> = derivedStateOf { this.value }
@@ -0,0 +1,9 @@
package dev.inmo.micro_utils.common.compose
import androidx.compose.runtime.Composition
import dev.inmo.micro_utils.common.onRemoved
import org.w3c.dom.Element
fun Composition.linkWithElement(element: Element) {
element.onRemoved { dispose() }
}
@@ -0,0 +1,19 @@
package dev.inmo.micro_utils.common.compose
import org.jetbrains.compose.web.dom.AttrBuilderContext
import org.w3c.dom.Element
operator fun <T : Element> AttrBuilderContext<T>?.plus(
other: AttrBuilderContext<T>?
) = when (this) {
null -> other ?: {}
else -> when (other) {
null -> this ?: {}
else -> {
{
invoke(this)
other(this)
}
}
}
}
@@ -0,0 +1,22 @@
package dev.inmo.micro_utils.common.compose
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.DisposableEffectResult
import androidx.compose.runtime.DisposableEffectScope
import org.jetbrains.compose.web.attributes.AttrsScope
import org.jetbrains.compose.web.dom.ElementScope
import org.w3c.dom.Element
/**
* This function must be called in the context of your tag content. It works like default [AttrsScope.ref],
* but able to be used several times. Uses [DisposableEffect] under the hood
*/
@Composable
fun <T : Element> ElementScope<T>.ref(
block: DisposableEffectScope.(T) -> DisposableEffectResult
) {
DisposableEffect(0) {
block(scopeElement)
}
}
@@ -0,0 +1,10 @@
package dev.inmo.micro_utils.common.compose
import org.jetbrains.compose.web.attributes.ATarget
fun openLink(link: String, mode: ATarget = ATarget.Blank, features: String = "") = dev.inmo.micro_utils.common.openLink(
link,
mode.targetStr,
features
)
@@ -0,0 +1,13 @@
package dev.inmo.micro_utils.common.compose
import androidx.compose.runtime.*
import org.jetbrains.compose.web.dom.DOMScope
import org.w3c.dom.Element
fun <TElement : Element> renderComposableAndLinkToRoot(
root: TElement,
monotonicFrameClock: MonotonicFrameClock = DefaultMonotonicFrameClock,
content: @Composable DOMScope<TElement>.() -> Unit
): Composition = org.jetbrains.compose.web.renderComposable(root, monotonicFrameClock, content).apply {
linkWithElement(root)
}
@@ -0,0 +1,43 @@
package dev.inmo.micro_utils.common.compose
import org.jetbrains.compose.web.css.*
object SkeletonAnimation : StyleSheet() {
val skeletonKeyFrames: CSSNamedKeyframes by keyframes {
to { backgroundPosition("-20% 0") }
}
fun CSSBuilder.includeSkeletonStyle(
duration: CSSSizeValue<out CSSUnitTime> = 2.s,
timingFunction: AnimationTimingFunction = AnimationTimingFunction.EaseInOut,
iterationCount: Int? = null,
direction: AnimationDirection = AnimationDirection.Normal,
keyFrames: CSSNamedKeyframes = skeletonKeyFrames,
hideChildren: Boolean = true,
hideText: Boolean = hideChildren
) {
backgroundImage("linear-gradient(110deg, rgb(236, 236, 236) 40%, rgb(245, 245, 245) 50%, rgb(236, 236, 236) 65%)")
backgroundSize("200% 100%")
backgroundPosition("180% 0")
animation(keyFrames) {
duration(duration)
timingFunction(timingFunction)
iterationCount(iterationCount)
direction(direction)
}
if (hideText) {
property("color", "${Color.transparent} !important")
}
if (hideChildren) {
child(self, universal) style {
property("visibility", "hidden")
}
}
}
val skeleton by style {
includeSkeletonStyle()
}
}
@@ -0,0 +1,11 @@
package dev.inmo.micro_utils.common.compose
import org.jetbrains.compose.web.dom.AttrBuilderContext
fun tagClasses(vararg classnames: String): AttrBuilderContext<*> = {
classes(*classnames)
}
fun tagId(id: String): AttrBuilderContext<*> = {
id(id)
}
@@ -0,0 +1,40 @@
import androidx.compose.runtime.remember
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.runComposeUiTest
import dev.inmo.micro_utils.common.compose.LoadableComponent
import dev.inmo.micro_utils.coroutines.MutableRedeliverStateFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.first
import org.jetbrains.annotations.TestOnly
import kotlin.test.Test
import kotlin.test.assertTrue
class LoadableComponentTests {
@OptIn(ExperimentalTestApi::class)
@Test
@TestOnly
fun testSimpleLoad() = runComposeUiTest {
val loadingFlow = MutableRedeliverStateFlow<Int>(0)
val loadedFlow = MutableRedeliverStateFlow<Int>(0)
setContent {
LoadableComponent<Int>({
loadingFlow.filter { it == 1 }.first()
}) {
assert(dataState.value.data == 1)
remember {
loadedFlow.value = 2
}
}
}
waitForIdle()
assertTrue(loadedFlow.value == 0)
loadingFlow.value = 1
waitForIdle()
assertTrue(loadedFlow.value == 2)
}
}
@@ -0,0 +1,76 @@
package dev.inmo.micro_utils.common
import android.os.Bundle
import android.os.Parcelable
import androidx.fragment.app.Fragment
import java.io.Serializable
import kotlin.reflect.KProperty
object ArgumentPropertyNullableDelegate {
operator fun <T: Any> getValue(thisRef: Fragment, property: KProperty<*>): T? {
val arguments = thisRef.arguments ?: return null
val key = property.name
return when (property.getter.returnType.classifier) {
// Scalars
String::class -> arguments.getString(key)
Boolean::class -> arguments.getBoolean(key)
Byte::class -> arguments.getByte(key)
Char::class -> arguments.getChar(key)
Double::class -> arguments.getDouble(key)
Float::class -> arguments.getFloat(key)
Int::class -> arguments.getInt(key)
Long::class -> arguments.getLong(key)
Short::class -> arguments.getShort(key)
// References
Bundle::class -> arguments.getBundle(key)
CharSequence::class -> arguments.getCharSequence(key)
Parcelable::class -> arguments.getParcelable(key)
// Scalar arrays
BooleanArray::class -> arguments.getBooleanArray(key)
ByteArray::class -> arguments.getByteArray(key)
CharArray::class -> arguments.getCharArray(key)
DoubleArray::class -> arguments.getDoubleArray(key)
FloatArray::class -> arguments.getFloatArray(key)
IntArray::class -> arguments.getIntArray(key)
LongArray::class -> arguments.getLongArray(key)
ShortArray::class -> arguments.getShortArray(key)
Array::class -> {
val componentType = property.returnType.classifier ?.javaClass ?.componentType!!
@Suppress("UNCHECKED_CAST") // Checked by reflection.
when {
Parcelable::class.java.isAssignableFrom(componentType) -> {
arguments.getParcelableArray(key)
}
String::class.java.isAssignableFrom(componentType) -> {
arguments.getStringArray(key)
}
CharSequence::class.java.isAssignableFrom(componentType) -> {
arguments.getCharSequenceArray(key)
}
Serializable::class.java.isAssignableFrom(componentType) -> {
arguments.getSerializable(key)
}
else -> {
val valueType = componentType.canonicalName
throw IllegalArgumentException(
"Illegal value array type $valueType for key \"$key\""
)
}
}
}
Serializable::class -> arguments.getSerializable(key)
else -> null
} as? T
}
}
object ArgumentPropertyNonNullableDelegate {
operator fun <T: Any> getValue(thisRef: Fragment, property: KProperty<*>): T {
return ArgumentPropertyNullableDelegate.getValue<T>(thisRef, property)!!
}
}
fun argumentOrNull() = ArgumentPropertyNullableDelegate
fun argumentOrThrow() = ArgumentPropertyNonNullableDelegate
@@ -0,0 +1,13 @@
@file:Suppress("NOTHING_TO_INLINE")
package dev.inmo.micro_utils.common
import android.content.res.Resources
inline fun Resources.getSp(
resId: Int
) = getDimension(resId) / displayMetrics.scaledDensity
inline fun Resources.getDp(
resId: Int
) = getDimension(resId) * displayMetrics.density
@@ -0,0 +1,140 @@
package dev.inmo.micro_utils.common
import android.view.View
import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.Transformation
private fun View.performExpand(
duration: Long = 500,
targetWidth: Int = ViewGroup.LayoutParams.MATCH_PARENT,
targetHeight: Int = ViewGroup.LayoutParams.WRAP_CONTENT,
onMeasured: View.() -> Unit,
onPerformAnimation: View.(interpolatedTime: Float, t: Transformation?) -> Unit
) {
measure(targetWidth, targetHeight)
onMeasured()
show()
val a: Animation = object : Animation() {
override fun applyTransformation(interpolatedTime: Float, t: Transformation?) {
super.applyTransformation(interpolatedTime, t)
onPerformAnimation(interpolatedTime, t)
requestLayout()
}
override fun willChangeBounds(): Boolean = true
}
a.duration = duration
startAnimation(a)
}
private fun View.performCollapse(
duration: Long = 500,
onPerformAnimation: View.(interpolatedTime: Float, t: Transformation?) -> Unit
) {
val a: Animation = object : Animation() {
override fun applyTransformation(interpolatedTime: Float, t: Transformation?) {
if (interpolatedTime == 1f) {
gone()
} else {
onPerformAnimation(interpolatedTime, t)
requestLayout()
}
}
override fun willChangeBounds(): Boolean {
return true
}
}
a.duration = duration
startAnimation(a)
}
@PreviewFeature
fun View.expand(
duration: Long = 500,
targetWidth: Int = ViewGroup.LayoutParams.MATCH_PARENT,
targetHeight: Int = ViewGroup.LayoutParams.WRAP_CONTENT
) {
var measuredHeight = 0
performExpand(
duration,
targetWidth,
targetHeight,
{
measuredHeight = this.measuredHeight
}
) { interpolatedTime, _ ->
layoutParams.height = if (interpolatedTime == 1f) targetHeight else (measuredHeight * interpolatedTime).toInt()
}
}
@PreviewFeature
fun View.expandHorizontally(
duration: Long = 500,
targetWidth: Int = ViewGroup.LayoutParams.MATCH_PARENT,
targetHeight: Int = ViewGroup.LayoutParams.WRAP_CONTENT
) {
var measuredWidth = 0
performExpand(
duration,
targetWidth,
targetHeight,
{
measuredWidth = this.measuredWidth
}
) { interpolatedTime, _ ->
layoutParams.width = if (interpolatedTime == 1f) targetWidth else (measuredWidth * interpolatedTime).toInt()
}
}
@PreviewFeature
fun View.collapse(duration: Long = 500) {
val initialHeight: Int = measuredHeight
performCollapse(duration) { interpolatedTime, _ ->
layoutParams.height = initialHeight - (initialHeight * interpolatedTime).toInt()
}
}
@PreviewFeature
fun View.collapseHorizontally(duration: Long = 500) {
val initialWidth: Int = measuredWidth
performCollapse(duration) { interpolatedTime, _ ->
layoutParams.width = initialWidth - (initialWidth * interpolatedTime).toInt()
}
}
@PreviewFeature
inline val View.isCollapsed
get() = visibility == View.GONE
@PreviewFeature
inline val View.isExpanded
get() = !isCollapsed
/**
* @return true in case of expanding
*/
@PreviewFeature
fun View.toggleExpandState(duration: Long = 500): Boolean = if (isCollapsed) {
expand(duration)
true
} else {
collapse(duration)
false
}
/**
* @return true in case of expanding
*/
@PreviewFeature
fun View.toggleExpandHorizontallyState(duration: Long = 500): Boolean = if (isCollapsed) {
expandHorizontally(duration)
true
} else {
collapseHorizontally(duration)
false
}
@@ -0,0 +1,61 @@
package dev.inmo.micro_utils.common
import android.app.Activity
import android.view.View
import android.view.ViewGroup
import androidx.core.view.children
import androidx.fragment.app.Fragment
fun findViewsByTag(viewGroup: ViewGroup, tag: Any?): List<View> {
return viewGroup.children.flatMap {
findViewsByTag(it, tag)
}.toList()
}
fun findViewsByTag(viewGroup: ViewGroup, key: Int, tag: Any?): List<View> {
return viewGroup.children.flatMap {
findViewsByTag(it, key, tag)
}.toList()
}
fun findViewsByTag(view: View, tag: Any?): List<View> {
val result = mutableListOf<View>()
if (view.tag == tag) {
result.add(view)
}
if (view is ViewGroup) {
result.addAll(findViewsByTag(view, tag))
}
return result.toList()
}
fun findViewsByTag(view: View, key: Int, tag: Any?): List<View> {
val result = mutableListOf<View>()
if (view.getTag(key) == tag) {
result.add(view)
}
if (view is ViewGroup) {
result.addAll(findViewsByTag(view, key, tag))
}
return result.toList()
}
fun Activity.findViewsByTag(tag: Any?) = rootView ?.let {
findViewsByTag(it, tag)
}
fun Activity.findViewsByTag(key: Int, tag: Any?) = rootView ?.let {
findViewsByTag(it, key, tag)
}
fun Fragment.findViewsByTag(tag: Any?) = view ?.let {
findViewsByTag(it, tag)
}
fun Fragment.findViewsByTag(key: Int, tag: Any?) = view ?.let {
findViewsByTag(it, key, tag)
}
fun Fragment.findViewsByTagInActivity(tag: Any?) = activity ?.findViewsByTag(tag)
fun Fragment.findViewsByTagInActivity(key: Int, tag: Any?) = activity ?.findViewsByTag(key, tag)
@@ -0,0 +1,7 @@
package dev.inmo.micro_utils.common
@Suppress("UNCHECKED_CAST", "SimplifiableCall")
inline fun <T, R> Iterable<T>.mapNotNullA(transform: (T) -> R?): List<R> = map(transform).filter { it != null } as List<R>
@Suppress("UNCHECKED_CAST", "SimplifiableCall")
inline fun <T, R> Array<T>.mapNotNullA(mapper: (T) -> R?): List<R> = map(mapper).filter { it != null } as List<R>
@@ -0,0 +1,7 @@
package dev.inmo.micro_utils.common
import android.app.Activity
import android.view.View
val Activity.rootView: View?
get() = findViewById<View?>(android.R.id.content) ?.rootView ?: window.decorView.findViewById<View?>(android.R.id.content) ?.rootView
@@ -0,0 +1,34 @@
@file:Suppress("NOTHING_TO_INLINE", "unused")
package dev.inmo.micro_utils.common
import android.view.View
import android.view.ViewGroup
inline val View.enabled
get() = isEnabled
inline val View.disabled
get() = !enabled
fun View.disable() {
if (this is ViewGroup) {
(0 until childCount).forEach { getChildAt(it).disable() }
}
isEnabled = false
}
fun View.enable() {
if (this is ViewGroup) {
(0 until childCount).forEach { getChildAt(it).enable() }
}
isEnabled = true
}
fun View.toggleEnabledState(enabled: Boolean) {
if (enabled) {
enable()
} else {
disable()
}
}
@@ -0,0 +1,47 @@
@file:Suppress("NOTHING_TO_INLINE", "unused")
package dev.inmo.micro_utils.common
import android.view.View
inline val View.gone
get() = visibility == View.GONE
inline fun View.gone() {
visibility = View.GONE
}
inline val View.hidden
get() = visibility == View.INVISIBLE
inline fun View.hide() {
visibility = View.INVISIBLE
}
inline val View.shown
get() = visibility == View.VISIBLE
inline fun View.show() {
visibility = View.VISIBLE
}
fun View.toggleVisibility(goneOnHide: Boolean = true) {
if (isShown) {
if (goneOnHide) {
gone()
} else {
hide()
}
} else {
show()
}
}
fun View.changeVisibility(show: Boolean = !isShown, goneOnHide: Boolean = true) {
if (show) {
show()
} else {
if (goneOnHide) {
gone()
} else {
hide()
}
}
}
@@ -0,0 +1,35 @@
@file:Suppress("OPT_IN_IS_NOT_ENABLED")
package dev.inmo.micro_utils.common
@RequiresOptIn(
"It is possible, that behaviour of this thing will be changed or removed in future releases",
RequiresOptIn.Level.WARNING
)
@Target(
AnnotationTarget.CLASS,
AnnotationTarget.CONSTRUCTOR,
AnnotationTarget.FIELD,
AnnotationTarget.PROPERTY,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.FUNCTION,
AnnotationTarget.TYPEALIAS
)
annotation class PreviewFeature(val message: String = "It is possible, that behaviour of this thing will be changed or removed in future releases")
@RequiresOptIn(
"This thing is marked as warned. See message of warn to get more info",
RequiresOptIn.Level.WARNING
)
@Target(
AnnotationTarget.CLASS,
AnnotationTarget.CONSTRUCTOR,
AnnotationTarget.FIELD,
AnnotationTarget.PROPERTY,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER,
AnnotationTarget.FUNCTION,
AnnotationTarget.TYPEALIAS
)
annotation class Warning(val message: String)
@@ -0,0 +1,23 @@
package dev.inmo.micro_utils.common
/**
* Breaks this list into a list of consecutive pairs.
* Each element is paired with the next element in the list.
* For a list of size n, the result will contain n-1 pairs.
*
* Example: `[1, 2, 3, 4].breakAsPairs()` returns `[(1, 2), (2, 3), (3, 4)]`
*
* @param T The type of elements in the list
* @return A list of pairs where each pair consists of consecutive elements
*/
fun <T> List<T>.breakAsPairs(): List<Pair<T, T>> {
val result = mutableListOf<Pair<T, T>>()
for (i in 0 until size - 1) {
val first = get(i)
val second = get(i + 1)
result.add(first to second)
}
return result
}
@@ -0,0 +1,6 @@
package dev.inmo.micro_utils.common
/**
* Creates simple [Comparator] which will use [compareTo] of [T] for both objects
*/
fun <T : Comparable<C>, C : T> T.createComparator() = Comparator<C> { o1, o2 -> o1.compareTo(o2) }
@@ -0,0 +1,25 @@
package dev.inmo.micro_utils.common
import korlibs.time.DateTime
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
/**
* Serializes [DateTime] as its raw [DateTime.unixMillis] and deserializes in the same way
*/
object DateTimeSerializer : KSerializer<DateTime> {
override val descriptor: SerialDescriptor
get() = Double.serializer().descriptor
override fun deserialize(decoder: Decoder): DateTime {
return DateTime(decoder.decodeDouble())
}
override fun serialize(encoder: Encoder, value: DateTime) {
encoder.encodeDouble(value.unixMillis)
}
}
@@ -2,11 +2,13 @@
package dev.inmo.micro_utils.common
import kotlinx.serialization.Serializable
private inline fun <T> getObject(
additional: MutableList<T>,
iterator: Iterator<T>
): T? = when {
additional.isNotEmpty() -> additional.removeFirst()
additional.isNotEmpty() -> additional.removeAt(0)
iterator.hasNext() -> iterator.next()
else -> null
}
@@ -14,35 +16,53 @@ private inline fun <T> getObject(
/**
* Diff object which contains information about differences between two [Iterable]s
*
* See tests for more info
*
* @param removed The objects which has been presented in the old collection but absent in new one. Index here is the index in the old collection
* @param added The object which appear in new collection only. Indexes here show the index in the new collection
* @param replaced Pair of old-new changes. First object has been presented in the old collection on its
* [IndexedValue.index] place, the second one is the object in new collection. Both have indexes due to the fact that in
* case when some value has been replaced after adds or removes in original collection the object index will be changed
*
* @see calculateDiff
*/
data class Diff<T> internal constructor(
val removed: List<IndexedValue<T>>,
@Serializable
data class Diff<T> @Warning(warning) constructor(
val removed: List<@Serializable(IndexedValueSerializer::class) IndexedValue<T>>,
/**
* Old-New values pairs
*/
val replaced: List<Pair<IndexedValue<T>, IndexedValue<T>>>,
val added: List<IndexedValue<T>>
)
val replaced: List<Pair<@Serializable(IndexedValueSerializer::class) IndexedValue<T>, @Serializable(IndexedValueSerializer::class) IndexedValue<T>>>,
val added: List<@Serializable(IndexedValueSerializer::class) IndexedValue<T>>
) {
fun isEmpty(): Boolean = removed.isEmpty() && replaced.isEmpty() && added.isEmpty()
companion object {
private const val warning = "This feature can be changed without any warranties. Use with caution and only in case you know what you are doing"
}
}
fun <T> emptyDiff(): Diff<T> = Diff(emptyList(), emptyList(), emptyList())
private inline fun <T> performChanges(
potentialChanges: MutableList<Pair<IndexedValue<T>?, IndexedValue<T>?>>,
additionalsInOld: MutableList<T>,
additionalsInNew: MutableList<T>,
additionsInOld: MutableList<T>,
additionsInNew: MutableList<T>,
changedList: MutableList<Pair<IndexedValue<T>, IndexedValue<T>>>,
removedList: MutableList<IndexedValue<T>>,
addedList: MutableList<IndexedValue<T>>,
strictComparison: Boolean
comparisonFun: (T?, T?) -> Boolean
) {
var i = -1
val (oldObject, newObject) = potentialChanges.lastOrNull() ?: return
for ((old, new) in potentialChanges.take(potentialChanges.size - 1)) {
i++
val oldOneEqualToNewObject = old ?.value === newObject ?.value || (old ?.value == newObject ?.value && !strictComparison)
val newOneEqualToOldObject = new ?.value === oldObject ?.value || (new ?.value == oldObject ?.value && !strictComparison)
val oldOneEqualToNewObject = comparisonFun(old ?.value, newObject ?.value)
val newOneEqualToOldObject = comparisonFun(new ?.value, oldObject ?.value)
if (oldOneEqualToNewObject || newOneEqualToOldObject) {
changedList.addAll(
potentialChanges.take(i).mapNotNull {
@Suppress("UNCHECKED_CAST")
if (it.first != null && it.second != null) it as Pair<IndexedValue<T>, IndexedValue<T>> else null
}
)
@@ -52,20 +72,20 @@ private inline fun <T> performChanges(
newPotentials.first().second ?.let { addedList.add(it) }
newPotentials.drop(1).take(newPotentials.size - 2).forEach { (oldOne, newOne) ->
addedList.add(newOne!!)
oldOne ?.let { additionalsInOld.add(oldOne.value) }
oldOne ?.let { additionsInOld.add(oldOne.value) }
}
if (newPotentials.size > 1) {
newPotentials.last().first ?.value ?.let { additionalsInOld.add(it) }
newPotentials.last().first ?.value ?.let { additionsInOld.add(it) }
}
}
newOneEqualToOldObject -> {
newPotentials.first().first ?.let { removedList.add(it) }
newPotentials.drop(1).take(newPotentials.size - 2).forEach { (oldOne, newOne) ->
removedList.add(oldOne!!)
newOne ?.let { additionalsInNew.add(newOne.value) }
newOne ?.let { additionsInNew.add(newOne.value) }
}
if (newPotentials.size > 1) {
newPotentials.last().second ?.value ?.let { additionalsInNew.add(it) }
newPotentials.last().second ?.value ?.let { additionsInNew.add(it) }
}
}
}
@@ -92,7 +112,7 @@ private inline fun <T> performChanges(
*/
fun <T> Iterable<T>.calculateDiff(
other: Iterable<T>,
strictComparison: Boolean = false
comparisonFun: (T?, T?) -> Boolean
): Diff<T> {
var i = -1
var j = -1
@@ -120,27 +140,60 @@ fun <T> Iterable<T>.calculateDiff(
}
when {
oldObject === newObject || (oldObject == newObject && !strictComparison) -> {
changedObjects.addAll(potentiallyChangedObjects.map { it as Pair<IndexedValue<T>, IndexedValue<T>> })
comparisonFun(oldObject, newObject) -> {
changedObjects.addAll(potentiallyChangedObjects.map {
@Suppress("UNCHECKED_CAST")
it as Pair<IndexedValue<T>, IndexedValue<T>>
})
potentiallyChangedObjects.clear()
}
else -> {
potentiallyChangedObjects.add(oldObject ?.let { IndexedValue(i, oldObject) } to newObject ?.let { IndexedValue(j, newObject) })
val previousOldsAdditionsSize = additionalInOld.size
val previousNewsAdditionsSize = additionalInNew.size
performChanges(potentiallyChangedObjects, additionalInOld, additionalInNew, changedObjects, removedObjects, addedObjects, strictComparison)
performChanges(potentiallyChangedObjects, additionalInOld, additionalInNew, changedObjects, removedObjects, addedObjects, comparisonFun)
i -= (additionalInOld.size - previousOldsAdditionsSize)
j -= (additionalInNew.size - previousNewsAdditionsSize)
}
}
}
potentiallyChangedObjects.add(null to null)
performChanges(potentiallyChangedObjects, additionalInOld, additionalInNew, changedObjects, removedObjects, addedObjects, strictComparison)
performChanges(potentiallyChangedObjects, additionalInOld, additionalInNew, changedObjects, removedObjects, addedObjects, comparisonFun)
return Diff(removedObjects.toList(), changedObjects.toList(), addedObjects.toList())
}
inline fun <T> Diff(old: Iterable<T>, new: Iterable<T>) = old.calculateDiff(new)
/**
* Calculating [Diff] object
*
* @param strictComparison If this parameter set to true, objects which are not equal by links will be used as different
* objects. For example, in case of two "Example" string they will be equal by value, but CAN be different by links
*/
fun <T> Iterable<T>.calculateDiff(
other: Iterable<T>,
strictComparison: Boolean = false
): Diff<T> = calculateDiff(
other,
comparisonFun = if (strictComparison) {
{ t1, t2 ->
t1 === t2
}
} else {
{ t1, t2 ->
t1 === t2 || t1 == t2 // small optimization for cases when t1 and t2 are the same - comparison will be faster potentially
}
}
)
inline fun <T> Iterable<T>.diff(
other: Iterable<T>,
strictComparison: Boolean = false
): Diff<T> = calculateDiff(other, strictComparison)
inline fun <T> Iterable<T>.diff(
other: Iterable<T>,
noinline comparisonFun: (T?, T?) -> Boolean
): Diff<T> = calculateDiff(other, comparisonFun)
inline fun <T> Diff(old: Iterable<T>, new: Iterable<T>) = old.calculateDiff(new, strictComparison = false)
inline fun <T> StrictDiff(old: Iterable<T>, new: Iterable<T>) = old.calculateDiff(new, true)
/**
@@ -151,16 +204,50 @@ inline fun <T> Iterable<T>.calculateStrictDiff(
) = calculateDiff(other, strictComparison = true)
/**
* Compare one-to-one
* Applies [diff] to [this] [MutableList]
*/
@Deprecated("Will be removed or replaced with some new function. Use calculateDiff instead")
inline fun <T> Iterable<T>.syncWith(
other: Iterable<T>,
noinline removed: (List<T>) -> Unit = {},
noinline added: (List<T>) -> Unit = {}
fun <T> MutableList<T>.applyDiff(
diff: Diff<T>
) {
calculateDiff(other).also {
removed(it.removed.map { it.value })
added(it.added.map { it.value })
for (i in diff.removed.indices.sortedDescending()) {
removeAt(diff.removed[i].index)
}
diff.added.forEach { (i, t) ->
add(i, t)
}
diff.replaced.forEach { (_, new) ->
set(new.index, new.value)
}
}
/**
* This method call [calculateDiff] with strict mode [strictComparison] and then apply differences to [this]
* mutable list
*/
fun <T> MutableList<T>.applyDiff(
source: Iterable<T>,
strictComparison: Boolean = false
): Diff<T> = calculateDiff(source, strictComparison).also {
applyDiff(it)
}
/**
* This method call [calculateDiff] and then apply differences to [this]
* mutable list
*/
fun <T> MutableList<T>.applyDiff(
source: Iterable<T>,
comparisonFun: (T?, T?) -> Boolean
): Diff<T> = calculateDiff(source, comparisonFun).also {
applyDiff(it)
}
/**
* Reverse [this] [Diff]. Result will contain [Diff.added] on [Diff.removed] (and vice-verse), all the
* [Diff.replaced] values will be reversed too
*/
fun <T> Diff<T>.reversed() = Diff(
removed = added,
replaced = replaced.map { it.second to it.first },
added = removed
)
@@ -0,0 +1,160 @@
@file:Suppress("unused", "NOTHING_TO_INLINE")
package dev.inmo.micro_utils.common
import kotlinx.serialization.*
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.*
/**
* Realization of this interface will contains at least one not null - [optionalT1] or [optionalT2]
*
* @see EitherFirst
* @see EitherSecond
* @see Either.Companion.first
* @see Either.Companion.second
* @see Either.onFirst
* @see Either.onSecond
* @see Either.mapOnFirst
* @see Either.mapOnSecond
*/
@Serializable(EitherSerializer::class)
sealed interface Either<T1, T2> {
val optionalT1: Optional<T1>
val optionalT2: Optional<T2>
val t1OrNull: T1?
get() = optionalT1.dataOrNull()
val t2OrNull: T2?
get() = optionalT2.dataOrNull()
}
class EitherSerializer<T1, T2>(
t1Serializer: KSerializer<T1>,
t2Serializer: KSerializer<T2>,
) : KSerializer<Either<T1, T2>> {
@OptIn(InternalSerializationApi::class, ExperimentalSerializationApi::class)
override val descriptor: SerialDescriptor = buildSerialDescriptor(
"TypedSerializer",
SerialKind.CONTEXTUAL
) {
element("type", String.serializer().descriptor)
element("value", ContextualSerializer(Either::class).descriptor)
}
private val t1EitherSerializer = EitherFirst.serializer(t1Serializer, t2Serializer)
private val t2EitherSerializer = EitherSecond.serializer(t1Serializer, t2Serializer)
override fun deserialize(decoder: Decoder): Either<T1, T2> {
return decoder.decodeStructure(descriptor) {
var type: String? = null
lateinit var result: Either<T1, T2>
while (true) {
when (val index = decodeElementIndex(descriptor)) {
0 -> type = decodeStringElement(descriptor, 0)
1 -> {
result = when (type) {
"t1" -> decodeSerializableElement(
descriptor,
1,
t1EitherSerializer
)
"t2" -> decodeSerializableElement(
descriptor,
1,
t2EitherSerializer
)
else -> error("Unknown type of either: $type")
}
}
CompositeDecoder.DECODE_DONE -> break
else -> error("Unexpected index: $index")
}
}
result
}
}
override fun serialize(encoder: Encoder, value: Either<T1, T2>) {
encoder.encodeStructure(descriptor) {
when (value) {
is EitherFirst -> {
encodeStringElement(descriptor, 0, "t1")
encodeSerializableElement(descriptor, 1, t1EitherSerializer, value)
}
is EitherSecond -> {
encodeStringElement(descriptor, 0, "t2")
encodeSerializableElement(descriptor, 1, t2EitherSerializer, value)
}
}
}
}
}
/**
* This type [Either] will always have not nullable [optionalT1]
*/
@Serializable
data class EitherFirst<T1, T2>(
val t1: T1
) : Either<T1, T2> {
override val optionalT1: Optional<T1> = t1.optional
override val optionalT2: Optional<T2> = Optional.absent()
}
/**
* This type [Either] will always have not nullable [optionalT2]
*/
@Serializable
data class EitherSecond<T1, T2>(
val t2: T2
) : Either<T1, T2> {
override val optionalT1: Optional<T1> = Optional.absent()
override val optionalT2: Optional<T2> = t2.optional
}
/**
* @return New instance of [EitherFirst]
*/
inline fun <T1, T2> Either.Companion.first(t1: T1): Either<T1, T2> = EitherFirst(t1)
/**
* @return New instance of [EitherSecond]
*/
inline fun <T1, T2> Either.Companion.second(t2: T2): Either<T1, T2> = EitherSecond(t2)
/**
* Will call [block] in case when [this] is [EitherFirst]
*/
inline fun <T1, T2, E : Either<T1, T2>> E.onFirst(block: (T1) -> Unit): E {
optionalT1.onPresented(block)
return this
}
/**
* Will call [block] in case when [this] is [EitherSecond]
*/
inline fun <T1, T2, E : Either<T1, T2>> E.onSecond(block: (T2) -> Unit): E {
optionalT2.onPresented(block)
return this
}
/**
* @return Result of [block] if [this] is [EitherFirst]
*/
inline fun <T1, R> Either<T1, *>.mapOnFirst(block: (T1) -> R): R? {
return optionalT1.mapOnPresented(block)
}
/**
* @return Result of [block] if [this] is [EitherSecond]
*/
inline fun <T2, R> Either<*, T2>.mapOnSecond(block: (T2) -> R): R? {
return optionalT2.mapOnPresented(block)
}
inline fun <reified T1, reified T2> Any.either() = when (this) {
is T1 -> Either.first<T1, T2>(this)
is T2 -> Either.second<T1, T2>(this)
else -> error("Incorrect type of either argument $this")
}
@@ -0,0 +1,85 @@
package dev.inmo.micro_utils.common
/**
* Executes the given [block] and returns its result if this Boolean is true, otherwise returns null.
*
* @param T The return type of the block
* @param block The function to execute if this Boolean is true
* @return The result of [block] if true, null otherwise
*/
inline fun <T> Boolean.letIfTrue(block: () -> T): T? {
return if (this) {
block()
} else {
null
}
}
/**
* Executes the given [block] and returns its result if this Boolean is false, otherwise returns null.
*
* @param T The return type of the block
* @param block The function to execute if this Boolean is false
* @return The result of [block] if false, null otherwise
*/
inline fun <T> Boolean.letIfFalse(block: () -> T): T? {
return if (this) {
null
} else {
block()
}
}
/**
* Executes the given [block] if this Boolean is true and returns this Boolean.
* Similar to [also], but only executes the block when the Boolean is true.
*
* @param block The function to execute if this Boolean is true
* @return This Boolean value
*/
inline fun Boolean.alsoIfTrue(block: () -> Unit): Boolean {
letIfTrue(block)
return this
}
/**
* Executes the given [block] if this Boolean is false and returns this Boolean.
* Similar to [also], but only executes the block when the Boolean is false.
*
* @param block The function to execute if this Boolean is false
* @return This Boolean value
*/
inline fun Boolean.alsoIfFalse(block: () -> Unit): Boolean {
letIfFalse(block)
return this
}
/**
* Alias for [letIfTrue]. Executes the given [block] and returns its result if this Boolean is true.
*
* @param T The return type of the block
* @param block The function to execute if this Boolean is true
* @return The result of [block] if true, null otherwise
*/
inline fun <T> Boolean.ifTrue(block: () -> T): T? {
return if (this) {
block()
} else {
null
}
}
/**
* Alias for [letIfFalse]. Executes the given [block] and returns its result if this Boolean is false.
*
* @param T The return type of the block
* @param block The function to execute if this Boolean is false
* @return The result of [block] if false, null otherwise
*/
inline fun <T> Boolean.ifFalse(block: () -> T): T? {
return if (this) {
null
} else {
block()
}
}
@@ -0,0 +1,30 @@
package dev.inmo.micro_utils.common
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.PairSerializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
class IndexedValueSerializer<T>(private val subSerializer: KSerializer<T>) : KSerializer<IndexedValue<T>> {
private val originalSerializer = PairSerializer(Int.serializer(), subSerializer)
override val descriptor: SerialDescriptor
get() = originalSerializer.descriptor
override fun deserialize(decoder: Decoder): IndexedValue<T> {
val pair = originalSerializer.deserialize(decoder)
return IndexedValue(
pair.first,
pair.second
)
}
override fun serialize(encoder: Encoder, value: IndexedValue<T>) {
originalSerializer.serialize(
encoder,
Pair(value.index, value.value)
)
}
}
@@ -6,18 +6,52 @@ import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
/**
* A function type that allocates and returns a [ByteArray].
*/
typealias ByteArrayAllocator = () -> ByteArray
/**
* A suspending function type that allocates and returns a [ByteArray].
*/
typealias SuspendByteArrayAllocator = suspend () -> ByteArray
/**
* Converts this [ByteArray] to a [ByteArrayAllocator] that returns this array.
*/
val ByteArray.asAllocator: ByteArrayAllocator
get() = { this }
/**
* Converts this [ByteArray] to a [SuspendByteArrayAllocator] that returns this array.
*/
val ByteArray.asSuspendAllocator: SuspendByteArrayAllocator
get() = { this }
/**
* Converts this [ByteArrayAllocator] to a [SuspendByteArrayAllocator].
*/
val ByteArrayAllocator.asSuspendAllocator: SuspendByteArrayAllocator
get() = { this() }
/**
* Converts this [SuspendByteArrayAllocator] to a [ByteArrayAllocator] by invoking it and
* wrapping the result in a non-suspending allocator.
*/
suspend fun SuspendByteArrayAllocator.asAllocator(): ByteArrayAllocator {
return invoke().asAllocator
}
/**
* Serializer for [ByteArrayAllocator]. Serializes the result of invoking the allocator.
*/
object ByteArrayAllocatorSerializer : KSerializer<ByteArrayAllocator> {
private val realSerializer = ByteArraySerializer()
override val descriptor: SerialDescriptor = realSerializer.descriptor
override fun deserialize(decoder: Decoder): ByteArrayAllocator {
val bytes = realSerializer.deserialize(decoder)
return { bytes }
return bytes.asAllocator
}
override fun serialize(encoder: Encoder, value: ByteArrayAllocator) {
@@ -0,0 +1,10 @@
package dev.inmo.micro_utils.common
/**
* Returns the first non-null element in this iterable.
*
* @param T The type of elements in the iterable (nullable)
* @return The first non-null element
* @throws NoSuchElementException if the iterable contains no non-null elements
*/
fun <T> Iterable<T?>.firstNotNull() = first { it != null }!!
@@ -0,0 +1,138 @@
package dev.inmo.micro_utils.common
/**
* Joins elements of this iterable into a list with separators between elements.
* Each element is transformed using [transform], and separators are generated using [separatorFun].
* Optional [prefix] and [postfix] can be added to the result.
* Null values from transformations or separator function are skipped.
*
* @param I The type of elements in the input iterable
* @param R The type of elements in the result list
* @param separatorFun A function that generates a separator based on the current element
* @param prefix Optional prefix to add at the beginning of the result
* @param postfix Optional postfix to add at the end of the result
* @param transform A function to transform each element
* @return A list of transformed elements with separators
*/
inline fun <I, R> Iterable<I>.joinTo(
separatorFun: (I) -> R?,
prefix: R? = null,
postfix: R? = null,
transform: (I) -> R?
): List<R> {
val result = mutableListOf<R>()
val iterator = iterator()
prefix ?.let(result::add)
while (iterator.hasNext()) {
val element = iterator.next()
result.add(transform(element) ?: continue)
if (iterator.hasNext()) {
result.add(separatorFun(element) ?: continue)
}
}
postfix ?.let(result::add)
return result
}
/**
* Joins elements of this iterable into a list with a constant separator between elements.
* Each element is transformed using [transform].
* Optional [prefix] and [postfix] can be added to the result.
* Null values from transformations or separators are skipped.
*
* @param I The type of elements in the input iterable
* @param R The type of elements in the result list
* @param separator The separator to insert between elements
* @param prefix Optional prefix to add at the beginning of the result
* @param postfix Optional postfix to add at the end of the result
* @param transform A function to transform each element
* @return A list of transformed elements with separators
*/
inline fun <I, R> Iterable<I>.joinTo(
separator: R? = null,
prefix: R? = null,
postfix: R? = null,
transform: (I) -> R?
): List<R> = joinTo({ separator }, prefix, postfix, transform)
/**
* Joins elements of this iterable into a list with separators between elements.
* Separators are generated using [separatorFun].
* Optional [prefix] and [postfix] can be added to the result.
* Null values from separator function are skipped.
*
* @param I The type of elements
* @param separatorFun A function that generates a separator based on the current element
* @param prefix Optional prefix to add at the beginning of the result
* @param postfix Optional postfix to add at the end of the result
* @return A list of elements with separators
*/
inline fun <I> Iterable<I>.joinTo(
separatorFun: (I) -> I?,
prefix: I? = null,
postfix: I? = null
): List<I> = joinTo<I, I>(separatorFun, prefix, postfix) { it }
/**
* Joins elements of this iterable into a list with a constant separator between elements.
* Optional [prefix] and [postfix] can be added to the result.
* Null separators are skipped.
*
* @param I The type of elements
* @param separator The separator to insert between elements
* @param prefix Optional prefix to add at the beginning of the result
* @param postfix Optional postfix to add at the end of the result
* @return A list of elements with separators
*/
inline fun <I> Iterable<I>.joinTo(
separator: I? = null,
prefix: I? = null,
postfix: I? = null
): List<I> = joinTo<I>({ separator }, prefix, postfix)
/**
* Joins elements of this array into an array with separators between elements.
* Each element is transformed using [transform], and separators are generated using [separatorFun].
* Optional [prefix] and [postfix] can be added to the result.
* Null values from transformations or separator function are skipped.
*
* @param I The type of elements in the input array
* @param R The type of elements in the result array
* @param separatorFun A function that generates a separator based on the current element
* @param prefix Optional prefix to add at the beginning of the result
* @param postfix Optional postfix to add at the end of the result
* @param transform A function to transform each element
* @return An array of transformed elements with separators
*/
inline fun <I, reified R> Array<I>.joinTo(
separatorFun: (I) -> R?,
prefix: R? = null,
postfix: R? = null,
transform: (I) -> R?
): Array<R> = asIterable().joinTo(separatorFun, prefix, postfix, transform).toTypedArray()
/**
* Joins elements of this array into an array with a constant separator between elements.
* Each element is transformed using [transform].
* Optional [prefix] and [postfix] can be added to the result.
* Null values from transformations or separators are skipped.
*
* @param I The type of elements in the input array
* @param R The type of elements in the result array
* @param separator The separator to insert between elements
* @param prefix Optional prefix to add at the beginning of the result
* @param postfix Optional postfix to add at the end of the result
* @param transform A function to transform each element
* @return An array of transformed elements with separators
*/
inline fun <I, reified R> Array<I>.joinTo(
separator: R? = null,
prefix: R? = null,
postfix: R? = null,
transform: (I) -> R?
): Array<R> = asIterable().joinTo(separator, prefix, postfix, transform).toTypedArray()
@@ -0,0 +1,35 @@
package dev.inmo.micro_utils.common
import kotlinx.serialization.Serializable
import kotlin.jvm.JvmInline
@Serializable
@JvmInline
value class FileName(val string: String) {
val name: String
get() = withoutSlashAtTheEnd.takeLastWhile { it != MPPFilePathSeparator }
val extension: String
get() = name.takeLastWhile { it != '.' }
val nameWithoutExtension: String
get() {
val filename = name
return filename.indexOfLast { it == '.' }.takeIf { it > -1 } ?.let {
filename.substring(0, it)
} ?: filename
}
val withoutSlashAtTheEnd: String
get() = string.dropLastWhile { it == MPPFilePathSeparator }
override fun toString(): String = string
}
expect class MPPFile
expect val MPPFile.filename: FileName
expect val MPPFilePathSeparator: Char
expect val MPPFile.filesize: Long
expect val MPPFile.bytesAllocatorSync: ByteArrayAllocator
expect val MPPFile.bytesAllocator: SuspendByteArrayAllocator
fun MPPFile.bytesSync() = bytesAllocatorSync()
suspend fun MPPFile.bytes() = bytesAllocator()
@@ -0,0 +1,133 @@
package dev.inmo.micro_utils.common
/**
* Contains diff based on the comparison of objects with the same [K].
*
* @param removed Contains map with keys removed from parent map
* @param changed Contains map with keys values changed new map in comparison with old one
* @param added Contains map with new keys and values
*/
data class MapDiff<K, V> @Warning(warning) constructor(
val removed: Map<K, V>,
val changed: Map<K, Pair<V, V>>,
val added: Map<K, V>
) {
fun isEmpty() = removed.isEmpty() && changed.isEmpty() && added.isEmpty()
inline fun isNotEmpty() = !isEmpty()
companion object {
private const val warning = "This feature can be changed without any warranties. Use with caution and only in case you know what you are doing"
fun <K, V> empty() = MapDiff<K, V>(emptyMap(), emptyMap(), emptyMap())
}
}
private inline fun <K, V> createCompareFun(
strictComparison: Boolean
): (K, V, V) -> Boolean = if (strictComparison) {
{ _, first, second -> first === second }
} else {
{ _, first, second -> first == second }
}
/**
* Compare [this] [Map] with the [other] one in principle when [other] is newer than [this]
*
* @param compareFun Will be used to determine changed values
*/
fun <K, V> Map<K, V>.diff(
other: Map<K, V>,
compareFun: (K, V, V) -> Boolean
): MapDiff<K, V> {
val removed: Map<K, V> = (keys - other.keys).associateWith {
getValue(it)
}
val added: Map<K, V> = (other.keys - keys).associateWith {
other.getValue(it)
}
val changed = keys.intersect(other.keys).mapNotNull {
val old = getValue(it)
val new = other.getValue(it)
if (compareFun(it, old, new)) {
return@mapNotNull null
} else {
it to (old to new)
}
}.toMap()
return MapDiff(
removed,
changed,
added
)
}
/**
* Compare [this] [Map] with the [other] one in principle when [other] is newer than [this]
*
* @param strictComparison If true, will use strict (===) comparison for the values' comparison. Otherwise, standard
* `equals` will be used
*/
fun <K, V> Map<K, V>.diff(
other: Map<K, V>,
strictComparison: Boolean = false
): MapDiff<K, V> = diff(
other,
compareFun = createCompareFun(strictComparison)
)
/**
* Will apply [mapDiff] to [this] [MutableMap]
*/
fun <K, V> MutableMap<K, V>.applyDiff(
mapDiff: MapDiff<K, V>
) {
mapDiff.apply {
keys.removeAll(removed.keys)
changed.forEach { (k, oldNew) ->
put(k, oldNew.second)
}
putAll(added)
}
}
/**
* Will apply changes with [from] map into [this] one
*
* @param compareFun Will be used to determine changed values
*
* @return [MapDiff] applied to [this] [MutableMap]
*/
fun <K, V> MutableMap<K, V>.applyDiff(
from: Map<K, V>,
compareFun: (K, V, V) -> Boolean
): MapDiff<K, V> {
return diff(from, compareFun).also {
applyDiff(it)
}
}
/**
* Will apply changes with [from] map into [this] one
*
* @param strictComparison If true, will use strict (===) comparison for the values' comparison. Otherwise, standard
* `equals` will be used
*
* @return [MapDiff] applied to [this] [MutableMap]
*/
fun <K, V> MutableMap<K, V>.applyDiff(
from: Map<K, V>,
strictComparison: Boolean = false
): MapDiff<K, V> = applyDiff(
from,
compareFun = createCompareFun(strictComparison)
)
/**
* Reverse [this] [MapDiff]. Result will contain [MapDiff.added] on [MapDiff.removed] (and vice-verse), all the
* [MapDiff.changed] values will be reversed too
*/
fun <K, V> MapDiff<K, V>.reversed(): MapDiff<K, V> = MapDiff(
removed = added,
changed = changed.mapValues { (_, oldNew) -> oldNew.second to oldNew.first },
added = removed
)
@@ -0,0 +1,125 @@
package dev.inmo.micro_utils.common
import kotlin.jvm.JvmName
/**
* A bidirectional mapper that can convert between two types [T1] and [T2].
*
* @param T1 The first type
* @param T2 The second type
*/
interface SimpleMapper<T1, T2> {
fun convertToT1(from: T2): T1
fun convertToT2(from: T1): T2
}
/**
* Converts [from] of type [T2] to type [T1] using this mapper.
*
* @param from The value to convert
* @return The converted value of type [T1]
*/
@JvmName("convertFromT2")
fun <T1, T2> SimpleMapper<T1, T2>.convert(from: T2) = convertToT1(from)
/**
* Converts [from] of type [T1] to type [T2] using this mapper.
*
* @param from The value to convert
* @return The converted value of type [T2]
*/
@JvmName("convertFromT1")
fun <T1, T2> SimpleMapper<T1, T2>.convert(from: T1) = convertToT2(from)
/**
* Implementation of [SimpleMapper] that uses lambda functions for conversion.
*
* @param T1 The first type
* @param T2 The second type
* @param t1 Function to convert from [T2] to [T1]
* @param t2 Function to convert from [T1] to [T2]
*/
class SimpleMapperImpl<T1, T2>(
private val t1: (T2) -> T1,
private val t2: (T1) -> T2,
) : SimpleMapper<T1, T2> {
override fun convertToT1(from: T2): T1 = t1.invoke(from)
override fun convertToT2(from: T1): T2 = t2.invoke(from)
}
/**
* Creates a [SimpleMapper] using the provided conversion functions.
*
* @param T1 The first type
* @param T2 The second type
* @param t1 Function to convert from [T2] to [T1]
* @param t2 Function to convert from [T1] to [T2]
* @return A new [SimpleMapperImpl] instance
*/
@Suppress("NOTHING_TO_INLINE")
inline fun <T1, T2> simpleMapper(
noinline t1: (T2) -> T1,
noinline t2: (T1) -> T2,
) = SimpleMapperImpl(t1, t2)
/**
* A bidirectional mapper that can convert between two types [T1] and [T2] using suspending functions.
*
* @param T1 The first type
* @param T2 The second type
*/
interface SimpleSuspendableMapper<T1, T2> {
suspend fun convertToT1(from: T2): T1
suspend fun convertToT2(from: T1): T2
}
/**
* Converts [from] of type [T2] to type [T1] using this suspending mapper.
*
* @param from The value to convert
* @return The converted value of type [T1]
*/
@JvmName("convertFromT2")
suspend fun <T1, T2> SimpleSuspendableMapper<T1, T2>.convert(from: T2) = convertToT1(from)
/**
* Converts [from] of type [T1] to type [T2] using this suspending mapper.
*
* @param from The value to convert
* @return The converted value of type [T2]
*/
@JvmName("convertFromT1")
suspend fun <T1, T2> SimpleSuspendableMapper<T1, T2>.convert(from: T1) = convertToT2(from)
/**
* Implementation of [SimpleSuspendableMapper] that uses suspending lambda functions for conversion.
*
* @param T1 The first type
* @param T2 The second type
* @param t1 Suspending function to convert from [T2] to [T1]
* @param t2 Suspending function to convert from [T1] to [T2]
*/
class SimpleSuspendableMapperImpl<T1, T2>(
private val t1: suspend (T2) -> T1,
private val t2: suspend (T1) -> T2,
) : SimpleSuspendableMapper<T1, T2> {
override suspend fun convertToT1(from: T2): T1 = t1.invoke(from)
override suspend fun convertToT2(from: T1): T2 = t2.invoke(from)
}
/**
* Creates a [SimpleSuspendableMapper] using the provided suspending conversion functions.
*
* @param T1 The first type
* @param T2 The second type
* @param t1 Suspending function to convert from [T2] to [T1]
* @param t2 Suspending function to convert from [T1] to [T2]
* @return A new [SimpleSuspendableMapperImpl] instance
*/
@Suppress("NOTHING_TO_INLINE")
inline fun <T1, T2> simpleSuspendableMapper(
noinline t1: suspend (T2) -> T1,
noinline t2: suspend (T1) -> T2,
) = SimpleSuspendableMapperImpl(t1, t2)
@@ -0,0 +1,97 @@
@file:Suppress("unused")
package dev.inmo.micro_utils.common
import kotlinx.serialization.Serializable
/**
* This type represents [T] as not only potentially nullable data, but also as a data which can not be presented. This
* type will be useful in cases when [T] is nullable and null as valuable data too in time of data absence should be
* presented by some third type.
*
* Let's imagine, you have nullable name in some database. In case when name is not nullable everything is clear - null
* will represent absence of row in the database. In case when name is nullable null will be a little bit dual-meaning,
* cause this null will say nothing about availability of the row (of course, it is exaggerated example)
*
* @see Optional.presented
* @see Optional.absent
* @see Optional.optional
* @see Optional.onPresented
* @see Optional.onAbsent
*/
@Serializable
data class Optional<T> internal constructor(
@Warning("It is unsafe to use this data directly")
val data: T?,
@Warning("It is unsafe to use this data directly")
val dataPresented: Boolean
) {
companion object {
/**
* Will create [Optional] with presented data
*/
fun <T> presented(data: T) = Optional(data, true)
/**
* Will create [Optional] without data
*/
fun <T> absent() = Optional<T>(null, false)
}
}
inline val <T> T.optional
get() = Optional.presented(this)
inline val <T : Any> T?.optionalOrAbsentIfNull
get() = if (this == null) {
Optional.absent<T>()
} else {
Optional.presented(this)
}
/**
* Will call [block] when data presented ([Optional.dataPresented] == true)
*/
inline fun <T> Optional<T>.onPresented(block: (T) -> Unit): Optional<T> = apply {
@OptIn(Warning::class)
if (dataPresented) { @Suppress("UNCHECKED_CAST") block(data as T) }
}
/**
* Will call [block] when data presented ([Optional.dataPresented] == true)
*/
inline fun <T, R> Optional<T>.mapOnPresented(block: (T) -> R): R? = run {
@OptIn(Warning::class)
if (dataPresented) { @Suppress("UNCHECKED_CAST") block(data as T) } else null
}
/**
* Will call [block] when data absent ([Optional.dataPresented] == false)
*/
inline fun <T> Optional<T>.onAbsent(block: () -> Unit): Optional<T> = apply {
@OptIn(Warning::class)
if (!dataPresented) { block() }
}
/**
* Will call [block] when data presented ([Optional.dataPresented] == true)
*/
inline fun <T, R> Optional<T>.mapOnAbsent(block: () -> R): R? = run {
@OptIn(Warning::class)
if (!dataPresented) { block() } else null
}
/**
* Returns [Optional.data] if [Optional.dataPresented] of [this] is true, or null otherwise
*/
fun <T> Optional<T>.dataOrNull() = @OptIn(Warning::class) if (dataPresented) @Suppress("UNCHECKED_CAST") (data as T) else null
/**
* Returns [Optional.data] if [Optional.dataPresented] of [this] is true, or throw [throwable] otherwise
*/
fun <T> Optional<T>.dataOrThrow(throwable: Throwable) = @OptIn(Warning::class) if (dataPresented) @Suppress("UNCHECKED_CAST") (data as T) else throw throwable
/**
* Returns [Optional.data] if [Optional.dataPresented] of [this] is true, or call [block] and returns the result of it
*/
inline fun <T> Optional<T>.dataOrElse(block: () -> T) = @OptIn(Warning::class) if (dataPresented) @Suppress("UNCHECKED_CAST") (data as T) else block()
@@ -0,0 +1,119 @@
package dev.inmo.micro_utils.common
/**
* Pads this sequence to the specified [size] using a custom [inserter] function.
* The [inserter] is repeatedly called until the sequence reaches the desired size.
*
* @param T The type of elements in the sequence
* @param size The target size of the padded sequence
* @param inserter A function that takes the current sequence and returns a new padded sequence
* @return A sequence padded to at least the specified size
*/
inline fun <T> Sequence<T>.padWith(size: Int, inserter: (Sequence<T>) -> Sequence<T>): Sequence<T> {
var result = this
while (result.count() < size) {
result = inserter(result)
}
return result
}
/**
* Pads this sequence at the end to the specified [size].
* New elements are generated using [padBlock], which receives the current size as a parameter.
*
* @param T The type of elements in the sequence
* @param size The target size of the padded sequence
* @param padBlock A function that generates padding elements based on the current sequence size
* @return A sequence padded to at least the specified size
*/
inline fun <T> Sequence<T>.padEnd(size: Int, padBlock: (Int) -> T): Sequence<T> = padWith(size) { it + padBlock(it.count()) }
/**
* Pads this sequence at the end to the specified [size] using the given element [o].
*
* @param T The type of elements in the sequence
* @param size The target size of the padded sequence
* @param o The element to use for padding
* @return A sequence padded to at least the specified size
*/
inline fun <T> Sequence<T>.padEnd(size: Int, o: T) = padEnd(size) { o }
/**
* Pads this list to the specified [size] using a custom [inserter] function.
* The [inserter] is repeatedly called until the list reaches the desired size.
*
* @param T The type of elements in the list
* @param size The target size of the padded list
* @param inserter A function that takes the current list and returns a new padded list
* @return A list padded to at least the specified size
*/
inline fun <T> List<T>.padWith(size: Int, inserter: (List<T>) -> List<T>): List<T> {
var result = this
while (result.size < size) {
result = inserter(result)
}
return result
}
/**
* Pads this list at the end to the specified [size].
* New elements are generated using [padBlock], which receives the current size as a parameter.
*
* @param T The type of elements in the list
* @param size The target size of the padded list
* @param padBlock A function that generates padding elements based on the current list size
* @return A list padded to at least the specified size
*/
inline fun <T> List<T>.padEnd(size: Int, padBlock: (Int) -> T): List<T> = asSequence().padEnd(size, padBlock).toList()
/**
* Pads this list at the end to the specified [size] using the given element [o].
*
* @param T The type of elements in the list
* @param size The target size of the padded list
* @param o The element to use for padding
* @return A list padded to at least the specified size
*/
inline fun <T> List<T>.padEnd(size: Int, o: T): List<T> = asSequence().padEnd(size, o).toList()
/**
* Pads this sequence at the start to the specified [size].
* New elements are generated using [padBlock], which receives the current size as a parameter.
*
* @param T The type of elements in the sequence
* @param size The target size of the padded sequence
* @param padBlock A function that generates padding elements based on the current sequence size
* @return A sequence padded to at least the specified size
*/
inline fun <T> Sequence<T>.padStart(size: Int, padBlock: (Int) -> T): Sequence<T> = padWith(size) { sequenceOf(padBlock(it.count())) + it }
/**
* Pads this sequence at the start to the specified [size] using the given element [o].
*
* @param T The type of elements in the sequence
* @param size The target size of the padded sequence
* @param o The element to use for padding
* @return A sequence padded to at least the specified size
*/
inline fun <T> Sequence<T>.padStart(size: Int, o: T) = padStart(size) { o }
/**
* Pads this list at the start to the specified [size].
* New elements are generated using [padBlock], which receives the current size as a parameter.
*
* @param T The type of elements in the list
* @param size The target size of the padded list
* @param padBlock A function that generates padding elements based on the current list size
* @return A list padded to at least the specified size
*/
inline fun <T> List<T>.padStart(size: Int, padBlock: (Int) -> T): List<T> = asSequence().padStart(size, padBlock).toList()
/**
* Pads this list at the start to the specified [size] using the given element [o].
*
* @param T The type of elements in the list
* @param size The target size of the padded list
* @param o The element to use for padding
* @return A list padded to at least the specified size
*/
inline fun <T> List<T>.padStart(size: Int, o: T): List<T> = asSequence().padStart(size, o).toList()
@@ -0,0 +1,76 @@
package dev.inmo.micro_utils.common
import kotlinx.serialization.Serializable
import kotlin.jvm.JvmInline
/**
* Contains [of1] as main value, where 100% of percentage is when of1 == 1
*
* @see invoke
* @see partOfTotal
* @see of100
*/
@Serializable
@JvmInline
value class Percentage private constructor(
/**
* Value of percentage. When it equals to 1, means 100%
*/
val of1: Double
) {
/**
* Same as [of1], but float (using [Double.toFloat])
*/
val of1Float
get() = of1.toFloat()
/**
* Represent this percentage as common percentage where 100% is 100%
*/
val of100
get() = of1 * 100
/**
* Same as [of100], but float (using [Double.toFloat])
*/
val of100Float
get() = of100.toFloat()
/**
* Same as [of100], but int (using [Double.toInt])
*/
val of100Int
get() = of100.toInt()
companion object {
val rangeOfValues = 0.0 .. 1.0
val START = Percentage(rangeOfValues.start)
val COMPLETED = Percentage(rangeOfValues.endInclusive)
operator fun invoke(of1: Double) = Percentage(of1.coerceIn(rangeOfValues))
operator fun invoke(part: Number, total: Number) = Percentage(
part.toDouble() / total.toDouble()
)
fun of1(of1: Double) = Percentage(of1 = of1)
fun of100(of100: Double) = Percentage(of1 = of100 / 100)
fun partOfTotal(part: Number, total: Number) = Percentage(part = part, total = total)
}
}
typealias Progress = Percentage
/**
* Will return [this] [Progress] if [Percentage.of1] in `0 .. 1` range
*/
fun Progress.ensureStrictOrNull(): Progress? = if (of1 in Percentage.rangeOfValues) this else null
/**
* Will return [this] [Progress] if [Percentage.of1] in `0 .. 1` range. Otherwise, will throw error
* [IllegalArgumentException] due to [require] failure
*/
fun Progress.ensureStrictOrThrow(): Progress {
require(of1 in Percentage.rangeOfValues) {
"For strict checks value of percentage must be in ${Percentage.rangeOfValues}, but actual value is $of1"
}
return this
}
@@ -0,0 +1,80 @@
@file:Suppress(
"RemoveRedundantCallsOfConversionMethods",
"RedundantVisibilityModifier",
)
package dev.inmo.micro_utils.common
import kotlin.Byte
import kotlin.Double
import kotlin.Float
import kotlin.Int
import kotlin.Long
import kotlin.Short
import kotlin.Suppress
public operator fun Percentage.plus(other: Percentage): Percentage = Percentage(of1 + other.of1)
public operator fun Percentage.minus(other: Percentage): Percentage = Percentage(of1 - other.of1)
public operator fun Percentage.plus(i: Byte): Percentage = Percentage((of1 + i).toDouble())
public operator fun Percentage.minus(i: Byte): Percentage = Percentage((of1 - i).toDouble())
public operator fun Percentage.times(i: Byte): Percentage = Percentage((of1 * i).toDouble())
public operator fun Percentage.div(i: Byte): Percentage = Percentage((of1 / i).toDouble())
public operator fun Percentage.rem(i: Byte): Percentage = Percentage((of1 % i).toDouble())
public operator fun Percentage.plus(i: Short): Percentage = Percentage((of1 + i).toDouble())
public operator fun Percentage.minus(i: Short): Percentage = Percentage((of1 - i).toDouble())
public operator fun Percentage.times(i: Short): Percentage = Percentage((of1 * i).toDouble())
public operator fun Percentage.div(i: Short): Percentage = Percentage((of1 / i).toDouble())
public operator fun Percentage.rem(i: Short): Percentage = Percentage((of1 % i).toDouble())
public operator fun Percentage.plus(i: Int): Percentage = Percentage((of1 + i).toDouble())
public operator fun Percentage.minus(i: Int): Percentage = Percentage((of1 - i).toDouble())
public operator fun Percentage.times(i: Int): Percentage = Percentage((of1 * i).toDouble())
public operator fun Percentage.div(i: Int): Percentage = Percentage((of1 / i).toDouble())
public operator fun Percentage.rem(i: Int): Percentage = Percentage((of1 % i).toDouble())
public operator fun Percentage.plus(i: Long): Percentage = Percentage((of1 + i).toDouble())
public operator fun Percentage.minus(i: Long): Percentage = Percentage((of1 - i).toDouble())
public operator fun Percentage.times(i: Long): Percentage = Percentage((of1 * i).toDouble())
public operator fun Percentage.div(i: Long): Percentage = Percentage((of1 / i).toDouble())
public operator fun Percentage.rem(i: Long): Percentage = Percentage((of1 % i).toDouble())
public operator fun Percentage.plus(i: Float): Percentage = Percentage((of1 + i).toDouble())
public operator fun Percentage.minus(i: Float): Percentage = Percentage((of1 - i).toDouble())
public operator fun Percentage.times(i: Float): Percentage = Percentage((of1 * i).toDouble())
public operator fun Percentage.div(i: Float): Percentage = Percentage((of1 / i).toDouble())
public operator fun Percentage.rem(i: Float): Percentage = Percentage((of1 % i).toDouble())
public operator fun Percentage.plus(i: Double): Percentage = Percentage((of1 + i).toDouble())
public operator fun Percentage.minus(i: Double): Percentage = Percentage((of1 - i).toDouble())
public operator fun Percentage.times(i: Double): Percentage = Percentage((of1 * i).toDouble())
public operator fun Percentage.div(i: Double): Percentage = Percentage((of1 / i).toDouble())
public operator fun Percentage.rem(i: Double): Percentage = Percentage((of1 % i).toDouble())
public operator fun Percentage.compareTo(other: Percentage): Int = (of1.compareTo(other.of1))
@@ -0,0 +1,28 @@
package dev.inmo.micro_utils.common
/**
* Convert [this] [Long] to [Int] with bounds of [Int.MIN_VALUE] and [Int.MAX_VALUE]
*/
fun Long.toCoercedInt(): Int = coerceIn(Int.MIN_VALUE.toLong(), Int.MAX_VALUE.toLong()).toInt()
/**
* Convert [this] [Long] to [Short] with bounds of [Short.MIN_VALUE] and [Short.MAX_VALUE]
*/
fun Long.toCoercedShort(): Short = coerceIn(Short.MIN_VALUE.toLong(), Short.MAX_VALUE.toLong()).toShort()
/**
* Convert [this] [Long] to [Byte] with bounds of [Byte.MIN_VALUE] and [Byte.MAX_VALUE]
*/
fun Long.toCoercedByte(): Byte = coerceIn(Byte.MIN_VALUE.toLong(), Byte.MAX_VALUE.toLong()).toByte()
/**
* Convert [this] [Int] to [Short] with bounds of [Short.MIN_VALUE] and [Short.MAX_VALUE]
*/
fun Int.toCoercedShort(): Short = coerceIn(Short.MIN_VALUE.toInt(), Short.MAX_VALUE.toInt()).toShort()
/**
* Convert [this] [Int] to [Byte] with bounds of [Byte.MIN_VALUE] and [Byte.MAX_VALUE]
*/
fun Int.toCoercedByte(): Byte = coerceIn(Byte.MIN_VALUE.toInt(), Byte.MAX_VALUE.toInt()).toByte()
/**
* Convert [this] [Short] to [Byte] with bounds of [Byte.MIN_VALUE] and [Byte.MAX_VALUE]
*/
fun Short.toCoercedByte(): Byte = coerceIn(Byte.MIN_VALUE.toShort(), Byte.MAX_VALUE.toShort()).toByte()
@@ -0,0 +1,41 @@
package dev.inmo.micro_utils.common
/**
* Computes the intersection of this range with [other]. Returns a pair representing
* the intersecting range, or null if the ranges don't overlap.
*
* @param T The type of comparable values in the range
* @param other The other range to intersect with
* @return A pair (start, end) representing the intersection, or null if no intersection exists
*/
fun <T : Comparable<T>> ClosedRange<T>.intersect(other: ClosedRange<T>): Pair<T, T>? = when {
start == other.start && endInclusive == other.endInclusive -> start to endInclusive
start > other.endInclusive || other.start > endInclusive -> null
else -> maxOf(start, other.start) to minOf(endInclusive, other.endInclusive)
}
/**
* Computes the intersection of this [IntRange] with [other].
* Returns the intersecting range, or null if the ranges don't overlap.
*
* @param other The other range to intersect with
* @return An [IntRange] representing the intersection, or null if no intersection exists
*/
fun IntRange.intersect(
other: IntRange
): IntRange? = (this as ClosedRange<Int>).intersect(other as ClosedRange<Int>) ?.let {
it.first .. it.second
}
/**
* Computes the intersection of this [LongRange] with [other].
* Returns the intersecting range, or null if the ranges don't overlap.
*
* @param other The other range to intersect with
* @return A [LongRange] representing the intersection, or null if no intersection exists
*/
fun LongRange.intersect(
other: LongRange
): LongRange? = (this as ClosedRange<Long>).intersect(other as ClosedRange<Long>) ?.let {
it.first .. it.second
}
@@ -0,0 +1,54 @@
package dev.inmo.micro_utils.common
/**
* Executes the given [action] until getting of successful result specified number of [times].
*
* A zero-based index of current iteration is passed as a parameter to [action].
*/
inline fun <R> repeatOnFailure(
onFailure: (Throwable) -> Boolean,
action: () -> R
): Result<R> {
do {
runCatching {
action()
}.onFailure {
if (!onFailure(it)) {
return Result.failure(it)
}
}.onSuccess {
return Result.success(it)
}
} while (true)
}
/**
* Executes the given [action] until getting of successful result specified number of [times].
*
* A zero-based index of current iteration is passed as a parameter to [action].
*/
inline fun <R> repeatOnFailure(
times: Int,
onEachFailure: (Throwable) -> Unit = {},
action: (Int) -> R
): Optional<R> {
var i = 0
val result = repeatOnFailure(
{
onEachFailure(it)
if (i < times) {
i++
true
} else {
false
}
}
) {
action(i)
}
return if (result.isSuccess) {
Optional.presented(result.getOrThrow())
} else {
Optional.absent()
}
}
@@ -0,0 +1,26 @@
package dev.inmo.micro_utils.common
/**
* Will try to execute [action] and, if any exception will happen, execution will be retried.
* This process will happen at most [count] times. There is no any limits on [count] value, but [action] will run at
* least once and [retryOnFailure] will return its result if it is successful
*/
inline fun <T> retryOnFailure(count: Int, action: () -> T): T {
var triesCount = 0
while (true) {
val result = runCatching {
action()
}.onFailure {
triesCount++
if (triesCount >= count) {
throw it
} else {
null
}
}
if (result.isSuccess) return result.getOrThrow()
}
error("Unreachable code: retry must throw latest exception if error happen or success value if not")
}
@@ -0,0 +1,6 @@
package dev.inmo.micro_utils.common
val FixedSignsRange = 0 .. 100
expect fun Float.fixed(signs: Int): Float
expect fun Double.fixed(signs: Int): Double
@@ -0,0 +1,24 @@
package dev.inmo.micro_utils.common
/**
* Returns a new list with the element at index [i] replaced by applying [block] to it.
* All other elements remain unchanged.
*
* @param T The type of elements in the iterable
* @param i The index of the element to replace
* @param block A function that transforms the element at the given index
* @return A new list with the replaced element
*/
fun <T> Iterable<T>.withReplacedAt(i: Int, block: (T) -> T): List<T> = take(i) + block(elementAt(i)) + drop(i + 1)
/**
* Returns a new list with the first occurrence of element [t] replaced by applying [block] to it.
* All other elements remain unchanged.
*
* @param T The type of elements in the iterable
* @param t The element to replace
* @param block A function that transforms the found element
* @return A new list with the replaced element
*/
fun <T> Iterable<T>.withReplaced(t: T, block: (T) -> T): List<T> = withReplacedAt(indexOf(t), block)
@@ -11,7 +11,7 @@ class DiffUtilsTests {
val withIndex = oldList.withIndex()
for (count in 1 .. (floor(oldList.size.toFloat() / 2).toInt())) {
for ((i, v) in withIndex) {
for ((i, _) in withIndex) {
if (i + count > oldList.lastIndex) {
continue
}
@@ -32,7 +32,7 @@ class DiffUtilsTests {
val withIndex = oldList.withIndex()
for (count in 1 .. (floor(oldList.size.toFloat() / 2).toInt())) {
for ((i, v) in withIndex) {
for ((i, _) in withIndex) {
if (i + count > oldList.lastIndex) {
continue
}
@@ -54,8 +54,8 @@ class DiffUtilsTests {
val oldList = (0 until 10).map { it.toString() }
val withIndex = oldList.withIndex()
for (step in 0 until oldList.size) {
for ((i, v) in withIndex) {
for (step in oldList.indices) {
for ((i, _) in withIndex) {
val mutable = oldList.toMutableList()
val changes = (
if (step == 0) i until oldList.size else (i until oldList.size step step)
@@ -73,4 +73,83 @@ class DiffUtilsTests {
}
}
}
@Test
fun testThatSimpleRemoveApplyWorks() {
val oldList = (0 until 10).toList()
val withIndex = oldList.withIndex()
for (count in 1 .. (floor(oldList.size.toFloat() / 2).toInt())) {
for ((i, _) in withIndex) {
if (i + count > oldList.lastIndex) {
continue
}
val removedSublist = oldList.subList(i, i + count)
val mutableOldList = oldList.toMutableList()
val targetList = oldList - removedSublist
mutableOldList.applyDiff(targetList)
assertEquals(
targetList,
mutableOldList
)
}
}
}
@Test
fun testThatSimpleAddApplyWorks() {
val oldList = (0 until 10).map { it.toString() }
val withIndex = oldList.withIndex()
for (count in 1 .. (floor(oldList.size.toFloat() / 2).toInt())) {
for ((i, _) in withIndex) {
if (i + count > oldList.lastIndex) {
continue
}
val addedSublist = oldList.subList(i, i + count).map { "added$it" }
val mutable = oldList.toMutableList()
mutable.addAll(i, addedSublist)
val mutableOldList = oldList.toMutableList()
mutableOldList.applyDiff(mutable)
assertEquals(
mutable,
mutableOldList
)
}
}
}
@Test
fun testThatSimpleChangesApplyWorks() {
val oldList = (0 until 10).map { it.toString() }
val withIndex = oldList.withIndex()
for (step in oldList.indices) {
for ((i, _) in withIndex) {
val mutable = oldList.toMutableList()
val newList = if (step == 0) {
i until oldList.size
} else {
i until oldList.size step step
}
newList.forEach { index ->
IndexedValue(index, mutable[index]) to IndexedValue(index, "changed$index").also {
mutable[index] = it.value
}
}
val mutableOldList = oldList.toMutableList()
mutableOldList.applyDiff(mutable)
assertEquals(
mutable,
mutableOldList
)
}
}
}
}
@@ -0,0 +1,29 @@
package dev.inmo.micro_utils.common
import kotlin.test.Test
import kotlin.test.assertEquals
class PercentageTests {
@Test
fun testCompareTo() {
val step = 0.01
var i = Percentage.START.of1
while (i <= Percentage.COMPLETED.of1) {
val percentageI = Percentage(i)
var j = Percentage.START.of1
while (j <= Percentage.COMPLETED.of1) {
val percentageJ = Percentage(j)
assertEquals(percentageI.of1.compareTo(percentageJ.of1), percentageI.compareTo(percentageJ))
assertEquals(percentageI.of1 > percentageJ.of1, percentageI > percentageJ)
assertEquals(percentageI.of1 < percentageJ.of1, percentageI < percentageJ)
j += step
}
i += step
}
}
}
@@ -0,0 +1,21 @@
package dev.inmo.micro_utils.common
import kotlin.test.Test
import kotlin.test.assertEquals
class WithReplacedTest {
@Test
fun testReplaced() {
val data = 0 until 10
val testData = Int.MAX_VALUE
for (i in 0 until data.last) {
val withReplaced = data.withReplacedAt(i) {
testData
}
val dataAsMutableList = data.toMutableList()
dataAsMutableList[i] = testData
assertEquals(withReplaced, dataAsMutableList.toList())
}
}
}
@@ -0,0 +1,15 @@
package dev.inmo.micro_utils.common
import org.khronos.webgl.*
fun DataView.toByteArray() = ByteArray(this.byteLength) {
getInt8(it)
}
fun ArrayBuffer.toByteArray() = Int8Array(this) as ByteArray
fun ByteArray.toDataView() = DataView(ArrayBuffer(size)).also {
forEachIndexed { i, byte -> it.setInt8(i, byte) }
}
fun ByteArray.toArrayBuffer() = toDataView().buffer
@@ -0,0 +1,13 @@
package dev.inmo.micro_utils.common
import kotlinx.browser.window
fun copyToClipboard(text: String): Boolean {
return runCatching {
window.navigator.clipboard.writeText(
text
)
}.onFailure {
it.printStackTrace()
}.isSuccess
}
@@ -0,0 +1,29 @@
package dev.inmo.micro_utils.common
import kotlinx.browser.window
import org.w3c.files.Blob
import org.w3c.files.BlobPropertyBag
import kotlin.js.json
external class ClipboardItem(data: dynamic)
inline fun Blob.convertToClipboardItem(): ClipboardItem {
val itemData: dynamic = json(this.type to this)
return ClipboardItem(itemData)
}
suspend fun copyImageURLToClipboard(imageUrl: String): Boolean {
return runCatching {
val response = window.fetch(imageUrl).await()
val blob = response.blob().await()
val data = arrayOf(
Blob(
arrayOf(blob),
BlobPropertyBag("image/png")
).convertToClipboardItem()
).asDynamic()
window.navigator.clipboard.write(data)
}.onFailure {
it.printStackTrace()
}.isSuccess
}
@@ -0,0 +1,61 @@
package dev.inmo.micro_utils.common
import kotlinx.browser.document
import org.w3c.dom.*
fun Node.onRemoved(block: () -> Unit): MutationObserver {
lateinit var observer: MutationObserver
observer = MutationObserver { _, _ ->
fun checkIfRemoved(node: Node): Boolean {
return node.parentNode != document && (node.parentNode ?.let { checkIfRemoved(it) } ?: true)
}
if (checkIfRemoved(this)) {
observer.disconnect()
block()
}
}
observer.observe(document, MutationObserverInit(childList = true, subtree = true))
return observer
}
fun Element.onVisibilityChanged(block: IntersectionObserverEntry.(Float, IntersectionObserver) -> Unit): IntersectionObserver {
var previousIntersectionRatio = -1f
val observer = IntersectionObserver { entries, observer ->
entries.forEach {
if (previousIntersectionRatio != it.intersectionRatio) {
previousIntersectionRatio = it.intersectionRatio.toFloat()
it.block(previousIntersectionRatio, observer)
}
}
}
observer.observe(this)
return observer
}
fun Element.onVisible(block: Element.(IntersectionObserver) -> Unit) {
var previous = -1f
onVisibilityChanged { intersectionRatio, observer ->
if (previous != intersectionRatio) {
if (intersectionRatio > 0 && previous == 0f) {
block(observer)
}
previous = intersectionRatio
}
}
}
fun Element.onInvisible(block: Element.(IntersectionObserver) -> Unit): IntersectionObserver {
var previous = -1f
return onVisibilityChanged { intersectionRatio, observer ->
if (previous != intersectionRatio) {
if (intersectionRatio == 0f && previous != 0f) {
block(observer)
}
previous = intersectionRatio
}
}
}
@@ -0,0 +1,124 @@
package dev.inmo.micro_utils.common
import org.w3c.dom.DOMRectReadOnly
import org.w3c.dom.Element
external interface IntersectionObserverOptions {
/**
* An Element or Document object which is an ancestor of the intended target, whose bounding rectangle will be
* considered the viewport. Any part of the target not visible in the visible area of the root is not considered
* visible.
*/
var root: Element?
/**
* A string which specifies a set of offsets to add to the root's bounding_box when calculating intersections,
* effectively shrinking or growing the root for calculation purposes. The syntax is approximately the same as that
* for the CSS margin property; see The root element and root margin in Intersection Observer API for more
* information on how the margin works and the syntax. The default is "0px 0px 0px 0px".
*/
var rootMargin: String?
/**
* Either a single number or an array of numbers between 0.0 and 1.0, specifying a ratio of intersection area to
* total bounding box area for the observed target. A value of 0.0 means that even a single visible pixel counts as
* the target being visible. 1.0 means that the entire target element is visible. See Thresholds in Intersection
* Observer API for a more in-depth description of how thresholds are used. The default is a threshold of 0.0.
*/
var threshold: Array<Number>?
}
fun IntersectionObserverOptions(
block: IntersectionObserverOptions.() -> Unit = {}
): IntersectionObserverOptions = js("{}").unsafeCast<IntersectionObserverOptions>().apply(block)
external interface IntersectionObserverEntry {
/**
* Returns the bounds rectangle of the target element as a DOMRectReadOnly. The bounds are computed as described in
* the documentation for Element.getBoundingClientRect().
*/
val boundingClientRect: DOMRectReadOnly
/**
* Returns the ratio of the intersectionRect to the boundingClientRect.
*/
val intersectionRatio: Number
/**
* Returns a DOMRectReadOnly representing the target's visible area.
*/
val intersectionRect: DOMRectReadOnly
/**
* A Boolean value which is true if the target element intersects with the intersection observer's root. If this is
* true, then, the IntersectionObserverEntry describes a transition into a state of intersection; if it's false,
* then you know the transition is from intersecting to not-intersecting.
*/
val isIntersecting: Boolean
/**
* Returns a DOMRectReadOnly for the intersection observer's root.
*/
val rootBounds: DOMRectReadOnly
/**
* The Element whose intersection with the root changed.
*/
val target: Element
/**
* A DOMHighResTimeStamp indicating the time at which the intersection was recorded, relative to the
* IntersectionObserver's time origin.
*/
val time: Double
}
typealias IntersectionObserverCallback = (entries: Array<IntersectionObserverEntry>, observer: IntersectionObserver) -> Unit
/**
* This is just an implementation from [this commentary](https://youtrack.jetbrains.com/issue/KT-43157#focus=Comments-27-4498582.0-0)
* of Kotlin JS issue related to the absence of [Intersection Observer API](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver)
*/
external class IntersectionObserver(callback: IntersectionObserverCallback) {
constructor(callback: IntersectionObserverCallback, options: IntersectionObserverOptions)
/**
* The Element or Document whose bounds are used as the bounding box when testing for intersection. If no root value
* was passed to the constructor or its value is null, the top-level document's viewport is used.
*/
val root: Element
/**
* An offset rectangle applied to the root's bounding box when calculating intersections, effectively shrinking or
* growing the root for calculation purposes. The value returned by this property may not be the same as the one
* specified when calling the constructor as it may be changed to match internal requirements. Each offset can be
* expressed in pixels (px) or as a percentage (%). The default is "0px 0px 0px 0px".
*/
val rootMargin: String
/**
* A list of thresholds, sorted in increasing numeric order, where each threshold is a ratio of intersection area to
* bounding box area of an observed target. Notifications for a target are generated when any of the thresholds are
* crossed for that target. If no value was passed to the constructor, 0 is used.
*/
val thresholds: Array<Number>
/**
* Stops the IntersectionObserver object from observing any target.
*/
fun disconnect()
/**
* Tells the IntersectionObserver a target element to observe.
*/
fun observe(targetElement: Element)
/**
* Returns an array of IntersectionObserverEntry objects for all observed targets.
*/
fun takeRecords(): Array<IntersectionObserverEntry>
/**
* Tells the IntersectionObserver to stop observing a particular target element.
*/
fun unobserve(targetElement: Element)
}
@@ -0,0 +1,12 @@
package dev.inmo.micro_utils.common
import org.w3c.dom.Element
inline val Element.isOverflowWidth
get() = scrollWidth > clientWidth
inline val Element.isOverflowHeight
get() = scrollHeight > clientHeight
inline val Element.isOverflow
get() = isOverflowHeight || isOverflowWidth
@@ -0,0 +1,58 @@
package dev.inmo.micro_utils.common
import org.khronos.webgl.ArrayBuffer
import org.w3c.dom.ErrorEvent
import org.w3c.files.*
import kotlin.js.Promise
/**
* @suppress
*/
actual typealias MPPFile = File
fun MPPFile.readBytesPromise() = Promise<ByteArray> { success, failure ->
val reader = FileReader()
reader.onload = {
success((reader.result as ArrayBuffer).toByteArray())
Unit
}
reader.onerror = {
failure(Exception((it as ErrorEvent).message))
Unit
}
reader.readAsArrayBuffer(this)
}
fun MPPFile.readBytes(): ByteArray {
val reader = FileReaderSync()
return reader.readAsArrayBuffer(this).toByteArray()
}
private suspend fun MPPFile.dirtyReadBytes(): ByteArray = readBytesPromise().await()
/**
* @suppress
*/
actual val MPPFile.filename: FileName
get() = FileName(name)
actual val MPPFilePathSeparator: Char
get() = '/'
/**
* @suppress
*/
actual val MPPFile.filesize: Long
get() = size.toLong()
/**
* @suppress
*/
@Warning("That is not optimized version of bytes allocator. Use asyncBytesAllocator everywhere you can")
actual val MPPFile.bytesAllocatorSync: ByteArrayAllocator
get() = ::readBytes
/**
* @suppress
*/
@Warning("That is not optimized version of bytes allocator. Use asyncBytesAllocator everywhere you can")
actual val MPPFile.bytesAllocator: SuspendByteArrayAllocator
get() = ::dirtyReadBytes
@@ -0,0 +1,38 @@
package dev.inmo.micro_utils.common
import kotlinx.browser.document
import org.w3c.dom.*
import org.w3c.dom.events.Event
import org.w3c.dom.events.EventListener
fun Element.onActionOutside(type: String, options: dynamic = null, callback: (Event) -> Unit): EventListener {
lateinit var observer: MutationObserver
val listener = EventListener {
val elementsToCheck = mutableListOf<Element>(this@onActionOutside)
while (it.target != this@onActionOutside && elementsToCheck.isNotEmpty()) {
val childrenGettingElement = elementsToCheck.removeFirst()
for (i in 0 until childrenGettingElement.childElementCount) {
elementsToCheck.add(childrenGettingElement.children[i] ?: continue)
}
}
if (elementsToCheck.isEmpty()) {
callback(it)
}
}
if (options == null) {
document.addEventListener(type, listener)
} else {
document.addEventListener(type, listener, options)
}
observer = onRemoved {
if (options == null) {
document.removeEventListener(type, listener)
} else {
document.removeEventListener(type, listener, options)
}
observer.disconnect()
}
return listener
}
fun Element.onClickOutside(options: dynamic = null, callback: (Event) -> Unit) = onActionOutside("click", options, callback)
@@ -0,0 +1,8 @@
package dev.inmo.micro_utils.common
import kotlinx.browser.window
fun openLink(link: String, target: String = "_blank", features: String = "") {
window.open(link, target, features) ?.focus()
}
@@ -0,0 +1,8 @@
package dev.inmo.micro_utils.common
import kotlin.coroutines.*
import kotlin.js.Promise
suspend fun <T> Promise<T>.await(): T = suspendCoroutine { cont ->
then({ cont.resume(it) }, { cont.resumeWithException(it) })
}
@@ -0,0 +1,58 @@
package dev.inmo.micro_utils.common
import org.w3c.dom.*
import kotlin.js.Json
import kotlin.js.json
external class ResizeObserver(
callback: (Array<ResizeObserverEntry>, ResizeObserver) -> Unit
) {
fun observe(target: Element, options: Json = definedExternally)
fun unobserve(target: Element)
fun disconnect()
}
external interface ResizeObserverSize {
val blockSize: Float
val inlineSize: Float
}
external interface ResizeObserverEntry {
val borderBoxSize: Array<ResizeObserverSize>
val contentBoxSize: Array<ResizeObserverSize>
val devicePixelContentBoxSize: Array<ResizeObserverSize>
val contentRect: DOMRectReadOnly
val target: Element
}
fun ResizeObserver.observe(target: Element, options: ResizeObserverObserveOptions) = observe(
target,
json(
"box" to options.box ?.name
)
)
class ResizeObserverObserveOptions(
val box: Box? = null
) {
sealed interface Box {
val name: String
object Content : Box {
override val name: String
get() = "content-box"
}
object Border : Box {
override val name: String
get() = "border-box"
}
object DevicePixelContent : Box {
override val name: String
get() = "device-pixel-content-box"
}
}
}
Loaded 100 of 712 files, more files were not shown because too many files have changed in this diff. Show more