From 487261f30526ffbfbb1c5c4e6f687ca1a33dbaa7 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 29 Mar 2024 16:32:58 +0100 Subject: [PATCH 01/58] refactor core module to multiplatform --- app/build.gradle.kts | 11 -- build.gradle.kts | 119 +++--------------- buildSrc/src/main/java/Dependencies.kt | 20 +-- buildSrc/src/main/java/LibraryModulePlugin.kt | 8 +- buildSrc/src/main/java/Plugins.kt | 1 + buildSrc/src/main/java/Versions.kt | 2 +- core/build.gradle.kts | 27 +++- .../composeResources}/values-bg/strings.xml | 0 .../composeResources}/values-cs/strings.xml | 0 .../composeResources}/values-da/strings.xml | 0 .../values-de-rDE/strings.xml | 0 .../composeResources}/values-de/strings.xml | 0 .../composeResources}/values-el/strings.xml | 0 .../composeResources}/values-eo/strings.xml | 0 .../composeResources}/values-es/strings.xml | 0 .../composeResources}/values-et/strings.xml | 0 .../composeResources}/values-fa/strings.xml | 0 .../composeResources}/values-fi/strings.xml | 0 .../composeResources}/values-fr/strings.xml | 0 .../composeResources}/values-ga/strings.xml | 0 .../composeResources}/values-gd/strings.xml | 0 .../composeResources}/values-hi/strings.xml | 0 .../composeResources}/values-hr/strings.xml | 0 .../composeResources}/values-hu/strings.xml | 0 .../values-in-rID/strings.xml | 0 .../composeResources}/values-is/strings.xml | 0 .../composeResources}/values-it/strings.xml | 0 .../composeResources}/values-iw/strings.xml | 0 .../composeResources}/values-ja/strings.xml | 0 .../composeResources}/values-jv/strings.xml | 0 .../composeResources}/values-kk/strings.xml | 0 .../composeResources}/values-ko/strings.xml | 0 .../composeResources}/values-ku/strings.xml | 0 .../composeResources}/values-lb/strings.xml | 0 .../composeResources}/values-lo/strings.xml | 0 .../composeResources}/values-lt/strings.xml | 0 .../composeResources}/values-lv/strings.xml | 0 .../composeResources}/values-ms/strings.xml | 0 .../composeResources}/values-ne/strings.xml | 0 .../composeResources}/values-nl/strings.xml | 0 .../composeResources}/values-no/strings.xml | 0 .../composeResources}/values-pl/strings.xml | 0 .../composeResources}/values-pt/strings.xml | 0 .../composeResources}/values-ru/strings.xml | 0 .../composeResources}/values-sk/strings.xml | 0 .../composeResources}/values-sl/strings.xml | 0 .../composeResources}/values-sr/strings.xml | 0 .../composeResources}/values-sv/strings.xml | 0 .../composeResources}/values-th/strings.xml | 0 .../composeResources}/values-tr/strings.xml | 0 .../composeResources}/values-uk/strings.xml | 0 .../composeResources}/values-vi/strings.xml | 0 .../values-zh-rCN/strings.xml | 0 .../values-zh-rTW/strings.xml | 0 .../composeResources}/values/strings.xml | 1 - .../com/maxkeppeker/sheets/core/CoreDialog.kt | 3 - .../com/maxkeppeker/sheets/core/CorePopup.kt | 3 - .../com/maxkeppeker/sheets/core/CoreView.kt | 3 - .../maxkeppeker/sheets/core/icons/LibIcons.kt | 0 .../sheets/core/icons/filled/Apps.kt | 0 .../sheets/core/icons/filled/Backspace.kt | 0 .../sheets/core/icons/filled/Check.kt | 0 .../sheets/core/icons/filled/ChevronLeft.kt | 0 .../sheets/core/icons/filled/ChevronRight.kt | 0 .../sheets/core/icons/filled/Clear.kt | 0 .../sheets/core/icons/filled/ContentCopy.kt | 0 .../sheets/core/icons/filled/ContentPaste.kt | 0 .../sheets/core/icons/filled/EmojiEmotions.kt | 0 .../sheets/core/icons/filled/EmojiEvents.kt | 0 .../sheets/core/icons/filled/EmojiFlags.kt | 0 .../core/icons/filled/EmojiFoodBeverage.kt | 0 .../sheets/core/icons/filled/EmojiNature.kt | 0 .../sheets/core/icons/filled/EmojiObjects.kt | 0 .../sheets/core/icons/filled/EmojiSymbols.kt | 0 .../core/icons/filled/EmojiTransportation.kt | 0 .../sheets/core/icons/filled/Error.kt | 0 .../sheets/core/icons/filled/ExpandMore.kt | 0 .../sheets/core/icons/filled/Info.kt | 0 .../sheets/core/icons/filled/NotInterested.kt | 0 .../sheets/core/icons/filled/Star.kt | 0 .../sheets/core/icons/filled/Tune.kt | 0 .../sheets/core/icons/outlined/Apps.kt | 0 .../sheets/core/icons/outlined/Backspace.kt | 0 .../sheets/core/icons/outlined/Check.kt | 0 .../sheets/core/icons/outlined/ChevronLeft.kt | 0 .../core/icons/outlined/ChevronRight.kt | 0 .../sheets/core/icons/outlined/Clear.kt | 0 .../sheets/core/icons/outlined/ContentCopy.kt | 0 .../core/icons/outlined/ContentPaste.kt | 0 .../core/icons/outlined/EmojiEmotions.kt | 0 .../sheets/core/icons/outlined/EmojiEvents.kt | 0 .../sheets/core/icons/outlined/EmojiFlags.kt | 0 .../core/icons/outlined/EmojiFoodBeverage.kt | 0 .../sheets/core/icons/outlined/EmojiNature.kt | 0 .../core/icons/outlined/EmojiObjects.kt | 0 .../core/icons/outlined/EmojiSymbols.kt | 0 .../icons/outlined/EmojiTransportation.kt | 0 .../sheets/core/icons/outlined/Error.kt | 0 .../sheets/core/icons/outlined/ExpandMore.kt | 0 .../sheets/core/icons/outlined/Info.kt | 0 .../core/icons/outlined/NotInterested.kt | 0 .../sheets/core/icons/outlined/Star.kt | 0 .../sheets/core/icons/outlined/Tune.kt | 0 .../sheets/core/icons/rounded/Apps.kt | 0 .../sheets/core/icons/rounded/Backspace.kt | 0 .../sheets/core/icons/rounded/Check.kt | 0 .../sheets/core/icons/rounded/ChevronLeft.kt | 0 .../sheets/core/icons/rounded/ChevronRight.kt | 0 .../sheets/core/icons/rounded/Clear.kt | 0 .../sheets/core/icons/rounded/ContentCopy.kt | 0 .../sheets/core/icons/rounded/ContentPaste.kt | 0 .../core/icons/rounded/EmojiEmotions.kt | 0 .../sheets/core/icons/rounded/EmojiEvents.kt | 0 .../sheets/core/icons/rounded/EmojiFlags.kt | 0 .../core/icons/rounded/EmojiFoodBeverage.kt | 0 .../sheets/core/icons/rounded/EmojiNature.kt | 0 .../sheets/core/icons/rounded/EmojiObjects.kt | 0 .../sheets/core/icons/rounded/EmojiSymbols.kt | 0 .../core/icons/rounded/EmojiTransportation.kt | 0 .../sheets/core/icons/rounded/Error.kt | 0 .../sheets/core/icons/rounded/ExpandMore.kt | 0 .../sheets/core/icons/rounded/Info.kt | 0 .../core/icons/rounded/NotInterested.kt | 0 .../sheets/core/icons/rounded/Star.kt | 0 .../sheets/core/icons/rounded/Tune.kt | 0 .../sheets/core/icons/sharp/Apps.kt | 0 .../sheets/core/icons/sharp/Backspace.kt | 0 .../sheets/core/icons/sharp/Check.kt | 0 .../sheets/core/icons/sharp/ChevronLeft.kt | 0 .../sheets/core/icons/sharp/ChevronRight.kt | 0 .../sheets/core/icons/sharp/Clear.kt | 0 .../sheets/core/icons/sharp/ContentCopy.kt | 0 .../sheets/core/icons/sharp/ContentPaste.kt | 0 .../sheets/core/icons/sharp/EmojiEmotions.kt | 0 .../sheets/core/icons/sharp/EmojiEvents.kt | 0 .../sheets/core/icons/sharp/EmojiFlags.kt | 0 .../core/icons/sharp/EmojiFoodBeverage.kt | 0 .../sheets/core/icons/sharp/EmojiNature.kt | 0 .../sheets/core/icons/sharp/EmojiObjects.kt | 0 .../sheets/core/icons/sharp/EmojiSymbols.kt | 0 .../core/icons/sharp/EmojiTransportation.kt | 0 .../sheets/core/icons/sharp/Error.kt | 0 .../sheets/core/icons/sharp/ExpandMore.kt | 0 .../sheets/core/icons/sharp/Info.kt | 0 .../sheets/core/icons/sharp/NotInterested.kt | 0 .../sheets/core/icons/sharp/Star.kt | 0 .../sheets/core/icons/sharp/Tune.kt | 0 .../sheets/core/icons/twotone/Apps.kt | 0 .../sheets/core/icons/twotone/Backspace.kt | 0 .../sheets/core/icons/twotone/Check.kt | 0 .../sheets/core/icons/twotone/ChevronLeft.kt | 0 .../sheets/core/icons/twotone/ChevronRight.kt | 0 .../sheets/core/icons/twotone/Clear.kt | 0 .../sheets/core/icons/twotone/ContentCopy.kt | 0 .../sheets/core/icons/twotone/ContentPaste.kt | 0 .../core/icons/twotone/EmojiEmotions.kt | 0 .../sheets/core/icons/twotone/EmojiEvents.kt | 0 .../sheets/core/icons/twotone/EmojiFlags.kt | 0 .../core/icons/twotone/EmojiFoodBeverage.kt | 0 .../sheets/core/icons/twotone/EmojiNature.kt | 0 .../sheets/core/icons/twotone/EmojiObjects.kt | 0 .../sheets/core/icons/twotone/EmojiSymbols.kt | 0 .../core/icons/twotone/EmojiTransportation.kt | 0 .../sheets/core/icons/twotone/Error.kt | 0 .../sheets/core/icons/twotone/ExpandMore.kt | 0 .../sheets/core/icons/twotone/Info.kt | 0 .../core/icons/twotone/NotInterested.kt | 0 .../sheets/core/icons/twotone/Star.kt | 0 .../sheets/core/icons/twotone/Tune.kt | 0 .../sheets/core/models/CoreSelection.kt | 0 .../sheets/core/models/base/BaseBehaviors.kt | 0 .../sheets/core/models/base/BaseConfigs.kt | 0 .../sheets/core/models/base/BaseEffects.kt | 0 .../sheets/core/models/base/BaseSelection.kt | 0 .../sheets/core/models/base/ButtonStyle.kt | 0 .../sheets/core/models/base/Debouncer.kt | 0 .../sheets/core/models/base/Header.kt | 0 .../sheets/core/models/base/IconSource.kt | 0 .../sheets/core/models/base/LibOrientation.kt | 0 .../core/models/base/SelectionButton.kt | 0 .../sheets/core/models/base/UseCaseState.kt | 0 .../sheets/core/utils/BaseComposeUtils.kt | 0 .../sheets/core/utils/BaseConstants.kt | 0 .../sheets/core/utils/BaseExtensions.kt | 0 .../sheets/core/utils/BaseModifiers.kt | 4 +- .../sheets/core/utils/BaseUtils.kt | 0 .../sheets/core/utils/BaseValues.kt | 6 +- .../maxkeppeker/sheets/core/utils/TestTags.kt | 0 .../sheets/core/views/BaseTypeState.kt | 0 .../sheets/core/views/ButtonsComponent.kt | 19 +-- .../com/maxkeppeker/sheets/core/views/Grid.kt | 0 .../sheets/core/views/HeaderComponent.kt | 7 +- .../sheets/core/views/IconComponent.kt | 0 .../sheets/core/views/base/DialogBase.kt | 0 .../sheets/core/views/base/FrameBase.kt | 7 +- .../sheets/core/views/base/PopupBase.kt | 0 core/src/main/AndroidManifest.xml | 2 - core/src/main/res/values/dimens.xml | 50 -------- gradle.properties | 2 - gradle/libs.versions.toml | 13 ++ gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 28 ++--- 202 files changed, 94 insertions(+), 244 deletions(-) rename core/src/{main/res => commonMain/composeResources}/values-bg/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-cs/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-da/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-de-rDE/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-de/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-el/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-eo/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-es/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-et/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-fa/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-fi/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-fr/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-ga/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-gd/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-hi/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-hr/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-hu/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-in-rID/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-is/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-it/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-iw/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-ja/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-jv/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-kk/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-ko/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-ku/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-lb/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-lo/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-lt/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-lv/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-ms/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-ne/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-nl/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-no/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-pl/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-pt/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-ru/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-sk/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-sl/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-sr/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-sv/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-th/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-tr/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-uk/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-vi/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-zh-rCN/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values-zh-rTW/strings.xml (100%) rename core/src/{main/res => commonMain/composeResources}/values/strings.xml (63%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/CoreDialog.kt (93%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/CorePopup.kt (94%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/CoreView.kt (94%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/LibIcons.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/Apps.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/Backspace.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/Check.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/ChevronLeft.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/ChevronRight.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/Clear.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/ContentCopy.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/ContentPaste.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/EmojiEmotions.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/EmojiEvents.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/EmojiFlags.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/EmojiFoodBeverage.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/EmojiNature.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/EmojiObjects.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/EmojiSymbols.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/EmojiTransportation.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/Error.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/ExpandMore.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/Info.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/NotInterested.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/Star.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/filled/Tune.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/Apps.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/Backspace.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/Check.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/ChevronLeft.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/ChevronRight.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/Clear.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/ContentCopy.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/ContentPaste.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/EmojiEmotions.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/EmojiEvents.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/EmojiFlags.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/EmojiFoodBeverage.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/EmojiNature.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/EmojiObjects.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/EmojiSymbols.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/EmojiTransportation.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/Error.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/ExpandMore.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/Info.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/NotInterested.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/Star.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/outlined/Tune.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/Apps.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/Backspace.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/Check.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/ChevronLeft.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/ChevronRight.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/Clear.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/ContentCopy.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/ContentPaste.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/EmojiEmotions.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/EmojiEvents.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/EmojiFlags.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/EmojiFoodBeverage.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/EmojiNature.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/EmojiObjects.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/EmojiSymbols.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/EmojiTransportation.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/Error.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/ExpandMore.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/Info.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/NotInterested.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/Star.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/rounded/Tune.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/Apps.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/Backspace.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/Check.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/ChevronLeft.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/ChevronRight.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/Clear.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/ContentCopy.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/ContentPaste.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/EmojiEmotions.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/EmojiEvents.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/EmojiFlags.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/EmojiFoodBeverage.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/EmojiNature.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/EmojiObjects.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/EmojiSymbols.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/EmojiTransportation.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/Error.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/ExpandMore.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/Info.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/NotInterested.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/Star.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/sharp/Tune.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/Apps.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/Backspace.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/Check.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/ChevronLeft.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/ChevronRight.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/Clear.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/ContentCopy.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/ContentPaste.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/EmojiEmotions.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/EmojiEvents.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/EmojiFlags.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/EmojiFoodBeverage.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/EmojiNature.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/EmojiObjects.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/EmojiSymbols.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/EmojiTransportation.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/Error.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/ExpandMore.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/Info.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/NotInterested.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/Star.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/icons/twotone/Tune.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/CoreSelection.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/BaseBehaviors.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/BaseEffects.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/BaseSelection.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/ButtonStyle.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/Debouncer.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/Header.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/IconSource.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/utils/BaseConstants.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/utils/BaseExtensions.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt (90%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/utils/BaseUtils.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/utils/BaseValues.kt (84%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/utils/TestTags.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/views/BaseTypeState.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt (90%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/views/Grid.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/views/HeaderComponent.kt (91%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/views/IconComponent.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/views/base/DialogBase.kt (100%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/views/base/FrameBase.kt (96%) rename core/src/{main/java => commonMain/kotlin}/com/maxkeppeker/sheets/core/views/base/PopupBase.kt (100%) delete mode 100644 core/src/main/AndroidManifest.xml delete mode 100644 core/src/main/res/values/dimens.xml create mode 100644 gradle/libs.versions.toml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 819badae..99f35f0f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -107,17 +107,6 @@ dependencies { // Compose libs - implementations( - platform(Dependencies.Compose.BOM), - Dependencies.Compose.UI, - Dependencies.Compose.UI_TOOLING, - Dependencies.Compose.ANIMATION, - Dependencies.Compose.RUNTIME, - Dependencies.Compose.MATERIAL_2, - Dependencies.Compose.MATERIAL_3, - Dependencies.Compose.ICONS_EXTENDED, - ) - // Test libs androidTestImplementations( diff --git a/build.gradle.kts b/build.gradle.kts index bb37e4ec..46ed7b4f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,25 +14,23 @@ * limitations under the License. */ import com.android.build.gradle.LibraryExtension +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - id(Plugins.SPOTLESS.id) version (Plugins.SPOTLESS.version) - id(Plugins.DOKKA.id) version (Plugins.DOKKA.version) + alias(libs.plugins.android) apply false + alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false + alias(libs.plugins.compose) apply false + alias(libs.plugins.multiplatform) apply false } buildscript { - repositories { google() mavenCentral() - maven("https://plugins.gradle.org/m2/") - } - - dependencies { - classpath(Dependencies.Kotlin.GRADLE_PLUGIN) - classpath(Dependencies.Gradle.BUILD) - classpath(Dependencies.MAVEN_PUBLISH) - classpath(Dependencies.DOKKA) + gradlePluginPortal() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + maven("https://maven.pkg.jetbrains.space/kotlin/p/wasm/experimental") } } @@ -40,101 +38,12 @@ allprojects { repositories { google() mavenCentral() + gradlePluginPortal() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + maven("https://maven.pkg.jetbrains.space/kotlin/p/wasm/experimental") } -} - -tasks.dokkaHtmlMultiModule.configure { - outputDirectory.set(projectDir.resolve("docs/api")) -} - -subprojects { - plugins.apply(Plugins.SPOTLESS.id) - project.plugins.applyBaseConfig(project) - spotless { - kotlin { - target("**/*.kt") -// ktlint(Versions.KT_LINT) - } - kotlin { - target("**/*.kt") - targetExclude("**/core/icons/**/*.*") - licenseHeaderFile(rootProject.file("copyright.kt")) - } - kotlinGradle { - target("*.gradle.kts", "gradle/*.gradle.kts", "buildSrc/*.gradle.kts") - licenseHeaderFile( - rootProject.file("copyright.kt"), - "import|tasks|apply|plugins|rootProject" - ) - } - } -} - -/** - * Apply base configurations to the subjects that include specific custom plugins. - */ -fun PluginContainer.applyBaseConfig(project: Project) { - whenPluginAdded { - when (this) { - is LibraryModulePlugin -> { - project.extensions - .getByType() - .apply { - baseLibraryConfig() - } - } - } + tasks.withType().configureEach { + kotlinOptions.jvmTarget = "11" } } - -/** - * Apply base library configurations to the subprojects that include the plugin [LibraryModulePlugin]. - */ -fun com.android.build.gradle.BaseExtension.baseLibraryConfig() { - - compileSdkVersion(App.COMPILE_SDK) - - defaultConfig { - minSdk = App.MIN_SDK - targetSdk = App.TARGET_SDK - testInstrumentationRunner = App.TEST_INSTRUMENTATION_RUNNER - - javaCompileOptions { - annotationProcessorOptions { - arguments += mapOf("module" to "${App.ID}-$name") - } - } - } - - compileOptions.apply { - sourceCompatibility(JavaVersion.VERSION_1_8) - targetCompatibility(JavaVersion.VERSION_1_8) - } - - buildFeatures.compose = true - composeOptions.kotlinCompilerExtensionVersion = Versions.COMPOSE_COMPILER - - packagingOptions.resources.excludes += listOf( - "META-INF/DEPENDENCIES.txt", - "META-INF/LICENSE", - "META-INF/LICENSE.txt", - "META-INF/NOTICE", - "META-INF/NOTICE.txt", - "META-INF/AL2.0", - "META-INF/LGPL2.1" - ) - - tasks.withType { - kotlinOptions { - jvmTarget = "1.8" - freeCompilerArgs = freeCompilerArgs + listOf( - "-Xopt-in=androidx.compose.material.ExperimentalMaterial3Api", - "-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi", - "-Xopt-in=androidx.compose.ui.test.ExperimentalTestApi", - "-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi", - "-Xopt-in=androidx.compose.ui.ExperimentalComposeUiApi", - ) - } - } -} \ No newline at end of file diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 27a5df3a..eb44b096 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -17,16 +17,6 @@ object Dependencies { object Compose { - const val BOM = "androidx.compose:compose-bom:${Versions.COMPOSE_BOM}" - const val UI = "androidx.compose.ui:ui" - const val RUNTIME = "androidx.compose.runtime:runtime" - const val MATERIAL_2 = "androidx.compose.material:material" - const val MATERIAL_3 = "androidx.compose.material3:material3" - const val UI_TOOLING = "androidx.compose.ui:ui-tooling-preview" - const val ICONS_EXTENDED = "androidx.compose.material:material-icons-extended" - const val ANIMATION = "androidx.compose.animation:animation" - const val ANIMATION_GRAPHICS = "androidx.compose.animation:animation-graphics" - object Test { const val JUNIT = "androidx.compose.ui:ui-test-junit4:${Versions.COMPOSE}" const val TOOLING = "androidx.compose.ui:ui-tooling" @@ -36,10 +26,10 @@ object Dependencies { object Vanniktech { - const val EMOJI_GOOGLE = "com.vanniktech:emoji-google:0.15.0" - const val EMOJI_IOS = "com.vanniktech:emoji-ios:0.15.0" - const val EMOJI_FACEBOOK = "com.vanniktech:emoji-facebook:0.15.0" - const val EMOJI_TWITTER = "com.vanniktech:emoji-twitter:0.15.0" + const val EMOJI_GOOGLE = "com.vanniktech:emoji-google:0.18.0" + const val EMOJI_IOS = "com.vanniktech:emoji-ios:0.18.0" + const val EMOJI_FACEBOOK = "com.vanniktech:emoji-facebook:0.18.0" + const val EMOJI_TWITTER = "com.vanniktech:emoji-twitter:0.18.0" } object Test { @@ -50,7 +40,7 @@ object Dependencies { object Kotlin { const val GRADLE_PLUGIN = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.KOTLIN}" - const val KOTLIN_STD = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.KOTLIN}" + const val KOTLIN_STD = "org.jetbrains.kotlin:kotlin-stdlib-jdk8${Versions.KOTLIN}" } object Gradle { diff --git a/buildSrc/src/main/java/LibraryModulePlugin.kt b/buildSrc/src/main/java/LibraryModulePlugin.kt index 79292066..9e01441c 100644 --- a/buildSrc/src/main/java/LibraryModulePlugin.kt +++ b/buildSrc/src/main/java/LibraryModulePlugin.kt @@ -40,13 +40,7 @@ class LibraryModulePlugin : Plugin { // Compose libs implementations( - platform(Dependencies.Compose.BOM), - Dependencies.Compose.UI, - Dependencies.Compose.UI_TOOLING, - Dependencies.Compose.ANIMATION, - Dependencies.Compose.ANIMATION_GRAPHICS, - Dependencies.Compose.RUNTIME, - Dependencies.Compose.MATERIAL_3, + ) diff --git a/buildSrc/src/main/java/Plugins.kt b/buildSrc/src/main/java/Plugins.kt index 5c74e2f7..6c793101 100644 --- a/buildSrc/src/main/java/Plugins.kt +++ b/buildSrc/src/main/java/Plugins.kt @@ -8,6 +8,7 @@ object Plugins { val SPOTLESS = Plugin("com.diffplug.spotless", "6.10.0") val MAVEN_PUBLISH = Plugin("com.vanniktech.maven.publish") val DOKKA = Plugin("org.jetbrains.dokka", Versions.DOKKA) + val COMPOSE = Plugin("org.jetbrains.compose", Versions.COMPOSE) val CUSTOM_LIBRARY_MODULE = Plugin("library-module") } \ No newline at end of file diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index 1cf65792..df32f6c7 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -1,7 +1,7 @@ object Versions { // Kotlin - const val KOTLIN = "1.8.10" + const val KOTLIN = "1.9.22" // Compose const val COMPOSE_BOM = "2024.02.00" diff --git a/core/build.gradle.kts b/core/build.gradle.kts index a7452ed9..99aaf022 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -14,14 +14,31 @@ * limitations under the License. */ plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) } android { namespace = Modules.CORE.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } } -mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file +kotlin { + androidTarget() + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.materialIconsExtended) + implementation(compose.material3) + } + } +} diff --git a/core/src/main/res/values-bg/strings.xml b/core/src/commonMain/composeResources/values-bg/strings.xml similarity index 100% rename from core/src/main/res/values-bg/strings.xml rename to core/src/commonMain/composeResources/values-bg/strings.xml diff --git a/core/src/main/res/values-cs/strings.xml b/core/src/commonMain/composeResources/values-cs/strings.xml similarity index 100% rename from core/src/main/res/values-cs/strings.xml rename to core/src/commonMain/composeResources/values-cs/strings.xml diff --git a/core/src/main/res/values-da/strings.xml b/core/src/commonMain/composeResources/values-da/strings.xml similarity index 100% rename from core/src/main/res/values-da/strings.xml rename to core/src/commonMain/composeResources/values-da/strings.xml diff --git a/core/src/main/res/values-de-rDE/strings.xml b/core/src/commonMain/composeResources/values-de-rDE/strings.xml similarity index 100% rename from core/src/main/res/values-de-rDE/strings.xml rename to core/src/commonMain/composeResources/values-de-rDE/strings.xml diff --git a/core/src/main/res/values-de/strings.xml b/core/src/commonMain/composeResources/values-de/strings.xml similarity index 100% rename from core/src/main/res/values-de/strings.xml rename to core/src/commonMain/composeResources/values-de/strings.xml diff --git a/core/src/main/res/values-el/strings.xml b/core/src/commonMain/composeResources/values-el/strings.xml similarity index 100% rename from core/src/main/res/values-el/strings.xml rename to core/src/commonMain/composeResources/values-el/strings.xml diff --git a/core/src/main/res/values-eo/strings.xml b/core/src/commonMain/composeResources/values-eo/strings.xml similarity index 100% rename from core/src/main/res/values-eo/strings.xml rename to core/src/commonMain/composeResources/values-eo/strings.xml diff --git a/core/src/main/res/values-es/strings.xml b/core/src/commonMain/composeResources/values-es/strings.xml similarity index 100% rename from core/src/main/res/values-es/strings.xml rename to core/src/commonMain/composeResources/values-es/strings.xml diff --git a/core/src/main/res/values-et/strings.xml b/core/src/commonMain/composeResources/values-et/strings.xml similarity index 100% rename from core/src/main/res/values-et/strings.xml rename to core/src/commonMain/composeResources/values-et/strings.xml diff --git a/core/src/main/res/values-fa/strings.xml b/core/src/commonMain/composeResources/values-fa/strings.xml similarity index 100% rename from core/src/main/res/values-fa/strings.xml rename to core/src/commonMain/composeResources/values-fa/strings.xml diff --git a/core/src/main/res/values-fi/strings.xml b/core/src/commonMain/composeResources/values-fi/strings.xml similarity index 100% rename from core/src/main/res/values-fi/strings.xml rename to core/src/commonMain/composeResources/values-fi/strings.xml diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/commonMain/composeResources/values-fr/strings.xml similarity index 100% rename from core/src/main/res/values-fr/strings.xml rename to core/src/commonMain/composeResources/values-fr/strings.xml diff --git a/core/src/main/res/values-ga/strings.xml b/core/src/commonMain/composeResources/values-ga/strings.xml similarity index 100% rename from core/src/main/res/values-ga/strings.xml rename to core/src/commonMain/composeResources/values-ga/strings.xml diff --git a/core/src/main/res/values-gd/strings.xml b/core/src/commonMain/composeResources/values-gd/strings.xml similarity index 100% rename from core/src/main/res/values-gd/strings.xml rename to core/src/commonMain/composeResources/values-gd/strings.xml diff --git a/core/src/main/res/values-hi/strings.xml b/core/src/commonMain/composeResources/values-hi/strings.xml similarity index 100% rename from core/src/main/res/values-hi/strings.xml rename to core/src/commonMain/composeResources/values-hi/strings.xml diff --git a/core/src/main/res/values-hr/strings.xml b/core/src/commonMain/composeResources/values-hr/strings.xml similarity index 100% rename from core/src/main/res/values-hr/strings.xml rename to core/src/commonMain/composeResources/values-hr/strings.xml diff --git a/core/src/main/res/values-hu/strings.xml b/core/src/commonMain/composeResources/values-hu/strings.xml similarity index 100% rename from core/src/main/res/values-hu/strings.xml rename to core/src/commonMain/composeResources/values-hu/strings.xml diff --git a/core/src/main/res/values-in-rID/strings.xml b/core/src/commonMain/composeResources/values-in-rID/strings.xml similarity index 100% rename from core/src/main/res/values-in-rID/strings.xml rename to core/src/commonMain/composeResources/values-in-rID/strings.xml diff --git a/core/src/main/res/values-is/strings.xml b/core/src/commonMain/composeResources/values-is/strings.xml similarity index 100% rename from core/src/main/res/values-is/strings.xml rename to core/src/commonMain/composeResources/values-is/strings.xml diff --git a/core/src/main/res/values-it/strings.xml b/core/src/commonMain/composeResources/values-it/strings.xml similarity index 100% rename from core/src/main/res/values-it/strings.xml rename to core/src/commonMain/composeResources/values-it/strings.xml diff --git a/core/src/main/res/values-iw/strings.xml b/core/src/commonMain/composeResources/values-iw/strings.xml similarity index 100% rename from core/src/main/res/values-iw/strings.xml rename to core/src/commonMain/composeResources/values-iw/strings.xml diff --git a/core/src/main/res/values-ja/strings.xml b/core/src/commonMain/composeResources/values-ja/strings.xml similarity index 100% rename from core/src/main/res/values-ja/strings.xml rename to core/src/commonMain/composeResources/values-ja/strings.xml diff --git a/core/src/main/res/values-jv/strings.xml b/core/src/commonMain/composeResources/values-jv/strings.xml similarity index 100% rename from core/src/main/res/values-jv/strings.xml rename to core/src/commonMain/composeResources/values-jv/strings.xml diff --git a/core/src/main/res/values-kk/strings.xml b/core/src/commonMain/composeResources/values-kk/strings.xml similarity index 100% rename from core/src/main/res/values-kk/strings.xml rename to core/src/commonMain/composeResources/values-kk/strings.xml diff --git a/core/src/main/res/values-ko/strings.xml b/core/src/commonMain/composeResources/values-ko/strings.xml similarity index 100% rename from core/src/main/res/values-ko/strings.xml rename to core/src/commonMain/composeResources/values-ko/strings.xml diff --git a/core/src/main/res/values-ku/strings.xml b/core/src/commonMain/composeResources/values-ku/strings.xml similarity index 100% rename from core/src/main/res/values-ku/strings.xml rename to core/src/commonMain/composeResources/values-ku/strings.xml diff --git a/core/src/main/res/values-lb/strings.xml b/core/src/commonMain/composeResources/values-lb/strings.xml similarity index 100% rename from core/src/main/res/values-lb/strings.xml rename to core/src/commonMain/composeResources/values-lb/strings.xml diff --git a/core/src/main/res/values-lo/strings.xml b/core/src/commonMain/composeResources/values-lo/strings.xml similarity index 100% rename from core/src/main/res/values-lo/strings.xml rename to core/src/commonMain/composeResources/values-lo/strings.xml diff --git a/core/src/main/res/values-lt/strings.xml b/core/src/commonMain/composeResources/values-lt/strings.xml similarity index 100% rename from core/src/main/res/values-lt/strings.xml rename to core/src/commonMain/composeResources/values-lt/strings.xml diff --git a/core/src/main/res/values-lv/strings.xml b/core/src/commonMain/composeResources/values-lv/strings.xml similarity index 100% rename from core/src/main/res/values-lv/strings.xml rename to core/src/commonMain/composeResources/values-lv/strings.xml diff --git a/core/src/main/res/values-ms/strings.xml b/core/src/commonMain/composeResources/values-ms/strings.xml similarity index 100% rename from core/src/main/res/values-ms/strings.xml rename to core/src/commonMain/composeResources/values-ms/strings.xml diff --git a/core/src/main/res/values-ne/strings.xml b/core/src/commonMain/composeResources/values-ne/strings.xml similarity index 100% rename from core/src/main/res/values-ne/strings.xml rename to core/src/commonMain/composeResources/values-ne/strings.xml diff --git a/core/src/main/res/values-nl/strings.xml b/core/src/commonMain/composeResources/values-nl/strings.xml similarity index 100% rename from core/src/main/res/values-nl/strings.xml rename to core/src/commonMain/composeResources/values-nl/strings.xml diff --git a/core/src/main/res/values-no/strings.xml b/core/src/commonMain/composeResources/values-no/strings.xml similarity index 100% rename from core/src/main/res/values-no/strings.xml rename to core/src/commonMain/composeResources/values-no/strings.xml diff --git a/core/src/main/res/values-pl/strings.xml b/core/src/commonMain/composeResources/values-pl/strings.xml similarity index 100% rename from core/src/main/res/values-pl/strings.xml rename to core/src/commonMain/composeResources/values-pl/strings.xml diff --git a/core/src/main/res/values-pt/strings.xml b/core/src/commonMain/composeResources/values-pt/strings.xml similarity index 100% rename from core/src/main/res/values-pt/strings.xml rename to core/src/commonMain/composeResources/values-pt/strings.xml diff --git a/core/src/main/res/values-ru/strings.xml b/core/src/commonMain/composeResources/values-ru/strings.xml similarity index 100% rename from core/src/main/res/values-ru/strings.xml rename to core/src/commonMain/composeResources/values-ru/strings.xml diff --git a/core/src/main/res/values-sk/strings.xml b/core/src/commonMain/composeResources/values-sk/strings.xml similarity index 100% rename from core/src/main/res/values-sk/strings.xml rename to core/src/commonMain/composeResources/values-sk/strings.xml diff --git a/core/src/main/res/values-sl/strings.xml b/core/src/commonMain/composeResources/values-sl/strings.xml similarity index 100% rename from core/src/main/res/values-sl/strings.xml rename to core/src/commonMain/composeResources/values-sl/strings.xml diff --git a/core/src/main/res/values-sr/strings.xml b/core/src/commonMain/composeResources/values-sr/strings.xml similarity index 100% rename from core/src/main/res/values-sr/strings.xml rename to core/src/commonMain/composeResources/values-sr/strings.xml diff --git a/core/src/main/res/values-sv/strings.xml b/core/src/commonMain/composeResources/values-sv/strings.xml similarity index 100% rename from core/src/main/res/values-sv/strings.xml rename to core/src/commonMain/composeResources/values-sv/strings.xml diff --git a/core/src/main/res/values-th/strings.xml b/core/src/commonMain/composeResources/values-th/strings.xml similarity index 100% rename from core/src/main/res/values-th/strings.xml rename to core/src/commonMain/composeResources/values-th/strings.xml diff --git a/core/src/main/res/values-tr/strings.xml b/core/src/commonMain/composeResources/values-tr/strings.xml similarity index 100% rename from core/src/main/res/values-tr/strings.xml rename to core/src/commonMain/composeResources/values-tr/strings.xml diff --git a/core/src/main/res/values-uk/strings.xml b/core/src/commonMain/composeResources/values-uk/strings.xml similarity index 100% rename from core/src/main/res/values-uk/strings.xml rename to core/src/commonMain/composeResources/values-uk/strings.xml diff --git a/core/src/main/res/values-vi/strings.xml b/core/src/commonMain/composeResources/values-vi/strings.xml similarity index 100% rename from core/src/main/res/values-vi/strings.xml rename to core/src/commonMain/composeResources/values-vi/strings.xml diff --git a/core/src/main/res/values-zh-rCN/strings.xml b/core/src/commonMain/composeResources/values-zh-rCN/strings.xml similarity index 100% rename from core/src/main/res/values-zh-rCN/strings.xml rename to core/src/commonMain/composeResources/values-zh-rCN/strings.xml diff --git a/core/src/main/res/values-zh-rTW/strings.xml b/core/src/commonMain/composeResources/values-zh-rTW/strings.xml similarity index 100% rename from core/src/main/res/values-zh-rTW/strings.xml rename to core/src/commonMain/composeResources/values-zh-rTW/strings.xml diff --git a/core/src/main/res/values/strings.xml b/core/src/commonMain/composeResources/values/strings.xml similarity index 63% rename from core/src/main/res/values/strings.xml rename to core/src/commonMain/composeResources/values/strings.xml index 61216b8a..53711d9c 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/commonMain/composeResources/values/strings.xml @@ -1,4 +1,3 @@ - Cancel Ok diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/CoreDialog.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CoreDialog.kt similarity index 93% rename from core/src/main/java/com/maxkeppeker/sheets/core/CoreDialog.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CoreDialog.kt index a2d0fdf7..57d2b384 100644 --- a/core/src/main/java/com/maxkeppeker/sheets/core/CoreDialog.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CoreDialog.kt @@ -13,11 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@file:OptIn(ExperimentalMaterial3Api::class) package com.maxkeppeker.sheets.core -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.ui.window.DialogProperties import com.maxkeppeker.sheets.core.models.CoreSelection @@ -34,7 +32,6 @@ import com.maxkeppeker.sheets.core.views.base.DialogBase * @param onPositiveValid Listener that is invoked to check if the dialog input is valid. * @param onPositiveValid If the positive button is valid and therefore enabled. */ -@ExperimentalMaterial3Api @Composable fun CoreDialog( state: UseCaseState, diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/CorePopup.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CorePopup.kt similarity index 94% rename from core/src/main/java/com/maxkeppeker/sheets/core/CorePopup.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CorePopup.kt index 45983d90..44fed895 100644 --- a/core/src/main/java/com/maxkeppeker/sheets/core/CorePopup.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CorePopup.kt @@ -13,11 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@file:OptIn(ExperimentalMaterial3Api::class) package com.maxkeppeker.sheets.core -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.unit.IntOffset @@ -36,7 +34,6 @@ import com.maxkeppeker.sheets.core.views.base.PopupBase * @param onPositiveValid If the positive button is valid and therefore enabled. * @param properties The properties of the popup. */ -@ExperimentalMaterial3Api @Composable fun CorePopup( state: UseCaseState, diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/CoreView.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CoreView.kt similarity index 94% rename from core/src/main/java/com/maxkeppeker/sheets/core/CoreView.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CoreView.kt index 9467bc9a..768cd664 100644 --- a/core/src/main/java/com/maxkeppeker/sheets/core/CoreView.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/CoreView.kt @@ -13,11 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@file:OptIn(ExperimentalMaterial3Api::class) package com.maxkeppeker.sheets.core -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import com.maxkeppeker.sheets.core.models.CoreSelection import com.maxkeppeker.sheets.core.models.base.Header @@ -33,7 +31,6 @@ import com.maxkeppeker.sheets.core.views.base.FrameBase * @param body The body content to be displayed inside the dialog view. * @param onPositiveValid If the positive button is valid and therefore enabled. */ -@ExperimentalMaterial3Api @Composable fun CoreView( useCaseState: UseCaseState, diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/LibIcons.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/LibIcons.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Apps.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Apps.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Apps.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Apps.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Backspace.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Backspace.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Backspace.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Backspace.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Check.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Check.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Check.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Check.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ChevronLeft.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ChevronLeft.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ChevronLeft.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ChevronLeft.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ChevronRight.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ChevronRight.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ChevronRight.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ChevronRight.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Clear.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Clear.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Clear.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Clear.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ContentCopy.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ContentCopy.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ContentCopy.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ContentCopy.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ContentPaste.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ContentPaste.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ContentPaste.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ContentPaste.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiEmotions.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiEmotions.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiEmotions.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiEmotions.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiEvents.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiEvents.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiEvents.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiEvents.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiFlags.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiFlags.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiFlags.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiFlags.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiFoodBeverage.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiFoodBeverage.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiFoodBeverage.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiFoodBeverage.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiNature.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiNature.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiNature.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiNature.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiObjects.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiObjects.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiObjects.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiObjects.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiSymbols.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiSymbols.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiSymbols.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiSymbols.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiTransportation.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiTransportation.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/EmojiTransportation.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/EmojiTransportation.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Error.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Error.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Error.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Error.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ExpandMore.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ExpandMore.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/ExpandMore.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/ExpandMore.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Info.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Info.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Info.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Info.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/NotInterested.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/NotInterested.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/NotInterested.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/NotInterested.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Star.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Star.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Star.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Star.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Tune.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Tune.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/filled/Tune.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/filled/Tune.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Apps.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Apps.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Apps.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Apps.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Backspace.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Backspace.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Backspace.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Backspace.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Check.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Check.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Check.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Check.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ChevronLeft.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ChevronLeft.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ChevronLeft.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ChevronLeft.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ChevronRight.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ChevronRight.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ChevronRight.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ChevronRight.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Clear.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Clear.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Clear.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Clear.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ContentCopy.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ContentCopy.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ContentCopy.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ContentCopy.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ContentPaste.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ContentPaste.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ContentPaste.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ContentPaste.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiEmotions.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiEmotions.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiEmotions.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiEmotions.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiEvents.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiEvents.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiEvents.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiEvents.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiFlags.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiFlags.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiFlags.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiFlags.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiFoodBeverage.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiFoodBeverage.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiFoodBeverage.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiFoodBeverage.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiNature.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiNature.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiNature.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiNature.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiObjects.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiObjects.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiObjects.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiObjects.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiSymbols.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiSymbols.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiSymbols.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiSymbols.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiTransportation.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiTransportation.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/EmojiTransportation.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/EmojiTransportation.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Error.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Error.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Error.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Error.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ExpandMore.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ExpandMore.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/ExpandMore.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/ExpandMore.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Info.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Info.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Info.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Info.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/NotInterested.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/NotInterested.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/NotInterested.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/NotInterested.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Star.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Star.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Star.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Star.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Tune.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Tune.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/outlined/Tune.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/outlined/Tune.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Apps.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Apps.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Apps.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Apps.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Backspace.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Backspace.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Backspace.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Backspace.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Check.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Check.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Check.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Check.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ChevronLeft.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ChevronLeft.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ChevronLeft.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ChevronLeft.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ChevronRight.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ChevronRight.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ChevronRight.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ChevronRight.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Clear.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Clear.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Clear.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Clear.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ContentCopy.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ContentCopy.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ContentCopy.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ContentCopy.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ContentPaste.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ContentPaste.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ContentPaste.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ContentPaste.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiEmotions.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiEmotions.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiEmotions.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiEmotions.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiEvents.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiEvents.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiEvents.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiEvents.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiFlags.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiFlags.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiFlags.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiFlags.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiFoodBeverage.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiFoodBeverage.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiFoodBeverage.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiFoodBeverage.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiNature.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiNature.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiNature.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiNature.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiObjects.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiObjects.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiObjects.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiObjects.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiSymbols.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiSymbols.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiSymbols.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiSymbols.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiTransportation.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiTransportation.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/EmojiTransportation.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/EmojiTransportation.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Error.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Error.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Error.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Error.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ExpandMore.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ExpandMore.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/ExpandMore.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/ExpandMore.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Info.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Info.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Info.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Info.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/NotInterested.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/NotInterested.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/NotInterested.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/NotInterested.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Star.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Star.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Star.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Star.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Tune.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Tune.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/rounded/Tune.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/rounded/Tune.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Apps.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Apps.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Apps.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Apps.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Backspace.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Backspace.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Backspace.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Backspace.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Check.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Check.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Check.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Check.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ChevronLeft.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ChevronLeft.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ChevronLeft.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ChevronLeft.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ChevronRight.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ChevronRight.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ChevronRight.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ChevronRight.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Clear.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Clear.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Clear.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Clear.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ContentCopy.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ContentCopy.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ContentCopy.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ContentCopy.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ContentPaste.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ContentPaste.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ContentPaste.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ContentPaste.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiEmotions.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiEmotions.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiEmotions.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiEmotions.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiEvents.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiEvents.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiEvents.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiEvents.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiFlags.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiFlags.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiFlags.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiFlags.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiFoodBeverage.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiFoodBeverage.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiFoodBeverage.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiFoodBeverage.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiNature.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiNature.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiNature.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiNature.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiObjects.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiObjects.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiObjects.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiObjects.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiSymbols.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiSymbols.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiSymbols.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiSymbols.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiTransportation.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiTransportation.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/EmojiTransportation.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/EmojiTransportation.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Error.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Error.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Error.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Error.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ExpandMore.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ExpandMore.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/ExpandMore.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/ExpandMore.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Info.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Info.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Info.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Info.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/NotInterested.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/NotInterested.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/NotInterested.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/NotInterested.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Star.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Star.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Star.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Star.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Tune.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Tune.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/sharp/Tune.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/sharp/Tune.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Apps.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Apps.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Apps.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Apps.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Backspace.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Backspace.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Backspace.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Backspace.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Check.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Check.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Check.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Check.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ChevronLeft.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ChevronLeft.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ChevronLeft.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ChevronLeft.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ChevronRight.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ChevronRight.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ChevronRight.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ChevronRight.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Clear.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Clear.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Clear.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Clear.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ContentCopy.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ContentCopy.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ContentCopy.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ContentCopy.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ContentPaste.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ContentPaste.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ContentPaste.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ContentPaste.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiEmotions.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiEmotions.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiEmotions.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiEmotions.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiEvents.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiEvents.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiEvents.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiEvents.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiFlags.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiFlags.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiFlags.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiFlags.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiFoodBeverage.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiFoodBeverage.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiFoodBeverage.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiFoodBeverage.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiNature.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiNature.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiNature.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiNature.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiObjects.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiObjects.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiObjects.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiObjects.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiSymbols.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiSymbols.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiSymbols.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiSymbols.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiTransportation.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiTransportation.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/EmojiTransportation.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/EmojiTransportation.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Error.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Error.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Error.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Error.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ExpandMore.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ExpandMore.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/ExpandMore.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/ExpandMore.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Info.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Info.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Info.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Info.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/NotInterested.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/NotInterested.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/NotInterested.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/NotInterested.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Star.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Star.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Star.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Star.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Tune.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Tune.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/icons/twotone/Tune.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/twotone/Tune.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/CoreSelection.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/CoreSelection.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/CoreSelection.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/CoreSelection.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseBehaviors.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseBehaviors.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseBehaviors.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseBehaviors.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseEffects.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseEffects.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseEffects.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseEffects.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseSelection.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseSelection.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/BaseSelection.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseSelection.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/ButtonStyle.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/ButtonStyle.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/ButtonStyle.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/ButtonStyle.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/Debouncer.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/Debouncer.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/Debouncer.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/Debouncer.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/Header.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/Header.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/Header.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/Header.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/IconSource.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/IconSource.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/IconSource.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/IconSource.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseConstants.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseConstants.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseConstants.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseConstants.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseExtensions.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseExtensions.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseExtensions.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseExtensions.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt similarity index 90% rename from core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt index 26b9f8cf..76a81aa0 100644 --- a/core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.ui.Modifier import androidx.compose.ui.composed import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.core.R @@ -35,11 +36,10 @@ object BaseModifiers { */ fun Modifier.dynamicContentWrapOrMaxHeight(scope: ColumnScope): Modifier = composed { val modifier = this - val dynamicContentMaxHeight = dimensionResource(id = R.dimen.scd_dynamic_content_max_height) scope.run { modifier .weight(1f, false) - .heightIn(max = dynamicContentMaxHeight) + .heightIn(max = 350.dp) } } } \ No newline at end of file diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseUtils.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseUtils.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseUtils.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseUtils.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseValues.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseValues.kt similarity index 84% rename from core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseValues.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseValues.kt index c2cc7303..0910450f 100644 --- a/core/src/main/java/com/maxkeppeker/sheets/core/utils/BaseValues.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseValues.kt @@ -29,8 +29,8 @@ object BaseValues { val CONTENT_DEFAULT_PADDING: PaddingValues @Composable get() = PaddingValues( - start = dimensionResource(id = R.dimen.scd_normal_150), - end = dimensionResource(id = R.dimen.scd_normal_150), - top = dimensionResource(id = R.dimen.scd_normal_100) + start = 24.dp, + end = 24.dp, + top = 16.dp ) } \ No newline at end of file diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/utils/TestTags.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/TestTags.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/utils/TestTags.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/TestTags.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/views/BaseTypeState.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/BaseTypeState.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/views/BaseTypeState.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/BaseTypeState.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt similarity index 90% rename from core/src/main/java/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt index 7ac55d19..705d100c 100644 --- a/core/src/main/java/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.ButtonStyle import com.maxkeppeker.sheets.core.models.base.LibOrientation @@ -82,14 +83,14 @@ fun ButtonsComponent( val buttonPadding = when (orientation) { LibOrientation.PORTRAIT -> Modifier - .padding(top = dimensionResource(id = R.dimen.scd_normal_150)) - .padding(bottom = dimensionResource(id = R.dimen.scd_normal_150)) - .padding(horizontal = dimensionResource(id = R.dimen.scd_normal_150)) + .padding(top = 24.dp) + .padding(bottom = 24.dp) + .padding(horizontal = 24.dp) LibOrientation.LANDSCAPE -> Modifier - .padding(top = dimensionResource(id = R.dimen.scd_small_100)) - .padding(bottom = dimensionResource(id = R.dimen.scd_small_100)) - .padding(horizontal = dimensionResource(id = R.dimen.scd_small_100)) + .padding(top = 8.dp) + .padding(bottom = 8.dp) + .padding(horizontal = 8.dp) } Row( @@ -114,7 +115,7 @@ fun ButtonsComponent( SelectionButtonComponent( modifier = Modifier .wrapContentWidth() - .padding(horizontal = dimensionResource(id = R.dimen.scd_normal_100)), + .padding(horizontal = 16.dp), button = negativeButton, onClick = negativeAction, testTag = TestTags.BUTTON_NEGATIVE, @@ -153,10 +154,10 @@ private fun SelectionButtonComponent( IconComponent( modifier = Modifier .testTags(testTag, TestTags.BUTTON_ICON) - .size(dimensionResource(R.dimen.scd_size_100)), + .size(16.dp), iconSource = icon, ) - Spacer(modifier = Modifier.width(dimensionResource(id = R.dimen.scd_small_100))) + Spacer(modifier = Modifier.width(8.dp)) } when { diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/views/Grid.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/Grid.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/views/Grid.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/Grid.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/views/HeaderComponent.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/HeaderComponent.kt similarity index 91% rename from core/src/main/java/com/maxkeppeker/sheets/core/views/HeaderComponent.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/HeaderComponent.kt index 887559f5..83d76ccd 100644 --- a/core/src/main/java/com/maxkeppeker/sheets/core/views/HeaderComponent.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/HeaderComponent.kt @@ -32,7 +32,6 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.utils.TestTags -import com.maxkeppeler.sheets.core.R as RC /** * Header component of the dialog. @@ -64,14 +63,14 @@ private fun DefaultHeaderComponent( .testTag(TestTags.HEADER_DEFAULT) .fillMaxWidth() .padding(contentHorizontalPadding) - .padding(top = dimensionResource(id = RC.dimen.scd_normal_150)), + .padding(top = 24.dp), horizontalAlignment = if (header.icon != null) Alignment.CenterHorizontally else Alignment.Start ) { header.icon?.let { IconComponent( modifier = Modifier .testTag(TestTags.HEADER_DEFAULT_ICON) - .size(dimensionResource(RC.dimen.scd_size_150)), + .size(24.dp), iconSource = it, defaultTint = MaterialTheme.colorScheme.secondary ) @@ -82,7 +81,7 @@ private fun DefaultHeaderComponent( modifier = Modifier .testTag(TestTags.HEADER_DEFAULT_TEXT) .padding( - top = if (header.icon != null) dimensionResource(id = RC.dimen.scd_normal_100) + top = if (header.icon != null) 16.dp else 0.dp ), color = MaterialTheme.colorScheme.onSurface, diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/views/IconComponent.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/IconComponent.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/views/IconComponent.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/IconComponent.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/views/base/DialogBase.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/DialogBase.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/views/base/DialogBase.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/DialogBase.kt diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/views/base/FrameBase.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt similarity index 96% rename from core/src/main/java/com/maxkeppeker/sheets/core/views/base/FrameBase.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt index 385a7f81..7ac93586 100644 --- a/core/src/main/java/com/maxkeppeker/sheets/core/views/base/FrameBase.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.models.base.LibOrientation @@ -105,7 +106,7 @@ fun FrameBase( Spacer( modifier = Modifier .testTag(TestTags.FRAME_BASE_NO_HEADER) - .height(dimensionResource(RC.dimen.scd_small_100)) + .height(8.dp) ) } @@ -118,7 +119,7 @@ fun FrameBase( ), end = horizontalContentPadding.calculateEndPadding(layoutDirection), // Enforce default top spacing - top = dimensionResource(RC.dimen.scd_normal_100), + top = 16.dp, ) ) when (layoutType) { @@ -147,7 +148,7 @@ fun FrameBase( } else Spacer( modifier = Modifier .testTag(TestTags.FRAME_BASE_NO_BUTTONS) - .height(dimensionResource(RC.dimen.scd_normal_150)) + .height(24.dp) ) } } diff --git a/core/src/main/java/com/maxkeppeker/sheets/core/views/base/PopupBase.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/PopupBase.kt similarity index 100% rename from core/src/main/java/com/maxkeppeker/sheets/core/views/base/PopupBase.kt rename to core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/PopupBase.kt diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/core/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/core/src/main/res/values/dimens.xml b/core/src/main/res/values/dimens.xml deleted file mode 100644 index 8a17d70f..00000000 --- a/core/src/main/res/values/dimens.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - 2dp - 4dp - 6dp - 8dp - 10dp - 12dp - - 16dp - 20dp - 24dp - 28dp - - 32dp - 40dp - 48dp - 56dp - 64dp - 72dp - 80dp - 128dp - - - - 8dp - 16dp - 20dp - 24dp - 28dp - 32dp - 36dp - 40dp - 44dp - 48dp - 52dp - 56dp - - - - 350dp - - - diff --git a/gradle.properties b/gradle.properties index 7c094f68..724439c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,8 +22,6 @@ kotlin.code.style=official # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true -android.disableAutomaticComponentCreation=true - # Maven publish information GROUP=com.maxkeppeler.sheets-compose-dialogs diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..f7d84f1b --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,13 @@ +[versions] +android = "8.2.2" +compose = "1.6.1" +kotlin = "1.9.22" + +[libraries] + +[plugins] +android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +android-application = { id = "com.android.application", version.ref = "android" } +android-library = { id = "com.android.library", version.ref = "android" } +compose = { id = "org.jetbrains.compose", version.ref = "compose" } +multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ce86dd0f..f433c92d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Mar 16 20:09:09 CET 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle.kts b/settings.gradle.kts index 087e89fd..c2e8d70c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,20 +7,20 @@ pluginManagement { } rootProject.name = "sheets-compose-dialogs" include( - ":app", - ":test", + //":app", + //":test", // Include all modules ":core", - ":info", - ":rating", - ":calendar", - ":duration", - ":clock", - ":date_time", - ":color", - ":option", - ":state", - ":input", - ":emoji", - ":list", + //":info", + //":rating", + //":calendar", + //":duration", + //":clock", + //":date_time", + //":color", + //":option", + //":state", + //":input", + //":emoji", + //":list", ) \ No newline at end of file From 58908fbd52b5875daea1b8954249c03323917034 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 29 Mar 2024 17:42:28 +0100 Subject: [PATCH 02/58] multiplatform core module --- core/build.gradle.kts | 38 +++++++++++++++++++ .../core/utils/BaseComposeUtils.android.kt | 20 ++++++++++ .../sheets/core/models/base/Debouncer.kt | 4 +- .../sheets/core/models/base/IconSource.kt | 14 ++++--- .../core/models/base/SelectionButton.kt | 12 ++++-- .../sheets/core/models/base/UseCaseState.kt | 5 ++- .../sheets/core/utils/BaseComposeUtils.kt | 9 +++-- .../sheets/core/utils/BaseConstants.kt | 10 ++++- .../sheets/core/utils/BaseModifiers.kt | 2 - .../sheets/core/utils/BaseValues.kt | 2 - .../sheets/core/views/BaseTypeState.kt | 5 ++- .../sheets/core/views/ButtonsComponent.kt | 6 +-- .../sheets/core/views/HeaderComponent.kt | 1 - .../sheets/core/views/IconComponent.kt | 6 ++- .../sheets/core/views/base/FrameBase.kt | 8 +--- .../core/utils/BaseComposeUtils.nonAndroid.kt | 18 +++++++++ gradle.properties | 5 +++ gradle/libs.versions.toml | 7 +++- 18 files changed, 135 insertions(+), 37 deletions(-) create mode 100644 core/src/androidMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.android.kt create mode 100644 core/src/nonAndroidMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.nonAndroid.kt diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 99aaf022..e9c0d25f 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl + /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) * @@ -17,6 +19,7 @@ plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) } android { @@ -30,6 +33,25 @@ android { kotlin { androidTarget() + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + browser() + binaries.executable() + } applyDefaultHierarchyTemplate() @@ -39,6 +61,22 @@ kotlin { implementation(compose.foundation) implementation(compose.materialIconsExtended) implementation(compose.material3) + implementation(compose.components.resources) + + implementation(libs.datetime) + implementation(libs.serialization) + } + + val nonAndroidMain by creating { + dependsOn(commonMain.get()) + + jvmMain.orNull?.dependsOn(this) + nativeMain.orNull?.dependsOn(this) + jsMain.orNull?.dependsOn(this) + } + + val wasmJsMain by getting { + dependsOn(nonAndroidMain) } } } diff --git a/core/src/androidMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.android.kt b/core/src/androidMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.android.kt new file mode 100644 index 00000000..f77d304d --- /dev/null +++ b/core/src/androidMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.android.kt @@ -0,0 +1,20 @@ +package com.maxkeppeker.sheets.core.utils + +import android.content.res.Configuration +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalConfiguration + +/** + * Determines whether the current screen should use landscape mode. + * + * @return `true` if the screen height is less than the [TABLET_THRESHOLD] in landscape mode, `false` otherwise. + */ +@Composable +actual fun shouldUseLandscape(): Boolean { + return LocalConfiguration.current.screenHeightDp < TABLET_THRESHOLD +} + +@Composable +actual fun isLandscape(): Boolean { + return LocalConfiguration.current.orientation == Configuration.ORIENTATION_LANDSCAPE +} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/Debouncer.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/Debouncer.kt index 0bf48561..b6ad03f8 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/Debouncer.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/Debouncer.kt @@ -15,6 +15,8 @@ */ package com.maxkeppeker.sheets.core.models.base +import kotlinx.datetime.Clock + /** * A class for time-based debouncing. * @@ -25,7 +27,7 @@ class Debouncer(private val delay: Long) { private var lastTime = 0L private val currentTime: Long - get() = System.currentTimeMillis() + get() = Clock.System.now().toEpochMilliseconds() /** * Debounces the given action by delaying its execution for the specified delay time. diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/IconSource.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/IconSource.kt index 6f87304e..aab2c6e5 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/IconSource.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/IconSource.kt @@ -17,19 +17,21 @@ package com.maxkeppeker.sheets.core.models.base -import androidx.annotation.DrawableRes +import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector +import org.jetbrains.compose.resources.DrawableResource +import org.jetbrains.compose.resources.ExperimentalResourceApi /** * An icon from various sources alongside an optional contentDescription and tint. */ class IconSource { - @DrawableRes - var drawableRes: Int? = null + @OptIn(ExperimentalResourceApi::class) + var drawableRes: DrawableResource? = null var imageVector: ImageVector? = null var bitmap: ImageBitmap? = null var painter: Painter? = null @@ -43,8 +45,9 @@ class IconSource { * @param contentDescription Text that is used as content description for the icon * @param tint Color that is used to tint the icon */ + @OptIn(ExperimentalResourceApi::class) constructor( - @DrawableRes drawableRes: Int, + drawableRes: DrawableResource, contentDescription: String? = null, tint: Color? = null ) { @@ -108,8 +111,9 @@ class IconSource { * @param tint Color that is used to tint the icon * @param selectedTint Color that is used to tint the icon when selected */ + @OptIn(ExperimentalResourceApi::class) constructor( - @DrawableRes drawableRes: Int, + drawableRes: DrawableResource, contentDescription: String? = null, tint: Color? = null, selectedTint: Color? = null diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt index 3ba282a8..93b91f11 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/SelectionButton.kt @@ -15,8 +15,9 @@ */ package com.maxkeppeker.sheets.core.models.base -import androidx.annotation.StringRes import androidx.compose.ui.text.AnnotatedString +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.StringResource /** * Represents a button with text and an optional icon. @@ -24,8 +25,8 @@ import androidx.compose.ui.text.AnnotatedString open class SelectionButton { internal val text: String? - @StringRes - internal val textRes: Int? + @OptIn(ExperimentalResourceApi::class) + internal val textRes: StringResource? val annotatedString: AnnotatedString? internal val icon: IconSource? internal val type: ButtonStyle @@ -37,6 +38,7 @@ open class SelectionButton { * @param icon The icon to be displayed on the button. Can be `null`. * @param type The style of the button. Default value is `ButtonStyle.TEXT`. */ + @OptIn(ExperimentalResourceApi::class) constructor( text: String, icon: IconSource? = null, @@ -56,8 +58,9 @@ open class SelectionButton { * @param icon The icon to be displayed on the button. Can be `null`. * @param type The style of the button. Default value is `ButtonStyle.TEXT`. */ + @OptIn(ExperimentalResourceApi::class) constructor( - @StringRes textRes: Int, + textRes: StringResource, icon: IconSource? = null, type: ButtonStyle = ButtonStyle.TEXT ) { @@ -75,6 +78,7 @@ open class SelectionButton { * @param icon The icon to be displayed on the button. Can be `null`. * @param type The style of the button. Default value is `ButtonStyle.TEXT`. */ + @OptIn(ExperimentalResourceApi::class) constructor( annotatedString: AnnotatedString, icon: IconSource? = null, diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt index 33263cb3..204f0771 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/UseCaseState.kt @@ -21,7 +21,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import java.io.Serializable +import kotlinx.serialization.Serializable /** * Handles the base behavior of any use-case view. @@ -154,10 +154,11 @@ class UseCaseState( * Data class that stores the important information of the current state * and can be used by the [Saver] to save and restore the state. */ + @Serializable data class UseCaseStateData( val visible: Boolean, val embedded: Boolean, - ) : Serializable + ) } /** diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt index d4e63534..5f5953ec 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.kt @@ -16,9 +16,8 @@ package com.maxkeppeker.sheets.core.utils import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalConfiguration -private const val TABLET_THRESHOLD = 800 +internal const val TABLET_THRESHOLD = 800 /** * Determines whether the current screen should use landscape mode. @@ -26,5 +25,7 @@ private const val TABLET_THRESHOLD = 800 * @return `true` if the screen height is less than the [TABLET_THRESHOLD] in landscape mode, `false` otherwise. */ @Composable -fun shouldUseLandscape(): Boolean = - LocalConfiguration.current.screenHeightDp < TABLET_THRESHOLD \ No newline at end of file +expect fun shouldUseLandscape(): Boolean + +@Composable +expect fun isLandscape(): Boolean \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseConstants.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseConstants.kt index f934ef7f..4f0bd664 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseConstants.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseConstants.kt @@ -20,6 +20,10 @@ import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.ButtonStyle import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeker.sheets.core.models.base.SelectionButton +import org.jetbrains.compose.resources.ExperimentalResourceApi +import sheets_compose_dialogs.core.generated.resources.Res +import sheets_compose_dialogs.core.generated.resources.cancel +import sheets_compose_dialogs.core.generated.resources.ok /** * Defines module-wide constants. @@ -38,14 +42,16 @@ object BaseConstants { val DYNAMIC_SIZE_MAX = 200.dp + @OptIn(ExperimentalResourceApi::class) val DEFAULT_NEGATIVE_BUTTON = SelectionButton( - textRes = android.R.string.cancel, + textRes = Res.string.cancel, type = ButtonStyle.TEXT ) + @OptIn(ExperimentalResourceApi::class) val DEFAULT_POSITIVE_BUTTON = SelectionButton( - textRes = android.R.string.ok, + textRes = Res.string.ok, type = ButtonStyle.TEXT ) } \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt index 76a81aa0..45635753 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseModifiers.kt @@ -19,9 +19,7 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.heightIn import androidx.compose.ui.Modifier import androidx.compose.ui.composed -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp -import com.maxkeppeler.sheets.core.R /** diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseValues.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseValues.kt index 0910450f..d1116366 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseValues.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseValues.kt @@ -17,9 +17,7 @@ package com.maxkeppeker.sheets.core.utils import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp -import com.maxkeppeler.sheets.core.R /** * Defines module-wide values. diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/BaseTypeState.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/BaseTypeState.kt index ee7f92ae..018518ef 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/BaseTypeState.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/BaseTypeState.kt @@ -18,12 +18,13 @@ package com.maxkeppeker.sheets.core.views import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue -import java.io.Serializable +import kotlinx.serialization.Serializable /** * The base class for the use-case view states. */ -abstract class BaseTypeState : Serializable { +@Serializable +abstract class BaseTypeState { open var inputDisabled by mutableStateOf(false) diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt index 705d100c..ee333936 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/ButtonsComponent.kt @@ -32,8 +32,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.ButtonStyle @@ -42,7 +40,8 @@ import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.models.base.UseCaseState import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource /** * Buttons component. @@ -141,6 +140,7 @@ fun ButtonsComponent( * @param enabled Controls the enabled state of this button. When false, this component will not respond to user input, and it will appear visually disabled and disabled to accessibility services. * @param testTag The text that is used for the test tag. */ +@OptIn(ExperimentalResourceApi::class) @Composable private fun SelectionButtonComponent( modifier: Modifier, diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/HeaderComponent.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/HeaderComponent.kt index 83d76ccd..573c53bb 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/HeaderComponent.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/HeaderComponent.kt @@ -27,7 +27,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.Header diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/IconComponent.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/IconComponent.kt index 687a0907..a6cbea3e 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/IconComponent.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/IconComponent.kt @@ -20,8 +20,9 @@ import androidx.compose.material3.LocalContentColor import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource import com.maxkeppeker.sheets.core.models.base.IconSource +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.painterResource /** * Icon component that is displayed in various places in a dialog. @@ -30,6 +31,7 @@ import com.maxkeppeker.sheets.core.models.base.IconSource * @param tint The color that is used to tint the icon. * @param defaultTint The default color that is used. */ +@OptIn(ExperimentalResourceApi::class) @Composable fun IconComponent( modifier: Modifier, @@ -40,7 +42,7 @@ fun IconComponent( val actualTint = tint ?: iconSource.tint ?: defaultTint ?: LocalContentColor.current - val resolvedPainterDrawableRes = iconSource.drawableRes?.let { painterResource(id = it) } + val resolvedPainterDrawableRes = iconSource.drawableRes?.let(::painterResource) (iconSource.painter ?: resolvedPainterDrawableRes)?.let { Icon( modifier = modifier, diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt index 7ac93586..7a6b7aba 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt @@ -17,25 +17,22 @@ package com.maxkeppeker.sheets.core.views.base -import android.content.res.Configuration import androidx.compose.foundation.layout.* import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeker.sheets.core.utils.BaseValues import com.maxkeppeker.sheets.core.utils.TestTags +import com.maxkeppeker.sheets.core.utils.isLandscape import com.maxkeppeker.sheets.core.utils.shouldUseLandscape import com.maxkeppeker.sheets.core.views.HeaderComponent -import com.maxkeppeler.sheets.core.R as RC /** * Base component for the content structure of a dialog. @@ -62,8 +59,7 @@ fun FrameBase( ) { val layoutDirection = LocalLayoutDirection.current val shouldUseLandscapeLayout = shouldUseLandscape() - val currentOrientation = LocalConfiguration.current.orientation - val isDeviceLandscape = currentOrientation == Configuration.ORIENTATION_LANDSCAPE + val isDeviceLandscape = isLandscape() val deviceOrientation = if (config?.orientation != LibOrientation.PORTRAIT && isDeviceLandscape) LibOrientation.LANDSCAPE else LibOrientation.PORTRAIT val layoutType = when (config?.orientation) { diff --git a/core/src/nonAndroidMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.nonAndroid.kt b/core/src/nonAndroidMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.nonAndroid.kt new file mode 100644 index 00000000..e93844ea --- /dev/null +++ b/core/src/nonAndroidMain/kotlin/com/maxkeppeker/sheets/core/utils/BaseComposeUtils.nonAndroid.kt @@ -0,0 +1,18 @@ +package com.maxkeppeker.sheets.core.utils + +import androidx.compose.runtime.Composable + +/** + * Determines whether the current screen should use landscape mode. + * + * @return `true` if the screen height is less than the [TABLET_THRESHOLD] in landscape mode, `false` otherwise. + */ +@Composable +actual fun shouldUseLandscape(): Boolean { + return false +} + +@Composable +actual fun isLandscape(): Boolean { + return false +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 724439c6..3f902bb9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,6 +22,11 @@ kotlin.code.style=official # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true +# Compose targets +org.jetbrains.compose.experimental.macos.enabled=true +org.jetbrains.compose.experimental.jscanvas.enabled=true +org.jetbrains.compose.experimental.wasm.enabled=true + # Maven publish information GROUP=com.maxkeppeler.sheets-compose-dialogs diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f7d84f1b..e42c1c8d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,13 +1,18 @@ [versions] android = "8.2.2" compose = "1.6.1" +datetime = "0.5.0" kotlin = "1.9.22" +serialization = "1.6.3" [libraries] +datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "datetime" } +serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-core", version.ref = "serialization" } [plugins] android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } android-application = { id = "com.android.application", version.ref = "android" } android-library = { id = "com.android.library", version.ref = "android" } compose = { id = "org.jetbrains.compose", version.ref = "compose" } -multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } \ No newline at end of file +multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } +serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } \ No newline at end of file From 1d38e025048b7b806e1c4cfca0d22343e507af97 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 29 Mar 2024 20:27:57 +0100 Subject: [PATCH 03/58] fix old android targets --- core/build.gradle.kts | 7 +++++++ gradle/libs.versions.toml | 2 ++ 2 files changed, 9 insertions(+) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index e9c0d25f..d4a4ac95 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -29,6 +29,9 @@ android { defaultConfig { minSdk = 21 } + compileOptions { + isCoreLibraryDesugaringEnabled = true + } } kotlin { @@ -80,3 +83,7 @@ kotlin { } } } + +dependencies { + coreLibraryDesugaring(libs.desugar) +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e42c1c8d..e168982b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,11 +2,13 @@ android = "8.2.2" compose = "1.6.1" datetime = "0.5.0" +desugar = "2.0.4" kotlin = "1.9.22" serialization = "1.6.3" [libraries] datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "datetime" } +desugar = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-core", version.ref = "serialization" } [plugins] From 2f65c32aea5f9b77cd763568bb9b5a8b1d2609f1 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 29 Mar 2024 21:25:29 +0100 Subject: [PATCH 04/58] prepare calendar multiplatform --- calendar/build.gradle.kts | 37 ++++-- .../composeResources}/values-bg/strings.xml | 0 .../composeResources}/values-cs/strings.xml | 0 .../composeResources}/values-da/strings.xml | 0 .../values-de-rDE/strings.xml | 0 .../composeResources}/values-el/strings.xml | 0 .../composeResources}/values-eo/strings.xml | 0 .../composeResources}/values-es/strings.xml | 0 .../composeResources}/values-et/strings.xml | 0 .../composeResources}/values-fa/strings.xml | 0 .../composeResources}/values-fi/strings.xml | 0 .../composeResources}/values-fr/strings.xml | 0 .../composeResources}/values-ga/strings.xml | 0 .../composeResources}/values-gd/strings.xml | 0 .../composeResources}/values-hi/strings.xml | 0 .../composeResources}/values-hr/strings.xml | 0 .../composeResources}/values-hu/strings.xml | 0 .../values-in-rID/strings.xml | 0 .../composeResources}/values-is/strings.xml | 0 .../composeResources}/values-it/strings.xml | 0 .../composeResources}/values-iw/strings.xml | 0 .../composeResources}/values-ja/strings.xml | 0 .../composeResources}/values-jv/strings.xml | 0 .../composeResources}/values-kk/strings.xml | 0 .../composeResources}/values-ko/strings.xml | 0 .../composeResources}/values-ku/strings.xml | 0 .../composeResources}/values-lb/strings.xml | 0 .../composeResources}/values-lo/strings.xml | 0 .../composeResources}/values-lt/strings.xml | 0 .../composeResources}/values-lv/strings.xml | 0 .../composeResources}/values-ms/strings.xml | 0 .../composeResources}/values-ne/strings.xml | 0 .../composeResources}/values-nl/strings.xml | 0 .../composeResources}/values-no/strings.xml | 0 .../composeResources}/values-pl/strings.xml | 0 .../composeResources}/values-pt/strings.xml | 0 .../composeResources}/values-ru/strings.xml | 0 .../composeResources}/values-sk/strings.xml | 0 .../composeResources}/values-sl/strings.xml | 0 .../composeResources}/values-sr/strings.xml | 0 .../composeResources}/values-sv/strings.xml | 0 .../composeResources}/values-th/strings.xml | 0 .../composeResources}/values-tr/strings.xml | 0 .../composeResources}/values-uk/strings.xml | 0 .../composeResources}/values-vi/strings.xml | 0 .../values-zh-rCN/strings.xml | 0 .../values-zh-rTW/strings.xml | 0 .../composeResources}/values-zh/strings.xml | 0 .../composeResources}/values/strings.xml | 1 - .../sheets/calendar/CalendarDialog.kt | 0 .../sheets/calendar/CalendarPopup.kt | 0 .../sheets/calendar/CalendarState.kt | 0 .../sheets/calendar/CalendarView.kt | 10 +- .../sheets/calendar/models/CalendarConfig.kt | 0 .../sheets/calendar/models/CalendarData.kt | 0 .../calendar/models/CalendarDateData.kt | 0 .../calendar/models/CalendarDisplayMode.kt | 0 .../calendar/models/CalendarMonthData.kt | 0 .../calendar/models/CalendarSelection.kt | 0 .../sheets/calendar/models/CalendarStyle.kt | 0 .../calendar/models/CalendarSwipeAction.kt | 0 .../calendar/models/CalendarViewType.kt | 0 .../sheets/calendar/utils/Constants.kt | 0 .../sheets/calendar/utils/DayOfWeekUtils.kt | 0 .../sheets/calendar/utils/Utils.kt | 0 .../views/CalendarBaseSelectionComponent.kt | 35 +++-- .../views/CalendarDateItemComponent.kt | 6 +- .../views/CalendarHeaderItemComponent.kt | 3 +- .../calendar/views/CalendarSelectionView.kt | 3 +- .../calendar/views/CalendarTopComponent.kt | 122 +++++++++++------- .../views/CalendarWeekHeaderItemComponent.kt | 11 +- .../views/CalendarWeekItemComponent.kt | 7 +- .../calendar/views/MonthItemComponent.kt | 7 +- .../calendar/views/MonthSelectionView.kt | 0 .../calendar/views/YearItemComponent.kt | 6 +- .../calendar/views/YearSelectionView.kt | 0 calendar/src/main/AndroidManifest.xml | 2 - .../main/res/drawable/avd_chevron_down_up.xml | 33 ----- .../sheets/clock/views/KeyItemComponent.kt | 4 +- .../clock/views/TimeTypeItemComponent.kt | 2 +- .../sheets/clock/views/TimeValueComponent.kt | 6 +- .../views/ColorCustomControlComponent.kt | 2 +- .../color/views/ColorCustomInfoComponent.kt | 8 +- .../views/ColorSelectionModeComponent.kt | 10 +- .../color/views/ColorTemplateComponent.kt | 2 +- .../color/views/ColorTemplateItemComponent.kt | 2 +- .../views/PickerDateCharacterComponent.kt | 6 +- .../date_time/views/SelectionValueItem.kt | 4 +- .../date_time/views/UnitContainerComponent.kt | 2 +- .../sheets/date_time/views/ValueComponent.kt | 2 +- .../views/ValueContainerComponent.kt | 4 +- .../sheets/duration/views/KeyItemComponent.kt | 4 +- .../duration/views/TimeValueComponent.kt | 6 +- .../com/maxkeppeler/sheets/emoji/EmojiView.kt | 8 +- .../emoji/views/EmojiHeaderItemComponent.kt | 4 +- .../sheets/emoji/views/EmojiItemComponent.kt | 2 +- .../views/EmojiTextHeaderItemComponent.kt | 2 +- .../sheets/emoji/views/VariantsPopup.kt | 6 +- .../input/views/InputCheckboxComponent.kt | 6 +- .../views/InputCheckboxGroupComponent.kt | 2 +- .../input/views/InputCheckboxItemComponent.kt | 8 +- .../sheets/input/views/InputComponent.kt | 4 +- .../input/views/InputDividerComponent.kt | 4 +- .../input/views/InputItemHeaderComponent.kt | 6 +- .../input/views/InputItemOverlayComponent.kt | 2 +- .../views/InputRadioButtonGroupComponent.kt | 2 +- .../views/InputRadioButtonItemComponent.kt | 8 +- .../input/views/TextFieldErrorContainer.kt | 2 +- .../sheets/list/views/ListOptionComponent.kt | 2 +- .../list/views/ListOptionItemComponent.kt | 6 +- .../option/views/InfoContainerComponent.kt | 2 +- .../sheets/option/views/OptionComponent.kt | 12 +- .../option/views/OptionDetailsDialog.kt | 16 +-- .../option/views/OptionGridItemComponent.kt | 6 +- .../option/views/OptionListItemComponent.kt | 10 +- .../rating/views/BodyDefaultComponent.kt | 2 +- .../views/FeedbackTextFieldErrorContainer.kt | 2 +- .../sheets/rating/views/RatingFeedbackView.kt | 2 +- .../rating/views/RatingSelectionView.kt | 6 +- settings.gradle.kts | 2 +- 120 files changed, 249 insertions(+), 232 deletions(-) rename calendar/src/{main/res => commonMain/composeResources}/values-bg/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-cs/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-da/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-de-rDE/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-el/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-eo/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-es/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-et/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-fa/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-fi/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-fr/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-ga/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-gd/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-hi/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-hr/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-hu/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-in-rID/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-is/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-it/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-iw/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-ja/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-jv/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-kk/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-ko/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-ku/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-lb/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-lo/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-lt/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-lv/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-ms/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-ne/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-nl/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-no/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-pl/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-pt/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-ru/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-sk/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-sl/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-sr/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-sv/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-th/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-tr/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-uk/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-vi/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-zh-rCN/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-zh-rTW/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values-zh/strings.xml (100%) rename calendar/src/{main/res => commonMain/composeResources}/values/strings.xml (92%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/CalendarDialog.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/CalendarPopup.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/CalendarState.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/CalendarView.kt (96%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarData.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarStyle.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarSwipeAction.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/models/CalendarViewType.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/utils/Constants.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/utils/Utils.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt (86%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt (95%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt (97%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt (98%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt (79%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt (82%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt (91%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt (93%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt (100%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt (92%) rename calendar/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt (100%) delete mode 100644 calendar/src/main/AndroidManifest.xml delete mode 100644 calendar/src/main/res/drawable/avd_chevron_down_up.xml diff --git a/calendar/build.gradle.kts b/calendar/build.gradle.kts index 97d592bf..d62589f2 100644 --- a/calendar/build.gradle.kts +++ b/calendar/build.gradle.kts @@ -14,23 +14,42 @@ * limitations under the License. */ plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) } android { namespace = Modules.CALENDAR.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } compileOptions { - // Flag to enable support for the new language APIs isCoreLibraryDesugaringEnabled = true } } -dependencies { - implementations(Dependencies.SNAPPER) - coreLibraryDesugaring(Dependencies.DESUGAR) +kotlin { + androidTarget() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.materialIconsExtended) + implementation(compose.components.resources) + implementation(compose.animation) + implementation(compose.animationGraphics) + + implementation(project(":core")) + } + } } -mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file +dependencies { + coreLibraryDesugaring(libs.desugar) +} diff --git a/calendar/src/main/res/values-bg/strings.xml b/calendar/src/commonMain/composeResources/values-bg/strings.xml similarity index 100% rename from calendar/src/main/res/values-bg/strings.xml rename to calendar/src/commonMain/composeResources/values-bg/strings.xml diff --git a/calendar/src/main/res/values-cs/strings.xml b/calendar/src/commonMain/composeResources/values-cs/strings.xml similarity index 100% rename from calendar/src/main/res/values-cs/strings.xml rename to calendar/src/commonMain/composeResources/values-cs/strings.xml diff --git a/calendar/src/main/res/values-da/strings.xml b/calendar/src/commonMain/composeResources/values-da/strings.xml similarity index 100% rename from calendar/src/main/res/values-da/strings.xml rename to calendar/src/commonMain/composeResources/values-da/strings.xml diff --git a/calendar/src/main/res/values-de-rDE/strings.xml b/calendar/src/commonMain/composeResources/values-de-rDE/strings.xml similarity index 100% rename from calendar/src/main/res/values-de-rDE/strings.xml rename to calendar/src/commonMain/composeResources/values-de-rDE/strings.xml diff --git a/calendar/src/main/res/values-el/strings.xml b/calendar/src/commonMain/composeResources/values-el/strings.xml similarity index 100% rename from calendar/src/main/res/values-el/strings.xml rename to calendar/src/commonMain/composeResources/values-el/strings.xml diff --git a/calendar/src/main/res/values-eo/strings.xml b/calendar/src/commonMain/composeResources/values-eo/strings.xml similarity index 100% rename from calendar/src/main/res/values-eo/strings.xml rename to calendar/src/commonMain/composeResources/values-eo/strings.xml diff --git a/calendar/src/main/res/values-es/strings.xml b/calendar/src/commonMain/composeResources/values-es/strings.xml similarity index 100% rename from calendar/src/main/res/values-es/strings.xml rename to calendar/src/commonMain/composeResources/values-es/strings.xml diff --git a/calendar/src/main/res/values-et/strings.xml b/calendar/src/commonMain/composeResources/values-et/strings.xml similarity index 100% rename from calendar/src/main/res/values-et/strings.xml rename to calendar/src/commonMain/composeResources/values-et/strings.xml diff --git a/calendar/src/main/res/values-fa/strings.xml b/calendar/src/commonMain/composeResources/values-fa/strings.xml similarity index 100% rename from calendar/src/main/res/values-fa/strings.xml rename to calendar/src/commonMain/composeResources/values-fa/strings.xml diff --git a/calendar/src/main/res/values-fi/strings.xml b/calendar/src/commonMain/composeResources/values-fi/strings.xml similarity index 100% rename from calendar/src/main/res/values-fi/strings.xml rename to calendar/src/commonMain/composeResources/values-fi/strings.xml diff --git a/calendar/src/main/res/values-fr/strings.xml b/calendar/src/commonMain/composeResources/values-fr/strings.xml similarity index 100% rename from calendar/src/main/res/values-fr/strings.xml rename to calendar/src/commonMain/composeResources/values-fr/strings.xml diff --git a/calendar/src/main/res/values-ga/strings.xml b/calendar/src/commonMain/composeResources/values-ga/strings.xml similarity index 100% rename from calendar/src/main/res/values-ga/strings.xml rename to calendar/src/commonMain/composeResources/values-ga/strings.xml diff --git a/calendar/src/main/res/values-gd/strings.xml b/calendar/src/commonMain/composeResources/values-gd/strings.xml similarity index 100% rename from calendar/src/main/res/values-gd/strings.xml rename to calendar/src/commonMain/composeResources/values-gd/strings.xml diff --git a/calendar/src/main/res/values-hi/strings.xml b/calendar/src/commonMain/composeResources/values-hi/strings.xml similarity index 100% rename from calendar/src/main/res/values-hi/strings.xml rename to calendar/src/commonMain/composeResources/values-hi/strings.xml diff --git a/calendar/src/main/res/values-hr/strings.xml b/calendar/src/commonMain/composeResources/values-hr/strings.xml similarity index 100% rename from calendar/src/main/res/values-hr/strings.xml rename to calendar/src/commonMain/composeResources/values-hr/strings.xml diff --git a/calendar/src/main/res/values-hu/strings.xml b/calendar/src/commonMain/composeResources/values-hu/strings.xml similarity index 100% rename from calendar/src/main/res/values-hu/strings.xml rename to calendar/src/commonMain/composeResources/values-hu/strings.xml diff --git a/calendar/src/main/res/values-in-rID/strings.xml b/calendar/src/commonMain/composeResources/values-in-rID/strings.xml similarity index 100% rename from calendar/src/main/res/values-in-rID/strings.xml rename to calendar/src/commonMain/composeResources/values-in-rID/strings.xml diff --git a/calendar/src/main/res/values-is/strings.xml b/calendar/src/commonMain/composeResources/values-is/strings.xml similarity index 100% rename from calendar/src/main/res/values-is/strings.xml rename to calendar/src/commonMain/composeResources/values-is/strings.xml diff --git a/calendar/src/main/res/values-it/strings.xml b/calendar/src/commonMain/composeResources/values-it/strings.xml similarity index 100% rename from calendar/src/main/res/values-it/strings.xml rename to calendar/src/commonMain/composeResources/values-it/strings.xml diff --git a/calendar/src/main/res/values-iw/strings.xml b/calendar/src/commonMain/composeResources/values-iw/strings.xml similarity index 100% rename from calendar/src/main/res/values-iw/strings.xml rename to calendar/src/commonMain/composeResources/values-iw/strings.xml diff --git a/calendar/src/main/res/values-ja/strings.xml b/calendar/src/commonMain/composeResources/values-ja/strings.xml similarity index 100% rename from calendar/src/main/res/values-ja/strings.xml rename to calendar/src/commonMain/composeResources/values-ja/strings.xml diff --git a/calendar/src/main/res/values-jv/strings.xml b/calendar/src/commonMain/composeResources/values-jv/strings.xml similarity index 100% rename from calendar/src/main/res/values-jv/strings.xml rename to calendar/src/commonMain/composeResources/values-jv/strings.xml diff --git a/calendar/src/main/res/values-kk/strings.xml b/calendar/src/commonMain/composeResources/values-kk/strings.xml similarity index 100% rename from calendar/src/main/res/values-kk/strings.xml rename to calendar/src/commonMain/composeResources/values-kk/strings.xml diff --git a/calendar/src/main/res/values-ko/strings.xml b/calendar/src/commonMain/composeResources/values-ko/strings.xml similarity index 100% rename from calendar/src/main/res/values-ko/strings.xml rename to calendar/src/commonMain/composeResources/values-ko/strings.xml diff --git a/calendar/src/main/res/values-ku/strings.xml b/calendar/src/commonMain/composeResources/values-ku/strings.xml similarity index 100% rename from calendar/src/main/res/values-ku/strings.xml rename to calendar/src/commonMain/composeResources/values-ku/strings.xml diff --git a/calendar/src/main/res/values-lb/strings.xml b/calendar/src/commonMain/composeResources/values-lb/strings.xml similarity index 100% rename from calendar/src/main/res/values-lb/strings.xml rename to calendar/src/commonMain/composeResources/values-lb/strings.xml diff --git a/calendar/src/main/res/values-lo/strings.xml b/calendar/src/commonMain/composeResources/values-lo/strings.xml similarity index 100% rename from calendar/src/main/res/values-lo/strings.xml rename to calendar/src/commonMain/composeResources/values-lo/strings.xml diff --git a/calendar/src/main/res/values-lt/strings.xml b/calendar/src/commonMain/composeResources/values-lt/strings.xml similarity index 100% rename from calendar/src/main/res/values-lt/strings.xml rename to calendar/src/commonMain/composeResources/values-lt/strings.xml diff --git a/calendar/src/main/res/values-lv/strings.xml b/calendar/src/commonMain/composeResources/values-lv/strings.xml similarity index 100% rename from calendar/src/main/res/values-lv/strings.xml rename to calendar/src/commonMain/composeResources/values-lv/strings.xml diff --git a/calendar/src/main/res/values-ms/strings.xml b/calendar/src/commonMain/composeResources/values-ms/strings.xml similarity index 100% rename from calendar/src/main/res/values-ms/strings.xml rename to calendar/src/commonMain/composeResources/values-ms/strings.xml diff --git a/calendar/src/main/res/values-ne/strings.xml b/calendar/src/commonMain/composeResources/values-ne/strings.xml similarity index 100% rename from calendar/src/main/res/values-ne/strings.xml rename to calendar/src/commonMain/composeResources/values-ne/strings.xml diff --git a/calendar/src/main/res/values-nl/strings.xml b/calendar/src/commonMain/composeResources/values-nl/strings.xml similarity index 100% rename from calendar/src/main/res/values-nl/strings.xml rename to calendar/src/commonMain/composeResources/values-nl/strings.xml diff --git a/calendar/src/main/res/values-no/strings.xml b/calendar/src/commonMain/composeResources/values-no/strings.xml similarity index 100% rename from calendar/src/main/res/values-no/strings.xml rename to calendar/src/commonMain/composeResources/values-no/strings.xml diff --git a/calendar/src/main/res/values-pl/strings.xml b/calendar/src/commonMain/composeResources/values-pl/strings.xml similarity index 100% rename from calendar/src/main/res/values-pl/strings.xml rename to calendar/src/commonMain/composeResources/values-pl/strings.xml diff --git a/calendar/src/main/res/values-pt/strings.xml b/calendar/src/commonMain/composeResources/values-pt/strings.xml similarity index 100% rename from calendar/src/main/res/values-pt/strings.xml rename to calendar/src/commonMain/composeResources/values-pt/strings.xml diff --git a/calendar/src/main/res/values-ru/strings.xml b/calendar/src/commonMain/composeResources/values-ru/strings.xml similarity index 100% rename from calendar/src/main/res/values-ru/strings.xml rename to calendar/src/commonMain/composeResources/values-ru/strings.xml diff --git a/calendar/src/main/res/values-sk/strings.xml b/calendar/src/commonMain/composeResources/values-sk/strings.xml similarity index 100% rename from calendar/src/main/res/values-sk/strings.xml rename to calendar/src/commonMain/composeResources/values-sk/strings.xml diff --git a/calendar/src/main/res/values-sl/strings.xml b/calendar/src/commonMain/composeResources/values-sl/strings.xml similarity index 100% rename from calendar/src/main/res/values-sl/strings.xml rename to calendar/src/commonMain/composeResources/values-sl/strings.xml diff --git a/calendar/src/main/res/values-sr/strings.xml b/calendar/src/commonMain/composeResources/values-sr/strings.xml similarity index 100% rename from calendar/src/main/res/values-sr/strings.xml rename to calendar/src/commonMain/composeResources/values-sr/strings.xml diff --git a/calendar/src/main/res/values-sv/strings.xml b/calendar/src/commonMain/composeResources/values-sv/strings.xml similarity index 100% rename from calendar/src/main/res/values-sv/strings.xml rename to calendar/src/commonMain/composeResources/values-sv/strings.xml diff --git a/calendar/src/main/res/values-th/strings.xml b/calendar/src/commonMain/composeResources/values-th/strings.xml similarity index 100% rename from calendar/src/main/res/values-th/strings.xml rename to calendar/src/commonMain/composeResources/values-th/strings.xml diff --git a/calendar/src/main/res/values-tr/strings.xml b/calendar/src/commonMain/composeResources/values-tr/strings.xml similarity index 100% rename from calendar/src/main/res/values-tr/strings.xml rename to calendar/src/commonMain/composeResources/values-tr/strings.xml diff --git a/calendar/src/main/res/values-uk/strings.xml b/calendar/src/commonMain/composeResources/values-uk/strings.xml similarity index 100% rename from calendar/src/main/res/values-uk/strings.xml rename to calendar/src/commonMain/composeResources/values-uk/strings.xml diff --git a/calendar/src/main/res/values-vi/strings.xml b/calendar/src/commonMain/composeResources/values-vi/strings.xml similarity index 100% rename from calendar/src/main/res/values-vi/strings.xml rename to calendar/src/commonMain/composeResources/values-vi/strings.xml diff --git a/calendar/src/main/res/values-zh-rCN/strings.xml b/calendar/src/commonMain/composeResources/values-zh-rCN/strings.xml similarity index 100% rename from calendar/src/main/res/values-zh-rCN/strings.xml rename to calendar/src/commonMain/composeResources/values-zh-rCN/strings.xml diff --git a/calendar/src/main/res/values-zh-rTW/strings.xml b/calendar/src/commonMain/composeResources/values-zh-rTW/strings.xml similarity index 100% rename from calendar/src/main/res/values-zh-rTW/strings.xml rename to calendar/src/commonMain/composeResources/values-zh-rTW/strings.xml diff --git a/calendar/src/main/res/values-zh/strings.xml b/calendar/src/commonMain/composeResources/values-zh/strings.xml similarity index 100% rename from calendar/src/main/res/values-zh/strings.xml rename to calendar/src/commonMain/composeResources/values-zh/strings.xml diff --git a/calendar/src/main/res/values/strings.xml b/calendar/src/commonMain/composeResources/values/strings.xml similarity index 92% rename from calendar/src/main/res/values/strings.xml rename to calendar/src/commonMain/composeResources/values/strings.xml index f5cb590c..16de5252 100644 --- a/calendar/src/main/res/values/strings.xml +++ b/calendar/src/commonMain/composeResources/values/strings.xml @@ -1,4 +1,3 @@ - Select month Next month diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarDialog.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarDialog.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarDialog.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarDialog.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarPopup.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarPopup.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarPopup.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarPopup.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarState.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarState.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarState.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarState.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt similarity index 96% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarView.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt index a409c350..6cb6b1a3 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/CalendarView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt @@ -22,13 +22,7 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.setValue +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.layout.onGloballyPositioned @@ -158,7 +152,7 @@ fun CalendarView( layoutLandscape = when (config.style) { CalendarStyle.MONTH -> { { - var calendarHeight by remember { mutableStateOf(0) } + var calendarHeight by remember { mutableIntStateOf(0) } CalendarTopLandscapeComponent( modifier = Modifier .weight(0.3f) diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarData.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarData.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarData.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarData.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarStyle.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarStyle.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarStyle.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarStyle.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarSwipeAction.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSwipeAction.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarSwipeAction.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSwipeAction.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarViewType.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarViewType.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/models/CalendarViewType.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarViewType.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/utils/Constants.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/utils/Constants.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/utils/Utils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/utils/Utils.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt similarity index 86% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt index cefb7e94..39ef9c80 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt @@ -13,10 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@file:OptIn(ExperimentalSnapperApi::class) package com.maxkeppeler.sheets.calendar.views +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.LazyListState @@ -34,16 +35,16 @@ import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeker.sheets.core.utils.BaseConstants import com.maxkeppeler.sheets.calendar.R import com.maxkeppeler.sheets.calendar.models.CalendarDisplayMode -import dev.chrisbanes.snapper.ExperimentalSnapperApi -import dev.chrisbanes.snapper.SnapOffsets -import dev.chrisbanes.snapper.rememberSnapperFlingBehavior +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.calendar.generated.resources.Res +import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_select_month +import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_select_year import com.maxkeppeler.sheets.core.R as RC /** @@ -56,6 +57,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param onMonthView The content that will be displayed if the [CalendarDisplayMode] is in [CalendarDisplayMode.MONTH]. * @param onYearView The content that will be displayed if the [CalendarDisplayMode] is in [CalendarDisplayMode.YEAR]. */ +@OptIn(ExperimentalFoundationApi::class, ExperimentalResourceApi::class) @Composable internal fun CalendarBaseSelectionComponent( modifier: Modifier, @@ -70,7 +72,7 @@ internal fun CalendarBaseSelectionComponent( val baseModifier = modifier.then( when (orientation) { - LibOrientation.PORTRAIT -> Modifier.padding(top = dimensionResource(RC.dimen.scd_normal_100)) + LibOrientation.PORTRAIT -> Modifier.padding(top = 16.dp) LibOrientation.LANDSCAPE -> Modifier.sizeIn( maxHeight = BaseConstants.DYNAMIC_SIZE_MAX, maxWidth = BaseConstants.DYNAMIC_SIZE_MAX @@ -83,13 +85,13 @@ internal fun CalendarBaseSelectionComponent( .wrapContentHeight() .then( when (orientation) { - LibOrientation.PORTRAIT -> Modifier.padding(top = dimensionResource(RC.dimen.scd_normal_150)) + LibOrientation.PORTRAIT -> Modifier.padding(top = 24.dp) LibOrientation.LANDSCAPE -> Modifier } ) val baseViewModifier = Modifier - .padding(top = dimensionResource(RC.dimen.scd_normal_100)) + .padding(top = 16.dp) val gridYearModifier = baseViewModifier .graphicsLayer { alpha = 0.99F } @@ -107,11 +109,6 @@ internal fun CalendarBaseSelectionComponent( ) } - val behavior = rememberSnapperFlingBehavior( - lazyListState = yearListState, - snapOffsetForItem = SnapOffsets.Center, - ) - when (mode) { CalendarDisplayMode.CALENDAR -> { LazyVerticalGrid( @@ -129,7 +126,7 @@ internal fun CalendarBaseSelectionComponent( horizontalAlignment = Alignment.CenterHorizontally ) { Text( - text = stringResource(R.string.scd_calendar_dialog_select_month), + text = stringResource(Res.string.scd_calendar_dialog_select_month), style = MaterialTheme.typography.titleMedium, ) LazyVerticalGrid( @@ -149,15 +146,15 @@ internal fun CalendarBaseSelectionComponent( horizontalAlignment = Alignment.CenterHorizontally ) { Text( - text = stringResource(R.string.scd_calendar_dialog_select_year), + text = stringResource(Res.string.scd_calendar_dialog_select_year), style = MaterialTheme.typography.titleMedium, ) LazyRow( modifier = gridYearModifier, state = yearListState, - flingBehavior = behavior, - contentPadding = PaddingValues(horizontal = dimensionResource(RC.dimen.scd_large_100)), - horizontalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_50)), + flingBehavior = rememberSnapFlingBehavior(yearListState), + contentPadding = PaddingValues(horizontal = 32.dp), + horizontalArrangement = Arrangement.spacedBy(4.dp), content = onYearView ) } diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt similarity index 95% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt index 8725e429..60847cb0 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt @@ -119,9 +119,9 @@ internal fun CalendarDateItemComponent( } val parentModifier = when (selection) { - is CalendarSelection.Date -> Modifier.padding(dimensionResource(RC.dimen.scd_small_25)) - is CalendarSelection.Dates -> Modifier.padding(dimensionResource(RC.dimen.scd_small_25)) - is CalendarSelection.Period -> Modifier.padding(vertical = dimensionResource(RC.dimen.scd_small_25)) + is CalendarSelection.Date -> Modifier.padding(2.dp) + is CalendarSelection.Dates -> Modifier.padding(2.dp) + is CalendarSelection.Period -> Modifier.padding(vertical = 2.dp) }.testTags( TestTags.CALENDAR_DATE, data.date?.format(DateTimeFormatter.ISO_DATE) ?: "" diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt similarity index 97% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt index e191d9b4..347689f5 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.core.R as RC @@ -42,7 +43,7 @@ internal fun CalendarHeaderItemComponent(label: String) { modifier = Modifier .testTags(TestTags.CALENDAR_HEADER_DAY, label) .aspectRatio(1f, true) - .padding(dimensionResource(RC.dimen.scd_small_50)) + .padding(4.dp) .clip(MaterialTheme.shapes.extraSmall), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt similarity index 98% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt index 61abb442..0fec856d 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt @@ -22,6 +22,7 @@ import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.foundation.lazy.grid.items import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeler.sheets.calendar.models.CalendarConfig import com.maxkeppeler.sheets.calendar.models.CalendarData @@ -63,7 +64,7 @@ internal fun LazyGridScope.setupCalendarSelectionView( val label = dayOfWeekLabels.values.toList().getOrNull(cell - offset) label?.let { CalendarHeaderItemComponent(label) } ?: CalendarWeekHeaderItemComponent() } - item(span = { GridItemSpan(cells) }) { Spacer(modifier = Modifier.height(dimensionResource(RC.dimen.scd_small_50))) } + item(span = { GridItemSpan(cells) }) { Spacer(modifier = Modifier.height(4.dp)) } data.days.forEach { weekDays -> diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt similarity index 79% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt index 689c8241..935547f1 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt @@ -18,6 +18,7 @@ package com.maxkeppeler.sheets.calendar.views import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.animateIntAsState import androidx.compose.animation.expandIn import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut @@ -37,23 +38,22 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowDownward +import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilledIconButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -63,8 +63,20 @@ import com.maxkeppeler.sheets.calendar.R import com.maxkeppeler.sheets.calendar.models.CalendarConfig import com.maxkeppeler.sheets.calendar.models.CalendarDisplayMode import com.maxkeppeler.sheets.calendar.models.CalendarStyle +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.withContext +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.calendar.generated.resources.* +import sheets_compose_dialogs.calendar.generated.resources.Res +import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_prev_month +import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_prev_week +import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_select_month import java.time.LocalDate import java.time.format.DateTimeFormatter +import kotlin.math.max +import kotlin.math.min import com.maxkeppeler.sheets.core.R as RC /** @@ -80,6 +92,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param onMonthClick The listener that is invoked when the month selection was clicked. * @param onYearClick The listener that is invoked when the year selection was clicked. */ +@OptIn(ExperimentalResourceApi::class) @ExperimentalMaterial3Api @Composable internal fun CalendarTopComponent( @@ -101,7 +114,7 @@ internal fun CalendarTopComponent( val enterTransition = expandIn(expandFrom = Alignment.Center, clip = false) + fadeIn() val exitTransition = shrinkOut(shrinkTowards = Alignment.Center, clip = false) + fadeOut() - val chevronAVD = AnimatedImageVector.animatedVectorResource(R.drawable.avd_chevron_down_up) + val rotation by chevronDownUpRotation() var chevronMonthAtEnd by remember { mutableStateOf(false) } var chevronYearAtEnd by remember { mutableStateOf(false) } @@ -119,9 +132,9 @@ internal fun CalendarTopComponent( val selectableContainerModifier = Modifier.clip(MaterialTheme.shapes.extraSmall) val selectableItemModifier = Modifier - .padding(start = dimensionResource(RC.dimen.scd_small_100)) - .padding(vertical = dimensionResource(RC.dimen.scd_small_50)) - .padding(end = dimensionResource(RC.dimen.scd_small_50)) + .padding(start = 8.dp) + .padding(vertical = 4.dp) + .padding(end = 4.dp) Box(modifier = modifier) { @@ -136,17 +149,17 @@ internal fun CalendarTopComponent( colors = IconButtonDefaults.filledIconButtonColors(containerColor = MaterialTheme.colorScheme.secondaryContainer), modifier = Modifier .testTags(TestTags.CALENDAR_PREVIOUS_ACTION) - .size(dimensionResource(RC.dimen.scd_size_200)), + .size(32.dp), enabled = !navigationDisabled && !prevDisabled, onClick = onPrev ) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), + modifier = Modifier.size(48.dp), imageVector = config.icons.ChevronLeft, contentDescription = stringResource( when (config.style) { - CalendarStyle.MONTH -> R.string.scd_calendar_dialog_prev_month - CalendarStyle.WEEK -> R.string.scd_calendar_dialog_prev_week + CalendarStyle.MONTH -> Res.string.scd_calendar_dialog_prev_month + CalendarStyle.WEEK -> Res.string.scd_calendar_dialog_prev_week } ) ) @@ -180,9 +193,9 @@ internal fun CalendarTopComponent( ) if (config.monthSelection && monthSelectionEnabled) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), - painter = rememberAnimatedVectorPainter(chevronAVD, chevronMonthAtEnd), - contentDescription = stringResource(R.string.scd_calendar_dialog_select_month), + modifier = Modifier.size(48.dp).rotate(rotation.toFloat()), + imageVector = Icons.Filled.KeyboardArrowDown, + contentDescription = stringResource(Res.string.scd_calendar_dialog_select_month), tint = MaterialTheme.colorScheme.primary ) } @@ -207,9 +220,9 @@ internal fun CalendarTopComponent( ) if (config.yearSelection && yearSelectionEnabled) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), - painter = rememberAnimatedVectorPainter(chevronAVD, chevronYearAtEnd), - contentDescription = stringResource(id = R.string.scd_calendar_dialog_select_year), + modifier = Modifier.size(48.dp).rotate(rotation.toFloat()), + imageVector = Icons.Filled.KeyboardArrowDown, + contentDescription = stringResource(Res.string.scd_calendar_dialog_select_year), tint = MaterialTheme.colorScheme.primary ) } @@ -227,17 +240,17 @@ internal fun CalendarTopComponent( colors = IconButtonDefaults.filledIconButtonColors(containerColor = MaterialTheme.colorScheme.secondaryContainer), modifier = Modifier .testTags(TestTags.CALENDAR_NEXT_ACTION) - .size(dimensionResource(RC.dimen.scd_size_200)), + .size(32.dp), enabled = !navigationDisabled && !nextDisabled, onClick = onNext ) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), + modifier = Modifier.size(48.dp), imageVector = config.icons.ChevronRight, contentDescription = stringResource( when (config.style) { - CalendarStyle.MONTH -> R.string.scd_calendar_dialog_next_month - CalendarStyle.WEEK -> R.string.scd_calendar_dialog_next_week + CalendarStyle.MONTH -> Res.string.scd_calendar_dialog_next_month + CalendarStyle.WEEK -> Res.string.scd_calendar_dialog_next_week } ) ) @@ -260,6 +273,7 @@ internal fun CalendarTopComponent( * @param onMonthClick The listener that is invoked when the month selection was clicked. * @param onYearClick The listener that is invoked when the year selection was clicked. */ +@OptIn(ExperimentalResourceApi::class) @ExperimentalMaterial3Api @Composable internal fun CalendarTopLandscapeComponent( @@ -279,7 +293,7 @@ internal fun CalendarTopLandscapeComponent( val enterTransition = expandIn(expandFrom = Alignment.Center, clip = false) + fadeIn() val exitTransition = shrinkOut(shrinkTowards = Alignment.Center, clip = false) + fadeOut() - val chevronAVD = AnimatedImageVector.animatedVectorResource(R.drawable.avd_chevron_down_up) + val rotation by chevronDownUpRotation() var chevronMonthAtEnd by remember { mutableStateOf(false) } var chevronYearAtEnd by remember { mutableStateOf(false) } @@ -300,9 +314,9 @@ internal fun CalendarTopLandscapeComponent( .clip(MaterialTheme.shapes.extraSmall) val selectableItemModifier = Modifier - .padding(start = dimensionResource(RC.dimen.scd_small_100)) - .padding(vertical = dimensionResource(RC.dimen.scd_small_50)) - .padding(end = dimensionResource(RC.dimen.scd_small_50)) + .padding(start = 8.dp) + .padding(vertical = 4.dp) + .padding(end = 4.dp) Column( modifier = modifier, @@ -327,9 +341,9 @@ internal fun CalendarTopLandscapeComponent( ) if (config.yearSelection) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), - painter = rememberAnimatedVectorPainter(chevronAVD, chevronYearAtEnd), - contentDescription = stringResource(id = R.string.scd_calendar_dialog_select_year), + modifier = Modifier.size(48.dp).rotate(rotation.toFloat()), + imageVector = Icons.Filled.KeyboardArrowDown, + contentDescription = stringResource(Res.string.scd_calendar_dialog_select_year), tint = MaterialTheme.colorScheme.primary ) } @@ -355,9 +369,9 @@ internal fun CalendarTopLandscapeComponent( ) if (config.monthSelection) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), - painter = rememberAnimatedVectorPainter(chevronAVD, chevronMonthAtEnd), - contentDescription = stringResource(R.string.scd_calendar_dialog_select_month), + modifier = Modifier.size(48.dp).rotate(rotation.toFloat()), + imageVector = Icons.Filled.KeyboardArrowDown, + contentDescription = stringResource(Res.string.scd_calendar_dialog_select_month), tint = MaterialTheme.colorScheme.primary ) } @@ -379,17 +393,17 @@ internal fun CalendarTopLandscapeComponent( FilledIconButton( colors = IconButtonDefaults.filledIconButtonColors(containerColor = MaterialTheme.colorScheme.secondaryContainer), modifier = Modifier - .size(dimensionResource(RC.dimen.scd_size_200)), + .size(32.dp), enabled = !navigationDisabled && !prevDisabled, onClick = onPrev ) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), + modifier = Modifier.size(48.dp), imageVector = config.icons.ChevronLeft, contentDescription = stringResource( when (config.style) { - CalendarStyle.MONTH -> R.string.scd_calendar_dialog_prev_month - CalendarStyle.WEEK -> R.string.scd_calendar_dialog_prev_week + CalendarStyle.MONTH -> Res.string.scd_calendar_dialog_prev_month + CalendarStyle.WEEK -> Res.string.scd_calendar_dialog_prev_week } ) ) @@ -407,17 +421,17 @@ internal fun CalendarTopLandscapeComponent( Column(Modifier.align(Alignment.CenterVertically)) { FilledIconButton( colors = IconButtonDefaults.filledIconButtonColors(containerColor = MaterialTheme.colorScheme.secondaryContainer), - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_200)), + modifier = Modifier.size(32.dp), enabled = !navigationDisabled && !nextDisabled, onClick = onNext ) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), + modifier = Modifier.size(48.dp), imageVector = config.icons.ChevronRight, contentDescription = stringResource( when (config.style) { - CalendarStyle.MONTH -> R.string.scd_calendar_dialog_next_month - CalendarStyle.WEEK -> R.string.scd_calendar_dialog_next_week + CalendarStyle.MONTH -> Res.string.scd_calendar_dialog_next_month + CalendarStyle.WEEK -> Res.string.scd_calendar_dialog_next_week } ) ) @@ -426,4 +440,24 @@ internal fun CalendarTopLandscapeComponent( } } } +} + +@Composable +private fun chevronDownUpRotation(): State { + var rotation by remember { mutableIntStateOf(0) } + + LaunchedEffect(rotation) { + while (rotation < 180) { + rotation = min(rotation + 1, 180) + + withContext(Dispatchers.Default) { + delay(2) + } + } + } + + return animateIntAsState( + targetValue = rotation, + label = "ArrowRotation" + ) } \ No newline at end of file diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt similarity index 82% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt index d6aa1343..61079473 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt @@ -26,30 +26,35 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.calendar.R +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.calendar.generated.resources.Res +import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_cw import com.maxkeppeler.sheets.core.R as RC /** * Composable function that represents a calendar week header item with the given [label]. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun CalendarWeekHeaderItemComponent() { Row( modifier = Modifier .testTags(TestTags.CALENDAR_HEADER_CW) .aspectRatio(1f, true) - .padding(dimensionResource(RC.dimen.scd_small_50)) + .padding(4.dp) .clip(MaterialTheme.shapes.extraSmall), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center ) { Text( - text = stringResource(R.string.scd_calendar_dialog_cw), + text = stringResource(Res.string.scd_calendar_dialog_cw), style = MaterialTheme.typography.labelSmall.copy(fontSize = 9.sp), textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.primary diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt similarity index 91% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt index 22d09f01..24eb0fdb 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags @@ -46,9 +47,9 @@ internal fun CalendarWeekItemComponent( val normalModifier = Modifier.aspectRatio(1f, true) val textStyle = MaterialTheme.typography.labelSmall.copy(fontSize = 9.sp) val parentModifier = when (selection) { - is CalendarSelection.Date -> Modifier.padding(dimensionResource(RC.dimen.scd_small_25)) - is CalendarSelection.Dates -> Modifier.padding(dimensionResource(RC.dimen.scd_small_25)) - is CalendarSelection.Period -> Modifier.padding(vertical = dimensionResource(RC.dimen.scd_small_25)) + is CalendarSelection.Date -> Modifier.padding(2.dp) + is CalendarSelection.Dates -> Modifier.padding(2.dp) + is CalendarSelection.Period -> Modifier.padding(vertical = 2.dp) }.testTags(TestTags.CALENDAR_CW, value) Column(modifier = parentModifier) { Row( diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt similarity index 93% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt index 734b81cc..462c6e3c 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt @@ -30,6 +30,7 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.calendar.utils.Constants import java.time.LocalDate import java.time.Month @@ -60,7 +61,7 @@ internal fun MonthItemComponent( val baseModifier = Modifier .wrapContentWidth() - .padding(dimensionResource(RC.dimen.scd_small_50)) + .padding(4.dp) .clickable(!disabled) { onMonthClick() } val normalModifier = baseModifier @@ -87,8 +88,8 @@ internal fun MonthItemComponent( Text( modifier = Modifier .alpha(textAlpha) - .padding(horizontal = dimensionResource(RC.dimen.scd_small_150)) - .padding(vertical = dimensionResource(RC.dimen.scd_small_100)), + .padding(horizontal = 12.dp) + .padding(vertical = 8.dp), text = LocalDate.now().withMonth(month.value) .format(DateTimeFormatter.ofPattern("MMM")), style = textStyle, diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt similarity index 92% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt index 2d576445..a35b0b83 100644 --- a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign -import com.maxkeppeler.sheets.core.R as RC +import androidx.compose.ui.unit.dp /** * The item component of the year selection view. @@ -68,8 +68,8 @@ internal fun YearItemComponent( ) { Text( modifier = Modifier - .padding(horizontal = dimensionResource(RC.dimen.scd_small_150)) - .padding(vertical = dimensionResource(RC.dimen.scd_small_100)), + .padding(horizontal = 12.dp) + .padding(vertical = 8.dp), text = year.toString(), style = textStyle, textAlign = TextAlign.Center diff --git a/calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt similarity index 100% rename from calendar/src/main/java/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt rename to calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt diff --git a/calendar/src/main/AndroidManifest.xml b/calendar/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/calendar/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/calendar/src/main/res/drawable/avd_chevron_down_up.xml b/calendar/src/main/res/drawable/avd_chevron_down_up.xml deleted file mode 100644 index f4c140b7..00000000 --- a/calendar/src/main/res/drawable/avd_chevron_down_up.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt index 76f0097d..1594837e 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt +++ b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt @@ -108,11 +108,11 @@ internal fun KeyItemComponent( verticalAlignment = Alignment.CenterVertically ) { if (isActionNext || isActionPrev) { - val maxSize = dimensionResource(RC.dimen.scd_size_150) + val maxSize = 48.dp val minSize = dimensionResource(RC.dimen.scd_size_100) Icon( modifier = Modifier - .padding(dimensionResource(RC.dimen.scd_small_100)) + .padding(8.dp) .sizeIn( maxWidth = maxSize, maxHeight = maxSize, diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt index 0c53b51f..58da6289 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt +++ b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt @@ -57,7 +57,7 @@ internal fun TimeTypeItemComponent( .clip(MaterialTheme.shapes.medium) .background(backgroundColor) .clickable { onClick.invoke() } - .padding(dimensionResource(RC.dimen.scd_small_100)) + .padding(8.dp) ) { Text( text = text, diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt index eb6cd705..13924758 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt +++ b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt @@ -97,7 +97,7 @@ internal fun PortraitTimeValueComponent( Text( modifier = Modifier .wrapContentSize() - .padding(horizontal = dimensionResource(RC.dimen.scd_small_50)), + .padding(horizontal = 4.dp), text = ":", style = textStyle ) @@ -107,7 +107,7 @@ internal fun PortraitTimeValueComponent( if (!is24hourFormat) { Row( Modifier - .padding(top = dimensionResource(RC.dimen.scd_small_50)), + .padding(top = 4.dp), verticalAlignment = Alignment.CenterVertically ) { TimeTypeItemComponent( @@ -202,7 +202,7 @@ internal fun LandscapeTimeValueComponent( if (!is24hourFormat) { Row( Modifier - .padding(top = dimensionResource(RC.dimen.scd_small_100)), + .padding(top = 8.dp), verticalAlignment = Alignment.CenterVertically ) { TimeTypeItemComponent( diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt index 8b7efb7d..62f0f4b0 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt +++ b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt @@ -76,7 +76,7 @@ internal fun ColorCustomControlComponent( Grid( modifier = Modifier.padding( - top = dimensionResource(RC.dimen.scd_normal_100) + top = 16.dp ), items = colorItems, columns = when (orientation) { diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt index 5239b7c2..621cf7d2 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt +++ b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt @@ -92,13 +92,13 @@ internal fun ColorCustomInfoComponent( modifier = Modifier .height(Constants.COLOR_CUSTOM_ITEM_SIZE) .fillMaxWidth() - .padding(start = dimensionResource(RC.dimen.scd_normal_100)) + .padding(start = 16.dp) ) { Row( modifier = Modifier .fillMaxSize() - .padding(start = dimensionResource(RC.dimen.scd_normal_100)) - .padding(end = dimensionResource(RC.dimen.scd_small_100)), + .padding(start = 16.dp) + .padding(end = 8.dp), verticalAlignment = Alignment.CenterVertically ) { Column { @@ -115,7 +115,7 @@ internal fun ColorCustomInfoComponent( maxLines = 1 ) Text( - modifier = Modifier.padding(top = dimensionResource(RC.dimen.scd_small_25)), + modifier = Modifier.padding(top = 2.dp), text = getFormattedColor(color), style = MaterialTheme.typography.labelSmall, maxLines = 1 diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt index 6874a4e5..cafbbf55 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt +++ b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt @@ -51,7 +51,7 @@ internal fun ColorSelectionModeComponent( onModeChange: (ColorSelectionMode) -> Unit, onNoColorClick: () -> Unit ) { - Row(modifier = Modifier.padding(bottom = dimensionResource(RC.dimen.scd_small_100))) { + Row(modifier = Modifier.padding(bottom = 8.dp)) { if (config.displayMode == null) { TextButton( @@ -75,13 +75,13 @@ internal fun ColorSelectionModeComponent( } ) Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), + modifier = Modifier.size(48.dp), imageVector = if (mode != ColorSelectionMode.TEMPLATE) config.icons.Apps else config.icons.Tune, contentDescription = text, tint = MaterialTheme.colorScheme.primary ) Text( - modifier = Modifier.padding(horizontal = dimensionResource(RC.dimen.scd_small_100)), + modifier = Modifier.padding(horizontal = 8.dp), text = text, ) } @@ -98,13 +98,13 @@ internal fun ColorSelectionModeComponent( shape = RoundedCornerShape(50) ) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), + modifier = Modifier.size(48.dp), imageVector = config.icons.NotInterested, contentDescription = stringResource(R.string.scd_color_dialog_no_color), tint = MaterialTheme.colorScheme.primary ) Text( - modifier = Modifier.padding(horizontal = dimensionResource(RC.dimen.scd_small_100)), + modifier = Modifier.padding(horizontal = 8.dp), text = stringResource(R.string.scd_color_dialog_no_color), ) } diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt index 39ed1380..ffab1c6d 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt +++ b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt @@ -83,7 +83,7 @@ internal fun ColorTemplateComponent( config = config, modifier = Modifier .testTags(TestTags.COLOR_TEMPLATE_SELECTION, color) - .padding(dimensionResource(RC.dimen.scd_small_50)), + .padding(4.dp), color = color, selected = selected, inputDisabled = inputDisabled, diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt index 41ae2871..3aecf73b 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt +++ b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt @@ -84,7 +84,7 @@ internal fun ColorTemplateItemComponent( colors = IconButtonDefaults.filledIconButtonColors(containerColor = MaterialTheme.colorScheme.background), modifier = Modifier .align(Alignment.Center) - .size(dimensionResource(RC.dimen.scd_size_150)), + .size(48.dp), onClick = {} ) { Icon( diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt index 347d838c..7f48978f 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt +++ b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt @@ -33,9 +33,9 @@ internal fun PickerDateCharacterComponent(text: String) { Text( modifier = Modifier .clip(MaterialTheme.shapes.extraSmall) - .padding(start = dimensionResource(RC.dimen.scd_small_25)) - .padding(bottom = dimensionResource(RC.dimen.scd_normal_150)) - .padding(end = dimensionResource(RC.dimen.scd_small_100)), + .padding(start = 2.dp) + .padding(bottom = 24.dp) + .padding(end = 8.dp), text = text ) } diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt index 5d6db519..85c859eb 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt +++ b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt @@ -45,8 +45,8 @@ internal fun SelectionValueItem( modifier = modifier .clip(MaterialTheme.shapes.small) .clickable { option?.let { onValueChange.invoke(it) } } - .padding(vertical = dimensionResource(RC.dimen.scd_small_100)) - .padding(horizontal = dimensionResource(RC.dimen.scd_small_100)), + .padding(vertical = 8.dp) + .padding(horizontal = 8.dp), text = option?.labelRes?.let { stringResource(id = it) } ?: option?.label ?: "", textAlign = TextAlign.Center, style = MaterialTheme.typography.bodyLarge diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt index 28cbefcc..9f91cdf1 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt +++ b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt @@ -50,7 +50,7 @@ internal fun UnitContainerComponent( if (expanded.value) { SelectionContainerComponent( - heightOffsetTopPadding = dimensionResource(RC.dimen.scd_normal_150), + heightOffsetTopPadding = 24.dp, unit = unit, height = height, width = width, diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt index 4a576dbb..2a8dea8d 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt +++ b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt @@ -58,7 +58,7 @@ internal fun ValueComponent( else MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.3f) ) .clickable { onClick() } - .padding(dimensionResource(RC.dimen.scd_normal_100)), + .padding(16.dp), text = unit.value?.label ?: unit.value?.labelRes?.let { stringResource(id = it) } ?: unit.options.last().label?.map { " " }?.joinToString(separator = "") diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt index f5460889..f5a00560 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt +++ b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt @@ -43,8 +43,8 @@ internal fun ValueContainerComponent( ) { Column( modifier = Modifier - .padding(vertical = dimensionResource(RC.dimen.scd_normal_150)) - .padding(horizontal = dimensionResource(RC.dimen.scd_small_100)), + .padding(vertical = 24.dp) + .padding(horizontal = 8.dp), horizontalAlignment = Alignment.CenterHorizontally ) { UnitLabel(unit = unit) diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt b/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt index 2030bae7..a12f61a4 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt +++ b/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt @@ -102,11 +102,11 @@ internal fun KeyItemComponent( verticalAlignment = Alignment.CenterVertically ) { if (isActionBackspace || isActionClear) { - val maxSize = dimensionResource(RC.dimen.scd_size_150) + val maxSize = 48.dp val minSize = dimensionResource(RC.dimen.scd_size_100) Icon( modifier = Modifier - .padding(dimensionResource(RC.dimen.scd_small_100)) + .padding(8.dp) .sizeIn( maxWidth = maxSize, maxHeight = maxSize, diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt b/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt index dded2a79..513bce5a 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt +++ b/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt @@ -114,7 +114,7 @@ internal fun TimeValueComponent( when { orientation == LibOrientation.LANDSCAPE && !isHintView -> dimensionResource(RC.dimen.scd_small_150) - else -> dimensionResource(RC.dimen.scd_small_50) + else -> 4.dp } ) ) @@ -144,7 +144,7 @@ internal fun TimeValueComponent( content = { Column(horizontalAlignment = Alignment.CenterHorizontally) { Row { valueContent() } - if (valid) Spacer(modifier = Modifier.height(dimensionResource(RC.dimen.scd_normal_100))) + if (valid) Spacer(modifier = Modifier.height(16.dp)) hintView?.invoke() } } @@ -158,7 +158,7 @@ internal fun TimeValueComponent( verticalArrangement = Arrangement.Center, content = { valueContent() -// Spacer(modifier = Modifier.height(dimensionResource(RC.dimen.scd_normal_100))) +// Spacer(modifier = Modifier.height(16.dp)) hintView?.invoke() } ) diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiView.kt b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiView.kt index 09132eac..dcf73120 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiView.kt +++ b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiView.kt @@ -104,12 +104,12 @@ fun EmojiView( LazyVerticalGrid( modifier = Modifier .dynamicContentWrapOrMaxHeight(this) - .padding(top = dimensionResource(RC.dimen.scd_normal_100)), + .padding(top = 16.dp), contentPadding = PaddingValues( - bottom = if (selection.withButtonView) 0.dp else dimensionResource(RC.dimen.scd_normal_100), + bottom = if (selection.withButtonView) 0.dp else 16.dp, ), - horizontalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_25)), - verticalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_25)), + horizontalArrangement = Arrangement.spacedBy(2.dp), + verticalArrangement = Arrangement.spacedBy(2.dp), columns = GridCells.Fixed(emojiState.categories.size) ) { items(emojiState.categoryEmojis, key = { it.unicode }) { emoji -> diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt index 3800cdd3..3e333173 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt +++ b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt @@ -53,12 +53,12 @@ internal fun EmojiHeaderItemComponent( .clip(if (selected) RoundedCornerShape(50) else MaterialTheme.shapes.small) .background(if (selected) MaterialTheme.colorScheme.primaryContainer else Color.Transparent) .clickable { onClick() } - .padding(dimensionResource(RC.dimen.scd_small_50)), + .padding(4.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically ) { Icon( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_normal_150)), + modifier = Modifier.size(24.dp), imageVector = imageVector, contentDescription = "", tint = if (selected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurface diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt index 468330a0..3b53efd6 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt +++ b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt @@ -84,7 +84,7 @@ internal fun EmojiItemComponent( if (emoji.variants.isNotEmpty()) showVariants.value = true } ) - .padding(dimensionResource(RC.dimen.scd_small_25)), + .padding(2.dp), ) { AndroidView( diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt index f11141fa..415dd2e1 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt +++ b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt @@ -53,7 +53,7 @@ internal fun EmojiTextHeaderItemComponent( .clickable { onClick() } .padding( horizontal = dimensionResource(RC.dimen.scd_small_150), - vertical = dimensionResource(RC.dimen.scd_small_50) + vertical = 4.dp ), text = name, style = if (selected) MaterialTheme.typography.labelLarge.copy(color = MaterialTheme.colorScheme.primary) diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt index 402d1aa2..33f7386f 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt +++ b/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt @@ -57,16 +57,16 @@ internal fun VariantsPopup( Box(Modifier.wrapContentWidth()) { Surface( modifier = Modifier - .padding(horizontal = dimensionResource(RC.dimen.scd_small_50)) + .padding(horizontal = 4.dp) .widthIn(max = itemSize * 6), shape = MaterialTheme.shapes.medium, color = MaterialTheme.colorScheme.surface, - shadowElevation = dimensionResource(RC.dimen.scd_small_50), + shadowElevation = 4.dp, ) { LazyVerticalGrid( modifier = Modifier .wrapContentWidth() - .padding(dimensionResource(RC.dimen.scd_normal_100)), + .padding(16.dp), columns = GridCells.Adaptive(itemSize), userScrollEnabled = false, horizontalArrangement = Arrangement.Center diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt index cad7d14e..a03bbc0f 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt @@ -63,8 +63,8 @@ internal fun InputCheckboxComponent( Checkbox( modifier = Modifier .testTags(TestTags.INPUT_ITEM_CHECKBOX_CHECKBOX, index) - .padding(start = dimensionResource(RC.dimen.scd_small_50)) - .size(dimensionResource(RC.dimen.scd_normal_150)), + .padding(start = 4.dp) + .size(24.dp), checked = checked, onCheckedChange = { checked = it } ) @@ -72,7 +72,7 @@ internal fun InputCheckboxComponent( Column( modifier = Modifier .padding(vertical = dimensionResource(RC.dimen.scd_small_150)) - .padding(start = dimensionResource(RC.dimen.scd_normal_100)) + .padding(start = 16.dp) .fillMaxWidth() .wrapContentHeight(), ) { diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt index 5f5b18b3..de0e26f9 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt @@ -65,7 +65,7 @@ internal fun InputCheckboxGroupComponent( } ) if (index != input.items.lastIndex) { - Spacer(Modifier.height(dimensionResource(RC.dimen.scd_small_50))) + Spacer(Modifier.height(4.dp)) } } } diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt index 60adff84..1ee3a8b9 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt @@ -55,16 +55,16 @@ internal fun InputCheckboxItemComponent( Checkbox( modifier = Modifier .testTags(TestTags.INPUT_ITEM_CHECKBOX_GROUP_ITEM_CHECKBOX, index) - .padding(start = dimensionResource(RC.dimen.scd_small_50)) - .size(dimensionResource(RC.dimen.scd_normal_150)), + .padding(start = 4.dp) + .size(24.dp), checked = selected, onCheckedChange = { onSelected() }, ) Column( modifier = Modifier - .padding(vertical = dimensionResource(RC.dimen.scd_small_100)) - .padding(start = dimensionResource(RC.dimen.scd_normal_100)) + .padding(vertical = 8.dp) + .padding(start = 16.dp) .fillMaxWidth() .wrapContentHeight(), ) { diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputComponent.kt index 6eb57d33..0d585245 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputComponent.kt @@ -45,8 +45,8 @@ internal fun InputComponent( LazyVerticalGrid( modifier = modifier, columns = GridCells.Fixed(config.columns), - horizontalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_100)), - verticalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_100)) + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) ) { itemsIndexed( items = input, diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt index d1bd05cf..e374377c 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt @@ -39,8 +39,8 @@ internal fun InputDividerComponent( .testTags(TestTags.INPUT_ITEM_DIVIDER, index) .fillMaxWidth() .padding( - top = dimensionResource(RC.dimen.scd_small_100), - bottom = dimensionResource(RC.dimen.scd_small_50), + top = 8.dp, + bottom = 4.dp, ), color = MaterialTheme.colorScheme.outlineVariant ) diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt index 1727bf78..46178614 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt @@ -44,7 +44,7 @@ internal fun InputItemHeaderComponent( .testTags(TestTags.INPUT_ITEM_HEADER, index) .fillMaxWidth() .padding( - bottom = dimensionResource(RC.dimen.scd_small_100) + bottom = 8.dp ), verticalArrangement = Arrangement.Center ) { @@ -61,7 +61,7 @@ internal fun InputItemHeaderComponent( header.title?.let { title -> val startPadding = - if (header.icon != null) dimensionResource(RC.dimen.scd_small_100) else 0.dp + if (header.icon != null) 8.dp else 0.dp Text( modifier = Modifier .testTags(TestTags.INPUT_ITEM_HEADER_TITLE, index) @@ -76,7 +76,7 @@ internal fun InputItemHeaderComponent( Text( modifier = Modifier .testTags(TestTags.INPUT_ITEM_HEADER_BODY, index) - .padding(top = dimensionResource(RC.dimen.scd_small_50)), + .padding(top = 4.dp), text = text, style = MaterialTheme.typography.bodySmall ) diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt index 7c5e0f90..1992dfd5 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt @@ -42,7 +42,7 @@ internal fun BoxScope.InputItemOverlayComponent( modifier = Modifier .align(Alignment.TopEnd) .testTags(TestTags.INPUT_ITEM_OVERLAY, index) - .padding(dimensionResource(RC.dimen.scd_small_100)) + .padding(8.dp) .size(dimensionResource(RC.dimen.scd_size_50)), imageVector = config.icons.Star, contentDescription = null, diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt index 7e8c8935..7d6e432f 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt @@ -59,7 +59,7 @@ internal fun InputRadioButtonGroupComponent( onSelected = { selectedIndex = index } ) if (index != input.items.lastIndex) { - Spacer(Modifier.height(dimensionResource(RC.dimen.scd_small_50))) + Spacer(Modifier.height(4.dp)) } } } diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt index b03b4353..8353d41d 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt @@ -55,16 +55,16 @@ internal fun InputRadioButtonItemComponent( RadioButton( modifier = Modifier .testTags(TestTags.INPUT_ITEM_RADIOBUTTON_GROUP_ITEM_RADIOBUTTON, index) - .padding(start = dimensionResource(RC.dimen.scd_small_50)) - .size(dimensionResource(RC.dimen.scd_normal_150)), + .padding(start = 4.dp) + .size(24.dp), selected = selected, onClick = { onSelected() }, ) Column( modifier = Modifier - .padding(vertical = dimensionResource(RC.dimen.scd_small_100)) - .padding(start = dimensionResource(RC.dimen.scd_normal_100)) + .padding(vertical = 8.dp) + .padding(start = 16.dp) .fillMaxWidth() .wrapContentHeight(), ) { diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt index ee97d638..30b456c2 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt @@ -53,7 +53,7 @@ internal fun TextFieldErrorContainer( modifier = Modifier .testTags(TestTags.INPUT_ITEM_TEXT_FIELD_ERROR_TEXT) .fillMaxWidth() - .padding(top = dimensionResource(RC.dimen.scd_small_100)) + .padding(top = 8.dp) ) } } diff --git a/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionComponent.kt b/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionComponent.kt index c203e354..7f65c8b2 100644 --- a/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionComponent.kt +++ b/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionComponent.kt @@ -56,7 +56,7 @@ fun ListOptionComponent( LazyColumn( modifier = modifier, - verticalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_100)) + verticalArrangement = Arrangement.spacedBy(8.dp) ) { items(options) { option -> ListOptionItemComponent( diff --git a/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionItemComponent.kt b/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionItemComponent.kt index f5a918f4..dd3bb33e 100644 --- a/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionItemComponent.kt +++ b/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionItemComponent.kt @@ -99,8 +99,8 @@ internal fun ListOptionItemComponent( option.icon?.let { IconComponent( modifier = Modifier - .padding(start = dimensionResource(RC.dimen.scd_normal_100)) - .size(dimensionResource(RC.dimen.scd_size_150)), + .padding(start = 16.dp) + .size(48.dp), iconSource = it, tint = iconColor ) @@ -109,7 +109,7 @@ internal fun ListOptionItemComponent( Column( modifier = Modifier .padding(vertical = dimensionResource(RC.dimen.scd_small_150)) - .padding(start = dimensionResource(RC.dimen.scd_normal_100)) + .padding(start = 16.dp) .fillMaxWidth() .wrapContentHeight(), ) { diff --git a/option/src/main/java/com/maxkeppeler/sheets/option/views/InfoContainerComponent.kt b/option/src/main/java/com/maxkeppeler/sheets/option/views/InfoContainerComponent.kt index 24138cb7..ef01bdae 100644 --- a/option/src/main/java/com/maxkeppeler/sheets/option/views/InfoContainerComponent.kt +++ b/option/src/main/java/com/maxkeppeler/sheets/option/views/InfoContainerComponent.kt @@ -54,7 +54,7 @@ internal fun InfoContainerComponent( colors = IconButtonDefaults.filledIconButtonColors(containerColor = MaterialTheme.colorScheme.background), modifier = Modifier .shadow(1.dp, RoundedCornerShape(50)) - .size(dimensionResource(RC.dimen.scd_size_150)), + .size(48.dp), onClick = { onClick() } ) { diff --git a/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionComponent.kt b/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionComponent.kt index 3abdb4d0..e7e02cd2 100644 --- a/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionComponent.kt +++ b/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionComponent.kt @@ -56,7 +56,7 @@ fun OptionComponent( val verticalDirectionModifier = modifier .fillMaxWidth() - .padding(horizontal = dimensionResource(RC.dimen.scd_normal_150)) + .padding(horizontal = 24.dp) val columnsLimits = config.gridColumns val columns = if (options.size < columnsLimits) options.size else columnsLimits @@ -73,8 +73,8 @@ fun OptionComponent( when (config.mode) { DisplayMode.GRID_HORIZONTAL -> { LazyRow( - contentPadding = PaddingValues(horizontal = dimensionResource(RC.dimen.scd_normal_150)), - horizontalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_100)) + contentPadding = PaddingValues(horizontal = 24.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp) ) { items(options) { option -> OptionItemComponent( @@ -91,8 +91,8 @@ fun OptionComponent( LazyVerticalGrid( modifier = verticalDirectionModifier, columns = GridCells.Fixed(columns), - horizontalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_100)), - verticalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_100)) + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) ) { items(options) { option -> OptionItemComponent( @@ -108,7 +108,7 @@ fun OptionComponent( DisplayMode.LIST -> { LazyColumn( modifier = verticalDirectionModifier, - verticalArrangement = Arrangement.spacedBy(dimensionResource(RC.dimen.scd_small_100)) + verticalArrangement = Arrangement.spacedBy(8.dp) ) { items(options) { option -> OptionItemComponent( diff --git a/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionDetailsDialog.kt b/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionDetailsDialog.kt index c63b9018..34183ef5 100644 --- a/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionDetailsDialog.kt +++ b/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionDetailsDialog.kt @@ -55,8 +55,8 @@ internal fun OptionDetailsDialog( Column { Row( modifier = Modifier - .padding(top = dimensionResource(RC.dimen.scd_normal_100)) - .padding(horizontal = dimensionResource(RC.dimen.scd_normal_100)) + .padding(top = 16.dp) + .padding(horizontal = 16.dp) .fillMaxWidth() .clip(MaterialTheme.shapes.medium) .then( @@ -64,13 +64,13 @@ internal fun OptionDetailsDialog( backgroundColor ) else Modifier ) - .padding(dimensionResource(RC.dimen.scd_normal_100)), + .padding(16.dp), verticalAlignment = Alignment.CenterVertically ) { option.icon?.let { IconComponent( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), + modifier = Modifier.size(48.dp), iconSource = it, tint = iconColor ) @@ -87,16 +87,16 @@ internal fun OptionDetailsDialog( Column( modifier = Modifier - .padding(horizontal = dimensionResource(RC.dimen.scd_normal_150)) - .padding(bottom = dimensionResource(RC.dimen.scd_normal_150)) + .padding(horizontal = 24.dp) + .padding(bottom = 24.dp) ) { Text( - modifier = Modifier.padding(top = dimensionResource(RC.dimen.scd_normal_100)), + modifier = Modifier.padding(top = 16.dp), text = option.details!!.title, style = MaterialTheme.typography.titleMedium ) Text( - modifier = Modifier.padding(top = dimensionResource(RC.dimen.scd_small_100)), + modifier = Modifier.padding(top = 8.dp), text = option.details.body, style = MaterialTheme.typography.bodyMedium ) diff --git a/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt b/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt index 614d9ab9..61a6e5f3 100644 --- a/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt +++ b/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt @@ -85,14 +85,14 @@ internal fun OptionGridItemComponent( option.customView?.invoke(option.selected) ?: run { Column( modifier = Modifier - .padding(top = dimensionResource(RC.dimen.scd_normal_100)) - .padding(bottom = dimensionResource(RC.dimen.scd_normal_100)) + .padding(top = 16.dp) + .padding(bottom = 16.dp) .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, ) { option.icon?.let { IconComponent( - modifier = Modifier.size(dimensionResource(RC.dimen.scd_size_150)), + modifier = Modifier.size(48.dp), iconSource = it, tint = iconColor ) diff --git a/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt b/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt index 8d287e13..123e74b5 100644 --- a/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt +++ b/option/src/main/java/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt @@ -61,8 +61,8 @@ internal fun OptionListItemComponent( option.icon?.let { IconComponent( modifier = Modifier - .padding(start = dimensionResource(RC.dimen.scd_normal_150)) - .size(dimensionResource(RC.dimen.scd_size_150)), + .padding(start = 24.dp) + .size(48.dp), iconSource = it, tint = iconColor ) @@ -71,9 +71,9 @@ internal fun OptionListItemComponent( Column( modifier = Modifier .padding( - top = dimensionResource(RC.dimen.scd_normal_100), - bottom = dimensionResource(RC.dimen.scd_normal_100), - start = dimensionResource(RC.dimen.scd_normal_100) + top = 16.dp, + bottom = 16.dp, + start = 16.dp ) .fillMaxWidth() .wrapContentHeight(), diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt index 2985573e..e62b5e42 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt +++ b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt @@ -43,7 +43,7 @@ internal fun DefaultBodyComponent( Column( modifier = Modifier .testTag(TestTags.RATING_BODY_DEFAULT) - .padding(top = dimensionResource(RC.dimen.scd_normal_100)) + .padding(top = 16.dp) ) { body.preBody() Text( diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt index 962befeb..c4c82dbb 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt +++ b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt @@ -61,7 +61,7 @@ internal fun FeedbackTextFieldErrorContainer( modifier = Modifier .testTags(TestTags.RATING_FEEDBACK_TEXT_FIELD_ERROR_TEXT) .fillMaxWidth() - .padding(top = dimensionResource(RC.dimen.scd_small_100)), + .padding(top = 8.dp), text = errorMessage, color = MaterialTheme.colorScheme.error, style = MaterialTheme.typography.labelMedium, diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt index 0555bb36..9ed00806 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt +++ b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt @@ -61,7 +61,7 @@ internal fun RatingFeedbackView( RatingViewStyle.START -> Arrangement.Start RatingViewStyle.CENTER -> Arrangement.Center } - Spacer(modifier = Modifier.height(dimensionResource(RC.dimen.scd_normal_150))) + Spacer(modifier = Modifier.height(24.dp)) Row( modifier = Modifier .testTags(TestTags.RATING_FEEDBACK_TEXT_FIELD) diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt index 59988554..54813642 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt +++ b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt @@ -58,7 +58,7 @@ internal fun RatingSelectionView( FlowRow( modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy( - space = dimensionResource(RC.dimen.scd_small_50), + space = 4.dp, alignment = alignment ), verticalArrangement = Arrangement.Center, @@ -99,8 +99,8 @@ private fun RatingOptionView( modifier = Modifier .size(dimensionResource(RC.dimen.scd_size_250)) .sizeIn( - minWidth = dimensionResource(RC.dimen.scd_size_200), - minHeight = dimensionResource(RC.dimen.scd_size_200), + minWidth = 32.dp, + minHeight = 32.dp, maxHeight = dimensionResource(RC.dimen.scd_size_250), maxWidth = dimensionResource(RC.dimen.scd_size_250) ), diff --git a/settings.gradle.kts b/settings.gradle.kts index c2e8d70c..41c709df 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,7 +13,7 @@ include( ":core", //":info", //":rating", - //":calendar", + ":calendar", //":duration", //":clock", //":date_time", From 392641f6e119a8bc84597a0f67a70395cba541b0 Mon Sep 17 00:00:00 2001 From: DatLag Date: Sat, 30 Mar 2024 00:22:02 +0100 Subject: [PATCH 05/58] calendar multiplatform compatible --- calendar/build.gradle.kts | 39 ++++ .../calendar/models/FormatLocale.android.kt | 15 ++ .../sheets/calendar/CalendarState.kt | 36 ++-- .../sheets/calendar/CalendarView.kt | 2 +- .../sheets/calendar/ExtendDateTime.kt | 43 ++++ .../sheets/calendar/models/CalendarConfig.kt | 6 +- .../sheets/calendar/models/CalendarData.kt | 3 +- .../calendar/models/CalendarDateData.kt | 3 +- .../calendar/models/CalendarDisplayMode.kt | 3 + .../calendar/models/CalendarMonthData.kt | 3 +- .../calendar/models/CalendarSelection.kt | 6 +- .../sheets/calendar/models/FormatLocale.kt | 11 ++ .../sheets/calendar/utils/Constants.kt | 13 +- .../sheets/calendar/utils/DayOfWeekUtils.kt | 40 ++-- .../sheets/calendar/utils/Utils.kt | 186 +++++++++++------- .../views/CalendarBaseSelectionComponent.kt | 2 - .../views/CalendarDateItemComponent.kt | 11 +- .../views/CalendarHeaderItemComponent.kt | 2 - .../calendar/views/CalendarSelectionView.kt | 6 +- .../calendar/views/CalendarTopComponent.kt | 23 +-- .../views/CalendarWeekHeaderItemComponent.kt | 3 - .../views/CalendarWeekItemComponent.kt | 2 - .../calendar/views/MonthItemComponent.kt | 16 +- .../calendar/views/MonthSelectionView.kt | 4 +- .../calendar/views/YearItemComponent.kt | 1 - .../calendar/views/YearSelectionView.kt | 3 +- .../calendar/models/FormatLocale.jvm.kt | 15 ++ .../calendar/models/FormatLocale.nonJvm.kt | 5 + .../maxkeppeker/sheets/core/icons/LibIcons.kt | 2 + .../sheets/core/models/base/BaseConfigs.kt | 1 + gradle.properties | 21 +- gradle/libs.versions.toml | 1 + 32 files changed, 345 insertions(+), 182 deletions(-) create mode 100644 calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt create mode 100644 calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/ExtendDateTime.kt create mode 100644 calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.kt create mode 100644 calendar/src/jvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.jvm.kt create mode 100644 calendar/src/nonJvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.nonJvm.kt diff --git a/calendar/build.gradle.kts b/calendar/build.gradle.kts index d62589f2..fd7219c4 100644 --- a/calendar/build.gradle.kts +++ b/calendar/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl + /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) * @@ -34,6 +36,27 @@ android { kotlin { androidTarget() + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() sourceSets { commonMain.dependencies { @@ -45,8 +68,24 @@ kotlin { implementation(compose.animation) implementation(compose.animationGraphics) + implementation(libs.datetime) + implementation(libs.desugar) + implementation(libs.serialization) + implementation(libs.stdlib) + implementation(project(":core")) } + + val nonJvmMain by creating { + dependsOn(commonMain.get()) + + nativeMain.orNull?.dependsOn(this) + jsMain.orNull?.dependsOn(this) + } + + val wasmJsMain by getting { + dependsOn(nonJvmMain) + } } } diff --git a/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt b/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt new file mode 100644 index 00000000..53c13dd2 --- /dev/null +++ b/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt @@ -0,0 +1,15 @@ +package com.maxkeppeler.sheets.calendar.models + +import java.util.* + +private fun FormatLocale.Companion.fromLocale(locale: Locale = Locale.getDefault()): FormatLocale { + return when { + Locale.SIMPLIFIED_CHINESE.let { locale.language == it.language && locale.country == it.country } -> FormatLocale.Chinese + Locale.JAPANESE.let { locale.language == it.language } -> FormatLocale.Japanese + else -> FormatLocale.Default + } +} + +actual fun FormatLocale.Companion.getDefault(): FormatLocale { + return FormatLocale.fromLocale() +} \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarState.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarState.kt index 92f886fd..7e323913 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarState.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarState.kt @@ -29,6 +29,7 @@ import com.maxkeppeler.sheets.calendar.models.CalendarDisplayMode import com.maxkeppeler.sheets.calendar.models.CalendarMonthData import com.maxkeppeler.sheets.calendar.models.CalendarSelection import com.maxkeppeler.sheets.calendar.models.CalendarStyle +import com.maxkeppeler.sheets.calendar.utils.* import com.maxkeppeler.sheets.calendar.utils.Constants import com.maxkeppeler.sheets.calendar.utils.calcCalendarData import com.maxkeppeler.sheets.calendar.utils.calcMonthData @@ -39,17 +40,14 @@ import com.maxkeppeler.sheets.calendar.utils.endOfWeek import com.maxkeppeler.sheets.calendar.utils.endValue import com.maxkeppeler.sheets.calendar.utils.getInitialCameraDate import com.maxkeppeler.sheets.calendar.utils.getInitialCustomCameraDate -import com.maxkeppeler.sheets.calendar.utils.jumpNext -import com.maxkeppeler.sheets.calendar.utils.jumpPrev import com.maxkeppeler.sheets.calendar.utils.rangeValue import com.maxkeppeler.sheets.calendar.utils.startOfMonth import com.maxkeppeler.sheets.calendar.utils.startOfWeek -import com.maxkeppeler.sheets.calendar.utils.startOfWeekOrMonth import com.maxkeppeler.sheets.calendar.utils.startValue -import java.io.Serializable -import java.time.DayOfWeek -import java.time.LocalDate -import java.time.Month +import kotlinx.datetime.DayOfWeek +import kotlinx.datetime.LocalDate +import kotlinx.datetime.Month +import kotlinx.serialization.Serializable /** * Handles the calendar state. @@ -174,7 +172,7 @@ internal class CalendarState( val cells: Int get() = when (mode) { - CalendarDisplayMode.CALENDAR -> DayOfWeek.values().size + if (config.displayCalendarWeeks) 1 else 0 + CalendarDisplayMode.CALENDAR -> DayOfWeek.entries.size + if (config.displayCalendarWeeks) 1 else 0 CalendarDisplayMode.YEAR -> Constants.YEAR_GRID_COLUMNS CalendarDisplayMode.MONTH -> Constants.MONTH_GRID_COLUMNS } @@ -209,22 +207,22 @@ internal class CalendarState( } fun onMonthClick(month: Month) { - cameraDate = cameraDate.withMonth(month.value).startOfWeekOrMonth + cameraDate = LocalDate(cameraDate.year, month, cameraDate.dayOfMonth).startOfWeekOrMonth mode = CalendarDisplayMode.CALENDAR refreshData() } fun onYearClick(year: Int) { - var newDate = cameraDate.withYear(year) + var newDate = LocalDate(year, cameraDate.month, cameraDate.dayOfMonth) // Check if current new date would be within the boundary otherwise reset to month within boundary newDate = when { - newDate.isBefore(config.boundary.start) -> - newDate.withMonth(config.boundary.start.monthValue) - .withDayOfMonth(config.boundary.start.dayOfMonth) + newDate.isBefore(config.boundary.start) -> { + LocalDate(newDate.year, config.boundary.start.month, config.boundary.start.dayOfMonth) + } - newDate.isAfter(config.boundary.endInclusive) -> - newDate.withMonth(config.boundary.endInclusive.monthValue) - .withDayOfMonth(config.boundary.endInclusive.dayOfMonth) + newDate.isAfter(config.boundary.endInclusive) -> { + LocalDate(newDate.year, config.boundary.endInclusive.month, config.boundary.endInclusive.dayOfMonth) + } else -> newDate } @@ -328,6 +326,7 @@ internal class CalendarState( * Data class that stores the important information of the current state * and can be used by the [Saver] to save and restore the state. */ + @Serializable data class CalendarStateData( val mode: CalendarDisplayMode, val cameraDate: LocalDate, @@ -335,11 +334,12 @@ internal class CalendarState( val dates: Array, val range: Array, val rangeSelectionStart: Boolean - ) : Serializable { + ) { override fun equals(other: Any?): Boolean { if (this === other) return true - if (javaClass != other?.javaClass) return false + if (other == null) return false + if (this::class != other::class) return false other as CalendarStateData diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt index 6cb6b1a3..1b31841d 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt @@ -48,7 +48,7 @@ import com.maxkeppeler.sheets.calendar.views.CalendarTopLandscapeComponent import com.maxkeppeler.sheets.calendar.views.setupCalendarSelectionView import com.maxkeppeler.sheets.calendar.views.setupMonthSelectionView import com.maxkeppeler.sheets.calendar.views.setupYearSelectionView -import java.time.LocalDate +import kotlinx.datetime.LocalDate /** * Calendar dialog for the use-case to select a date or period in a typical calendar-view. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/ExtendDateTime.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/ExtendDateTime.kt new file mode 100644 index 00000000..7e6c573c --- /dev/null +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/ExtendDateTime.kt @@ -0,0 +1,43 @@ +package com.maxkeppeler.sheets.calendar + +import kotlinx.datetime.* + +internal fun LocalDate.Companion.now(): LocalDate { + return Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date +} + +class LocalDateRange( + override val start: LocalDate, + override val endInclusive: LocalDate +) : ClosedRange, OpenEndRange { + + override val endExclusive: LocalDate + get() = endInclusive.plus(1, DateTimeUnit.DAY) + + override fun contains(value: LocalDate): Boolean { + return value in start..endInclusive + } + + override fun isEmpty(): Boolean { + return start > endInclusive + } + +} + +internal fun LocalDate.monthShort(): String { + return when (this.month) { + Month.JANUARY -> "Jan" + Month.FEBRUARY -> "Feb" + Month.MARCH -> "Mar" + Month.APRIL -> "Apr" + Month.MAY -> "May" + Month.JUNE -> "Jun" + Month.JULY -> "Jul" + Month.AUGUST -> "Aug" + Month.SEPTEMBER -> "Sep" + Month.OCTOBER -> "Oct" + Month.NOVEMBER -> "Nov" + Month.DECEMBER -> "Dec" + else -> month.name + } +} \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt index e14f5cb0..624bf7fa 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarConfig.kt @@ -19,12 +19,10 @@ import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE import com.maxkeppeler.sheets.calendar.utils.Constants -import java.time.LocalDate -import java.util.Locale +import kotlinx.datetime.LocalDate /** * The general configuration for the calendar dialog. - * @param locale The locale of the calendar. * @param style The style of the calendar. * @param cameraDate The date that is initially displayed when the calendar is opened. * @param monthSelection Allow the direct selection of a month. @@ -34,7 +32,7 @@ import java.util.Locale * @param icons The style of icons that are used for dialog/ view-specific icons. */ class CalendarConfig( - val locale: Locale = Locale.getDefault(), + val locale: FormatLocale = FormatLocale.getDefault(), val style: CalendarStyle = CalendarStyle.MONTH, val cameraDate: LocalDate? = null, val displayCalendarWeeks: Boolean = Constants.DEFAULT_DISPLAY_CALENDAR_WEEKS, diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarData.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarData.kt index 708a0fae..b179d92a 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarData.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarData.kt @@ -15,7 +15,8 @@ */ package com.maxkeppeler.sheets.calendar.models -import java.time.LocalDate +import kotlinx.datetime.LocalDate + /** * Defines all calculated information for the current view. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt index 17ef6fb2..1a140972 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDateData.kt @@ -15,7 +15,8 @@ */ package com.maxkeppeler.sheets.calendar.models -import java.time.LocalDate +import kotlinx.datetime.LocalDate + /** * Defines all calculated information for a specific date. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt index 6588b6e0..06a389e0 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarDisplayMode.kt @@ -15,9 +15,12 @@ */ package com.maxkeppeler.sheets.calendar.models +import kotlinx.serialization.Serializable + /** * Defined display modes for the calendar. */ +@Serializable internal enum class CalendarDisplayMode { /** diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt index cf7a4514..5d2c4b77 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarMonthData.kt @@ -15,7 +15,8 @@ */ package com.maxkeppeler.sheets.calendar.models -import java.time.Month +import kotlinx.datetime.Month + /** * Defines information for the months selection. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt index 7c329fcf..46cba767 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt @@ -17,11 +17,11 @@ package com.maxkeppeler.sheets.calendar.models -import android.util.Range import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants -import java.time.LocalDate +import com.maxkeppeler.sheets.calendar.LocalDateRange +import kotlinx.datetime.LocalDate /** * The selection configuration for the calendar dialog. @@ -88,7 +88,7 @@ sealed class CalendarSelection : BaseSelection() { override val negativeButton: SelectionButton? = BaseConstants.DEFAULT_NEGATIVE_BUTTON, override val onNegativeClick: (() -> Unit)? = null, override val positiveButton: SelectionButton = BaseConstants.DEFAULT_POSITIVE_BUTTON, - val selectedRange: Range? = null, + val selectedRange: LocalDateRange? = null, val onSelectRange: (startDate: LocalDate, endDate: LocalDate) -> Unit ) : CalendarSelection() } \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.kt new file mode 100644 index 00000000..7d0e2d13 --- /dev/null +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.kt @@ -0,0 +1,11 @@ +package com.maxkeppeler.sheets.calendar.models + +enum class FormatLocale { + Chinese, + Japanese, + Default; + + companion object +} + +expect fun FormatLocale.Companion.getDefault(): FormatLocale \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt index 24b351cc..ad315c23 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt @@ -15,7 +15,10 @@ */ package com.maxkeppeler.sheets.calendar.utils -import java.time.LocalDate +import com.maxkeppeler.sheets.calendar.now +import kotlinx.datetime.DateTimeUnit +import kotlinx.datetime.LocalDate +import kotlinx.datetime.plus /** * Calendar dialog specific constants. @@ -28,11 +31,11 @@ internal object Constants { internal const val DEFAULT_MONTH_SELECTION = false internal const val DEFAULT_YEAR_SELECTION = false - private val DEFAULT_RANGE_START_DATE = LocalDate.of(1980, 3, 15) + private val DEFAULT_RANGE_START_DATE = LocalDate(1980, 3, 15) private const val DEFAULT_RANGE_END_YEAR_OFFSET = 20L - private val DEFAULT_RANGE_END_DATE = LocalDate.now().plusYears(DEFAULT_RANGE_END_YEAR_OFFSET) - .withMonth(1) - .withDayOfMonth(15) + private val DEFAULT_RANGE_END_DATE = LocalDate.now().plus(DEFAULT_RANGE_END_YEAR_OFFSET, DateTimeUnit.YEAR).run { + LocalDate(this.year, 1, 15) + } internal val DEFAULT_RANGE = DEFAULT_RANGE_START_DATE..DEFAULT_RANGE_END_DATE diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt index b394291a..b19d7520 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt @@ -15,10 +15,9 @@ */ package com.maxkeppeler.sheets.calendar.utils -import java.time.DayOfWeek -import java.time.format.TextStyle -import java.time.temporal.WeekFields -import java.util.Locale +import com.maxkeppeler.sheets.calendar.models.FormatLocale +import kotlinx.datetime.DayOfWeek +import kotlinx.datetime.isoDayNumber /** * Returns a map of day of week labels in the specified locale. @@ -26,9 +25,9 @@ import java.util.Locale * @param locale the locale to get the labels for * @return a map of day of week labels */ -internal fun getDayOfWeekLabels(locale: Locale): Map = when { - Locale.SIMPLIFIED_CHINESE.let { locale.language == it.language && locale.country == it.country } -> getSimplifiedChineseDayOfWeekLabels() - Locale.JAPANESE.let { locale.language == it.language } -> getJapaneseDayOfWeekLabels() +internal fun getDayOfWeekLabels(locale: FormatLocale): Map = when(locale) { + FormatLocale.Chinese -> getSimplifiedChineseDayOfWeekLabels() + FormatLocale.Japanese -> getJapaneseDayOfWeekLabels() else -> getDefaultDayOfWeekLabels(locale) } @@ -38,10 +37,9 @@ internal fun getDayOfWeekLabels(locale: Locale): Map = when { * @param locale the locale to adjust for * @return an ordered list of DayOfWeek values starting with the locale's first day of the week */ -internal fun getOrderedDaysOfWeek(locale: Locale): List { - val firstDayOfWeek = WeekFields.of(locale).firstDayOfWeek - val daysOfWeek = DayOfWeek.values() - val orderedDays = daysOfWeek.sortedBy { (it.value - firstDayOfWeek.value + 7) % 7 } +internal fun getOrderedDaysOfWeek(locale: FormatLocale): List { + val daysOfWeek = DayOfWeek.entries.toTypedArray() + val orderedDays = daysOfWeek.sortedBy { (it.isoDayNumber - 1 + 7) % 7 } return orderedDays } @@ -51,7 +49,7 @@ internal fun getOrderedDaysOfWeek(locale: Locale): List { * @param locale the locale to get labels and order for * @return a linked map of ordered day of week labels */ -internal fun getOrderedDayOfWeekLabels(locale: Locale): LinkedHashMap { +internal fun getOrderedDayOfWeekLabels(locale: FormatLocale): LinkedHashMap { val dayLabels = getDayOfWeekLabels(locale) val orderedDays = getOrderedDaysOfWeek(locale) return linkedMapOf().apply { @@ -61,15 +59,27 @@ internal fun getOrderedDayOfWeekLabels(locale: Locale): LinkedHashMap "Monday" + DayOfWeek.TUESDAY -> "Tuesday" + DayOfWeek.WEDNESDAY -> "Wednesday" + DayOfWeek.THURSDAY -> "Thursday" + DayOfWeek.FRIDAY -> "Friday" + DayOfWeek.SATURDAY -> "Saturday" + DayOfWeek.SUNDAY -> "Sunday" + else -> this.name + } +} + /** * Returns a map of day of week labels in the default locale. * * @param locale the locale to get the labels for * @return a map of day of week labels */ -private fun getDefaultDayOfWeekLabels(locale: Locale): Map = - DayOfWeek.values() - .associateWith { dayOfWeek -> dayOfWeek.getDisplayName(TextStyle.NARROW, locale) } +private fun getDefaultDayOfWeekLabels(locale: FormatLocale): Map = + DayOfWeek.entries.associateWith { dayOfWeek -> dayOfWeek.displayName() } /** * Returns a map of day of week labels in Simplified Chinese locale. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt index 4c40f0e3..ef8a2c4d 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt @@ -15,7 +15,6 @@ */ package com.maxkeppeler.sheets.calendar.utils -import androidx.annotation.RestrictTo import com.maxkeppeler.sheets.calendar.models.CalendarConfig import com.maxkeppeler.sheets.calendar.models.CalendarData import com.maxkeppeler.sheets.calendar.models.CalendarDateData @@ -23,38 +22,20 @@ import com.maxkeppeler.sheets.calendar.models.CalendarMonthData import com.maxkeppeler.sheets.calendar.models.CalendarSelection import com.maxkeppeler.sheets.calendar.models.CalendarStyle import com.maxkeppeler.sheets.calendar.models.CalendarViewType -import java.time.DayOfWeek -import java.time.LocalDate -import java.time.Month -import java.time.format.DateTimeFormatter -import java.time.temporal.TemporalAdjusters -import java.time.temporal.WeekFields -import java.util.Locale - -/** - * Returns the week of the week-based-year for this [LocalDate]. - * - * The week of the week-based-year is defined using the [Locale.getDefault] locale's [WeekFields]. - * - * @return an `Int` representing the week of the week-based-year for this [LocalDate]. - */ -internal val LocalDate.weekOfWeekBasedYear: Int - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - get() = get(WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear()) +import com.maxkeppeler.sheets.calendar.now +import kotlinx.datetime.* /** * Returns the date for the first day of the week (Monday) for this [LocalDate]. */ internal val LocalDate.startOfWeek: LocalDate - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - get() = minusDays(dayOfWeek.value - 1L) + get() = minus(dayOfWeek.isoDayNumber - 1, DateTimeUnit.DAY) /** * Returns the date for the last day of the week (Sunday) for this [LocalDate]. */ internal val LocalDate.endOfWeek: LocalDate - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - get() = plusDays(7L - dayOfWeek.value) + get() = plus(7 - dayOfWeek.isoDayNumber, DateTimeUnit.DAY) /** * Extension function that jumps to the first day of the same week (Monday) or the first day of the month, whichever comes first. @@ -62,11 +43,10 @@ internal val LocalDate.endOfWeek: LocalDate * @return [LocalDate] representing the first day of the week or the month, whichever is earliest */ internal val LocalDate.startOfWeekOrMonth: LocalDate - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() { var result = this while (result.dayOfMonth > 1 && result.dayOfWeek != DayOfWeek.MONDAY) { - result = result.minusDays(1) + result = result.minus(1, DateTimeUnit.DAY) } return result } @@ -77,17 +57,66 @@ internal val LocalDate.startOfWeekOrMonth: LocalDate * @return [LocalDate] representing the first day of the month */ internal val LocalDate.startOfMonth: LocalDate - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - get() = withDayOfMonth(1) + get() = LocalDate(this.year, this.month, 1) + +/** + * Extension function that checks if year is a leap year. + * + * Example: 2016, 2020, 2024, etc + * + * @return [Boolean] whether year is a leap year + */ +internal val LocalDate.isLeapYear: Boolean + get() { + var isLeapYear = year % 4 == 0 + isLeapYear = isLeapYear && (year % 100 != 0 || year % 400 == 0) + + return isLeapYear + } + +/** + * Extension function that gets the maximum days of month + * + * @return [Int] of days in month + */ +internal fun Month.length(leapYear: Boolean): Int = when (this) { + Month.JANUARY -> 31 + Month.FEBRUARY -> { + if (leapYear) { + 29 + } else { + 28 + } + } + Month.MARCH -> 31 + Month.APRIL -> 30 + Month.MAY -> 31 + Month.JUNE -> 30 + Month.JULY -> 31 + Month.AUGUST -> 31 + Month.SEPTEMBER -> 30 + Month.OCTOBER -> 31 + Month.NOVEMBER -> 30 + Month.DECEMBER -> 31 + else -> 30 +} /** + * Extension function that gets the maximum days of month + * + * @return [Int] of days in month + */ +internal val LocalDate.lengthOfMonth: Int + get() = month.length(isLeapYear) +/** Extension function that jumps to the last day of the month. @return [LocalDate] representing the last day of the month */ internal val LocalDate.endOfMonth: LocalDate - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - get() = with(TemporalAdjusters.lastDayOfMonth()) + get() { + return LocalDate(this.year, this.month, lengthOfMonth) + } /** * Get the first day of the previous week from the current date. @@ -98,16 +127,12 @@ internal val LocalDate.endOfMonth: LocalDate * @return The first day of the previous week as a `LocalDate` object. */ internal val LocalDate.previousWeek: LocalDate - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() = when { - dayOfMonth == Constants.FIRST_DAY_IN_MONTH - && dayOfWeek != DayOfWeek.MONDAY -> with(DayOfWeek.MONDAY) - dayOfMonth >= Constants.DAYS_IN_WEEK || dayOfMonth == Constants.FIRST_DAY_IN_MONTH - && dayOfWeek == DayOfWeek.MONDAY -> minusWeeks(1) + && dayOfWeek == DayOfWeek.MONDAY -> minus(1, DateTimeUnit.WEEK) - else -> withDayOfMonth(Constants.FIRST_DAY_IN_MONTH) + else -> startOfMonth } @@ -120,11 +145,10 @@ internal val LocalDate.previousWeek: LocalDate * @return The first day of the next week as a `LocalDate` object. */ internal val LocalDate.nextWeek: LocalDate - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() = when { - dayOfMonth == Constants.FIRST_DAY_IN_MONTH -> plusDays((7 - dayOfWeek.value) + 1L) - lengthOfMonth() - dayOfMonth >= Constants.DAYS_IN_WEEK -> plusWeeks(1) - else -> plusMonths(1).withDayOfMonth(Constants.FIRST_DAY_IN_MONTH) + dayOfMonth == Constants.FIRST_DAY_IN_MONTH -> plus((7 - dayOfWeek.isoDayNumber) + 1, DateTimeUnit.DAY) + lengthOfMonth - dayOfMonth >= Constants.DAYS_IN_WEEK -> plus(1, DateTimeUnit.WEEK) + else -> plus(1, DateTimeUnit.MONTH).startOfMonth } /** @@ -136,9 +160,8 @@ internal val LocalDate.nextWeek: LocalDate * @param config The `CalendarConfig` to determine the jump step. * @return A new `LocalDate` instance representing the previous date based on the `CalendarConfig`. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) fun LocalDate.jumpPrev(config: CalendarConfig): LocalDate = when (config.style) { - CalendarStyle.MONTH -> this.minusMonths(1).withDayOfMonth(1) + CalendarStyle.MONTH -> this.minus(1, DateTimeUnit.MONTH).startOfMonth CalendarStyle.WEEK -> this.previousWeek } @@ -151,9 +174,8 @@ fun LocalDate.jumpPrev(config: CalendarConfig): LocalDate = when (config.style) * @param config The `CalendarConfig` to determine the jump step. * @return A new `LocalDate` instance representing the next date based on the `CalendarConfig`. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) fun LocalDate.jumpNext(config: CalendarConfig): LocalDate = when (config.style) { - CalendarStyle.MONTH -> this.plusMonths(1).withDayOfMonth(1) + CalendarStyle.MONTH -> this.plus(1, DateTimeUnit.MONTH).startOfMonth CalendarStyle.WEEK -> this.nextWeek } @@ -170,7 +192,7 @@ internal fun getInitialCameraDate( val cameraDateBasedOnMode = when (selection) { is CalendarSelection.Date -> selection.selectedDate is CalendarSelection.Dates -> selection.selectedDates?.firstOrNull() - is CalendarSelection.Period -> selection.selectedRange?.lower + is CalendarSelection.Period -> selection.selectedRange?.start } ?: run { val now = LocalDate.now() if (now in boundary) now else boundary.start @@ -194,17 +216,15 @@ internal fun getInitialCustomCameraDate( * Get selection value of date. */ internal val CalendarSelection.dateValue: LocalDate? - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() = if (this is CalendarSelection.Date) selectedDate else null /** * Get selection value of dates. */ internal val CalendarSelection.datesValue: Array - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() { val value = if (this is CalendarSelection.Dates) selectedDates?.toMutableList() - ?: mutableListOf() else mutableListOf() + ?: emptyList() else emptyList() return value.toTypedArray() } @@ -212,44 +232,40 @@ internal val CalendarSelection.datesValue: Array * Get selection value of range. */ internal val CalendarSelection.rangeValue: Array - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() { val value = if (this is CalendarSelection.Period) selectedRange else null - return mutableListOf(value?.lower, value?.upper).toTypedArray() + return mutableListOf(value?.start, value?.endInclusive).toTypedArray() } /** * Get range start value. */ internal val List.startValue: LocalDate? - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() = this.getOrNull(Constants.RANGE_START) /** * Get range end value. */ internal val List.endValue: LocalDate? - @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() = this.getOrNull(Constants.RANGE_END) /** * Calculate the month data based on the camera date and the restrictions. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun calcMonthData( config: CalendarConfig, cameraDate: LocalDate, today: LocalDate = LocalDate.now() ): CalendarMonthData { - val months = Month.values().toMutableList() + val months = Month.entries.toMutableList() // Check that months are within the boundary val boundaryFilteredMonths = months.filter { month -> val maxDayOfMonth = month.length(cameraDate.isLeapYear) val startDay = minOf(config.boundary.start.dayOfMonth, maxDayOfMonth) val endDay = minOf(config.boundary.endInclusive.dayOfMonth, maxDayOfMonth) - val cameraDateWithMonth = cameraDate.withMonth(month.value).withDayOfMonth(startDay) - cameraDateWithMonth in config.boundary || cameraDateWithMonth.withDayOfMonth(endDay) in config.boundary + val cameraDateWithMonth = LocalDate(cameraDate.year, month, startDay) + cameraDateWithMonth in config.boundary || LocalDate(cameraDateWithMonth.year, cameraDateWithMonth.month, endDay) in config.boundary } return CalendarMonthData( @@ -259,34 +275,51 @@ internal fun calcMonthData( ) } +private fun LocalDate.isoWeekNumber(): Int { + if (firstWeekInYearStart(year + 1) < this) return 1 + + val currentYearStart = firstWeekInYearStart(year) + val start = if (this < currentYearStart) firstWeekInYearStart(year - 1) else currentYearStart + + val currentCalendarWeek = start.until(this, DateTimeUnit.WEEK) + 1 + + return currentCalendarWeek +} + +private fun firstWeekInYearStart(year: Int): LocalDate { + val jan1st = LocalDate(year, 1, 1) + val previousMonday = jan1st.minus(jan1st.dayOfWeek.ordinal, DateTimeUnit.DAY) + + return if (jan1st.dayOfWeek <= DayOfWeek.THURSDAY) previousMonday else previousMonday.plus(1, DateTimeUnit.WEEK) +} + /** * Calculate the calendar data based on the camera-date. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun calcCalendarData(config: CalendarConfig, cameraDate: LocalDate): CalendarData { var weekCameraDate = cameraDate - val firstDayOfWeek = WeekFields.of(config.locale).firstDayOfWeek + val firstDayOfWeek = DayOfWeek.MONDAY val dayOfWeek = cameraDate.dayOfWeek - val diff = (dayOfWeek.value - firstDayOfWeek.value + 7) % 7 + val diff = (dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7 val offsetStart = when (config.style) { CalendarStyle.MONTH -> diff CalendarStyle.WEEK -> { // Calculate the difference in days to the first day of the week from the camera date - val dayOfWeekInMonth = cameraDate.with(TemporalAdjusters.firstDayOfMonth()).dayOfWeek - val dayDiff = (dayOfWeekInMonth.value - firstDayOfWeek.value + 7) % 7 + val dayOfWeekInMonth = cameraDate.startOfMonth.dayOfWeek + val dayDiff = (dayOfWeekInMonth.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7 // Adjust weekCameraDate to the start of the week if necessary val adjustedWeekCameraDate = if (cameraDate.dayOfMonth <= Constants.DAYS_IN_WEEK && dayDiff > 0) { - cameraDate.minusDays((cameraDate.dayOfWeek.value - firstDayOfWeek.value + 7) % 7.toLong()) + cameraDate.minus((cameraDate.dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7, DateTimeUnit.DAY) } else { weekCameraDate } // Calculate the offset based on the adjustedWeekCameraDate - ((adjustedWeekCameraDate.dayOfWeek.value - firstDayOfWeek.value + 7) % 7).also { + ((adjustedWeekCameraDate.dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7).also { // Update weekCameraDate if it was adjusted weekCameraDate = adjustedWeekCameraDate } @@ -294,21 +327,21 @@ internal fun calcCalendarData(config: CalendarConfig, cameraDate: LocalDate): Ca } val days = when (config.style) { - CalendarStyle.MONTH -> cameraDate.lengthOfMonth() - CalendarStyle.WEEK -> DayOfWeek.values().size + CalendarStyle.MONTH -> cameraDate.lengthOfMonth + CalendarStyle.WEEK -> DayOfWeek.entries.size } val rangedDays = (1..days.plus(offsetStart)).toMutableList() .map { dayIndex -> val date = when (config.style) { CalendarStyle.MONTH -> cameraDate - .withDayOfMonth(1) - .plusDays(dayIndex.toLong().minus(1)) - .minusDays(offsetStart.toLong()) + .startOfMonth + .plus(dayIndex.minus(1), DateTimeUnit.DAY) + .minus(offsetStart, DateTimeUnit.DAY) CalendarStyle.WEEK -> weekCameraDate - .plusDays(dayIndex.toLong().minus(1)) - .minusDays(offsetStart.toLong()) + .plus(dayIndex.minus(1), DateTimeUnit.DAY) + .minus(offsetStart, DateTimeUnit.DAY) } Pair(CalendarViewType.DAY, date) }.drop( @@ -338,9 +371,7 @@ internal fun calcCalendarData(config: CalendarConfig, cameraDate: LocalDate): Ca val newWeek = week.toMutableList().apply { val firstDateCalendarWeek = week.first { it.first == CalendarViewType.DAY }.second as LocalDate - val formatter = DateTimeFormatter.ofPattern("w").withLocale(config.locale) - val calendarWeek = formatter.format(firstDateCalendarWeek) - add(0, Pair(CalendarViewType.CW, calendarWeek)) + add(0, Pair(CalendarViewType.CW, firstDateCalendarWeek.isoWeekNumber())) } newWeek } else week @@ -354,10 +385,17 @@ internal fun calcCalendarData(config: CalendarConfig, cameraDate: LocalDate): Ca ) } +internal fun LocalDate.isAfter(other: LocalDate): Boolean { + return this.toEpochDays() > other.toEpochDays() +} + +internal fun LocalDate.isBefore(other: LocalDate): Boolean { + return other.isAfter(this) +} + /** * Calculate the calendar date-data based on the date. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun calcCalendarDateData( date: LocalDate, calendarViewData: CalendarData, @@ -368,7 +406,7 @@ internal fun calcCalendarDateData( selectedRange: Pair ): CalendarDateData? { - if (date.monthValue != calendarViewData.cameraDate.monthValue) return null + if (date.monthNumber != calendarViewData.cameraDate.monthNumber) return null var selectedStartInit = false var selectedEnd = false diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt index 39ef9c80..1e309883 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarBaseSelectionComponent.kt @@ -38,14 +38,12 @@ import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeker.sheets.core.utils.BaseConstants -import com.maxkeppeler.sheets.calendar.R import com.maxkeppeler.sheets.calendar.models.CalendarDisplayMode import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.stringResource import sheets_compose_dialogs.calendar.generated.resources.Res import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_select_month import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_select_year -import com.maxkeppeler.sheets.core.R as RC /** * The main component for the selection of the use-case as well as the selection of month and year within the dialog. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt index 60847cb0..37601f17 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -40,10 +39,10 @@ import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.calendar.models.CalendarDateData import com.maxkeppeler.sheets.calendar.models.CalendarSelection +import com.maxkeppeler.sheets.calendar.now import com.maxkeppeler.sheets.calendar.utils.Constants -import java.time.LocalDate -import java.time.format.DateTimeFormatter -import com.maxkeppeler.sheets.core.R as RC +import kotlinx.datetime.LocalDate +import kotlinx.datetime.isoDayNumber /** * The date item component of the calendar view. @@ -124,7 +123,7 @@ internal fun CalendarDateItemComponent( is CalendarSelection.Period -> Modifier.padding(vertical = 2.dp) }.testTags( TestTags.CALENDAR_DATE, - data.date?.format(DateTimeFormatter.ISO_DATE) ?: "" + data.date?.toString() ?: "" ) val cellModifier = when { @@ -149,7 +148,7 @@ internal fun CalendarDateItemComponent( modifier = Modifier .weight(1f) .alpha(textAlpha), - text = data.date?.format(DateTimeFormatter.ofPattern("d")) + text = data.date?.dayOfWeek?.isoDayNumber?.toString() ?.takeUnless { data.otherMonth } ?: "", style = textStyle, textAlign = TextAlign.Center diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt index 347689f5..427a77c6 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarHeaderItemComponent.kt @@ -25,12 +25,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R as RC /** * Composable function that represents a calendar header item with the given [label]. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt index 0fec856d..7f6f6209 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarSelectionView.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.lazy.grid.GridItemSpan import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.foundation.lazy.grid.items import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeler.sheets.calendar.models.CalendarConfig @@ -30,9 +29,8 @@ import com.maxkeppeler.sheets.calendar.models.CalendarDateData import com.maxkeppeler.sheets.calendar.models.CalendarSelection import com.maxkeppeler.sheets.calendar.models.CalendarViewType import com.maxkeppeler.sheets.calendar.utils.calcCalendarDateData -import java.time.DayOfWeek -import java.time.LocalDate -import com.maxkeppeler.sheets.core.R as RC +import kotlinx.datetime.DayOfWeek +import kotlinx.datetime.LocalDate /** * The view that displays all relevant calendar information. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt index 935547f1..3d0f64cc 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt @@ -23,9 +23,6 @@ import androidx.compose.animation.expandIn import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.graphics.ExperimentalAnimationGraphicsApi -import androidx.compose.animation.graphics.res.animatedVectorResource -import androidx.compose.animation.graphics.res.rememberAnimatedVectorPainter -import androidx.compose.animation.graphics.vector.AnimatedImageVector import androidx.compose.animation.shrinkOut import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -39,7 +36,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowDownward import androidx.compose.material.icons.filled.KeyboardArrowDown import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilledIconButton @@ -52,20 +48,20 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.rotate -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.calendar.R import com.maxkeppeler.sheets.calendar.models.CalendarConfig import com.maxkeppeler.sheets.calendar.models.CalendarDisplayMode import com.maxkeppeler.sheets.calendar.models.CalendarStyle +import com.maxkeppeler.sheets.calendar.monthShort import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext +import kotlinx.datetime.LocalDate +import kotlinx.datetime.number import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.stringResource import sheets_compose_dialogs.calendar.generated.resources.* @@ -73,11 +69,8 @@ import sheets_compose_dialogs.calendar.generated.resources.Res import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_prev_month import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_prev_week import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_select_month -import java.time.LocalDate -import java.time.format.DateTimeFormatter import kotlin.math.max import kotlin.math.min -import com.maxkeppeler.sheets.core.R as RC /** * Top header component of the calendar dialog. @@ -186,8 +179,8 @@ internal fun CalendarTopComponent( ) { Text( modifier = selectableItemModifier - .testTags(TestTags.CALENDAR_MONTH_TITLE, cameraDate.month.value), - text = cameraDate.format(DateTimeFormatter.ofPattern("MMM")), + .testTags(TestTags.CALENDAR_MONTH_TITLE, cameraDate.month.number), + text = cameraDate.monthShort(), style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Center ) @@ -214,7 +207,7 @@ internal fun CalendarTopComponent( Text( modifier = selectableItemModifier .testTags(TestTags.CALENDAR_YEAR_TITLE, cameraDate.year), - text = cameraDate.format(DateTimeFormatter.ofPattern("yyyy")), + text = cameraDate.year.toString(), style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Center ) @@ -335,7 +328,7 @@ internal fun CalendarTopLandscapeComponent( ) { Text( modifier = selectableItemModifier.weight(1f), - text = cameraDate.format(DateTimeFormatter.ofPattern("yyyy")), + text = cameraDate.year.toString(), style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Start ) @@ -363,7 +356,7 @@ internal fun CalendarTopLandscapeComponent( ) { Text( modifier = selectableItemModifier.weight(1f), - text = cameraDate.format(DateTimeFormatter.ofPattern("MMM")), + text = cameraDate.monthShort(), style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Start ) diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt index 61079473..7f472588 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekHeaderItemComponent.kt @@ -25,18 +25,15 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.calendar.R import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.stringResource import sheets_compose_dialogs.calendar.generated.resources.Res import sheets_compose_dialogs.calendar.generated.resources.scd_calendar_dialog_cw -import com.maxkeppeler.sheets.core.R as RC /** * Composable function that represents a calendar week header item with the given [label]. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt index 24eb0fdb..7c72518a 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarWeekItemComponent.kt @@ -25,14 +25,12 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.calendar.models.CalendarSelection -import com.maxkeppeler.sheets.core.R as RC /** * The calendar week item component of the calendar view. diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt index 462c6e3c..b0d15ba6 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt @@ -28,14 +28,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.maxkeppeler.sheets.calendar.monthShort +import com.maxkeppeler.sheets.calendar.now import com.maxkeppeler.sheets.calendar.utils.Constants -import java.time.LocalDate -import java.time.Month -import java.time.format.DateTimeFormatter -import com.maxkeppeler.sheets.core.R as RC +import kotlinx.datetime.LocalDate +import kotlinx.datetime.Month /** * The item component of the month selection view. @@ -90,11 +89,12 @@ internal fun MonthItemComponent( .alpha(textAlpha) .padding(horizontal = 12.dp) .padding(vertical = 8.dp), - text = LocalDate.now().withMonth(month.value) - .format(DateTimeFormatter.ofPattern("MMM")), + text = LocalDate.now().run { + LocalDate(this.year, month, this.dayOfMonth) + }.monthShort(), style = textStyle, textAlign = TextAlign.Center, maxLines = 1, ) } -} \ No newline at end of file +} diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt index 28dd2094..68f148c3 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt @@ -18,7 +18,7 @@ package com.maxkeppeler.sheets.calendar.views import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.foundation.lazy.grid.items import com.maxkeppeler.sheets.calendar.models.CalendarMonthData -import java.time.Month +import kotlinx.datetime.Month /** * The view that displays all relevant year information. @@ -29,7 +29,7 @@ internal fun LazyGridScope.setupMonthSelectionView( monthsData: CalendarMonthData, onMonthClick: (Month) -> Unit, ) { - items(Month.values()) { month -> + items(Month.entries.toTypedArray()) { month -> val selected = monthsData.selected == month val disabled = monthsData.disabled.contains(month) val thisMonth = monthsData.thisMonth == month diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt index a35b0b83..34e19528 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearItemComponent.kt @@ -27,7 +27,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt index c2dcd8e7..78c9fb9f 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt @@ -16,7 +16,8 @@ package com.maxkeppeler.sheets.calendar.views import androidx.compose.foundation.lazy.LazyListScope -import java.time.LocalDate +import com.maxkeppeler.sheets.calendar.now +import kotlinx.datetime.LocalDate /** * The view that displays all relevant year information. diff --git a/calendar/src/jvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.jvm.kt b/calendar/src/jvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.jvm.kt new file mode 100644 index 00000000..53c13dd2 --- /dev/null +++ b/calendar/src/jvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.jvm.kt @@ -0,0 +1,15 @@ +package com.maxkeppeler.sheets.calendar.models + +import java.util.* + +private fun FormatLocale.Companion.fromLocale(locale: Locale = Locale.getDefault()): FormatLocale { + return when { + Locale.SIMPLIFIED_CHINESE.let { locale.language == it.language && locale.country == it.country } -> FormatLocale.Chinese + Locale.JAPANESE.let { locale.language == it.language } -> FormatLocale.Japanese + else -> FormatLocale.Default + } +} + +actual fun FormatLocale.Companion.getDefault(): FormatLocale { + return FormatLocale.fromLocale() +} \ No newline at end of file diff --git a/calendar/src/nonJvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.nonJvm.kt b/calendar/src/nonJvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.nonJvm.kt new file mode 100644 index 00000000..eb32cb18 --- /dev/null +++ b/calendar/src/nonJvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.nonJvm.kt @@ -0,0 +1,5 @@ +package com.maxkeppeler.sheets.calendar.models + +actual fun FormatLocale.Companion.getDefault(): FormatLocale { + return FormatLocale.Default +} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt index f24e3404..e6e4140c 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt @@ -3,7 +3,9 @@ package com.maxkeppeker.sheets.core.icons import androidx.compose.ui.graphics.vector.ImageVector +import kotlinx.serialization.Serializable +@Serializable sealed class LibIcons { abstract var EmojiEmotions: ImageVector diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt index 2ef6fb7e..ebecd33f 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/BaseConfigs.kt @@ -17,6 +17,7 @@ package com.maxkeppeker.sheets.core.models.base import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.utils.BaseConstants +import kotlinx.serialization.Serializable /** * Base configs for dialog-specific configs. diff --git a/gradle.properties b/gradle.properties index 3f902bb9..3c188bd6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,20 +7,15 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app"s APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Kotlin code style for this project: "official" or "obsolete": + +#Kotlin kotlin.code.style=official -# Enables namespacing of each library's R class so that its R class includes only the -# resources declared in the library itself and none from the library's dependencies, -# thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true +kotlin.js.compiler=ir + +#Multiplatform +android.useAndroidX=true +kotlin.mpp.androidSourceSetLayoutVersion=2 +kotlin.mpp.enableCInteropCommonization=true # Compose targets org.jetbrains.compose.experimental.macos.enabled=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e168982b..df3b2fb9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,7 @@ serialization = "1.6.3" datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "datetime" } desugar = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-core", version.ref = "serialization" } +stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" } [plugins] android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } From afa6178b8d11e50c7b49ec41e9f620074a1f4d32 Mon Sep 17 00:00:00 2001 From: DatLag Date: Sat, 30 Mar 2024 13:59:14 +0100 Subject: [PATCH 06/58] rating multiplatform compatible --- .../com/maxkeppeler/sheets/clock/ClockView.kt | 2 +- .../sheets/date_time/views/PickerComponent.kt | 2 +- rating/build.gradle.kts | 66 ++++++++++----- .../composeResources}/values-bg/strings.xml | 0 .../composeResources}/values-cs/strings.xml | 0 .../composeResources}/values-da/strings.xml | 0 .../composeResources}/values-de/strings.xml | 0 .../composeResources}/values-el/strings.xml | 0 .../composeResources}/values-eo/strings.xml | 0 .../composeResources}/values-es/strings.xml | 0 .../composeResources}/values-et/strings.xml | 0 .../composeResources}/values-fa/strings.xml | 0 .../composeResources}/values-fi/strings.xml | 0 .../composeResources}/values-fr/strings.xml | 0 .../composeResources}/values-ga/strings.xml | 0 .../composeResources}/values-gd/strings.xml | 0 .../composeResources}/values-hi/strings.xml | 0 .../composeResources}/values-hr/strings.xml | 0 .../composeResources}/values-hu/strings.xml | 0 .../values-in-rID/strings.xml | 0 .../composeResources}/values-is/strings.xml | 0 .../composeResources}/values-it/strings.xml | 0 .../composeResources}/values-iw/strings.xml | 0 .../composeResources}/values-ja/strings.xml | 0 .../composeResources}/values-jv/strings.xml | 0 .../composeResources}/values-kk/strings.xml | 0 .../composeResources}/values-ko/strings.xml | 0 .../composeResources}/values-ku/strings.xml | 0 .../composeResources}/values-lb/strings.xml | 0 .../composeResources}/values-lo/strings.xml | 0 .../composeResources}/values-lt/strings.xml | 0 .../composeResources}/values-lv/strings.xml | 0 .../composeResources}/values-ms/strings.xml | 0 .../composeResources}/values-ne/strings.xml | 0 .../composeResources}/values-nl/strings.xml | 0 .../composeResources}/values-no/strings.xml | 0 .../composeResources}/values-pl/strings.xml | 0 .../composeResources}/values-pt/strings.xml | 0 .../composeResources}/values-ru/strings.xml | 0 .../composeResources}/values-sk/strings.xml | 0 .../composeResources}/values-sl/strings.xml | 0 .../composeResources}/values-sr/strings.xml | 0 .../composeResources}/values-sv/strings.xml | 0 .../composeResources}/values-th/strings.xml | 0 .../composeResources}/values-tr/strings.xml | 0 .../composeResources}/values-uk/strings.xml | 0 .../composeResources}/values-vi/strings.xml | 0 .../values-zh-rCN/strings.xml | 0 .../values-zh-rTW/strings.xml | 0 .../composeResources}/values/strings.xml | 1 - .../maxkeppeler/sheets/rating/RatingDialog.kt | 0 .../maxkeppeler/sheets/rating/RatingPopup.kt | 0 .../maxkeppeler/sheets/rating/RatingState.kt | 5 +- .../maxkeppeler/sheets/rating/RatingView.kt | 5 +- .../rating/models/FeedbackTextFieldType.kt | 0 .../sheets/rating/models/RatingBody.kt | 0 .../sheets/rating/models/RatingConfig.kt | 3 +- .../sheets/rating/models/RatingSelection.kt | 0 .../sheets/rating/utils/Constants.kt | 0 .../sheets/rating/views/BodyComponent.kt | 0 .../rating/views/BodyDefaultComponent.kt | 3 +- .../views/FeedbackTextFieldErrorContainer.kt | 3 +- .../sheets/rating/views/RatingComponent.kt | 44 ++++++++++ .../sheets/rating/views/RatingFeedbackView.kt | 21 +++-- .../rating/views/RatingSelectionView.kt | 11 +-- rating/src/main/AndroidManifest.xml | 2 - .../sheets/rating/views/RatingComponent.kt | 84 ------------------- settings.gradle.kts | 2 +- 68 files changed, 118 insertions(+), 136 deletions(-) rename rating/src/{main/res => commonMain/composeResources}/values-bg/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-cs/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-da/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-de/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-el/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-eo/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-es/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-et/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-fa/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-fi/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-fr/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-ga/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-gd/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-hi/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-hr/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-hu/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-in-rID/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-is/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-it/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-iw/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-ja/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-jv/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-kk/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-ko/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-ku/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-lb/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-lo/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-lt/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-lv/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-ms/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-ne/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-nl/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-no/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-pl/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-pt/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-ru/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-sk/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-sl/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-sr/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-sv/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-th/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-tr/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-uk/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-vi/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-zh-rCN/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values-zh-rTW/strings.xml (100%) rename rating/src/{main/res => commonMain/composeResources}/values/strings.xml (84%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/RatingDialog.kt (100%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/RatingPopup.kt (100%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/RatingState.kt (98%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/RatingView.kt (95%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt (100%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/models/RatingBody.kt (100%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/models/RatingConfig.kt (91%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/models/RatingSelection.kt (100%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/utils/Constants.kt (100%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/views/BodyComponent.kt (100%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt (95%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt (96%) create mode 100644 rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingComponent.kt rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt (85%) rename rating/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt (91%) delete mode 100644 rating/src/main/AndroidManifest.xml delete mode 100644 rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingComponent.kt diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt b/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt index c3ae8b02..0634b5ae 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt +++ b/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt @@ -79,7 +79,7 @@ fun ClockView( TimeHintComponent( modifier = Modifier .fillMaxWidth() - .padding(bottom = dimensionResource(R.dimen.scd_normal_150)), + .padding(bottom = 24.dp), valid = clockState.valid, boundary = config.boundary, ) diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt index 3911690e..81a434da 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt +++ b/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt @@ -81,7 +81,7 @@ internal fun PickerComponent( modifier = Modifier .clip(MaterialTheme.shapes.extraSmall) .padding(horizontal = dimensionResource(R.dimen.scd_small_75)) - .padding(top = dimensionResource(R.dimen.scd_normal_150)), + .padding(top = 24.dp), text = ":" ) } diff --git a/rating/build.gradle.kts b/rating/build.gradle.kts index cb292fbd..3b00f954 100644 --- a/rating/build.gradle.kts +++ b/rating/build.gradle.kts @@ -1,27 +1,55 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl + plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) } android { namespace = Modules.RATING.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } } -mavenPublishing { - publishToMavenCentral() - signAllPublications() +kotlin { + androidTarget() + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.components.resources) + + implementation(libs.serialization) + + implementation(project(":core")) + } + } } \ No newline at end of file diff --git a/rating/src/main/res/values-bg/strings.xml b/rating/src/commonMain/composeResources/values-bg/strings.xml similarity index 100% rename from rating/src/main/res/values-bg/strings.xml rename to rating/src/commonMain/composeResources/values-bg/strings.xml diff --git a/rating/src/main/res/values-cs/strings.xml b/rating/src/commonMain/composeResources/values-cs/strings.xml similarity index 100% rename from rating/src/main/res/values-cs/strings.xml rename to rating/src/commonMain/composeResources/values-cs/strings.xml diff --git a/rating/src/main/res/values-da/strings.xml b/rating/src/commonMain/composeResources/values-da/strings.xml similarity index 100% rename from rating/src/main/res/values-da/strings.xml rename to rating/src/commonMain/composeResources/values-da/strings.xml diff --git a/rating/src/main/res/values-de/strings.xml b/rating/src/commonMain/composeResources/values-de/strings.xml similarity index 100% rename from rating/src/main/res/values-de/strings.xml rename to rating/src/commonMain/composeResources/values-de/strings.xml diff --git a/rating/src/main/res/values-el/strings.xml b/rating/src/commonMain/composeResources/values-el/strings.xml similarity index 100% rename from rating/src/main/res/values-el/strings.xml rename to rating/src/commonMain/composeResources/values-el/strings.xml diff --git a/rating/src/main/res/values-eo/strings.xml b/rating/src/commonMain/composeResources/values-eo/strings.xml similarity index 100% rename from rating/src/main/res/values-eo/strings.xml rename to rating/src/commonMain/composeResources/values-eo/strings.xml diff --git a/rating/src/main/res/values-es/strings.xml b/rating/src/commonMain/composeResources/values-es/strings.xml similarity index 100% rename from rating/src/main/res/values-es/strings.xml rename to rating/src/commonMain/composeResources/values-es/strings.xml diff --git a/rating/src/main/res/values-et/strings.xml b/rating/src/commonMain/composeResources/values-et/strings.xml similarity index 100% rename from rating/src/main/res/values-et/strings.xml rename to rating/src/commonMain/composeResources/values-et/strings.xml diff --git a/rating/src/main/res/values-fa/strings.xml b/rating/src/commonMain/composeResources/values-fa/strings.xml similarity index 100% rename from rating/src/main/res/values-fa/strings.xml rename to rating/src/commonMain/composeResources/values-fa/strings.xml diff --git a/rating/src/main/res/values-fi/strings.xml b/rating/src/commonMain/composeResources/values-fi/strings.xml similarity index 100% rename from rating/src/main/res/values-fi/strings.xml rename to rating/src/commonMain/composeResources/values-fi/strings.xml diff --git a/rating/src/main/res/values-fr/strings.xml b/rating/src/commonMain/composeResources/values-fr/strings.xml similarity index 100% rename from rating/src/main/res/values-fr/strings.xml rename to rating/src/commonMain/composeResources/values-fr/strings.xml diff --git a/rating/src/main/res/values-ga/strings.xml b/rating/src/commonMain/composeResources/values-ga/strings.xml similarity index 100% rename from rating/src/main/res/values-ga/strings.xml rename to rating/src/commonMain/composeResources/values-ga/strings.xml diff --git a/rating/src/main/res/values-gd/strings.xml b/rating/src/commonMain/composeResources/values-gd/strings.xml similarity index 100% rename from rating/src/main/res/values-gd/strings.xml rename to rating/src/commonMain/composeResources/values-gd/strings.xml diff --git a/rating/src/main/res/values-hi/strings.xml b/rating/src/commonMain/composeResources/values-hi/strings.xml similarity index 100% rename from rating/src/main/res/values-hi/strings.xml rename to rating/src/commonMain/composeResources/values-hi/strings.xml diff --git a/rating/src/main/res/values-hr/strings.xml b/rating/src/commonMain/composeResources/values-hr/strings.xml similarity index 100% rename from rating/src/main/res/values-hr/strings.xml rename to rating/src/commonMain/composeResources/values-hr/strings.xml diff --git a/rating/src/main/res/values-hu/strings.xml b/rating/src/commonMain/composeResources/values-hu/strings.xml similarity index 100% rename from rating/src/main/res/values-hu/strings.xml rename to rating/src/commonMain/composeResources/values-hu/strings.xml diff --git a/rating/src/main/res/values-in-rID/strings.xml b/rating/src/commonMain/composeResources/values-in-rID/strings.xml similarity index 100% rename from rating/src/main/res/values-in-rID/strings.xml rename to rating/src/commonMain/composeResources/values-in-rID/strings.xml diff --git a/rating/src/main/res/values-is/strings.xml b/rating/src/commonMain/composeResources/values-is/strings.xml similarity index 100% rename from rating/src/main/res/values-is/strings.xml rename to rating/src/commonMain/composeResources/values-is/strings.xml diff --git a/rating/src/main/res/values-it/strings.xml b/rating/src/commonMain/composeResources/values-it/strings.xml similarity index 100% rename from rating/src/main/res/values-it/strings.xml rename to rating/src/commonMain/composeResources/values-it/strings.xml diff --git a/rating/src/main/res/values-iw/strings.xml b/rating/src/commonMain/composeResources/values-iw/strings.xml similarity index 100% rename from rating/src/main/res/values-iw/strings.xml rename to rating/src/commonMain/composeResources/values-iw/strings.xml diff --git a/rating/src/main/res/values-ja/strings.xml b/rating/src/commonMain/composeResources/values-ja/strings.xml similarity index 100% rename from rating/src/main/res/values-ja/strings.xml rename to rating/src/commonMain/composeResources/values-ja/strings.xml diff --git a/rating/src/main/res/values-jv/strings.xml b/rating/src/commonMain/composeResources/values-jv/strings.xml similarity index 100% rename from rating/src/main/res/values-jv/strings.xml rename to rating/src/commonMain/composeResources/values-jv/strings.xml diff --git a/rating/src/main/res/values-kk/strings.xml b/rating/src/commonMain/composeResources/values-kk/strings.xml similarity index 100% rename from rating/src/main/res/values-kk/strings.xml rename to rating/src/commonMain/composeResources/values-kk/strings.xml diff --git a/rating/src/main/res/values-ko/strings.xml b/rating/src/commonMain/composeResources/values-ko/strings.xml similarity index 100% rename from rating/src/main/res/values-ko/strings.xml rename to rating/src/commonMain/composeResources/values-ko/strings.xml diff --git a/rating/src/main/res/values-ku/strings.xml b/rating/src/commonMain/composeResources/values-ku/strings.xml similarity index 100% rename from rating/src/main/res/values-ku/strings.xml rename to rating/src/commonMain/composeResources/values-ku/strings.xml diff --git a/rating/src/main/res/values-lb/strings.xml b/rating/src/commonMain/composeResources/values-lb/strings.xml similarity index 100% rename from rating/src/main/res/values-lb/strings.xml rename to rating/src/commonMain/composeResources/values-lb/strings.xml diff --git a/rating/src/main/res/values-lo/strings.xml b/rating/src/commonMain/composeResources/values-lo/strings.xml similarity index 100% rename from rating/src/main/res/values-lo/strings.xml rename to rating/src/commonMain/composeResources/values-lo/strings.xml diff --git a/rating/src/main/res/values-lt/strings.xml b/rating/src/commonMain/composeResources/values-lt/strings.xml similarity index 100% rename from rating/src/main/res/values-lt/strings.xml rename to rating/src/commonMain/composeResources/values-lt/strings.xml diff --git a/rating/src/main/res/values-lv/strings.xml b/rating/src/commonMain/composeResources/values-lv/strings.xml similarity index 100% rename from rating/src/main/res/values-lv/strings.xml rename to rating/src/commonMain/composeResources/values-lv/strings.xml diff --git a/rating/src/main/res/values-ms/strings.xml b/rating/src/commonMain/composeResources/values-ms/strings.xml similarity index 100% rename from rating/src/main/res/values-ms/strings.xml rename to rating/src/commonMain/composeResources/values-ms/strings.xml diff --git a/rating/src/main/res/values-ne/strings.xml b/rating/src/commonMain/composeResources/values-ne/strings.xml similarity index 100% rename from rating/src/main/res/values-ne/strings.xml rename to rating/src/commonMain/composeResources/values-ne/strings.xml diff --git a/rating/src/main/res/values-nl/strings.xml b/rating/src/commonMain/composeResources/values-nl/strings.xml similarity index 100% rename from rating/src/main/res/values-nl/strings.xml rename to rating/src/commonMain/composeResources/values-nl/strings.xml diff --git a/rating/src/main/res/values-no/strings.xml b/rating/src/commonMain/composeResources/values-no/strings.xml similarity index 100% rename from rating/src/main/res/values-no/strings.xml rename to rating/src/commonMain/composeResources/values-no/strings.xml diff --git a/rating/src/main/res/values-pl/strings.xml b/rating/src/commonMain/composeResources/values-pl/strings.xml similarity index 100% rename from rating/src/main/res/values-pl/strings.xml rename to rating/src/commonMain/composeResources/values-pl/strings.xml diff --git a/rating/src/main/res/values-pt/strings.xml b/rating/src/commonMain/composeResources/values-pt/strings.xml similarity index 100% rename from rating/src/main/res/values-pt/strings.xml rename to rating/src/commonMain/composeResources/values-pt/strings.xml diff --git a/rating/src/main/res/values-ru/strings.xml b/rating/src/commonMain/composeResources/values-ru/strings.xml similarity index 100% rename from rating/src/main/res/values-ru/strings.xml rename to rating/src/commonMain/composeResources/values-ru/strings.xml diff --git a/rating/src/main/res/values-sk/strings.xml b/rating/src/commonMain/composeResources/values-sk/strings.xml similarity index 100% rename from rating/src/main/res/values-sk/strings.xml rename to rating/src/commonMain/composeResources/values-sk/strings.xml diff --git a/rating/src/main/res/values-sl/strings.xml b/rating/src/commonMain/composeResources/values-sl/strings.xml similarity index 100% rename from rating/src/main/res/values-sl/strings.xml rename to rating/src/commonMain/composeResources/values-sl/strings.xml diff --git a/rating/src/main/res/values-sr/strings.xml b/rating/src/commonMain/composeResources/values-sr/strings.xml similarity index 100% rename from rating/src/main/res/values-sr/strings.xml rename to rating/src/commonMain/composeResources/values-sr/strings.xml diff --git a/rating/src/main/res/values-sv/strings.xml b/rating/src/commonMain/composeResources/values-sv/strings.xml similarity index 100% rename from rating/src/main/res/values-sv/strings.xml rename to rating/src/commonMain/composeResources/values-sv/strings.xml diff --git a/rating/src/main/res/values-th/strings.xml b/rating/src/commonMain/composeResources/values-th/strings.xml similarity index 100% rename from rating/src/main/res/values-th/strings.xml rename to rating/src/commonMain/composeResources/values-th/strings.xml diff --git a/rating/src/main/res/values-tr/strings.xml b/rating/src/commonMain/composeResources/values-tr/strings.xml similarity index 100% rename from rating/src/main/res/values-tr/strings.xml rename to rating/src/commonMain/composeResources/values-tr/strings.xml diff --git a/rating/src/main/res/values-uk/strings.xml b/rating/src/commonMain/composeResources/values-uk/strings.xml similarity index 100% rename from rating/src/main/res/values-uk/strings.xml rename to rating/src/commonMain/composeResources/values-uk/strings.xml diff --git a/rating/src/main/res/values-vi/strings.xml b/rating/src/commonMain/composeResources/values-vi/strings.xml similarity index 100% rename from rating/src/main/res/values-vi/strings.xml rename to rating/src/commonMain/composeResources/values-vi/strings.xml diff --git a/rating/src/main/res/values-zh-rCN/strings.xml b/rating/src/commonMain/composeResources/values-zh-rCN/strings.xml similarity index 100% rename from rating/src/main/res/values-zh-rCN/strings.xml rename to rating/src/commonMain/composeResources/values-zh-rCN/strings.xml diff --git a/rating/src/main/res/values-zh-rTW/strings.xml b/rating/src/commonMain/composeResources/values-zh-rTW/strings.xml similarity index 100% rename from rating/src/main/res/values-zh-rTW/strings.xml rename to rating/src/commonMain/composeResources/values-zh-rTW/strings.xml diff --git a/rating/src/main/res/values/strings.xml b/rating/src/commonMain/composeResources/values/strings.xml similarity index 84% rename from rating/src/main/res/values/strings.xml rename to rating/src/commonMain/composeResources/values/strings.xml index f8c49c31..83be260e 100644 --- a/rating/src/main/res/values/strings.xml +++ b/rating/src/commonMain/composeResources/values/strings.xml @@ -1,4 +1,3 @@ - Please enter a feedback Feedback diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/RatingDialog.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingDialog.kt similarity index 100% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/RatingDialog.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingDialog.kt diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/RatingPopup.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingPopup.kt similarity index 100% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/RatingPopup.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingPopup.kt diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/RatingState.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt similarity index 98% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/RatingState.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt index 51de1784..b496f4c7 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/RatingState.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt @@ -24,7 +24,7 @@ import androidx.compose.runtime.setValue import com.maxkeppeker.sheets.core.views.BaseTypeState import com.maxkeppeler.sheets.rating.models.RatingConfig import com.maxkeppeler.sheets.rating.models.RatingSelection -import java.io.Serializable +import kotlinx.serialization.Serializable /** * Handles the color state. @@ -94,10 +94,11 @@ internal class RatingState( * Data class that stores the rating info of the current state * and can be used by the [Saver] to save and restore the state. */ + @Serializable data class RatingStateData( val rating: Int?, val feedback: String?, - ) : Serializable + ) } /** diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/RatingView.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingView.kt similarity index 95% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/RatingView.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingView.kt index e315ebfc..6b4e9a87 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/RatingView.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingView.kt @@ -23,14 +23,13 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.BaseBehaviors import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.models.base.StateHandler import com.maxkeppeker.sheets.core.models.base.UseCaseState import com.maxkeppeker.sheets.core.views.ButtonsComponent import com.maxkeppeker.sheets.core.views.base.FrameBase -import com.maxkeppeler.sheets.core.R import com.maxkeppeler.sheets.rating.models.RatingBody import com.maxkeppeler.sheets.rating.models.RatingConfig import com.maxkeppeler.sheets.rating.models.RatingSelection @@ -75,7 +74,7 @@ fun RatingView( config = config, body = body ) - Spacer(modifier = Modifier.height(dimensionResource(R.dimen.scd_normal_150))) + Spacer(modifier = Modifier.height(24.dp)) RatingComponent( config = config, rating = ratingState.rating, diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt similarity index 100% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/models/RatingBody.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingBody.kt similarity index 100% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/models/RatingBody.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingBody.kt diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/models/RatingConfig.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt similarity index 91% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/models/RatingConfig.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt index 453b92cd..1f2083f4 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/models/RatingConfig.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt @@ -15,7 +15,6 @@ */ package com.maxkeppeler.sheets.rating.models -import androidx.annotation.IntRange import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE @@ -30,7 +29,7 @@ class RatingConfig( val feedbackErrorMessage: String? = null, val withFeedback: Boolean = false, val feedbackOptional: Boolean = true, - @IntRange(from = 3, to = 10) val ratingOptionsCount: Int = DEFAULT_RATING_OPTIONS_COUNT, + val ratingOptionsCount: Int = DEFAULT_RATING_OPTIONS_COUNT, override val icons: LibIcons = DEFAULT_ICON_STYLE, ) : BaseConfigs() diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/models/RatingSelection.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt similarity index 100% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/models/RatingSelection.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/utils/Constants.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/utils/Constants.kt similarity index 100% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/utils/Constants.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/utils/Constants.kt diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyComponent.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyComponent.kt similarity index 100% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyComponent.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyComponent.kt diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt similarity index 95% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt index e62b5e42..361a3bb6 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt @@ -22,13 +22,12 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeler.sheets.rating.models.RatingBody import com.maxkeppeler.sheets.rating.models.RatingConfig import com.maxkeppeler.sheets.rating.models.RatingViewStyle -import com.maxkeppeler.sheets.core.R as RC /** * The default body component for the rating dialog. diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt similarity index 96% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt index c4c82dbb..ef25b9d2 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/FeedbackTextFieldErrorContainer.kt @@ -24,13 +24,12 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.rating.models.RatingConfig import com.maxkeppeler.sheets.rating.models.RatingViewStyle -import com.maxkeppeler.sheets.core.R as RC /** * A container to apply an error message to the TextField if the data is invalid. diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingComponent.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingComponent.kt new file mode 100644 index 00000000..4551743e --- /dev/null +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingComponent.kt @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.maxkeppeler.sheets.rating.views + +import androidx.compose.runtime.Composable +import com.maxkeppeler.sheets.rating.models.RatingConfig + +/** + * The rating component. + */ +@Composable +internal fun RatingComponent( + rating: Int?, + feedback: String?, + feedbackError: Boolean, + config: RatingConfig, + onSelectRating: (Int) -> Unit, + onUpdateFeedback: (String) -> Unit, +) { + RatingSelectionView( + value = rating, + config = config, + onSelectRating = onSelectRating, + ) + RatingFeedbackView( + value = feedback, + isError = feedbackError, + config = config, + onUpdateFeedback = onUpdateFeedback, + ) +} diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt similarity index 85% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt index 9ed00806..cb200070 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingFeedbackView.kt @@ -31,16 +31,19 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.rating.R import com.maxkeppeler.sheets.rating.models.FeedbackTextFieldType import com.maxkeppeler.sheets.rating.models.RatingConfig import com.maxkeppeler.sheets.rating.models.RatingViewStyle -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.rating.generated.resources.* +import sheets_compose_dialogs.rating.generated.resources.Res +import sheets_compose_dialogs.rating.generated.resources.scd_rating_dialog_feedback_label +import sheets_compose_dialogs.rating.generated.resources.scd_rating_dialog_optional +import sheets_compose_dialogs.rating.generated.resources.scd_rating_dialog_required /** * The view for the feedback text field. @@ -48,6 +51,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param config The configuration for the rating view. * @param onUpdateFeedback Listener that is invoked when the feedback changes. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun RatingFeedbackView( value: String? = null, @@ -69,9 +73,9 @@ internal fun RatingFeedbackView( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = alignment ) { - val labelText = stringResource(R.string.scd_rating_dialog_feedback_label) + - " (" + stringResource(if (config.feedbackOptional) R.string.scd_rating_dialog_optional else R.string.scd_rating_dialog_required).lowercase() + ")" - val defaultErrorMessage = stringResource(R.string.scd_rating_dialog) + val labelText = stringResource(Res.string.scd_rating_dialog_feedback_label) + + " (" + stringResource(if (config.feedbackOptional) Res.string.scd_rating_dialog_optional else Res.string.scd_rating_dialog_required).lowercase() + ")" + val defaultErrorMessage = stringResource(Res.string.scd_rating_dialog) FeedbackTextFieldErrorContainer( config = config, isError = value != null && isError, @@ -124,7 +128,6 @@ internal fun RatingFeedbackView( } } -@Preview @Composable private fun RatingFeedbackViewPreview() { RatingFeedbackView( diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt similarity index 91% rename from rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt rename to rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt index 54813642..b9d263a9 100644 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt @@ -30,13 +30,11 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.rating.models.RatingConfig import com.maxkeppeler.sheets.rating.models.RatingViewStyle -import com.maxkeppeler.sheets.core.R as RC /** * The view for the selection of the rating. @@ -97,12 +95,12 @@ private fun RatingOptionView( ) { Icon( modifier = Modifier - .size(dimensionResource(RC.dimen.scd_size_250)) + .size(40.dp) .sizeIn( minWidth = 32.dp, minHeight = 32.dp, - maxHeight = dimensionResource(RC.dimen.scd_size_250), - maxWidth = dimensionResource(RC.dimen.scd_size_250) + maxHeight = 40.dp, + maxWidth = 40.dp ), imageVector = config.icons.Star, contentDescription = null, @@ -111,7 +109,6 @@ private fun RatingOptionView( } } -@Preview @Composable private fun PreviewRatingSelectionView() { RatingSelectionView( diff --git a/rating/src/main/AndroidManifest.xml b/rating/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/rating/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingComponent.kt b/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingComponent.kt deleted file mode 100644 index 953975fb..00000000 --- a/rating/src/main/java/com/maxkeppeler/sheets/rating/views/RatingComponent.kt +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.maxkeppeler.sheets.rating.views - -import androidx.compose.foundation.layout.Column -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.tooling.preview.PreviewParameterProvider -import com.maxkeppeler.sheets.rating.models.FeedbackTextFieldType -import com.maxkeppeler.sheets.rating.models.RatingConfig -import com.maxkeppeler.sheets.rating.models.RatingViewStyle - -/** - * The rating component. - */ -@Composable -internal fun RatingComponent( - rating: Int?, - feedback: String?, - feedbackError: Boolean, - config: RatingConfig, - onSelectRating: (Int) -> Unit, - onUpdateFeedback: (String) -> Unit, -) { - RatingSelectionView( - value = rating, - config = config, - onSelectRating = onSelectRating, - ) - RatingFeedbackView( - value = feedback, - isError = feedbackError, - config = config, - onUpdateFeedback = onUpdateFeedback, - ) -} - -class RatingConfigProvider : PreviewParameterProvider { - override val values: Sequence = sequenceOf( - RatingConfig( - ratingViewStyle = RatingViewStyle.CENTER, - feedbackOptional = true, - ratingOptionsCount = 5, - feedbackTextFieldType = FeedbackTextFieldType.OUTLINED, - ), - RatingConfig( - ratingViewStyle = RatingViewStyle.START, - feedbackOptional = true, - ratingOptionsCount = 5, - feedbackTextFieldType = FeedbackTextFieldType.OUTLINED, - ), - ) -} - -@Preview(showBackground = true) -@Composable -private fun RatingComponentPreview( - @PreviewParameter(RatingConfigProvider::class) config: RatingConfig -) { - Column { - RatingComponent( - config = config, - rating = 3, - feedback = "Some text", - onSelectRating = {}, - feedbackError = false, - onUpdateFeedback = {} - ) - } -} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 41c709df..6b7e4aaf 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -12,7 +12,7 @@ include( // Include all modules ":core", //":info", - //":rating", + ":rating", ":calendar", //":duration", //":clock", From 5393ed23601eb83b5f405003a44b785fac675e52 Mon Sep 17 00:00:00 2001 From: DatLag Date: Sat, 30 Mar 2024 14:24:58 +0100 Subject: [PATCH 07/58] option multiplatform compatible --- .../sheets/clock/views/KeyItemComponent.kt | 2 +- .../color/views/ColorTemplateItemComponent.kt | 2 +- .../sheets/duration/views/KeyItemComponent.kt | 2 +- .../sheets/info/views/DefaultBodyComponent.kt | 2 +- .../input/views/InputItemHeaderComponent.kt | 2 +- .../list/views/ListOptionBoundsComponent.kt | 2 +- option/build.gradle.kts | 68 +++++++++++++------ .../composeResources/values-bg/strings.xml | 6 ++ .../composeResources/values-cs/strings.xml | 6 ++ .../composeResources/values-da/strings.xml | 6 ++ .../values-de-rDE/strings.xml | 7 ++ .../composeResources/values-de/strings.xml | 6 ++ .../composeResources/values-el/strings.xml | 6 ++ .../composeResources/values-eo/strings.xml | 6 ++ .../composeResources/values-es/strings.xml | 6 ++ .../composeResources/values-et/strings.xml | 6 ++ .../composeResources/values-fa/strings.xml | 6 ++ .../composeResources/values-fi/strings.xml | 6 ++ .../composeResources/values-fr/strings.xml | 6 ++ .../composeResources/values-ga/strings.xml | 6 ++ .../composeResources/values-gd/strings.xml | 6 ++ .../composeResources/values-hi/strings.xml | 6 ++ .../composeResources/values-hr/strings.xml | 6 ++ .../composeResources/values-hu/strings.xml | 6 ++ .../values-in-rID/strings.xml | 6 ++ .../composeResources/values-is/strings.xml | 6 ++ .../composeResources/values-it/strings.xml | 6 ++ .../composeResources/values-iw/strings.xml | 6 ++ .../composeResources/values-ja/strings.xml | 6 ++ .../composeResources/values-jv/strings.xml | 6 ++ .../composeResources/values-kk/strings.xml | 6 ++ .../composeResources/values-ko/strings.xml | 6 ++ .../composeResources/values-ku/strings.xml | 6 ++ .../composeResources/values-lb/strings.xml | 6 ++ .../composeResources/values-lo/strings.xml | 6 ++ .../composeResources/values-lt/strings.xml | 6 ++ .../composeResources/values-lv/strings.xml | 6 ++ .../composeResources/values-ms/strings.xml | 6 ++ .../composeResources/values-ne/strings.xml | 6 ++ .../composeResources/values-nl/strings.xml | 6 ++ .../composeResources/values-no/strings.xml | 6 ++ .../composeResources/values-pl/strings.xml | 6 ++ .../composeResources/values-pt/strings.xml | 6 ++ .../composeResources/values-ru/strings.xml | 6 ++ .../composeResources/values-sk/strings.xml | 6 ++ .../composeResources/values-sl/strings.xml | 6 ++ .../composeResources/values-sr/strings.xml | 6 ++ .../composeResources/values-sv/strings.xml | 6 ++ .../composeResources/values-th/strings.xml | 6 ++ .../composeResources/values-tr/strings.xml | 6 ++ .../composeResources/values-uk/strings.xml | 6 ++ .../composeResources/values-vi/strings.xml | 6 ++ .../values-zh-rCN/strings.xml | 6 ++ .../values-zh-rTW/strings.xml | 6 ++ .../composeResources/values/strings.xml | 6 ++ .../maxkeppeler/sheets/option/OptionDialog.kt | 0 .../maxkeppeler/sheets/option/OptionPopup.kt | 0 .../maxkeppeler/sheets/option/OptionState.kt | 5 +- .../maxkeppeler/sheets/option/OptionView.kt | 1 - .../sheets/option/models/DisplayMode.kt | 0 .../sheets/option/models/Option.kt | 15 ++-- .../sheets/option/models/OptionConfig.kt | 3 +- .../sheets/option/models/OptionDetails.kt | 5 +- .../sheets/option/models/OptionSelection.kt | 5 +- .../sheets/option/utils/Constants.kt | 0 .../option/views/InfoContainerComponent.kt | 4 +- .../option/views/OptionBoundsComponent.kt | 19 +++--- .../sheets/option/views/OptionComponent.kt | 3 +- .../option/views/OptionDetailsDialog.kt | 2 - .../option/views/OptionGridItemComponent.kt | 2 - .../option/views/OptionItemComponent.kt | 0 .../option/views/OptionListItemComponent.kt | 3 +- option/src/main/AndroidManifest.xml | 2 - option/src/main/res/values-bg/strings.xml | 6 -- option/src/main/res/values-cs/strings.xml | 6 -- option/src/main/res/values-da/strings.xml | 6 -- option/src/main/res/values-de-rDE/strings.xml | 7 -- option/src/main/res/values-de/strings.xml | 6 -- option/src/main/res/values-el/strings.xml | 6 -- option/src/main/res/values-eo/strings.xml | 6 -- option/src/main/res/values-es/strings.xml | 6 -- option/src/main/res/values-et/strings.xml | 6 -- option/src/main/res/values-fa/strings.xml | 6 -- option/src/main/res/values-fi/strings.xml | 6 -- option/src/main/res/values-fr/strings.xml | 6 -- option/src/main/res/values-ga/strings.xml | 6 -- option/src/main/res/values-gd/strings.xml | 6 -- option/src/main/res/values-hi/strings.xml | 6 -- option/src/main/res/values-hr/strings.xml | 6 -- option/src/main/res/values-hu/strings.xml | 6 -- option/src/main/res/values-in-rID/strings.xml | 6 -- option/src/main/res/values-is/strings.xml | 6 -- option/src/main/res/values-it/strings.xml | 6 -- option/src/main/res/values-iw/strings.xml | 6 -- option/src/main/res/values-ja/strings.xml | 6 -- option/src/main/res/values-jv/strings.xml | 6 -- option/src/main/res/values-kk/strings.xml | 6 -- option/src/main/res/values-ko/strings.xml | 6 -- option/src/main/res/values-ku/strings.xml | 6 -- option/src/main/res/values-lb/strings.xml | 6 -- option/src/main/res/values-lo/strings.xml | 6 -- option/src/main/res/values-lt/strings.xml | 6 -- option/src/main/res/values-lv/strings.xml | 6 -- option/src/main/res/values-ms/strings.xml | 6 -- option/src/main/res/values-ne/strings.xml | 6 -- option/src/main/res/values-nl/strings.xml | 6 -- option/src/main/res/values-no/strings.xml | 6 -- option/src/main/res/values-pl/strings.xml | 6 -- option/src/main/res/values-pt/strings.xml | 6 -- option/src/main/res/values-ru/strings.xml | 6 -- option/src/main/res/values-sk/strings.xml | 6 -- option/src/main/res/values-sl/strings.xml | 6 -- option/src/main/res/values-sr/strings.xml | 6 -- option/src/main/res/values-sv/strings.xml | 6 -- option/src/main/res/values-th/strings.xml | 6 -- option/src/main/res/values-tr/strings.xml | 6 -- option/src/main/res/values-uk/strings.xml | 6 -- option/src/main/res/values-vi/strings.xml | 6 -- option/src/main/res/values-zh-rCN/strings.xml | 6 -- option/src/main/res/values-zh-rTW/strings.xml | 6 -- option/src/main/res/values/strings.xml | 6 -- settings.gradle.kts | 2 +- .../com/maxkeppeler/sheets/state/StateView.kt | 4 +- .../state/views/CircularProgressIndicator.kt | 2 +- .../state/views/LinearProgressIndicator.kt | 2 +- .../state/views/StateFailureComponent.kt | 2 +- .../state/views/StateSuccessComponent.kt | 2 +- 127 files changed, 382 insertions(+), 359 deletions(-) create mode 100644 option/src/commonMain/composeResources/values-bg/strings.xml create mode 100644 option/src/commonMain/composeResources/values-cs/strings.xml create mode 100644 option/src/commonMain/composeResources/values-da/strings.xml create mode 100644 option/src/commonMain/composeResources/values-de-rDE/strings.xml create mode 100644 option/src/commonMain/composeResources/values-de/strings.xml create mode 100644 option/src/commonMain/composeResources/values-el/strings.xml create mode 100644 option/src/commonMain/composeResources/values-eo/strings.xml create mode 100644 option/src/commonMain/composeResources/values-es/strings.xml create mode 100644 option/src/commonMain/composeResources/values-et/strings.xml create mode 100644 option/src/commonMain/composeResources/values-fa/strings.xml create mode 100644 option/src/commonMain/composeResources/values-fi/strings.xml create mode 100644 option/src/commonMain/composeResources/values-fr/strings.xml create mode 100644 option/src/commonMain/composeResources/values-ga/strings.xml create mode 100644 option/src/commonMain/composeResources/values-gd/strings.xml create mode 100644 option/src/commonMain/composeResources/values-hi/strings.xml create mode 100644 option/src/commonMain/composeResources/values-hr/strings.xml create mode 100644 option/src/commonMain/composeResources/values-hu/strings.xml create mode 100644 option/src/commonMain/composeResources/values-in-rID/strings.xml create mode 100644 option/src/commonMain/composeResources/values-is/strings.xml create mode 100644 option/src/commonMain/composeResources/values-it/strings.xml create mode 100644 option/src/commonMain/composeResources/values-iw/strings.xml create mode 100644 option/src/commonMain/composeResources/values-ja/strings.xml create mode 100644 option/src/commonMain/composeResources/values-jv/strings.xml create mode 100644 option/src/commonMain/composeResources/values-kk/strings.xml create mode 100644 option/src/commonMain/composeResources/values-ko/strings.xml create mode 100644 option/src/commonMain/composeResources/values-ku/strings.xml create mode 100644 option/src/commonMain/composeResources/values-lb/strings.xml create mode 100644 option/src/commonMain/composeResources/values-lo/strings.xml create mode 100644 option/src/commonMain/composeResources/values-lt/strings.xml create mode 100644 option/src/commonMain/composeResources/values-lv/strings.xml create mode 100644 option/src/commonMain/composeResources/values-ms/strings.xml create mode 100644 option/src/commonMain/composeResources/values-ne/strings.xml create mode 100644 option/src/commonMain/composeResources/values-nl/strings.xml create mode 100644 option/src/commonMain/composeResources/values-no/strings.xml create mode 100644 option/src/commonMain/composeResources/values-pl/strings.xml create mode 100644 option/src/commonMain/composeResources/values-pt/strings.xml create mode 100644 option/src/commonMain/composeResources/values-ru/strings.xml create mode 100644 option/src/commonMain/composeResources/values-sk/strings.xml create mode 100644 option/src/commonMain/composeResources/values-sl/strings.xml create mode 100644 option/src/commonMain/composeResources/values-sr/strings.xml create mode 100644 option/src/commonMain/composeResources/values-sv/strings.xml create mode 100644 option/src/commonMain/composeResources/values-th/strings.xml create mode 100644 option/src/commonMain/composeResources/values-tr/strings.xml create mode 100644 option/src/commonMain/composeResources/values-uk/strings.xml create mode 100644 option/src/commonMain/composeResources/values-vi/strings.xml create mode 100644 option/src/commonMain/composeResources/values-zh-rCN/strings.xml create mode 100644 option/src/commonMain/composeResources/values-zh-rTW/strings.xml create mode 100644 option/src/commonMain/composeResources/values/strings.xml rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/OptionDialog.kt (100%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/OptionPopup.kt (100%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/OptionState.kt (98%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/OptionView.kt (98%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/models/DisplayMode.kt (100%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/models/Option.kt (83%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/models/OptionConfig.kt (91%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/models/OptionDetails.kt (85%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/models/OptionSelection.kt (96%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/utils/Constants.kt (100%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/views/InfoContainerComponent.kt (93%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/views/OptionBoundsComponent.kt (82%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/views/OptionComponent.kt (97%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/views/OptionDetailsDialog.kt (97%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt (98%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/views/OptionItemComponent.kt (100%) rename option/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt (97%) delete mode 100644 option/src/main/AndroidManifest.xml delete mode 100644 option/src/main/res/values-bg/strings.xml delete mode 100644 option/src/main/res/values-cs/strings.xml delete mode 100644 option/src/main/res/values-da/strings.xml delete mode 100644 option/src/main/res/values-de-rDE/strings.xml delete mode 100644 option/src/main/res/values-de/strings.xml delete mode 100644 option/src/main/res/values-el/strings.xml delete mode 100644 option/src/main/res/values-eo/strings.xml delete mode 100644 option/src/main/res/values-es/strings.xml delete mode 100644 option/src/main/res/values-et/strings.xml delete mode 100644 option/src/main/res/values-fa/strings.xml delete mode 100644 option/src/main/res/values-fi/strings.xml delete mode 100644 option/src/main/res/values-fr/strings.xml delete mode 100644 option/src/main/res/values-ga/strings.xml delete mode 100644 option/src/main/res/values-gd/strings.xml delete mode 100644 option/src/main/res/values-hi/strings.xml delete mode 100644 option/src/main/res/values-hr/strings.xml delete mode 100644 option/src/main/res/values-hu/strings.xml delete mode 100644 option/src/main/res/values-in-rID/strings.xml delete mode 100644 option/src/main/res/values-is/strings.xml delete mode 100644 option/src/main/res/values-it/strings.xml delete mode 100644 option/src/main/res/values-iw/strings.xml delete mode 100644 option/src/main/res/values-ja/strings.xml delete mode 100644 option/src/main/res/values-jv/strings.xml delete mode 100644 option/src/main/res/values-kk/strings.xml delete mode 100644 option/src/main/res/values-ko/strings.xml delete mode 100644 option/src/main/res/values-ku/strings.xml delete mode 100644 option/src/main/res/values-lb/strings.xml delete mode 100644 option/src/main/res/values-lo/strings.xml delete mode 100644 option/src/main/res/values-lt/strings.xml delete mode 100644 option/src/main/res/values-lv/strings.xml delete mode 100644 option/src/main/res/values-ms/strings.xml delete mode 100644 option/src/main/res/values-ne/strings.xml delete mode 100644 option/src/main/res/values-nl/strings.xml delete mode 100644 option/src/main/res/values-no/strings.xml delete mode 100644 option/src/main/res/values-pl/strings.xml delete mode 100644 option/src/main/res/values-pt/strings.xml delete mode 100644 option/src/main/res/values-ru/strings.xml delete mode 100644 option/src/main/res/values-sk/strings.xml delete mode 100644 option/src/main/res/values-sl/strings.xml delete mode 100644 option/src/main/res/values-sr/strings.xml delete mode 100644 option/src/main/res/values-sv/strings.xml delete mode 100644 option/src/main/res/values-th/strings.xml delete mode 100644 option/src/main/res/values-tr/strings.xml delete mode 100644 option/src/main/res/values-uk/strings.xml delete mode 100644 option/src/main/res/values-vi/strings.xml delete mode 100644 option/src/main/res/values-zh-rCN/strings.xml delete mode 100644 option/src/main/res/values-zh-rTW/strings.xml delete mode 100644 option/src/main/res/values/strings.xml diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt index 1594837e..c52dc32b 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt +++ b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt @@ -109,7 +109,7 @@ internal fun KeyItemComponent( ) { if (isActionNext || isActionPrev) { val maxSize = 48.dp - val minSize = dimensionResource(RC.dimen.scd_size_100) + val minSize = 16.dp Icon( modifier = Modifier .padding(8.dp) diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt index 3aecf73b..4ee84021 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt +++ b/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt @@ -89,7 +89,7 @@ internal fun ColorTemplateItemComponent( ) { Icon( modifier = Modifier - .size(dimensionResource(RC.dimen.scd_size_100)), + .size(16.dp), imageVector = config.icons.Check, contentDescription = null, tint = MaterialTheme.colorScheme.primary diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt b/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt index a12f61a4..c89b27e5 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt +++ b/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt @@ -103,7 +103,7 @@ internal fun KeyItemComponent( ) { if (isActionBackspace || isActionClear) { val maxSize = 48.dp - val minSize = dimensionResource(RC.dimen.scd_size_100) + val minSize = 16.dp Icon( modifier = Modifier .padding(8.dp) diff --git a/info/src/main/java/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt b/info/src/main/java/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt index 67a0b1c3..46102174 100644 --- a/info/src/main/java/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt +++ b/info/src/main/java/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt @@ -36,7 +36,7 @@ internal fun DefaultBodyComponent(body: InfoBody.Default) { Column( modifier = Modifier .testTag(TestTags.INFO_BODY_DEFAULT) - .padding(top = dimensionResource(id = RC.dimen.scd_normal_100)) + .padding(top = 16.dp) ) { body.preBody() diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt index 46178614..684eb0a5 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt +++ b/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt @@ -54,7 +54,7 @@ internal fun InputItemHeaderComponent( IconComponent( modifier = Modifier .testTags(TestTags.INPUT_ITEM_HEADER_ICON, index) - .size(dimensionResource(RC.dimen.scd_size_100)), + .size(16.dp), iconSource = it, ) } diff --git a/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionBoundsComponent.kt b/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionBoundsComponent.kt index 70719f7f..958215ab 100644 --- a/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionBoundsComponent.kt +++ b/list/src/main/java/com/maxkeppeler/sheets/list/views/ListOptionBoundsComponent.kt @@ -52,7 +52,7 @@ internal fun ListOptionBoundsComponent( || selection.maxChoices != null) -> { Row( modifier = Modifier - .padding(bottom = dimensionResource(id = RC.dimen.scd_normal_100)), + .padding(bottom = 16.dp), verticalAlignment = Alignment.CenterVertically ) { diff --git a/option/build.gradle.kts b/option/build.gradle.kts index 704dc172..de6f95ad 100644 --- a/option/build.gradle.kts +++ b/option/build.gradle.kts @@ -1,27 +1,55 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl + plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) } android { namespace = Modules.OPTION.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } } -mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file +kotlin { + androidTarget() + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.components.resources) + + implementation(libs.serialization) + + implementation(project(":core")) + } + } +} diff --git a/option/src/commonMain/composeResources/values-bg/strings.xml b/option/src/commonMain/composeResources/values-bg/strings.xml new file mode 100644 index 00000000..314968dd --- /dev/null +++ b/option/src/commonMain/composeResources/values-bg/strings.xml @@ -0,0 +1,6 @@ + + + Select at least %1$d options + Select at most %1$d options + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-cs/strings.xml b/option/src/commonMain/composeResources/values-cs/strings.xml new file mode 100644 index 00000000..4a8eb6c9 --- /dev/null +++ b/option/src/commonMain/composeResources/values-cs/strings.xml @@ -0,0 +1,6 @@ + + + Vyberte alespoň %1$d možnosti. + Vyberte nejvýše %1$d možnosti + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-da/strings.xml b/option/src/commonMain/composeResources/values-da/strings.xml new file mode 100644 index 00000000..44ab57be --- /dev/null +++ b/option/src/commonMain/composeResources/values-da/strings.xml @@ -0,0 +1,6 @@ + + + Vælg mindst %1$d muligheder. + Vælg højst %1$d muligheder. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-de-rDE/strings.xml b/option/src/commonMain/composeResources/values-de-rDE/strings.xml new file mode 100644 index 00000000..d6eb72d6 --- /dev/null +++ b/option/src/commonMain/composeResources/values-de-rDE/strings.xml @@ -0,0 +1,7 @@ + + + + Wähle mindestens %1$d Optionen aus + Wähle maximal %1$d Optionen aus + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-de/strings.xml b/option/src/commonMain/composeResources/values-de/strings.xml new file mode 100644 index 00000000..27da61bc --- /dev/null +++ b/option/src/commonMain/composeResources/values-de/strings.xml @@ -0,0 +1,6 @@ + + + Wählen Sie mindestens %1$d Optionen aus. + Wählen Sie höchstens %1$d Optionen aus. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-el/strings.xml b/option/src/commonMain/composeResources/values-el/strings.xml new file mode 100644 index 00000000..5e47ff40 --- /dev/null +++ b/option/src/commonMain/composeResources/values-el/strings.xml @@ -0,0 +1,6 @@ + + + Επιλέξτε τουλάχιστον %1$d επιλογές + Επιλέξτε το πολύ %1$d επιλογές. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-eo/strings.xml b/option/src/commonMain/composeResources/values-eo/strings.xml new file mode 100644 index 00000000..3a330a4a --- /dev/null +++ b/option/src/commonMain/composeResources/values-eo/strings.xml @@ -0,0 +1,6 @@ + + + Elektu almenaŭ %1$d opciojn. + Elektu maksimume %1$d opciojn + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-es/strings.xml b/option/src/commonMain/composeResources/values-es/strings.xml new file mode 100644 index 00000000..856433f0 --- /dev/null +++ b/option/src/commonMain/composeResources/values-es/strings.xml @@ -0,0 +1,6 @@ + + + Selecciona al menos %1$d opciones + Seleccione como máximo %1$d opciones + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-et/strings.xml b/option/src/commonMain/composeResources/values-et/strings.xml new file mode 100644 index 00000000..9ebc2d81 --- /dev/null +++ b/option/src/commonMain/composeResources/values-et/strings.xml @@ -0,0 +1,6 @@ + + + Valige vähemalt %1$d valikut. + Valige maksimaalselt %1$d võimalust + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-fa/strings.xml b/option/src/commonMain/composeResources/values-fa/strings.xml new file mode 100644 index 00000000..b39c80d0 --- /dev/null +++ b/option/src/commonMain/composeResources/values-fa/strings.xml @@ -0,0 +1,6 @@ + + + حداقل %1$d گزینه را انتخاب کنید + حداکثر %1$d گزینه را انتخاب کنید + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-fi/strings.xml b/option/src/commonMain/composeResources/values-fi/strings.xml new file mode 100644 index 00000000..98683a96 --- /dev/null +++ b/option/src/commonMain/composeResources/values-fi/strings.xml @@ -0,0 +1,6 @@ + + + Valitse vähintään %1$d vaihtoehtoa + Valitse enintään %1$d vaihtoehtoa + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-fr/strings.xml b/option/src/commonMain/composeResources/values-fr/strings.xml new file mode 100644 index 00000000..ff7a40ae --- /dev/null +++ b/option/src/commonMain/composeResources/values-fr/strings.xml @@ -0,0 +1,6 @@ + + + Sélectionnez au moins %1$d options. + Sélectionnez au maximum %1$d options + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-ga/strings.xml b/option/src/commonMain/composeResources/values-ga/strings.xml new file mode 100644 index 00000000..ab4087fc --- /dev/null +++ b/option/src/commonMain/composeResources/values-ga/strings.xml @@ -0,0 +1,6 @@ + + + Roghnaigh ar a laghad %1$d rogha + Roghnaigh ar a máthair %1$d rogha agus gan níos mó. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-gd/strings.xml b/option/src/commonMain/composeResources/values-gd/strings.xml new file mode 100644 index 00000000..4de10523 --- /dev/null +++ b/option/src/commonMain/composeResources/values-gd/strings.xml @@ -0,0 +1,6 @@ + + + Tagh air a bheil %1$d roghainnean aig a mhìnmeanadh + Tagh air feadh gun tèid barrachd na %1$d roghainn a thaghadh + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-hi/strings.xml b/option/src/commonMain/composeResources/values-hi/strings.xml new file mode 100644 index 00000000..6d368298 --- /dev/null +++ b/option/src/commonMain/composeResources/values-hi/strings.xml @@ -0,0 +1,6 @@ + + + कम से कम %1$d विकल्प चुनें + अधिकतम %1$d विकल्पों में से चयन करें + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-hr/strings.xml b/option/src/commonMain/composeResources/values-hr/strings.xml new file mode 100644 index 00000000..67d4af76 --- /dev/null +++ b/option/src/commonMain/composeResources/values-hr/strings.xml @@ -0,0 +1,6 @@ + + + Odaberite barem %1$d opcija + Odaberite najviše %1$d opcija + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-hu/strings.xml b/option/src/commonMain/composeResources/values-hu/strings.xml new file mode 100644 index 00000000..a566eff5 --- /dev/null +++ b/option/src/commonMain/composeResources/values-hu/strings.xml @@ -0,0 +1,6 @@ + + + Válaszd ki legalább %1$d lehetőséget + Válasszon legfeljebb %1$d lehetőséget + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-in-rID/strings.xml b/option/src/commonMain/composeResources/values-in-rID/strings.xml new file mode 100644 index 00000000..ba3c8c14 --- /dev/null +++ b/option/src/commonMain/composeResources/values-in-rID/strings.xml @@ -0,0 +1,6 @@ + + + Pilih setidaknya %1$d opsi. + Pilih maksimal %1$d pilihan + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-is/strings.xml b/option/src/commonMain/composeResources/values-is/strings.xml new file mode 100644 index 00000000..14e09e16 --- /dev/null +++ b/option/src/commonMain/composeResources/values-is/strings.xml @@ -0,0 +1,6 @@ + + + Velja þarf að minnsta kosti %1$d möguleika. + Veldu allra mest $1$d möguleika + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-it/strings.xml b/option/src/commonMain/composeResources/values-it/strings.xml new file mode 100644 index 00000000..9814f649 --- /dev/null +++ b/option/src/commonMain/composeResources/values-it/strings.xml @@ -0,0 +1,6 @@ + + + Seleziona almeno %1$d opzioni + Seleziona al massimo %1$d opzioni + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-iw/strings.xml b/option/src/commonMain/composeResources/values-iw/strings.xml new file mode 100644 index 00000000..45151876 --- /dev/null +++ b/option/src/commonMain/composeResources/values-iw/strings.xml @@ -0,0 +1,6 @@ + + + בחר לפחות %1$d אפשרויות + בחר לכל היותר %1$d אפשרויות + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-ja/strings.xml b/option/src/commonMain/composeResources/values-ja/strings.xml new file mode 100644 index 00000000..c8275e85 --- /dev/null +++ b/option/src/commonMain/composeResources/values-ja/strings.xml @@ -0,0 +1,6 @@ + + + 少なくとも%1$d個のオプションを選択してください。 + 最大%1$d個のオプションを選択してください。 + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-jv/strings.xml b/option/src/commonMain/composeResources/values-jv/strings.xml new file mode 100644 index 00000000..0f4878eb --- /dev/null +++ b/option/src/commonMain/composeResources/values-jv/strings.xml @@ -0,0 +1,6 @@ + + + Pilih setidaknya %1$d opsi. + Pilih paling sejene %1$d pilihan + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-kk/strings.xml b/option/src/commonMain/composeResources/values-kk/strings.xml new file mode 100644 index 00000000..a0ba1718 --- /dev/null +++ b/option/src/commonMain/composeResources/values-kk/strings.xml @@ -0,0 +1,6 @@ + + + %1$d опцияларды таңдау. + %1$d ондағы опцияларды таңдау + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-ko/strings.xml b/option/src/commonMain/composeResources/values-ko/strings.xml new file mode 100644 index 00000000..c31000b4 --- /dev/null +++ b/option/src/commonMain/composeResources/values-ko/strings.xml @@ -0,0 +1,6 @@ + + + 적어도 %1$d개의 옵션을 선택하세요. + 최대 %1$d 개의 옵션을 선택하세요. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-ku/strings.xml b/option/src/commonMain/composeResources/values-ku/strings.xml new file mode 100644 index 00000000..9aa1aace --- /dev/null +++ b/option/src/commonMain/composeResources/values-ku/strings.xml @@ -0,0 +1,6 @@ + + + تکایە کمێک لە %1$d هەڵبژێرە + هەڵبژاردنی %1$d هەڵبژارد بۆ دیاربکاتەوە + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-lb/strings.xml b/option/src/commonMain/composeResources/values-lb/strings.xml new file mode 100644 index 00000000..e5a8b7a3 --- /dev/null +++ b/option/src/commonMain/composeResources/values-lb/strings.xml @@ -0,0 +1,6 @@ + + + Wielt mindestens %1$d Optiounen aus. + Wielt maximal %1$d Optiounen aus + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-lo/strings.xml b/option/src/commonMain/composeResources/values-lo/strings.xml new file mode 100644 index 00000000..fc25bd0c --- /dev/null +++ b/option/src/commonMain/composeResources/values-lo/strings.xml @@ -0,0 +1,6 @@ + + + ເລືອກຢ່າງໜຶ່ງສູງສຸດຫຼາຍເກີນຫນ້າ %1$d ທາງເພື່ອແລະປ່ຽນສາມາດໂຕະມັນໄດ້ໄດ້ເອງ + ເລືອກໄວ້ແລ້ວທີ່ສາມາດເລືອກໄດ້ນີ້ບໍ່ໜ້ອຍ %1$d ຕົວເລືອດ + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-lt/strings.xml b/option/src/commonMain/composeResources/values-lt/strings.xml new file mode 100644 index 00000000..8644de11 --- /dev/null +++ b/option/src/commonMain/composeResources/values-lt/strings.xml @@ -0,0 +1,6 @@ + + + Pasirinkite bent jau %1$d parinktis + Pasirinkite daugiausiai %1$d parinktis + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-lv/strings.xml b/option/src/commonMain/composeResources/values-lv/strings.xml new file mode 100644 index 00000000..fc051caa --- /dev/null +++ b/option/src/commonMain/composeResources/values-lv/strings.xml @@ -0,0 +1,6 @@ + + + Izvēlieties vismaz %1$d opcijas + Izvēlieties ne vairāk kā %1$d opcijas. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-ms/strings.xml b/option/src/commonMain/composeResources/values-ms/strings.xml new file mode 100644 index 00000000..70264322 --- /dev/null +++ b/option/src/commonMain/composeResources/values-ms/strings.xml @@ -0,0 +1,6 @@ + + + Pilih sekurang-kurangnya %1$d pilihan + Pilih paling banyak %1$d pilihan + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-ne/strings.xml b/option/src/commonMain/composeResources/values-ne/strings.xml new file mode 100644 index 00000000..fd58e722 --- /dev/null +++ b/option/src/commonMain/composeResources/values-ne/strings.xml @@ -0,0 +1,6 @@ + + + कमैले कमै %1$d पर्याप्त विकल्पहरू छान्नुहोस्। + कम्तिमा %1$d विकल्पहरू छनिनेछन्। + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-nl/strings.xml b/option/src/commonMain/composeResources/values-nl/strings.xml new file mode 100644 index 00000000..f5952cd0 --- /dev/null +++ b/option/src/commonMain/composeResources/values-nl/strings.xml @@ -0,0 +1,6 @@ + + + Selecteer ten minste %1$d opties. + Selecteer maximaal %1$d opties + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-no/strings.xml b/option/src/commonMain/composeResources/values-no/strings.xml new file mode 100644 index 00000000..99c7765a --- /dev/null +++ b/option/src/commonMain/composeResources/values-no/strings.xml @@ -0,0 +1,6 @@ + + + Velg minst %1$d alternativer + Velg maksimalt %1$d alternativer + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-pl/strings.xml b/option/src/commonMain/composeResources/values-pl/strings.xml new file mode 100644 index 00000000..0aec1b29 --- /dev/null +++ b/option/src/commonMain/composeResources/values-pl/strings.xml @@ -0,0 +1,6 @@ + + + Wybierz co najmniej %1$d opcje + Wybierz maksymalnie %1$d opcje. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-pt/strings.xml b/option/src/commonMain/composeResources/values-pt/strings.xml new file mode 100644 index 00000000..463cf567 --- /dev/null +++ b/option/src/commonMain/composeResources/values-pt/strings.xml @@ -0,0 +1,6 @@ + + + Selecione pelo menos %1$d opções. + Selecione no máximo %1$d opções + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-ru/strings.xml b/option/src/commonMain/composeResources/values-ru/strings.xml new file mode 100644 index 00000000..cbecf79a --- /dev/null +++ b/option/src/commonMain/composeResources/values-ru/strings.xml @@ -0,0 +1,6 @@ + + + Выберите как минимум %1$d вариант(а) + Выберите не более %1$d опций + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-sk/strings.xml b/option/src/commonMain/composeResources/values-sk/strings.xml new file mode 100644 index 00000000..5ff2043a --- /dev/null +++ b/option/src/commonMain/composeResources/values-sk/strings.xml @@ -0,0 +1,6 @@ + + + Vyberte aspoň %1$d možnosti. + Vyberte maximálne %1$d možnosti. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-sl/strings.xml b/option/src/commonMain/composeResources/values-sl/strings.xml new file mode 100644 index 00000000..c02b6446 --- /dev/null +++ b/option/src/commonMain/composeResources/values-sl/strings.xml @@ -0,0 +1,6 @@ + + + Izberi vsaj %1$d možnosti. + Izberite največ %1$d možnosti. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-sr/strings.xml b/option/src/commonMain/composeResources/values-sr/strings.xml new file mode 100644 index 00000000..a32f4d62 --- /dev/null +++ b/option/src/commonMain/composeResources/values-sr/strings.xml @@ -0,0 +1,6 @@ + + + Izaberite najmanje %1$d opciju + Odaberite najviše %1$d opcija + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-sv/strings.xml b/option/src/commonMain/composeResources/values-sv/strings.xml new file mode 100644 index 00000000..420fab4c --- /dev/null +++ b/option/src/commonMain/composeResources/values-sv/strings.xml @@ -0,0 +1,6 @@ + + + Välj åtminstone %1$d alternativ + Välj högst %1$d alternativ. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-th/strings.xml b/option/src/commonMain/composeResources/values-th/strings.xml new file mode 100644 index 00000000..486e1637 --- /dev/null +++ b/option/src/commonMain/composeResources/values-th/strings.xml @@ -0,0 +1,6 @@ + + + เลือกอย่างน้อย %1$d ตัวเลือก + เลือกได้มากที่สุด %1$d ตัวเลือก + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-tr/strings.xml b/option/src/commonMain/composeResources/values-tr/strings.xml new file mode 100644 index 00000000..d8cb4e69 --- /dev/null +++ b/option/src/commonMain/composeResources/values-tr/strings.xml @@ -0,0 +1,6 @@ + + + En azından %1$d seçenek seçin. + En fazla %1$d seçeneği seçin. + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-uk/strings.xml b/option/src/commonMain/composeResources/values-uk/strings.xml new file mode 100644 index 00000000..bf2b9095 --- /dev/null +++ b/option/src/commonMain/composeResources/values-uk/strings.xml @@ -0,0 +1,6 @@ + + + Виберіть принаймні %1$d опцій + Оберіть не більше %1$d варіантів + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-vi/strings.xml b/option/src/commonMain/composeResources/values-vi/strings.xml new file mode 100644 index 00000000..5e9092b8 --- /dev/null +++ b/option/src/commonMain/composeResources/values-vi/strings.xml @@ -0,0 +1,6 @@ + + + Hãy chọn ít nhất %1$d lựa chọn + Chọn tối đa %1$d tùy chọn + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-zh-rCN/strings.xml b/option/src/commonMain/composeResources/values-zh-rCN/strings.xml new file mode 100644 index 00000000..6702caee --- /dev/null +++ b/option/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -0,0 +1,6 @@ + + + 至少选择%1$d个选项 + 最多选择 %1$d 个选项 + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values-zh-rTW/strings.xml b/option/src/commonMain/composeResources/values-zh-rTW/strings.xml new file mode 100644 index 00000000..bd161f9e --- /dev/null +++ b/option/src/commonMain/composeResources/values-zh-rTW/strings.xml @@ -0,0 +1,6 @@ + + + 至少選擇 %1$d 選項 + 選擇最多 %1$d 選項 + + \ No newline at end of file diff --git a/option/src/commonMain/composeResources/values/strings.xml b/option/src/commonMain/composeResources/values/strings.xml new file mode 100644 index 00000000..1b89daf0 --- /dev/null +++ b/option/src/commonMain/composeResources/values/strings.xml @@ -0,0 +1,6 @@ + + + Select at least %1$d options + Select at most %1$d options + + diff --git a/option/src/main/java/com/maxkeppeler/sheets/option/OptionDialog.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt similarity index 100% rename from option/src/main/java/com/maxkeppeler/sheets/option/OptionDialog.kt rename to option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt diff --git a/option/src/main/java/com/maxkeppeler/sheets/option/OptionPopup.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt similarity index 100% rename from option/src/main/java/com/maxkeppeler/sheets/option/OptionPopup.kt rename to option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt diff --git a/option/src/main/java/com/maxkeppeler/sheets/option/OptionState.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionState.kt similarity index 98% rename from option/src/main/java/com/maxkeppeler/sheets/option/OptionState.kt rename to option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionState.kt index 71561e84..842fa176 100644 --- a/option/src/main/java/com/maxkeppeler/sheets/option/OptionState.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionState.kt @@ -25,7 +25,7 @@ import com.maxkeppeker.sheets.core.views.BaseTypeState import com.maxkeppeler.sheets.option.models.Option import com.maxkeppeler.sheets.option.models.OptionConfig import com.maxkeppeler.sheets.option.models.OptionSelection -import java.io.Serializable +import kotlinx.serialization.Serializable /** * Handles the option state. @@ -132,9 +132,10 @@ internal class OptionState( * Data class that stores the important information of the current state * and can be used by the [Saver] to save and restore the state. */ + @Serializable data class OptionStateData( val options: List \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-ga/strings.xml b/calendar/src/commonMain/composeResources/values-ga/strings.xml index e5f34a07..caa3db4d 100644 --- a/calendar/src/commonMain/composeResources/values-ga/strings.xml +++ b/calendar/src/commonMain/composeResources/values-ga/strings.xml @@ -1,9 +1,9 @@ - Roghnaigh mí - An mhí seo chugainn - An mhí seo chugainn - An chéad seachtain eile. - Seachtain roimhe - Roghnaigh bliain - CW + Roghnaigh mí + An mhí seo chugainn + An mhí seo chugainn + An chéad seachtain eile. + Seachtain roimhe + Roghnaigh bliain + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-gd/strings.xml b/calendar/src/commonMain/composeResources/values-gd/strings.xml index bab2d86e..23ecf0f2 100644 --- a/calendar/src/commonMain/composeResources/values-gd/strings.xml +++ b/calendar/src/commonMain/composeResources/values-gd/strings.xml @@ -1,9 +1,9 @@ - Tagh mìos - An ath-mhìos - An-ath-mhìos - An ath sheachdain - Seachdain a dh\'fhalbh. - Tagh bliadhna - CW + Tagh mìos + An ath-mhìos + An-ath-mhìos + An ath sheachdain + Seachdain a dh\'fhalbh. + Tagh bliadhna + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-hi/strings.xml b/calendar/src/commonMain/composeResources/values-hi/strings.xml index 74913ba8..3593e818 100644 --- a/calendar/src/commonMain/composeResources/values-hi/strings.xml +++ b/calendar/src/commonMain/composeResources/values-hi/strings.xml @@ -1,9 +1,9 @@ - महीना चुनें - अगले महीने - अगले महीने - अगले हफ़्ते - पिछला सप्ताह - साल चुनें - CW + महीना चुनें + अगले महीने + अगले महीने + अगले हफ़्ते + पिछला सप्ताह + साल चुनें + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-hr/strings.xml b/calendar/src/commonMain/composeResources/values-hr/strings.xml index 784796af..46629759 100644 --- a/calendar/src/commonMain/composeResources/values-hr/strings.xml +++ b/calendar/src/commonMain/composeResources/values-hr/strings.xml @@ -1,9 +1,9 @@ - Odaberite mjesec - Sljedeći mjesec - Sljedeći mjesec - Sljedeći tjedan - Prošli tjedan - Odaberite godinu - CW + Odaberite mjesec + Sljedeći mjesec + Sljedeći mjesec + Sljedeći tjedan + Prošli tjedan + Odaberite godinu + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-hu/strings.xml b/calendar/src/commonMain/composeResources/values-hu/strings.xml index b89bdddc..bf70b13d 100644 --- a/calendar/src/commonMain/composeResources/values-hu/strings.xml +++ b/calendar/src/commonMain/composeResources/values-hu/strings.xml @@ -1,9 +1,9 @@ - Hónap kiválasztása - Jövő hónap - Jövő hónap - Következő hét - Előző héten - Év kiválasztása - CW + Hónap kiválasztása + Jövő hónap + Jövő hónap + Következő hét + Előző héten + Év kiválasztása + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-in-rID/strings.xml b/calendar/src/commonMain/composeResources/values-in-rID/strings.xml index 2bd7f25b..9060db09 100644 --- a/calendar/src/commonMain/composeResources/values-in-rID/strings.xml +++ b/calendar/src/commonMain/composeResources/values-in-rID/strings.xml @@ -1,9 +1,9 @@ - Pilih bulan - Bulan depan - Bulan depan - Minggu depan - Minggu sebelumnya - Pilih tahun - CW + Pilih bulan + Bulan depan + Bulan depan + Minggu depan + Minggu sebelumnya + Pilih tahun + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-is/strings.xml b/calendar/src/commonMain/composeResources/values-is/strings.xml index 50e37231..fcada9d4 100644 --- a/calendar/src/commonMain/composeResources/values-is/strings.xml +++ b/calendar/src/commonMain/composeResources/values-is/strings.xml @@ -1,9 +1,9 @@ - Velja mánuð - Næst komandi mánuði - Næsti mánuður - Næstu viku - Síðasta viku - Veldu árið - CW + Velja mánuð + Næst komandi mánuði + Næsti mánuður + Næstu viku + Síðasta viku + Veldu árið + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-it/strings.xml b/calendar/src/commonMain/composeResources/values-it/strings.xml index 55bc5ff5..4cb1904f 100644 --- a/calendar/src/commonMain/composeResources/values-it/strings.xml +++ b/calendar/src/commonMain/composeResources/values-it/strings.xml @@ -5,5 +5,5 @@ Settimana successiva Settimana precedente Seleziona anno - CW + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-iw/strings.xml b/calendar/src/commonMain/composeResources/values-iw/strings.xml index 860f9f05..9b12cf80 100644 --- a/calendar/src/commonMain/composeResources/values-iw/strings.xml +++ b/calendar/src/commonMain/composeResources/values-iw/strings.xml @@ -1,9 +1,9 @@ - בחר חודש - בחודש הבא - בחודש הבא - שבוע הבא - השבוע קודם - בחר שנה - CW + בחר חודש + בחודש הבא + בחודש הבא + שבוע הבא + השבוע קודם + בחר שנה + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-ja/strings.xml b/calendar/src/commonMain/composeResources/values-ja/strings.xml index 87a31c99..54c95c97 100644 --- a/calendar/src/commonMain/composeResources/values-ja/strings.xml +++ b/calendar/src/commonMain/composeResources/values-ja/strings.xml @@ -5,5 +5,5 @@ 来週 前週 年を選択 - CW + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-jv/strings.xml b/calendar/src/commonMain/composeResources/values-jv/strings.xml index 73bae0eb..e0ee914b 100644 --- a/calendar/src/commonMain/composeResources/values-jv/strings.xml +++ b/calendar/src/commonMain/composeResources/values-jv/strings.xml @@ -1,9 +1,9 @@ - Pilih sasi - Sasih ngandika. - Sasih ngandika. - Minggu depan - Minggu keseloro - Pilih tahun - CW + Pilih sasi + Sasih ngandika. + Sasih ngandika. + Minggu depan + Minggu keseloro + Pilih tahun + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-kk/strings.xml b/calendar/src/commonMain/composeResources/values-kk/strings.xml index 23649738..dadf186f 100644 --- a/calendar/src/commonMain/composeResources/values-kk/strings.xml +++ b/calendar/src/commonMain/composeResources/values-kk/strings.xml @@ -1,9 +1,9 @@ - Айды таңдау - Келесі ай - Келесі ай - Желкегі аптаның келесі қызығы. - Өткен апта - Жылды таңдау - CW + Айды таңдау + Келесі ай + Келесі ай + Желкегі аптаның келесі қызығы. + Өткен апта + Жылды таңдау + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-ko/strings.xml b/calendar/src/commonMain/composeResources/values-ko/strings.xml index 777a36c3..dbbd1dcc 100644 --- a/calendar/src/commonMain/composeResources/values-ko/strings.xml +++ b/calendar/src/commonMain/composeResources/values-ko/strings.xml @@ -5,5 +5,5 @@ 다음 주 이전 주 연도 선택 - CW + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-ku/strings.xml b/calendar/src/commonMain/composeResources/values-ku/strings.xml index 353079d0..27561bcd 100644 --- a/calendar/src/commonMain/composeResources/values-ku/strings.xml +++ b/calendar/src/commonMain/composeResources/values-ku/strings.xml @@ -1,9 +1,9 @@ - مانگ دیاری بکه - مانگای داهاتەوە - مانگێکتە ئاگادارم - هەفتای داهاتووبوو - Hefta pêşîn. - سال هەڵبژێرە - CW + مانگ دیاری بکه + مانگای داهاتەوە + مانگێکتە ئاگادارم + هەفتای داهاتووبوو + Hefta pêşîn. + سال هەڵبژێرە + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-lb/strings.xml b/calendar/src/commonMain/composeResources/values-lb/strings.xml index 57f06f40..f980937d 100644 --- a/calendar/src/commonMain/composeResources/values-lb/strings.xml +++ b/calendar/src/commonMain/composeResources/values-lb/strings.xml @@ -1,9 +1,9 @@ - Wiel Monat auswielen - Nächst Meecheden - Nächst Mount - Nächste Woch - Lescht Woch - Joer auswielen - CW + Wiel Monat auswielen + Nächst Meecheden + Nächst Mount + Nächste Woch + Lescht Woch + Joer auswielen + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-lo/strings.xml b/calendar/src/commonMain/composeResources/values-lo/strings.xml index 02ea1e88..ef14c80f 100644 --- a/calendar/src/commonMain/composeResources/values-lo/strings.xml +++ b/calendar/src/commonMain/composeResources/values-lo/strings.xml @@ -1,9 +1,9 @@ - ເລືອກເດືອນ - ເດືອນຕໍ່ໄປ - ເດືອນຕໍ່ໄປ - ອີກມື້ນີ້ - ອີກດິນເດືອນ - ເລືອກປີ - CW + ເລືອກເດືອນ + ເດືອນຕໍ່ໄປ + ເດືອນຕໍ່ໄປ + ອີກມື້ນີ້ + ອີກດິນເດືອນ + ເລືອກປີ + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-lt/strings.xml b/calendar/src/commonMain/composeResources/values-lt/strings.xml index 88fb54ec..592f8f45 100644 --- a/calendar/src/commonMain/composeResources/values-lt/strings.xml +++ b/calendar/src/commonMain/composeResources/values-lt/strings.xml @@ -1,9 +1,9 @@ - Pasirinkite mėnesį. - Kitą mėnesį - Kitą mėnesį - Kitą savaitę - Praeita savaitė - Pasirinkite metus. - CW + Pasirinkite mėnesį. + Kitą mėnesį + Kitą mėnesį + Kitą savaitę + Praeita savaitė + Pasirinkite metus. + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-lv/strings.xml b/calendar/src/commonMain/composeResources/values-lv/strings.xml index 2daa35ff..e5f65860 100644 --- a/calendar/src/commonMain/composeResources/values-lv/strings.xml +++ b/calendar/src/commonMain/composeResources/values-lv/strings.xml @@ -1,9 +1,9 @@ - Izvēlieties mēnesi - Nākamajā mēnesī - Nākamajā mēnesī - Nākamā nedēļa - Iepriekšējā nedēļā. - Izvēlieties gadu - CW + Izvēlieties mēnesi + Nākamajā mēnesī + Nākamajā mēnesī + Nākamā nedēļa + Iepriekšējā nedēļā. + Izvēlieties gadu + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-ms/strings.xml b/calendar/src/commonMain/composeResources/values-ms/strings.xml index 76e49bf0..e0e020be 100644 --- a/calendar/src/commonMain/composeResources/values-ms/strings.xml +++ b/calendar/src/commonMain/composeResources/values-ms/strings.xml @@ -1,9 +1,9 @@ - Pilih bulan - Bulan depan - Bulan depan - Minggu depan - Minggu lepas - Pilih tahun - CW + Pilih bulan + Bulan depan + Bulan depan + Minggu depan + Minggu lepas + Pilih tahun + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-ne/strings.xml b/calendar/src/commonMain/composeResources/values-ne/strings.xml index 1b4598f2..cf499d61 100644 --- a/calendar/src/commonMain/composeResources/values-ne/strings.xml +++ b/calendar/src/commonMain/composeResources/values-ne/strings.xml @@ -1,9 +1,9 @@ - महिना छान्नुहोस् - अर्को महिना - अगाडीको महिना - अर्को हप्ता - अघिल्लो हप्ता - वर्ष छान्नुहोस् - CW + महिना छान्नुहोस् + अर्को महिना + अगाडीको महिना + अर्को हप्ता + अघिल्लो हप्ता + वर्ष छान्नुहोस् + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-nl/strings.xml b/calendar/src/commonMain/composeResources/values-nl/strings.xml index e2653e77..9c1ede9c 100644 --- a/calendar/src/commonMain/composeResources/values-nl/strings.xml +++ b/calendar/src/commonMain/composeResources/values-nl/strings.xml @@ -5,5 +5,5 @@ Volgende week Vorige week Selecteer jaar - CW + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-no/strings.xml b/calendar/src/commonMain/composeResources/values-no/strings.xml index 3ba8113a..50d2a807 100644 --- a/calendar/src/commonMain/composeResources/values-no/strings.xml +++ b/calendar/src/commonMain/composeResources/values-no/strings.xml @@ -1,9 +1,9 @@ - Velg måned - Neste måned - Neste måned - Neste uke - Forrige uke - Velg år - CW + Velg måned + Neste måned + Neste måned + Neste uke + Forrige uke + Velg år + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-pl/strings.xml b/calendar/src/commonMain/composeResources/values-pl/strings.xml index 7d96b142..350f30d7 100644 --- a/calendar/src/commonMain/composeResources/values-pl/strings.xml +++ b/calendar/src/commonMain/composeResources/values-pl/strings.xml @@ -1,9 +1,9 @@ - Wybierz miesiąc - W przyszłym miesiącu - W przyszłym miesiącu - Następny tydzień - Poprzedni tydzień - Wybierz rok - CW + Wybierz miesiąc + W przyszłym miesiącu + W przyszłym miesiącu + Następny tydzień + Poprzedni tydzień + Wybierz rok + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-pt/strings.xml b/calendar/src/commonMain/composeResources/values-pt/strings.xml index c3c6c144..9d3620d7 100644 --- a/calendar/src/commonMain/composeResources/values-pt/strings.xml +++ b/calendar/src/commonMain/composeResources/values-pt/strings.xml @@ -5,5 +5,5 @@ Próxima semana Semana anterior Selecionar ano - CW + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-ru/strings.xml b/calendar/src/commonMain/composeResources/values-ru/strings.xml index 9472ff92..2df0669c 100644 --- a/calendar/src/commonMain/composeResources/values-ru/strings.xml +++ b/calendar/src/commonMain/composeResources/values-ru/strings.xml @@ -5,5 +5,5 @@ Следующая неделя Предыдущая неделя Выбрать год - CW + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-sk/strings.xml b/calendar/src/commonMain/composeResources/values-sk/strings.xml index 70d58255..7839f71d 100644 --- a/calendar/src/commonMain/composeResources/values-sk/strings.xml +++ b/calendar/src/commonMain/composeResources/values-sk/strings.xml @@ -1,9 +1,9 @@ - Vybrať mesiac - Budúci mesiac - Budúci mesiac - Budúci týždeň - Prešlý týždeň - Vyberte rok - CW + Vybrať mesiac + Budúci mesiac + Budúci mesiac + Budúci týždeň + Prešlý týždeň + Vyberte rok + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-sl/strings.xml b/calendar/src/commonMain/composeResources/values-sl/strings.xml index 82f90485..b3e715dc 100644 --- a/calendar/src/commonMain/composeResources/values-sl/strings.xml +++ b/calendar/src/commonMain/composeResources/values-sl/strings.xml @@ -1,9 +1,9 @@ - Izberi mesec - Prihodnji mesec - Naslednji mesec - Naslednji teden - Pretekli teden - Izberi leto. - CW + Izberi mesec + Prihodnji mesec + Naslednji mesec + Naslednji teden + Pretekli teden + Izberi leto. + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-sr/strings.xml b/calendar/src/commonMain/composeResources/values-sr/strings.xml index f7223c47..6226e950 100644 --- a/calendar/src/commonMain/composeResources/values-sr/strings.xml +++ b/calendar/src/commonMain/composeResources/values-sr/strings.xml @@ -1,9 +1,9 @@ - Odaberi mesec - Sledeći mesec - Sledećeg meseca - Sledeće nedelje - Prošle nedelje - Izaberite godinu - CW + Odaberi mesec + Sledeći mesec + Sledećeg meseca + Sledeće nedelje + Prošle nedelje + Izaberite godinu + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-sv/strings.xml b/calendar/src/commonMain/composeResources/values-sv/strings.xml index fd01d5a1..09cf8252 100644 --- a/calendar/src/commonMain/composeResources/values-sv/strings.xml +++ b/calendar/src/commonMain/composeResources/values-sv/strings.xml @@ -1,9 +1,9 @@ - Välj månad - Nästa månad - Nästa månad - Nästa vecka - Föregående vecka - Välj år - CW + Välj månad + Nästa månad + Nästa månad + Nästa vecka + Föregående vecka + Välj år + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-th/strings.xml b/calendar/src/commonMain/composeResources/values-th/strings.xml index 86c903d3..02ccf347 100644 --- a/calendar/src/commonMain/composeResources/values-th/strings.xml +++ b/calendar/src/commonMain/composeResources/values-th/strings.xml @@ -1,9 +1,9 @@ - เลือกเดือน - เดือนหน้า - เดือนถัดไป - อาทิตย์หน้า - สัปดาห์ที่แล้ว - เลือกปี - CW + เลือกเดือน + เดือนหน้า + เดือนถัดไป + อาทิตย์หน้า + สัปดาห์ที่แล้ว + เลือกปี + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-tr/strings.xml b/calendar/src/commonMain/composeResources/values-tr/strings.xml index 50fcad1c..1fe692a1 100644 --- a/calendar/src/commonMain/composeResources/values-tr/strings.xml +++ b/calendar/src/commonMain/composeResources/values-tr/strings.xml @@ -1,9 +1,9 @@ - Ay seçin - Gelecek ay - Gelecek ay - Önümüzdeki hafta - Geçen hafta - Yıl seçin. - CW + Ay seçin + Gelecek ay + Gelecek ay + Önümüzdeki hafta + Geçen hafta + Yıl seçin. + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-uk/strings.xml b/calendar/src/commonMain/composeResources/values-uk/strings.xml index f80191d1..e7c67e4c 100644 --- a/calendar/src/commonMain/composeResources/values-uk/strings.xml +++ b/calendar/src/commonMain/composeResources/values-uk/strings.xml @@ -1,9 +1,9 @@ - Вибрати місяць - Наступний місяць - Наступного місяця - Наступного тижня - Минулий тиждень - Виберіть рік - CW + Вибрати місяць + Наступний місяць + Наступного місяця + Наступного тижня + Минулий тиждень + Виберіть рік + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-vi/strings.xml b/calendar/src/commonMain/composeResources/values-vi/strings.xml index 8c66b91f..c52c53eb 100644 --- a/calendar/src/commonMain/composeResources/values-vi/strings.xml +++ b/calendar/src/commonMain/composeResources/values-vi/strings.xml @@ -1,9 +1,9 @@ - Chọn tháng - Tháng sau - Tháng sau - Tuần tới - Tuần trước - Chọn năm - CW + Chọn tháng + Tháng sau + Tháng sau + Tuần tới + Tuần trước + Chọn năm + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-zh-rCN/strings.xml b/calendar/src/commonMain/composeResources/values-zh-rCN/strings.xml index 59ea69fa..bbb1fdb7 100644 --- a/calendar/src/commonMain/composeResources/values-zh-rCN/strings.xml +++ b/calendar/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -1,9 +1,9 @@ - 选择月份 - 下个月 - 下个月 - 下周 - 上个星期 - 选择年份 - CW + 选择月份 + 下个月 + 下个月 + 下周 + 上个星期 + 选择年份 + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-zh-rTW/strings.xml b/calendar/src/commonMain/composeResources/values-zh-rTW/strings.xml index 17217bc3..a3a3747f 100644 --- a/calendar/src/commonMain/composeResources/values-zh-rTW/strings.xml +++ b/calendar/src/commonMain/composeResources/values-zh-rTW/strings.xml @@ -1,9 +1,9 @@ - 選擇月份 - 下個月 - 下個月 - 下周 - Prev week (上週) - 選擇年份 - CW + 選擇月份 + 下個月 + 下個月 + 下周 + Prev week (上週) + 選擇年份 + CW \ No newline at end of file diff --git a/calendar/src/commonMain/composeResources/values-zh/strings.xml b/calendar/src/commonMain/composeResources/values-zh/strings.xml index 4e37f23a..37289269 100644 --- a/calendar/src/commonMain/composeResources/values-zh/strings.xml +++ b/calendar/src/commonMain/composeResources/values-zh/strings.xml @@ -1,4 +1,3 @@ - 选择月份 下个月 diff --git a/calendar/src/commonMain/composeResources/values/strings.xml b/calendar/src/commonMain/composeResources/values/strings.xml index 16de5252..3f105d6f 100644 --- a/calendar/src/commonMain/composeResources/values/strings.xml +++ b/calendar/src/commonMain/composeResources/values/strings.xml @@ -1,9 +1,9 @@ - Select month - Next month - Next month - Next week - Prev week - Select year - CW + Select month + Next month + Next month + Next week + Prev week + Select year + CW \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt index b19d7520..c802e6dc 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt @@ -61,13 +61,13 @@ internal fun getOrderedDayOfWeekLabels(locale: FormatLocale): LinkedHashMap "Monday" - DayOfWeek.TUESDAY -> "Tuesday" - DayOfWeek.WEDNESDAY -> "Wednesday" - DayOfWeek.THURSDAY -> "Thursday" - DayOfWeek.FRIDAY -> "Friday" - DayOfWeek.SATURDAY -> "Saturday" - DayOfWeek.SUNDAY -> "Sunday" + DayOfWeek.MONDAY -> "M" + DayOfWeek.TUESDAY -> "T" + DayOfWeek.WEDNESDAY -> "W" + DayOfWeek.THURSDAY -> "T" + DayOfWeek.FRIDAY -> "F" + DayOfWeek.SATURDAY -> "S" + DayOfWeek.SUNDAY -> "S" else -> this.name } } From 87bb4a0280416be0029038ee9ff60b71ccab81ea Mon Sep 17 00:00:00 2001 From: DatLag Date: Sat, 30 Mar 2024 22:13:50 +0100 Subject: [PATCH 20/58] fix calendar arrow size --- .../sheets/calendar/views/CalendarTopComponent.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt index 9d601f7d..d62e3fec 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt @@ -186,7 +186,7 @@ internal fun CalendarTopComponent( ) if (config.monthSelection && monthSelectionEnabled) { Icon( - modifier = Modifier.size(48.dp), + modifier = Modifier.size(24.dp), imageVector = Icons.Filled.KeyboardArrowUp, contentDescription = stringResource(Res.string.scd_calendar_dialog_select_month), tint = MaterialTheme.colorScheme.primary @@ -213,7 +213,7 @@ internal fun CalendarTopComponent( ) if (config.yearSelection && yearSelectionEnabled) { Icon( - modifier = Modifier.size(48.dp), + modifier = Modifier.size(24.dp), imageVector = Icons.Filled.KeyboardArrowUp, contentDescription = stringResource(Res.string.scd_calendar_dialog_select_year), tint = MaterialTheme.colorScheme.primary @@ -333,7 +333,7 @@ internal fun CalendarTopLandscapeComponent( ) if (config.yearSelection) { Icon( - modifier = Modifier.size(48.dp), + modifier = Modifier.size(24.dp), imageVector = Icons.Filled.KeyboardArrowUp, contentDescription = stringResource(Res.string.scd_calendar_dialog_select_year), tint = MaterialTheme.colorScheme.primary @@ -361,7 +361,7 @@ internal fun CalendarTopLandscapeComponent( ) if (config.monthSelection) { Icon( - modifier = Modifier.size(48.dp), + modifier = Modifier.size(24.dp), imageVector = Icons.Filled.KeyboardArrowUp, contentDescription = stringResource(Res.string.scd_calendar_dialog_select_month), tint = MaterialTheme.colorScheme.primary From ba0823288a419d0cbfdd1c3b2d04ff7f9423c7a4 Mon Sep 17 00:00:00 2001 From: DatLag Date: Wed, 3 Apr 2024 19:13:14 +0200 Subject: [PATCH 21/58] added default selection for rating --- .../kotlin/com/maxkeppeler/sheets/rating/RatingState.kt | 2 +- .../com/maxkeppeler/sheets/rating/models/RatingConfig.kt | 1 + .../sheets/rating/views/RatingSelectionView.kt | 9 --------- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt index 740ebcbf..4b5cd285 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt @@ -39,7 +39,7 @@ internal class RatingState( stateData: RatingStateData? = null, ) : BaseTypeState() { - var rating: Int? by mutableStateOf(stateData?.rating) + var rating: Int? by mutableStateOf(stateData?.rating ?: config.ratingOptionsSelected) var feedback by mutableStateOf(stateData?.feedback) var ratingValid by mutableStateOf(isRatingValid()) diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt index 1f2083f4..022bfbe9 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt @@ -30,6 +30,7 @@ class RatingConfig( val withFeedback: Boolean = false, val feedbackOptional: Boolean = true, val ratingOptionsCount: Int = DEFAULT_RATING_OPTIONS_COUNT, + val ratingOptionsSelected: Int? = null, override val icons: LibIcons = DEFAULT_ICON_STYLE, ) : BaseConfigs() diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt index b9d263a9..c81d9793 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/RatingSelectionView.kt @@ -107,13 +107,4 @@ private fun RatingOptionView( tint = if (selected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.secondaryContainer, ) } -} - -@Composable -private fun PreviewRatingSelectionView() { - RatingSelectionView( - value = 4, - config = RatingConfig(ratingOptionsCount = 5), - onSelectRating = {}, - ) } \ No newline at end of file From a8ba838598d077616b0a25147a839f02d8593ad2 Mon Sep 17 00:00:00 2001 From: DatLag Date: Wed, 3 Apr 2024 19:29:46 +0200 Subject: [PATCH 22/58] fix resources --- clock/src/main/AndroidManifest.xml | 2 -- clock/src/main/res/values-bg/strings.xml | 18 ++++++------- clock/src/main/res/values-cs/strings.xml | 18 ++++++------- clock/src/main/res/values-da/strings.xml | 18 ++++++------- clock/src/main/res/values-de-rDE/strings.xml | 19 +++++++------- clock/src/main/res/values-de/strings.xml | 18 ++++++------- clock/src/main/res/values-el/strings.xml | 18 ++++++------- clock/src/main/res/values-eo/strings.xml | 18 ++++++------- clock/src/main/res/values-es/strings.xml | 18 ++++++------- clock/src/main/res/values-et/strings.xml | 18 ++++++------- clock/src/main/res/values-fa/strings.xml | 18 ++++++------- clock/src/main/res/values-fi/strings.xml | 18 ++++++------- clock/src/main/res/values-fr/strings.xml | 18 ++++++------- clock/src/main/res/values-ga/strings.xml | 18 ++++++------- clock/src/main/res/values-gd/strings.xml | 18 ++++++------- clock/src/main/res/values-hi/strings.xml | 18 ++++++------- clock/src/main/res/values-hr/strings.xml | 18 ++++++------- clock/src/main/res/values-hu/strings.xml | 18 ++++++------- clock/src/main/res/values-in-rID/strings.xml | 18 ++++++------- clock/src/main/res/values-is/strings.xml | 18 ++++++------- clock/src/main/res/values-it/strings.xml | 18 ++++++------- clock/src/main/res/values-iw/strings.xml | 18 ++++++------- clock/src/main/res/values-ja/strings.xml | 18 ++++++------- clock/src/main/res/values-jv/strings.xml | 18 ++++++------- clock/src/main/res/values-kk/strings.xml | 18 ++++++------- clock/src/main/res/values-ko/strings.xml | 18 ++++++------- clock/src/main/res/values-ku/strings.xml | 18 ++++++------- clock/src/main/res/values-lb/strings.xml | 18 ++++++------- clock/src/main/res/values-lo/strings.xml | 18 ++++++------- clock/src/main/res/values-lt/strings.xml | 18 ++++++------- clock/src/main/res/values-lv/strings.xml | 18 ++++++------- clock/src/main/res/values-ms/strings.xml | 18 ++++++------- clock/src/main/res/values-ne/strings.xml | 18 ++++++------- clock/src/main/res/values-nl/strings.xml | 18 ++++++------- clock/src/main/res/values-no/strings.xml | 18 ++++++------- clock/src/main/res/values-pl/strings.xml | 18 ++++++------- clock/src/main/res/values-pt/strings.xml | 18 ++++++------- clock/src/main/res/values-ru/strings.xml | 18 ++++++------- clock/src/main/res/values-sk/strings.xml | 18 ++++++------- clock/src/main/res/values-sl/strings.xml | 18 ++++++------- clock/src/main/res/values-sr/strings.xml | 18 ++++++------- clock/src/main/res/values-sv/strings.xml | 18 ++++++------- clock/src/main/res/values-th/strings.xml | 18 ++++++------- clock/src/main/res/values-tr/strings.xml | 18 ++++++------- clock/src/main/res/values-uk/strings.xml | 18 ++++++------- clock/src/main/res/values-vi/strings.xml | 18 ++++++------- clock/src/main/res/values-zh-rCN/strings.xml | 18 ++++++------- clock/src/main/res/values-zh-rTW/strings.xml | 18 ++++++------- clock/src/main/res/values/strings.xml | 20 +++++++------- color/src/main/AndroidManifest.xml | 2 -- color/src/main/res/values-bg/strings.xml | 26 +++++++++---------- color/src/main/res/values-cs/strings.xml | 26 +++++++++---------- color/src/main/res/values-da/strings.xml | 26 +++++++++---------- color/src/main/res/values-de-rDE/strings.xml | 1 - color/src/main/res/values-de/strings.xml | 26 +++++++++---------- color/src/main/res/values-el/strings.xml | 26 +++++++++---------- color/src/main/res/values-eo/strings.xml | 26 +++++++++---------- color/src/main/res/values-es/strings.xml | 26 +++++++++---------- color/src/main/res/values-et/strings.xml | 26 +++++++++---------- color/src/main/res/values-fa/strings.xml | 26 +++++++++---------- color/src/main/res/values-fi/strings.xml | 26 +++++++++---------- color/src/main/res/values-fr/strings.xml | 26 +++++++++---------- color/src/main/res/values-ga/strings.xml | 26 +++++++++---------- color/src/main/res/values-gd/strings.xml | 26 +++++++++---------- color/src/main/res/values-hi/strings.xml | 26 +++++++++---------- color/src/main/res/values-hr/strings.xml | 26 +++++++++---------- color/src/main/res/values-hu/strings.xml | 26 +++++++++---------- color/src/main/res/values-in-rID/strings.xml | 26 +++++++++---------- color/src/main/res/values-is/strings.xml | 26 +++++++++---------- color/src/main/res/values-it/strings.xml | 26 +++++++++---------- color/src/main/res/values-iw/strings.xml | 26 +++++++++---------- color/src/main/res/values-ja/strings.xml | 26 +++++++++---------- color/src/main/res/values-jv/strings.xml | 26 +++++++++---------- color/src/main/res/values-kk/strings.xml | 26 +++++++++---------- color/src/main/res/values-ko/strings.xml | 26 +++++++++---------- color/src/main/res/values-ku/strings.xml | 26 +++++++++---------- color/src/main/res/values-lb/strings.xml | 26 +++++++++---------- color/src/main/res/values-lo/strings.xml | 26 +++++++++---------- color/src/main/res/values-lt/strings.xml | 26 +++++++++---------- color/src/main/res/values-lv/strings.xml | 26 +++++++++---------- color/src/main/res/values-ms/strings.xml | 26 +++++++++---------- color/src/main/res/values-ne/strings.xml | 26 +++++++++---------- color/src/main/res/values-nl/strings.xml | 26 +++++++++---------- color/src/main/res/values-no/strings.xml | 26 +++++++++---------- color/src/main/res/values-pl/strings.xml | 26 +++++++++---------- color/src/main/res/values-pt/strings.xml | 26 +++++++++---------- color/src/main/res/values-ru/strings.xml | 26 +++++++++---------- color/src/main/res/values-sk/strings.xml | 26 +++++++++---------- color/src/main/res/values-sl/strings.xml | 26 +++++++++---------- color/src/main/res/values-sr/strings.xml | 26 +++++++++---------- color/src/main/res/values-sv/strings.xml | 26 +++++++++---------- color/src/main/res/values-th/strings.xml | 26 +++++++++---------- color/src/main/res/values-tr/strings.xml | 26 +++++++++---------- color/src/main/res/values-uk/strings.xml | 26 +++++++++---------- color/src/main/res/values-vi/strings.xml | 26 +++++++++---------- color/src/main/res/values-zh-rCN/strings.xml | 26 +++++++++---------- color/src/main/res/values-zh-rTW/strings.xml | 26 +++++++++---------- color/src/main/res/values/strings.xml | 26 +++++++++---------- .../values-de-rDE/strings.xml | 1 - date_time/src/main/AndroidManifest.xml | 2 -- date_time/src/main/res/values-bg/strings.xml | 20 +++++++------- date_time/src/main/res/values-cs/strings.xml | 20 +++++++------- date_time/src/main/res/values-da/strings.xml | 20 +++++++------- .../src/main/res/values-de-rDE/strings.xml | 2 +- date_time/src/main/res/values-de/strings.xml | 20 +++++++------- date_time/src/main/res/values-el/strings.xml | 20 +++++++------- date_time/src/main/res/values-eo/strings.xml | 20 +++++++------- date_time/src/main/res/values-es/strings.xml | 20 +++++++------- date_time/src/main/res/values-et/strings.xml | 20 +++++++------- date_time/src/main/res/values-fa/strings.xml | 20 +++++++------- date_time/src/main/res/values-fi/strings.xml | 20 +++++++------- date_time/src/main/res/values-fr/strings.xml | 20 +++++++------- date_time/src/main/res/values-ga/strings.xml | 20 +++++++------- date_time/src/main/res/values-gd/strings.xml | 20 +++++++------- date_time/src/main/res/values-hi/strings.xml | 20 +++++++------- date_time/src/main/res/values-hr/strings.xml | 20 +++++++------- date_time/src/main/res/values-hu/strings.xml | 20 +++++++------- .../src/main/res/values-in-rID/strings.xml | 20 +++++++------- date_time/src/main/res/values-is/strings.xml | 20 +++++++------- date_time/src/main/res/values-it/strings.xml | 20 +++++++------- date_time/src/main/res/values-iw/strings.xml | 20 +++++++------- date_time/src/main/res/values-ja/strings.xml | 20 +++++++------- date_time/src/main/res/values-jv/strings.xml | 20 +++++++------- date_time/src/main/res/values-kk/strings.xml | 20 +++++++------- date_time/src/main/res/values-ko/strings.xml | 20 +++++++------- date_time/src/main/res/values-ku/strings.xml | 20 +++++++------- date_time/src/main/res/values-lb/strings.xml | 20 +++++++------- date_time/src/main/res/values-lo/strings.xml | 20 +++++++------- date_time/src/main/res/values-lt/strings.xml | 20 +++++++------- date_time/src/main/res/values-lv/strings.xml | 20 +++++++------- date_time/src/main/res/values-ms/strings.xml | 20 +++++++------- date_time/src/main/res/values-ne/strings.xml | 20 +++++++------- date_time/src/main/res/values-nl/strings.xml | 20 +++++++------- date_time/src/main/res/values-no/strings.xml | 20 +++++++------- date_time/src/main/res/values-pl/strings.xml | 20 +++++++------- date_time/src/main/res/values-pt/strings.xml | 20 +++++++------- date_time/src/main/res/values-ru/strings.xml | 20 +++++++------- date_time/src/main/res/values-sk/strings.xml | 20 +++++++------- date_time/src/main/res/values-sl/strings.xml | 20 +++++++------- date_time/src/main/res/values-sr/strings.xml | 20 +++++++------- date_time/src/main/res/values-sv/strings.xml | 20 +++++++------- date_time/src/main/res/values-th/strings.xml | 20 +++++++------- date_time/src/main/res/values-tr/strings.xml | 20 +++++++------- date_time/src/main/res/values-uk/strings.xml | 20 +++++++------- date_time/src/main/res/values-vi/strings.xml | 20 +++++++------- .../src/main/res/values-zh-rCN/strings.xml | 20 +++++++------- .../src/main/res/values-zh-rTW/strings.xml | 20 +++++++------- date_time/src/main/res/values/strings.xml | 20 +++++++------- duration/src/main/AndroidManifest.xml | 2 -- duration/src/main/res/values-bg/strings.xml | 20 +++++++------- duration/src/main/res/values-cs/strings.xml | 20 +++++++------- duration/src/main/res/values-da/strings.xml | 20 +++++++------- .../src/main/res/values-de-rDE/strings.xml | 2 +- duration/src/main/res/values-de/strings.xml | 20 +++++++------- duration/src/main/res/values-el/strings.xml | 20 +++++++------- duration/src/main/res/values-eo/strings.xml | 20 +++++++------- duration/src/main/res/values-es/strings.xml | 20 +++++++------- duration/src/main/res/values-et/strings.xml | 20 +++++++------- duration/src/main/res/values-fa/strings.xml | 20 +++++++------- duration/src/main/res/values-fi/strings.xml | 20 +++++++------- duration/src/main/res/values-fr/strings.xml | 20 +++++++------- duration/src/main/res/values-ga/strings.xml | 20 +++++++------- duration/src/main/res/values-gd/strings.xml | 20 +++++++------- duration/src/main/res/values-hi/strings.xml | 20 +++++++------- duration/src/main/res/values-hr/strings.xml | 20 +++++++------- duration/src/main/res/values-hu/strings.xml | 20 +++++++------- .../src/main/res/values-in-rID/strings.xml | 20 +++++++------- duration/src/main/res/values-is/strings.xml | 20 +++++++------- duration/src/main/res/values-it/strings.xml | 20 +++++++------- duration/src/main/res/values-iw/strings.xml | 20 +++++++------- duration/src/main/res/values-ja/strings.xml | 20 +++++++------- duration/src/main/res/values-jv/strings.xml | 20 +++++++------- duration/src/main/res/values-kk/strings.xml | 20 +++++++------- duration/src/main/res/values-ko/strings.xml | 20 +++++++------- duration/src/main/res/values-ku/strings.xml | 20 +++++++------- duration/src/main/res/values-lb/strings.xml | 20 +++++++------- duration/src/main/res/values-lo/strings.xml | 20 +++++++------- duration/src/main/res/values-lt/strings.xml | 20 +++++++------- duration/src/main/res/values-lv/strings.xml | 20 +++++++------- duration/src/main/res/values-ms/strings.xml | 20 +++++++------- duration/src/main/res/values-ne/strings.xml | 20 +++++++------- duration/src/main/res/values-nl/strings.xml | 20 +++++++------- duration/src/main/res/values-no/strings.xml | 20 +++++++------- duration/src/main/res/values-pl/strings.xml | 20 +++++++------- duration/src/main/res/values-pt/strings.xml | 20 +++++++------- duration/src/main/res/values-ru/strings.xml | 20 +++++++------- duration/src/main/res/values-sk/strings.xml | 20 +++++++------- duration/src/main/res/values-sl/strings.xml | 20 +++++++------- duration/src/main/res/values-sr/strings.xml | 20 +++++++------- duration/src/main/res/values-sv/strings.xml | 20 +++++++------- duration/src/main/res/values-th/strings.xml | 20 +++++++------- duration/src/main/res/values-tr/strings.xml | 20 +++++++------- duration/src/main/res/values-uk/strings.xml | 20 +++++++------- duration/src/main/res/values-vi/strings.xml | 20 +++++++------- .../src/main/res/values-zh-rCN/strings.xml | 20 +++++++------- .../src/main/res/values-zh-rTW/strings.xml | 20 +++++++------- duration/src/main/res/values/strings.xml | 22 ++++++++-------- emoji/src/main/AndroidManifest.xml | 2 -- info/src/main/AndroidManifest.xml | 2 -- input/src/main/AndroidManifest.xml | 2 -- .../values-de-rDE/strings.xml | 2 +- .../values-de-rDE/strings.xml | 2 +- state/src/main/AndroidManifest.xml | 2 -- 203 files changed, 1988 insertions(+), 2009 deletions(-) delete mode 100644 clock/src/main/AndroidManifest.xml delete mode 100644 color/src/main/AndroidManifest.xml delete mode 100644 date_time/src/main/AndroidManifest.xml delete mode 100644 duration/src/main/AndroidManifest.xml delete mode 100644 emoji/src/main/AndroidManifest.xml delete mode 100644 info/src/main/AndroidManifest.xml delete mode 100644 input/src/main/AndroidManifest.xml delete mode 100644 state/src/main/AndroidManifest.xml diff --git a/clock/src/main/AndroidManifest.xml b/clock/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/clock/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/clock/src/main/res/values-bg/strings.xml b/clock/src/main/res/values-bg/strings.xml index 54916dbf..0b601082 100644 --- a/clock/src/main/res/values-bg/strings.xml +++ b/clock/src/main/res/values-bg/strings.xml @@ -1,14 +1,14 @@ - h - м - s - D - AM - ММ - Следваща стойност - Предишна стойност - Трябва да бъде между %1$s и %2$s. + h + м + s + D + AM + ММ + Следваща стойност + Предишна стойност + Трябва да бъде между %1$s и %2$s. Часове Минути diff --git a/clock/src/main/res/values-cs/strings.xml b/clock/src/main/res/values-cs/strings.xml index b0085c7b..daad4ddb 100644 --- a/clock/src/main/res/values-cs/strings.xml +++ b/clock/src/main/res/values-cs/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Další hodnota - Předchozí hodnota - Musí být mezi %1$s a %2$s + h + m + s + D + AM + PM + Další hodnota + Předchozí hodnota + Musí být mezi %1$s a %2$s Hodiny Minuty diff --git a/clock/src/main/res/values-da/strings.xml b/clock/src/main/res/values-da/strings.xml index 453f9a40..294a6152 100644 --- a/clock/src/main/res/values-da/strings.xml +++ b/clock/src/main/res/values-da/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Næste værdi - Tidligere værdi - Skal være mellem %1$s og %2$s + h + m + s + D + AM + PM + Næste værdi + Tidligere værdi + Skal være mellem %1$s og %2$s Timer Minutter diff --git a/clock/src/main/res/values-de-rDE/strings.xml b/clock/src/main/res/values-de-rDE/strings.xml index 15c90ef0..27304ca6 100644 --- a/clock/src/main/res/values-de-rDE/strings.xml +++ b/clock/src/main/res/values-de-rDE/strings.xml @@ -1,15 +1,14 @@ - - h - m - s - D - AM - PM - Nächster Wert - Letzter Wert - Muss zwischen %1$s und %2$s sein + h + m + s + D + AM + PM + Nächster Wert + Letzter Wert + Muss zwischen %1$s und %2$s sein Stunden Minuten diff --git a/clock/src/main/res/values-de/strings.xml b/clock/src/main/res/values-de/strings.xml index 42c27856..e7d27380 100644 --- a/clock/src/main/res/values-de/strings.xml +++ b/clock/src/main/res/values-de/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Nächster Wert - Vorheriger Wert - Muss zwischen %1$s und %2$s liegen + h + m + s + D + AM + PM + Nächster Wert + Vorheriger Wert + Muss zwischen %1$s und %2$s liegen Stunden Minuten diff --git a/clock/src/main/res/values-el/strings.xml b/clock/src/main/res/values-el/strings.xml index 38b017f1..9f2788ec 100644 --- a/clock/src/main/res/values-el/strings.xml +++ b/clock/src/main/res/values-el/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - ΚΥ - Επόμενη τιμή - Προηγούμενη τιμή - Πρέπει να είναι ανάμεσα σε %1$s και %2$s + h + m + s + D + AM + ΚΥ + Επόμενη τιμή + Προηγούμενη τιμή + Πρέπει να είναι ανάμεσα σε %1$s και %2$s Ωρες Λεπτά diff --git a/clock/src/main/res/values-eo/strings.xml b/clock/src/main/res/values-eo/strings.xml index 46094fff..7ccb7517 100644 --- a/clock/src/main/res/values-eo/strings.xml +++ b/clock/src/main/res/values-eo/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Sekva valoro - Antaŭa valoro - Deviĝas inter %1$s kaj %2$s + h + m + s + D + AM + PM + Sekva valoro + Antaŭa valoro + Deviĝas inter %1$s kaj %2$s Horoj Minute diff --git a/clock/src/main/res/values-es/strings.xml b/clock/src/main/res/values-es/strings.xml index fd29cfa8..02725e3a 100644 --- a/clock/src/main/res/values-es/strings.xml +++ b/clock/src/main/res/values-es/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Siguiente valor - Valor anterior - Debe estar entre %1$s y %2$s + h + m + s + D + AM + PM + Siguiente valor + Valor anterior + Debe estar entre %1$s y %2$s Horas Minutos. diff --git a/clock/src/main/res/values-et/strings.xml b/clock/src/main/res/values-et/strings.xml index 4ccf081e..3768c425 100644 --- a/clock/src/main/res/values-et/strings.xml +++ b/clock/src/main/res/values-et/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Järgmine väärtus - Eelmine väärtus - Peab olema vahemikus %1$s ja %2$s + h + m + s + D + AM + PM + Järgmine väärtus + Eelmine väärtus + Peab olema vahemikus %1$s ja %2$s Tunnid Minutes diff --git a/clock/src/main/res/values-fa/strings.xml b/clock/src/main/res/values-fa/strings.xml index 8fc4d916..c5529ca0 100644 --- a/clock/src/main/res/values-fa/strings.xml +++ b/clock/src/main/res/values-fa/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - نمایندهٔ وزیری - مقدار بعدی - مقدار قبلی - باید بین %1$s و %2$s باشد + h + m + s + D + AM + نمایندهٔ وزیری + مقدار بعدی + مقدار قبلی + باید بین %1$s و %2$s باشد ساعات دقیقه ها diff --git a/clock/src/main/res/values-fi/strings.xml b/clock/src/main/res/values-fi/strings.xml index 03590d1f..a2d050ed 100644 --- a/clock/src/main/res/values-fi/strings.xml +++ b/clock/src/main/res/values-fi/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Seuraava arvo - Edellinen arvo - Pitäisi olla %1$s:n ja %2$s:n välissä + h + m + s + D + AM + PM + Seuraava arvo + Edellinen arvo + Pitäisi olla %1$s:n ja %2$s:n välissä Tunnit Pöytäkirja diff --git a/clock/src/main/res/values-fr/strings.xml b/clock/src/main/res/values-fr/strings.xml index d34f9c68..40a8e22f 100644 --- a/clock/src/main/res/values-fr/strings.xml +++ b/clock/src/main/res/values-fr/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Prochaine valeur - Valeur précédente - Doit être compris entre %1$s et %2$s + h + m + s + D + AM + PM + Prochaine valeur + Valeur précédente + Doit être compris entre %1$s et %2$s Heures Minutes diff --git a/clock/src/main/res/values-ga/strings.xml b/clock/src/main/res/values-ga/strings.xml index cfb07755..56286a90 100644 --- a/clock/src/main/res/values-ga/strings.xml +++ b/clock/src/main/res/values-ga/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Luach Ar Aghaidh - Luach roimhe sin - Caithfidh a bheith idir %1$s agus %2$s + h + m + s + D + AM + PM + Luach Ar Aghaidh + Luach roimhe sin + Caithfidh a bheith idir %1$s agus %2$s Uaireanta Nótaí diff --git a/clock/src/main/res/values-gd/strings.xml b/clock/src/main/res/values-gd/strings.xml index 6550123a..36543bf7 100644 --- a/clock/src/main/res/values-gd/strings.xml +++ b/clock/src/main/res/values-gd/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - Riaghaltas - Luach air ais - Luach roimhe seo - Cuiridh eadar %1$s agus %2$s + h + m + s + D + AM + Riaghaltas + Luach air ais + Luach roimhe seo + Cuiridh eadar %1$s agus %2$s Uairean No translation needed, \"Minutes\" will remain unchanged. diff --git a/clock/src/main/res/values-hi/strings.xml b/clock/src/main/res/values-hi/strings.xml index 2138d9f8..ac42516a 100644 --- a/clock/src/main/res/values-hi/strings.xml +++ b/clock/src/main/res/values-hi/strings.xml @@ -1,14 +1,14 @@ - h - m - - डी - AM - PM - अगला मान्यता - पिछला मान - %1$s और %2$s के बीच होना चाहिए। + h + m + + डी + AM + PM + अगला मान्यता + पिछला मान + %1$s और %2$s के बीच होना चाहिए। घंटे मिनट्स diff --git a/clock/src/main/res/values-hr/strings.xml b/clock/src/main/res/values-hr/strings.xml index b5ea65f3..940b201e 100644 --- a/clock/src/main/res/values-hr/strings.xml +++ b/clock/src/main/res/values-hr/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Sljedeća vrijednost - Prethodna vrijednost - Mora biti između %1$s i %2$s. + h + m + s + D + AM + PM + Sljedeća vrijednost + Prethodna vrijednost + Mora biti između %1$s i %2$s. Sati Minuta diff --git a/clock/src/main/res/values-hu/strings.xml b/clock/src/main/res/values-hu/strings.xml index 02ecc90d..a39a4c90 100644 --- a/clock/src/main/res/values-hu/strings.xml +++ b/clock/src/main/res/values-hu/strings.xml @@ -1,16 +1,16 @@ - h - m - s - D - AM - PM + h + m + s + D + AM + PM Miniszterelnök (PM) - Következő érték - Előző érték - A megadott értéknek %1$s és %2$s között kell lennie. + Következő érték + Előző érték + A megadott értéknek %1$s és %2$s között kell lennie. Órák Percek diff --git a/clock/src/main/res/values-in-rID/strings.xml b/clock/src/main/res/values-in-rID/strings.xml index 16a326de..cd12c0f8 100644 --- a/clock/src/main/res/values-in-rID/strings.xml +++ b/clock/src/main/res/values-in-rID/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM (Singkatan dari Perdana Menteri) - Nilai berikutnya - Nilai sebelumnya - Harus di antara %1$s dan %2$s + h + m + s + D + AM + PM (Singkatan dari Perdana Menteri) + Nilai berikutnya + Nilai sebelumnya + Harus di antara %1$s dan %2$s Jam Menit diff --git a/clock/src/main/res/values-is/strings.xml b/clock/src/main/res/values-is/strings.xml index 8e32c14b..6ed0b00d 100644 --- a/clock/src/main/res/values-is/strings.xml +++ b/clock/src/main/res/values-is/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Næsti gildi - Fyrri gildi - Verður að vera á milli %1$s og %2$s + h + m + s + D + AM + PM + Næsti gildi + Fyrri gildi + Verður að vera á milli %1$s og %2$s Klukkustundir Mínútur diff --git a/clock/src/main/res/values-it/strings.xml b/clock/src/main/res/values-it/strings.xml index be7e9cac..174d8d3c 100644 --- a/clock/src/main/res/values-it/strings.xml +++ b/clock/src/main/res/values-it/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Prossimo valore - Valore precedente - Deve essere compreso tra %1$s e %2$s + h + m + s + D + AM + PM + Prossimo valore + Valore precedente + Deve essere compreso tra %1$s e %2$s Ore Minuti diff --git a/clock/src/main/res/values-iw/strings.xml b/clock/src/main/res/values-iw/strings.xml index baa08561..281b9c93 100644 --- a/clock/src/main/res/values-iw/strings.xml +++ b/clock/src/main/res/values-iw/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - הערך הבא - הערך הקודם - יש להזין ערך בין %1$s ל-%2$s + h + m + s + D + AM + PM + הערך הבא + הערך הקודם + יש להזין ערך בין %1$s ל-%2$s שעות דקות diff --git a/clock/src/main/res/values-ja/strings.xml b/clock/src/main/res/values-ja/strings.xml index ce6b1f2f..e0002437 100644 --- a/clock/src/main/res/values-ja/strings.xml +++ b/clock/src/main/res/values-ja/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - 次の値 - 前の値 - %1$s と %2$s の間で指定してください + h + m + s + D + AM + PM + 次の値 + 前の値 + %1$s と %2$s の間で指定してください 営業時間 Minutes (分) diff --git a/clock/src/main/res/values-jv/strings.xml b/clock/src/main/res/values-jv/strings.xml index 45032794..ad5ba5d1 100644 --- a/clock/src/main/res/values-jv/strings.xml +++ b/clock/src/main/res/values-jv/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - OK. - OK - Nilai berikutnya - Nilai sebelumnya - Mesthi antara %1$s lan %2$s + h + m + s + D + OK. + OK + Nilai berikutnya + Nilai sebelumnya + Mesthi antara %1$s lan %2$s Jam Menit diff --git a/clock/src/main/res/values-kk/strings.xml b/clock/src/main/res/values-kk/strings.xml index 209efd32..298186c7 100644 --- a/clock/src/main/res/values-kk/strings.xml +++ b/clock/src/main/res/values-kk/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - OK - Келесі мән - Алдыңғы құндылық. - %1$s жана %2$s аралыгында болуы тиіс. + h + m + s + D + AM + OK + Келесі мән + Алдыңғы құндылық. + %1$s жана %2$s аралыгында болуы тиіс. Сағаттар Минуты diff --git a/clock/src/main/res/values-ko/strings.xml b/clock/src/main/res/values-ko/strings.xml index c6b0f758..317839df 100644 --- a/clock/src/main/res/values-ko/strings.xml +++ b/clock/src/main/res/values-ko/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - 다음 값을 - 이전 값 - %1$s와 %2$s 사이여야 합니다. + h + m + s + D + AM + PM + 다음 값을 + 이전 값 + %1$s와 %2$s 사이여야 합니다. 시간 분(minutes) diff --git a/clock/src/main/res/values-ku/strings.xml b/clock/src/main/res/values-ku/strings.xml index fc6ae919..de92d897 100644 --- a/clock/src/main/res/values-ku/strings.xml +++ b/clock/src/main/res/values-ku/strings.xml @@ -1,14 +1,14 @@ - ح]]> - m - s - D - ئ ام - PM - بۆ داهاتووری داهێنراوی داهاتووراوە]]> - Hunandina peywendî ya berê - پێویستە لەنێوان %1$s و %2$s بێت + ح]]> + m + s + D + ئ ام + PM + بۆ داهاتووری داهێنراوی داهاتووراوە]]> + Hunandina peywendî ya berê + پێویستە لەنێوان %1$s و %2$s بێت کاتژمێر Demjimêr diff --git a/clock/src/main/res/values-lb/strings.xml b/clock/src/main/res/values-lb/strings.xml index 0e252be7..c41960c3 100644 --- a/clock/src/main/res/values-lb/strings.xml +++ b/clock/src/main/res/values-lb/strings.xml @@ -1,14 +1,14 @@ - OK - m - s - OK - AM - PM - Nächste Wäert - Fréier Wäert - Muss tëschten %1$s an %2$s liewen. + OK + m + s + OK + AM + PM + Nächste Wäert + Fréier Wäert + Muss tëschten %1$s an %2$s liewen. Stonnen Minutten]]> diff --git a/clock/src/main/res/values-lo/strings.xml b/clock/src/main/res/values-lo/strings.xml index e37a5105..00c6d65a 100644 --- a/clock/src/main/res/values-lo/strings.xml +++ b/clock/src/main/res/values-lo/strings.xml @@ -1,14 +1,14 @@ - ຫມາຍ - m - s - D - AM - PM - ຈຳນວນຜູ້ນຳເຂົ້າງານອາກອນ - ຄ່າຕໍ່ເນື່ອງດ້ວຍຄ່າຕໍ່ຕໍ່ໄປ - ຄ່າເກັບຂໍ້ມູນທີ່ເກົ່າກ່ຽວຂ້ອງ - ຈຳ​ໄດ້​ບໍ່​ຕ້ອງ​ມີ​ຈຳ​ນວນ​ລະ​ຫວ່າງ​ດ້ວຍ %1$s ແລະ %2$s + ຫມາຍ + m + s + D + AM + PM - ຈຳນວນຜູ້ນຳເຂົ້າງານອາກອນ + ຄ່າຕໍ່ເນື່ອງດ້ວຍຄ່າຕໍ່ຕໍ່ໄປ + ຄ່າເກັບຂໍ້ມູນທີ່ເກົ່າກ່ຽວຂ້ອງ + ຈຳ​ໄດ້​ບໍ່​ຕ້ອງ​ມີ​ຈຳ​ນວນ​ລະ​ຫວ່າງ​ດ້ວຍ %1$s ແລະ %2$s ຊົ່ວໂມງ ນອກຈາກມັນ diff --git a/clock/src/main/res/values-lt/strings.xml b/clock/src/main/res/values-lt/strings.xml index dc58ec62..8354a87c 100644 --- a/clock/src/main/res/values-lt/strings.xml +++ b/clock/src/main/res/values-lt/strings.xml @@ -1,14 +1,14 @@ - h - OK - s - D - AM - PM - Kitas reikšmė - Ankstesnė vertė - Turi būti tarp %1$s ir %2$s + h + OK + s + D + AM + PM + Kitas reikšmė + Ankstesnė vertė + Turi būti tarp %1$s ir %2$s Valandos Protokolas diff --git a/clock/src/main/res/values-lv/strings.xml b/clock/src/main/res/values-lv/strings.xml index ad909700..44ed5730 100644 --- a/clock/src/main/res/values-lv/strings.xml +++ b/clock/src/main/res/values-lv/strings.xml @@ -1,14 +1,14 @@ - OK. - m - s - OK. - AM - PM - Nākamā vērtība - Iepriekšējā vērtība - Jābūt starp %1$s un %2$s + OK. + m + s + OK. + AM + PM + Nākamā vērtība + Iepriekšējā vērtība + Jābūt starp %1$s un %2$s Stundas Minūtes diff --git a/clock/src/main/res/values-ms/strings.xml b/clock/src/main/res/values-ms/strings.xml index d8eab7d4..e396ecfb 100644 --- a/clock/src/main/res/values-ms/strings.xml +++ b/clock/src/main/res/values-ms/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Nilai seterusnya - Nilai terdahulu - Mesti antara %1$s dan %2$s + h + m + s + D + AM + PM + Nilai seterusnya + Nilai terdahulu + Mesti antara %1$s dan %2$s Jam Minit diff --git a/clock/src/main/res/values-ne/strings.xml b/clock/src/main/res/values-ne/strings.xml index 6a8e6fe4..7b0b1722 100644 --- a/clock/src/main/res/values-ne/strings.xml +++ b/clock/src/main/res/values-ne/strings.xml @@ -1,14 +1,14 @@ - - m - - D - सकेसम्म - प्रधानमन्त्री - अर्को मान् - पहिले थियोे मान - %1$s र %2$s को बीचमा हुनुपर्छ। + + m + + D + सकेसम्म + प्रधानमन्त्री + अर्को मान् + पहिले थियोे मान + %1$s र %2$s को बीचमा हुनुपर्छ। घण्टा मिनेटहरू diff --git a/clock/src/main/res/values-nl/strings.xml b/clock/src/main/res/values-nl/strings.xml index d84cc48d..4d60473e 100644 --- a/clock/src/main/res/values-nl/strings.xml +++ b/clock/src/main/res/values-nl/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Volgende waarde - Vorige waarde - Moet tussen %1$s en %2$s zijn + h + m + s + D + AM + PM + Volgende waarde + Vorige waarde + Moet tussen %1$s en %2$s zijn Uren Notulen diff --git a/clock/src/main/res/values-no/strings.xml b/clock/src/main/res/values-no/strings.xml index e53463fc..dd3b14b2 100644 --- a/clock/src/main/res/values-no/strings.xml +++ b/clock/src/main/res/values-no/strings.xml @@ -1,14 +1,14 @@ - OK - OK - s - D - OK - PM - Neste verdi - Tidligere verdi - Må være mellom %1$s og %2$s. + OK + OK + s + D + OK + PM + Neste verdi + Tidligere verdi + Må være mellom %1$s og %2$s. Timer Minutter diff --git a/clock/src/main/res/values-pl/strings.xml b/clock/src/main/res/values-pl/strings.xml index 0260707a..8f9c0a55 100644 --- a/clock/src/main/res/values-pl/strings.xml +++ b/clock/src/main/res/values-pl/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Następna wartość - Poprzednia wartość - Musisz podać wartość pomiędzy %1$s a %2$s. + h + m + s + D + AM + PM + Następna wartość + Poprzednia wartość + Musisz podać wartość pomiędzy %1$s a %2$s. Godziny Minuty diff --git a/clock/src/main/res/values-pt/strings.xml b/clock/src/main/res/values-pt/strings.xml index 269fa2ae..429ba843 100644 --- a/clock/src/main/res/values-pt/strings.xml +++ b/clock/src/main/res/values-pt/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Próximo valor - Valor anterior - Deve estar entre %1$s e %2$s + h + m + s + D + AM + PM + Próximo valor + Valor anterior + Deve estar entre %1$s e %2$s Horas Minutos diff --git a/clock/src/main/res/values-ru/strings.xml b/clock/src/main/res/values-ru/strings.xml index 227e813d..d959e0d4 100644 --- a/clock/src/main/res/values-ru/strings.xml +++ b/clock/src/main/res/values-ru/strings.xml @@ -1,14 +1,14 @@ - т - m - OK - D - AM - PM - Следующее значение - Предыдущее значение - Должно быть между %1$s и %2$s + т + m + OK + D + AM + PM + Следующее значение + Предыдущее значение + Должно быть между %1$s и %2$s Часы Минуты diff --git a/clock/src/main/res/values-sk/strings.xml b/clock/src/main/res/values-sk/strings.xml index 2e82f14d..ee937245 100644 --- a/clock/src/main/res/values-sk/strings.xml +++ b/clock/src/main/res/values-sk/strings.xml @@ -1,14 +1,14 @@ - h - m - OK - D - AM - PM - Ďalšia hodnota - Predchádzajúca hodnota - Musí byť medzi %1$s a %2$s + h + m + OK + D + AM + PM + Ďalšia hodnota + Predchádzajúca hodnota + Musí byť medzi %1$s a %2$s Hodiny Minúty diff --git a/clock/src/main/res/values-sl/strings.xml b/clock/src/main/res/values-sl/strings.xml index 4b9d42e1..8d7a73b6 100644 --- a/clock/src/main/res/values-sl/strings.xml +++ b/clock/src/main/res/values-sl/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - OK - Naslednja vrednost - Prejšnja vrednost - Mora biti med %1$s in %2$s + h + m + s + D + AM + OK + Naslednja vrednost + Prejšnja vrednost + Mora biti med %1$s in %2$s Ure Minute diff --git a/clock/src/main/res/values-sr/strings.xml b/clock/src/main/res/values-sr/strings.xml index 29999ba8..efdb45dd 100644 --- a/clock/src/main/res/values-sr/strings.xml +++ b/clock/src/main/res/values-sr/strings.xml @@ -1,14 +1,14 @@ - OK. - m - OK - D - AM - PM - Sledeća vrednost - Prethodna vrednost - Mora biti između %1$s i %2$s. + OK. + m + OK + D + AM + PM + Sledeća vrednost + Prethodna vrednost + Mora biti između %1$s i %2$s. Satnici Minuti diff --git a/clock/src/main/res/values-sv/strings.xml b/clock/src/main/res/values-sv/strings.xml index 4f9b788b..481c0de7 100644 --- a/clock/src/main/res/values-sv/strings.xml +++ b/clock/src/main/res/values-sv/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Nästa värde - Tidigare värde - Måste vara mellan %1$s och %2$s. + h + m + s + D + AM + PM + Nästa värde + Tidigare värde + Måste vara mellan %1$s och %2$s. Timmar Minuter diff --git a/clock/src/main/res/values-th/strings.xml b/clock/src/main/res/values-th/strings.xml index b56ee687..dcae216a 100644 --- a/clock/src/main/res/values-th/strings.xml +++ b/clock/src/main/res/values-th/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - นายกรัฐมนตรีท่านสำคัญ - ค่าถัดไป - ค่าก่อนหน้า - ต้องอยู่ระหว่าง %1$s และ %2$s + h + m + s + D + AM + นายกรัฐมนตรีท่านสำคัญ + ค่าถัดไป + ค่าก่อนหน้า + ต้องอยู่ระหว่าง %1$s และ %2$s รายชั่วโมง นาที diff --git a/clock/src/main/res/values-tr/strings.xml b/clock/src/main/res/values-tr/strings.xml index 38374398..a48f0705 100644 --- a/clock/src/main/res/values-tr/strings.xml +++ b/clock/src/main/res/values-tr/strings.xml @@ -1,14 +1,14 @@ - h - metin - s (OK) - Metni çevirmek için yeterli bir bağlam sağlanmadığından dolayı, size yardımcı olabilmem için daha fazla bilgiye ihtiyacım var. Lütfen tam bir cümle veya metin sağlayın. - AM - PM - Sonraki değer - Önceki değer - %1$s ile %2$s arasında olmalıdır. + h + metin + s (OK) + Metni çevirmek için yeterli bir bağlam sağlanmadığından dolayı, size yardımcı olabilmem için daha fazla bilgiye ihtiyacım var. Lütfen tam bir cümle veya metin sağlayın. + AM + PM + Sonraki değer + Önceki değer + %1$s ile %2$s arasında olmalıdır. Saatler Dakikalar diff --git a/clock/src/main/res/values-uk/strings.xml b/clock/src/main/res/values-uk/strings.xml index 818182e2..1a3d6950 100644 --- a/clock/src/main/res/values-uk/strings.xml +++ b/clock/src/main/res/values-uk/strings.xml @@ -1,14 +1,14 @@ - h - м - s - D - AM - Pm - Наступне значення - Попереднє значення - Має бути від %1$s до %2$s + h + м + s + D + AM + Pm + Наступне значення + Попереднє значення + Має бути від %1$s до %2$s Години Мінути diff --git a/clock/src/main/res/values-vi/strings.xml b/clock/src/main/res/values-vi/strings.xml index 8e81dbbe..82a752f7 100644 --- a/clock/src/main/res/values-vi/strings.xml +++ b/clock/src/main/res/values-vi/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - AM - PM - Giá trị kế tiếp - Giá trị trước đó - Phải nằm trong khoảng từ %1$s đến %2$s + h + m + s + D + AM + PM + Giá trị kế tiếp + Giá trị trước đó + Phải nằm trong khoảng từ %1$s đến %2$s Giờ Phút diff --git a/clock/src/main/res/values-zh-rCN/strings.xml b/clock/src/main/res/values-zh-rCN/strings.xml index c0094da9..135a61ca 100644 --- a/clock/src/main/res/values-zh-rCN/strings.xml +++ b/clock/src/main/res/values-zh-rCN/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - 上午 - PM - 下一个值 - 原值 - 必须在%1$s和%2$s之间 + h + m + s + D + 上午 + PM + 下一个值 + 原值 + 必须在%1$s和%2$s之间 小时 分钟 diff --git a/clock/src/main/res/values-zh-rTW/strings.xml b/clock/src/main/res/values-zh-rTW/strings.xml index 0199c072..274df14b 100644 --- a/clock/src/main/res/values-zh-rTW/strings.xml +++ b/clock/src/main/res/values-zh-rTW/strings.xml @@ -1,14 +1,14 @@ - h - m - s - D - 下午 - 晚上 - 下一個數值 - 先前值 - 必須在 %1$s 和 %2$s 之間 + h + m + s + D + 下午 + 晚上 + 下一個數值 + 先前值 + 必須在 %1$s 和 %2$s 之間 小時 會議紀錄 diff --git a/clock/src/main/res/values/strings.xml b/clock/src/main/res/values/strings.xml index b7027f6e..8aa65234 100644 --- a/clock/src/main/res/values/strings.xml +++ b/clock/src/main/res/values/strings.xml @@ -1,16 +1,14 @@ - - - h - m - s - D - AM - PM - Next value - Previous value - Must be between %1$s and %2$s + h + m + s + D + AM + PM + Next value + Previous value + Must be between %1$s and %2$s Hours Minutes diff --git a/color/src/main/AndroidManifest.xml b/color/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/color/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/color/src/main/res/values-bg/strings.xml b/color/src/main/res/values-bg/strings.xml index 0b14cdc4..ea8138eb 100644 --- a/color/src/main/res/values-bg/strings.xml +++ b/color/src/main/res/values-bg/strings.xml @@ -1,17 +1,17 @@ - Alpha - Червен - Зелен - Синьо - ARGB - Цвят - Шаблонни цветове - Персонализиран цвят - Няма цвят. - Копирай цвят - Поставяне на цвят - Поставете валиден aRGB код. - Няма какво да поставям + Alpha + Червен + Зелен + Синьо + ARGB + Цвят + Шаблонни цветове + Персонализиран цвят + Няма цвят. + Копирай цвят + Поставяне на цвят + Поставете валиден aRGB код. + Няма какво да поставям \ No newline at end of file diff --git a/color/src/main/res/values-cs/strings.xml b/color/src/main/res/values-cs/strings.xml index 9ba77169..cc0243c3 100644 --- a/color/src/main/res/values-cs/strings.xml +++ b/color/src/main/res/values-cs/strings.xml @@ -1,17 +1,17 @@ - Alpha - Červená - Zelená - Modrá - ARGB - Barva - Barvy šablony - Vlastní barva - Žádná barva - Kopírovat barvu - Vložit barvu - Vložte platný kód pro aRGB. - Není co vložit + Alpha + Červená + Zelená + Modrá + ARGB + Barva + Barvy šablony + Vlastní barva + Žádná barva + Kopírovat barvu + Vložit barvu + Vložte platný kód pro aRGB. + Není co vložit \ No newline at end of file diff --git a/color/src/main/res/values-da/strings.xml b/color/src/main/res/values-da/strings.xml index 53357ac0..7b154bb9 100644 --- a/color/src/main/res/values-da/strings.xml +++ b/color/src/main/res/values-da/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rød - Grøn - Blå - ARGB - Farve - Skabelonfarver - Tilpasset farve - Ingen farve - Kopier farve - Indsæt farve - Indsæt en gyldig aRGB-kode. - Intet at indsætte + Alpha + Rød + Grøn + Blå + ARGB + Farve + Skabelonfarver + Tilpasset farve + Ingen farve + Kopier farve + Indsæt farve + Indsæt en gyldig aRGB-kode. + Intet at indsætte \ No newline at end of file diff --git a/color/src/main/res/values-de-rDE/strings.xml b/color/src/main/res/values-de-rDE/strings.xml index b4a975af..22434210 100644 --- a/color/src/main/res/values-de-rDE/strings.xml +++ b/color/src/main/res/values-de-rDE/strings.xml @@ -1,4 +1,3 @@ - Alpha Red diff --git a/color/src/main/res/values-de/strings.xml b/color/src/main/res/values-de/strings.xml index 15d74239..2c599546 100644 --- a/color/src/main/res/values-de/strings.xml +++ b/color/src/main/res/values-de/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rot - Grün - Blau - ARGB - Farbe - Vorlage Farben - Benutzerdefinierte Farbe - Keine Farbe - Farbe kopieren - Paste Farbe - Gültigen aRGB-Code einfügen. - Nichts einzufügen + Alpha + Rot + Grün + Blau + ARGB + Farbe + Vorlage Farben + Benutzerdefinierte Farbe + Keine Farbe + Farbe kopieren + Paste Farbe + Gültigen aRGB-Code einfügen. + Nichts einzufügen \ No newline at end of file diff --git a/color/src/main/res/values-el/strings.xml b/color/src/main/res/values-el/strings.xml index 8a685488..71a543eb 100644 --- a/color/src/main/res/values-el/strings.xml +++ b/color/src/main/res/values-el/strings.xml @@ -1,17 +1,17 @@ - Άλφα - Κόκκινο - Πράσινο - Μπλε - ARGB - Χρώμα - Χρώματα προτύπου - Προσαρμοσμένος χρωματισμός - Κανένα χρώμα - Αντιγραφή χρώματος - Επικόλληση χρώματος - Επικολλήστε έναν έγκυρο κωδικό aRGB. - Τίποτα να επικολληθεί + Άλφα + Κόκκινο + Πράσινο + Μπλε + ARGB + Χρώμα + Χρώματα προτύπου + Προσαρμοσμένος χρωματισμός + Κανένα χρώμα + Αντιγραφή χρώματος + Επικόλληση χρώματος + Επικολλήστε έναν έγκυρο κωδικό aRGB. + Τίποτα να επικολληθεί \ No newline at end of file diff --git a/color/src/main/res/values-eo/strings.xml b/color/src/main/res/values-eo/strings.xml index f54a9012..4f950fe0 100644 --- a/color/src/main/res/values-eo/strings.xml +++ b/color/src/main/res/values-eo/strings.xml @@ -1,17 +1,17 @@ - Alpha - Ruĝa - Verda - Blua - ARGB - Koloro - Ŝablona koloroj - Propra koloro - Neniu koloro. - Kopii koloron - Englue ruĝo - Algluu ĝustan aRGB-kodon. - Nenio por alglui + Alpha + Ruĝa + Verda + Blua + ARGB + Koloro + Ŝablona koloroj + Propra koloro + Neniu koloro. + Kopii koloron + Englue ruĝo + Algluu ĝustan aRGB-kodon. + Nenio por alglui \ No newline at end of file diff --git a/color/src/main/res/values-es/strings.xml b/color/src/main/res/values-es/strings.xml index bb3cba37..c97b18ae 100644 --- a/color/src/main/res/values-es/strings.xml +++ b/color/src/main/res/values-es/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rojo. - Verde - Azul - ARGB - Color - Colores de la plantilla - Color personalizado - Sin color - Copiar color - Pegar color - Pegar código aRGB válido. - Nada que pegar + Alpha + Rojo. + Verde + Azul + ARGB + Color + Colores de la plantilla + Color personalizado + Sin color + Copiar color + Pegar color + Pegar código aRGB válido. + Nada que pegar \ No newline at end of file diff --git a/color/src/main/res/values-et/strings.xml b/color/src/main/res/values-et/strings.xml index 11743e5b..3fdddf56 100644 --- a/color/src/main/res/values-et/strings.xml +++ b/color/src/main/res/values-et/strings.xml @@ -1,17 +1,17 @@ - Alpha - Punane - Roheline - Sinine - ARGB - Värv - Mallis värvid - Erisära - Värv puudub - Kopeeri värv - Värvi kopeerimine - Kleebi kehtiv aRGB-kood. - Midagi kleepida + Alpha + Punane + Roheline + Sinine + ARGB + Värv + Mallis värvid + Erisära + Värv puudub + Kopeeri värv + Värvi kopeerimine + Kleebi kehtiv aRGB-kood. + Midagi kleepida \ No newline at end of file diff --git a/color/src/main/res/values-fa/strings.xml b/color/src/main/res/values-fa/strings.xml index d5c7e77d..fb175051 100644 --- a/color/src/main/res/values-fa/strings.xml +++ b/color/src/main/res/values-fa/strings.xml @@ -1,18 +1,18 @@ - آلفا - قرمز - سبز - آبی - پارسی - رنگ - رنگ‌های قالب - رنگ سفارشی - هیچ رنگی - رونگ را کپی کنید. - Paste color + آلفا + قرمز + سبز + آبی + پارسی + رنگ + رنگ‌های قالب + رنگ سفارشی + هیچ رنگی + رونگ را کپی کنید. + Paste color رنگ را الصاق کنید - کد aRGB معتبر را الصاق کنید. - چیزی برای جایگزینی وجود ندارد + کد aRGB معتبر را الصاق کنید. + چیزی برای جایگزینی وجود ندارد \ No newline at end of file diff --git a/color/src/main/res/values-fi/strings.xml b/color/src/main/res/values-fi/strings.xml index c1df80d0..b2f12851 100644 --- a/color/src/main/res/values-fi/strings.xml +++ b/color/src/main/res/values-fi/strings.xml @@ -1,17 +1,17 @@ - Alpha - Punainen - Vihreä - Sininen - ARGB - Väri - Mallin värit - Kustomoitu väri - Ei väriä - Kopioi väri - Väri liitä - Liitä kelvollinen aRGB-koodi. - Ei mitään liitettävää + Alpha + Punainen + Vihreä + Sininen + ARGB + Väri + Mallin värit + Kustomoitu väri + Ei väriä + Kopioi väri + Väri liitä + Liitä kelvollinen aRGB-koodi. + Ei mitään liitettävää \ No newline at end of file diff --git a/color/src/main/res/values-fr/strings.xml b/color/src/main/res/values-fr/strings.xml index 058a8a33..c5844078 100644 --- a/color/src/main/res/values-fr/strings.xml +++ b/color/src/main/res/values-fr/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rouge - Vert - Bleu - ARGB - Couleur - Couleurs du modèle - Couleur personnalisée - Aucune couleur - Couleur de copie - Couleur collée - Copiez le code aRGB valide. - Rien à coller. + Alpha + Rouge + Vert + Bleu + ARGB + Couleur + Couleurs du modèle + Couleur personnalisée + Aucune couleur + Couleur de copie + Couleur collée + Copiez le code aRGB valide. + Rien à coller. \ No newline at end of file diff --git a/color/src/main/res/values-ga/strings.xml b/color/src/main/res/values-ga/strings.xml index 9e3b0042..0d5a62b9 100644 --- a/color/src/main/res/values-ga/strings.xml +++ b/color/src/main/res/values-ga/strings.xml @@ -1,17 +1,17 @@ - Alpha - Dearg. - Glás - Gorm - ARGB - Dath - Dathanna na gcló-dhuilleoga - Dath arna athrú.Cosúil le ceannacht. - Gan dath - Dath a chóipeáil - Dath greamaigh. - Greamaigh cód aRGB bailí. - Níl aon rud le péiste + Alpha + Dearg. + Glás + Gorm + ARGB + Dath + Dathanna na gcló-dhuilleoga + Dath arna athrú.Cosúil le ceannacht. + Gan dath + Dath a chóipeáil + Dath greamaigh. + Greamaigh cód aRGB bailí. + Níl aon rud le péiste \ No newline at end of file diff --git a/color/src/main/res/values-gd/strings.xml b/color/src/main/res/values-gd/strings.xml index 69679cad..11da3aab 100644 --- a/color/src/main/res/values-gd/strings.xml +++ b/color/src/main/res/values-gd/strings.xml @@ -1,17 +1,17 @@ - Alpha - Deargh - Glas - Gorm - ARGB - Dath - Dathanna Sgìreadh - Dath a chriathar - Gun dath - Dathan a cheàrradh - Glas a thaghadh - Cuir a-steach còd aRGB-ùr. - Chan eil dad ri phàsadh. + Alpha + Deargh + Glas + Gorm + ARGB + Dath + Dathanna Sgìreadh + Dath a chriathar + Gun dath + Dathan a cheàrradh + Glas a thaghadh + Cuir a-steach còd aRGB-ùr. + Chan eil dad ri phàsadh. \ No newline at end of file diff --git a/color/src/main/res/values-hi/strings.xml b/color/src/main/res/values-hi/strings.xml index 8babdfae..7c144545 100644 --- a/color/src/main/res/values-hi/strings.xml +++ b/color/src/main/res/values-hi/strings.xml @@ -1,17 +1,17 @@ - अल्फा - लाल - हरा - नीला - एआरजीबी - रंग - टेम्पलेट रंगों - कस्टम रंग - कोई रंग नहीं - वर्ण की कॉपी - रंग चिपकाएँ - वैध aRGB-कोड पेस्ट करें। - कुछ पेस्ट करने के लिए नहीं + अल्फा + लाल + हरा + नीला + एआरजीबी + रंग + टेम्पलेट रंगों + कस्टम रंग + कोई रंग नहीं + वर्ण की कॉपी + रंग चिपकाएँ + वैध aRGB-कोड पेस्ट करें। + कुछ पेस्ट करने के लिए नहीं \ No newline at end of file diff --git a/color/src/main/res/values-hr/strings.xml b/color/src/main/res/values-hr/strings.xml index 73b3bb87..9e8b201a 100644 --- a/color/src/main/res/values-hr/strings.xml +++ b/color/src/main/res/values-hr/strings.xml @@ -1,17 +1,17 @@ - Alfa - Crvena - Zelena - Plavo - ARGB - Boja - Boje predloška - Prilagođena boja - Nema boje. - Kopiraj boju - Boja zalijepi - Zalijepite valjani aRGB kod. - Ništa za zalijepiti + Alfa + Crvena + Zelena + Plavo + ARGB + Boja + Boje predloška + Prilagođena boja + Nema boje. + Kopiraj boju + Boja zalijepi + Zalijepite valjani aRGB kod. + Ništa za zalijepiti \ No newline at end of file diff --git a/color/src/main/res/values-hu/strings.xml b/color/src/main/res/values-hu/strings.xml index eaaa9e00..1489c5c4 100644 --- a/color/src/main/res/values-hu/strings.xml +++ b/color/src/main/res/values-hu/strings.xml @@ -1,17 +1,17 @@ - Alpha - Piros - Zöld - Kék - ARGB - Szín - Sablon színek - Egyéni szín - Nem szín - Szín másolása - Szín beillesztése - Illessze be a helyes aRGB-kódot. - Nincs mit beilleszteni. + Alpha + Piros + Zöld + Kék + ARGB + Szín + Sablon színek + Egyéni szín + Nem szín + Szín másolása + Szín beillesztése + Illessze be a helyes aRGB-kódot. + Nincs mit beilleszteni. \ No newline at end of file diff --git a/color/src/main/res/values-in-rID/strings.xml b/color/src/main/res/values-in-rID/strings.xml index fc29409c..0fe68976 100644 --- a/color/src/main/res/values-in-rID/strings.xml +++ b/color/src/main/res/values-in-rID/strings.xml @@ -1,17 +1,17 @@ - Alpha - Merah - Hijau - Biru - ARGB - Warna - Warna Templat - Warna kustom - Tidak berwarna - Salin warna - Warna tempel - Tempelkan kode aRGB yang valid. - Tidak ada yang bisa ditempelkan + Alpha + Merah + Hijau + Biru + ARGB + Warna + Warna Templat + Warna kustom + Tidak berwarna + Salin warna + Warna tempel + Tempelkan kode aRGB yang valid. + Tidak ada yang bisa ditempelkan \ No newline at end of file diff --git a/color/src/main/res/values-is/strings.xml b/color/src/main/res/values-is/strings.xml index 62ddf4bc..a1318166 100644 --- a/color/src/main/res/values-is/strings.xml +++ b/color/src/main/res/values-is/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rauður - Grænt - Blár - ARGB - Litur - Skjáhnappalitur - Sérsniðinn litur - Engin litur. - Litur afrit - Líma litur - Límið inn gilt aRGB-kóða. - Engin eitthvað til að líma inn + Alpha + Rauður + Grænt + Blár + ARGB + Litur + Skjáhnappalitur + Sérsniðinn litur + Engin litur. + Litur afrit + Líma litur + Límið inn gilt aRGB-kóða. + Engin eitthvað til að líma inn \ No newline at end of file diff --git a/color/src/main/res/values-it/strings.xml b/color/src/main/res/values-it/strings.xml index 38783a16..f9d546aa 100644 --- a/color/src/main/res/values-it/strings.xml +++ b/color/src/main/res/values-it/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rosso - Verde - Blu - ARGB - Colore - Colori del modello - Colore personalizzato - Nessun colore - Copia colore - Colore incolla - Incolla un codice aRGB valido. - Niente da incollare + Alpha + Rosso + Verde + Blu + ARGB + Colore + Colori del modello + Colore personalizzato + Nessun colore + Copia colore + Colore incolla + Incolla un codice aRGB valido. + Niente da incollare \ No newline at end of file diff --git a/color/src/main/res/values-iw/strings.xml b/color/src/main/res/values-iw/strings.xml index 0de33291..5cd5dd2e 100644 --- a/color/src/main/res/values-iw/strings.xml +++ b/color/src/main/res/values-iw/strings.xml @@ -1,17 +1,17 @@ - אלפא - אדום - ירוק - כחול - ARGB - צבע - צבעי התבנית - צבע מותאם - אין צבע - העתק צבע - הדבק צבע - הדבק קוד aRGB תקין. - אין דבר להדביק + אלפא + אדום + ירוק + כחול + ARGB + צבע + צבעי התבנית + צבע מותאם + אין צבע + העתק צבע + הדבק צבע + הדבק קוד aRGB תקין. + אין דבר להדביק \ No newline at end of file diff --git a/color/src/main/res/values-ja/strings.xml b/color/src/main/res/values-ja/strings.xml index 863d904f..a58d6f90 100644 --- a/color/src/main/res/values-ja/strings.xml +++ b/color/src/main/res/values-ja/strings.xml @@ -1,17 +1,17 @@ - アルファ - - - - ARGB - カラー - テンプレートの色 - カスタムカラー - カラーなし - テキストを翻訳する:色のコピー - カラーを貼り付ける - 有効なaRGBコードを貼り付けてください。 - 貼り付けるものはありません。 + アルファ + + + + ARGB + カラー + テンプレートの色 + カスタムカラー + カラーなし + テキストを翻訳する:色のコピー + カラーを貼り付ける + 有効なaRGBコードを貼り付けてください。 + 貼り付けるものはありません。 \ No newline at end of file diff --git a/color/src/main/res/values-jv/strings.xml b/color/src/main/res/values-jv/strings.xml index e0c2f553..e8ac08e9 100644 --- a/color/src/main/res/values-jv/strings.xml +++ b/color/src/main/res/values-jv/strings.xml @@ -1,17 +1,17 @@ - Alpha - Merah - Hijau - Biru - ARGB - Warna - Warna-warna template - Warna kustom - Ora warna. - Salin warna - Warna nopasto - Tempelkeun Kode aRGB nu sah. - Ora ana sing bisa dipastèkaké + Alpha + Merah + Hijau + Biru + ARGB + Warna + Warna-warna template + Warna kustom + Ora warna. + Salin warna + Warna nopasto + Tempelkeun Kode aRGB nu sah. + Ora ana sing bisa dipastèkaké \ No newline at end of file diff --git a/color/src/main/res/values-kk/strings.xml b/color/src/main/res/values-kk/strings.xml index fe9fb962..44404883 100644 --- a/color/src/main/res/values-kk/strings.xml +++ b/color/src/main/res/values-kk/strings.xml @@ -1,17 +1,17 @@ - Альфа - Қызыл - Жасыл - Көк - ARGB - Реңк - Көрнекті бойынша түстер - Жеке түс - Өрнекті түссіз - Көшірме реңк - Түс тапсырыныз - Қате арғыб шифрін жайып қойыңыз. - Жабыстар жоқ + Альфа + Қызыл + Жасыл + Көк + ARGB + Реңк + Көрнекті бойынша түстер + Жеке түс + Өрнекті түссіз + Көшірме реңк + Түс тапсырыныз + Қате арғыб шифрін жайып қойыңыз. + Жабыстар жоқ \ No newline at end of file diff --git a/color/src/main/res/values-ko/strings.xml b/color/src/main/res/values-ko/strings.xml index 01ecf15b..cfbaa7cb 100644 --- a/color/src/main/res/values-ko/strings.xml +++ b/color/src/main/res/values-ko/strings.xml @@ -1,17 +1,17 @@ - 알파 - 빨간색 - 초록색 - 파란색 - ARGB - 색깔 - 템플릿 색상 - 사용자 설정 색상 - 색 없음 - 색 복사 - 붙여넣기 색상 - 유효한 aRGB 코드를 붙여넣어주세요. - 붙일 것이 없습니다. + 알파 + 빨간색 + 초록색 + 파란색 + ARGB + 색깔 + 템플릿 색상 + 사용자 설정 색상 + 색 없음 + 색 복사 + 붙여넣기 색상 + 유효한 aRGB 코드를 붙여넣어주세요. + 붙일 것이 없습니다. \ No newline at end of file diff --git a/color/src/main/res/values-ku/strings.xml b/color/src/main/res/values-ku/strings.xml index 4bfcdf7e..442313dc 100644 --- a/color/src/main/res/values-ku/strings.xml +++ b/color/src/main/res/values-ku/strings.xml @@ -1,17 +1,17 @@ - Alpha - Sor - Sor - Şînêqêşîn - ARGB - Reng - رەنگی ڕووکار - ڕەنگی تایبەتین - هاوڕێیەکی ناوەنگاری. - ڕەنگ بنەڕەت بکەن. - ڕەنگ بکەوە - Codeyek aRGB-ek derbasdar peyveki binivîse. - چیزێک بۆ لکاندن نییە + Alpha + Sor + Sor + Şînêqêşîn + ARGB + Reng + رەنگی ڕووکار + ڕەنگی تایبەتین + هاوڕێیەکی ناوەنگاری. + ڕەنگ بنەڕەت بکەن. + ڕەنگ بکەوە + Codeyek aRGB-ek derbasdar peyveki binivîse. + چیزێک بۆ لکاندن نییە \ No newline at end of file diff --git a/color/src/main/res/values-lb/strings.xml b/color/src/main/res/values-lb/strings.xml index d1cde8cb..f0a43023 100644 --- a/color/src/main/res/values-lb/strings.xml +++ b/color/src/main/res/values-lb/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rout - Gréng - Blau - ARGB - Farw - Template Farwen - Eegen Faarf - Keng Faarf - Kopéier Farf - Past Dirwéng - Validen aRGB-Codeen aginn. - Näischt ze elegantéieren. + Alpha + Rout + Gréng + Blau + ARGB + Farw + Template Farwen + Eegen Faarf + Keng Faarf + Kopéier Farf + Past Dirwéng + Validen aRGB-Codeen aginn. + Näischt ze elegantéieren. \ No newline at end of file diff --git a/color/src/main/res/values-lo/strings.xml b/color/src/main/res/values-lo/strings.xml index 9a2c4c11..52aba23b 100644 --- a/color/src/main/res/values-lo/strings.xml +++ b/color/src/main/res/values-lo/strings.xml @@ -1,17 +1,17 @@ - Alpha - ສີເດດ - ສີຂຽວ - ປານີ້ - ARGB - ສີ - ສີຊອງທາງຂອງຕົວຢ່າງ - ສີພື້ນທີ່ກຳນົດເພື່ອຕັ້ງຄ່າໂດຍອັງກິດ - ບໍ່ມີສີ - ຍອມຮັບສີ - ນຳບາງສີ - ອອກ aRGB-Code ທີ່ຖືກຕັ້ງຕໍ່ໄປໃນຖານຂໍ້ມູນແມ່ນ OK. - ບໍ່ມີຫຍັງເລີ່ມເຮັດໄດ້ + Alpha + ສີເດດ + ສີຂຽວ + ປານີ້ + ARGB + ສີ + ສີຊອງທາງຂອງຕົວຢ່າງ + ສີພື້ນທີ່ກຳນົດເພື່ອຕັ້ງຄ່າໂດຍອັງກິດ + ບໍ່ມີສີ + ຍອມຮັບສີ + ນຳບາງສີ + ອອກ aRGB-Code ທີ່ຖືກຕັ້ງຕໍ່ໄປໃນຖານຂໍ້ມູນແມ່ນ OK. + ບໍ່ມີຫຍັງເລີ່ມເຮັດໄດ້ \ No newline at end of file diff --git a/color/src/main/res/values-lt/strings.xml b/color/src/main/res/values-lt/strings.xml index d01741dd..e6487925 100644 --- a/color/src/main/res/values-lt/strings.xml +++ b/color/src/main/res/values-lt/strings.xml @@ -1,17 +1,17 @@ - Alfa - Raudona - Žalia - Mėlyna - ARGB - Spalva - Šablonų spalvos - Pasirinktinė spalva - Joks spalvos - Kopijuoti spalvą. - Įklijuoti spalvą - Įklijuokite galiojantį aRGB kodą. - Nieko neįklijuoti + Alfa + Raudona + Žalia + Mėlyna + ARGB + Spalva + Šablonų spalvos + Pasirinktinė spalva + Joks spalvos + Kopijuoti spalvą. + Įklijuoti spalvą + Įklijuokite galiojantį aRGB kodą. + Nieko neįklijuoti \ No newline at end of file diff --git a/color/src/main/res/values-lv/strings.xml b/color/src/main/res/values-lv/strings.xml index 8d04215c..f722d8a2 100644 --- a/color/src/main/res/values-lv/strings.xml +++ b/color/src/main/res/values-lv/strings.xml @@ -1,17 +1,17 @@ - Alfa. - Sarkanā - Zaļš - Zils - ARGB - Krāsa - Veidnes krāsas - Pielāgota krāsa - Bez krāsas - Kopēt krāsu - Ielīmēt krāsu - Ielīmējiet derīgu aRGB kodu. - Nav ko ielīmēt + Alfa. + Sarkanā + Zaļš + Zils + ARGB + Krāsa + Veidnes krāsas + Pielāgota krāsa + Bez krāsas + Kopēt krāsu + Ielīmēt krāsu + Ielīmējiet derīgu aRGB kodu. + Nav ko ielīmēt \ No newline at end of file diff --git a/color/src/main/res/values-ms/strings.xml b/color/src/main/res/values-ms/strings.xml index ccb95c57..7526f2bf 100644 --- a/color/src/main/res/values-ms/strings.xml +++ b/color/src/main/res/values-ms/strings.xml @@ -1,17 +1,17 @@ - Alpha - Merah - Hijau - Biru - ARGB - Warna - Warna-warna template - Warna tersuai - Tiada warna. - Salin warna - Warna tampal - Tampal Kod aRGB yang sah. - Tiada yang boleh diletakkan + Alpha + Merah + Hijau + Biru + ARGB + Warna + Warna-warna template + Warna tersuai + Tiada warna. + Salin warna + Warna tampal + Tampal Kod aRGB yang sah. + Tiada yang boleh diletakkan \ No newline at end of file diff --git a/color/src/main/res/values-ne/strings.xml b/color/src/main/res/values-ne/strings.xml index 412cb72c..69186dbc 100644 --- a/color/src/main/res/values-ne/strings.xml +++ b/color/src/main/res/values-ne/strings.xml @@ -1,17 +1,17 @@ - Alpha - रातो - हरियो - नीलो - ARGB - रङ्ग - तालिका रंगहरू - रोचक रङ निर्माण - रङ पर्दैन - रंग प्रतिलिपि - रंग चिपाउनुहोस् - वैध aRGB-कोड पेस्ट गर्नुहोस्। - कुनै कुरा पेष्ट गर्ने कुरा छैन। + Alpha + रातो + हरियो + नीलो + ARGB + रङ्ग + तालिका रंगहरू + रोचक रङ निर्माण + रङ पर्दैन + रंग प्रतिलिपि + रंग चिपाउनुहोस् + वैध aRGB-कोड पेस्ट गर्नुहोस्। + कुनै कुरा पेष्ट गर्ने कुरा छैन। \ No newline at end of file diff --git a/color/src/main/res/values-nl/strings.xml b/color/src/main/res/values-nl/strings.xml index d2529a54..58b8e760 100644 --- a/color/src/main/res/values-nl/strings.xml +++ b/color/src/main/res/values-nl/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rood - Groen - Blauw - ARGB - Kleur - Template kleuren - Aangepaste kleur - Geen kleur - Kopieer kleur - Plak kleur - Plak een geldige aRGB-code. - Niets om te plakken + Alpha + Rood + Groen + Blauw + ARGB + Kleur + Template kleuren + Aangepaste kleur + Geen kleur + Kopieer kleur + Plak kleur + Plak een geldige aRGB-code. + Niets om te plakken \ No newline at end of file diff --git a/color/src/main/res/values-no/strings.xml b/color/src/main/res/values-no/strings.xml index fb686d6c..2914754c 100644 --- a/color/src/main/res/values-no/strings.xml +++ b/color/src/main/res/values-no/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rød - Grønn - Blå - ARGB - Farge - Mal farger - Egendefinert farge - Ingen farge - Kopier farge - Lim inn farge - Lim inn gyldig aRGB-kode. - Ingenting å lime inn + Alpha + Rød + Grønn + Blå + ARGB + Farge + Mal farger + Egendefinert farge + Ingen farge + Kopier farge + Lim inn farge + Lim inn gyldig aRGB-kode. + Ingenting å lime inn \ No newline at end of file diff --git a/color/src/main/res/values-pl/strings.xml b/color/src/main/res/values-pl/strings.xml index 3d1784f7..7e59290b 100644 --- a/color/src/main/res/values-pl/strings.xml +++ b/color/src/main/res/values-pl/strings.xml @@ -1,17 +1,17 @@ - Alpha - Czerwony - Zielony - Niebieski. - ARGB - Kolor - Kolory szablonu - Kolor niestandardowy - Brak koloru - Kopiuj kolor - Kolor wklej - Wklej poprawny kod aRGB. - Nic do wklejenia + Alpha + Czerwony + Zielony + Niebieski. + ARGB + Kolor + Kolory szablonu + Kolor niestandardowy + Brak koloru + Kopiuj kolor + Kolor wklej + Wklej poprawny kod aRGB. + Nic do wklejenia \ No newline at end of file diff --git a/color/src/main/res/values-pt/strings.xml b/color/src/main/res/values-pt/strings.xml index bacd132a..fa0e630c 100644 --- a/color/src/main/res/values-pt/strings.xml +++ b/color/src/main/res/values-pt/strings.xml @@ -1,17 +1,17 @@ - Alpha - Vermelho - Verde - Azul - ARGB - Cor - Cores do modelo - Cor personalizada - Sem cor. - Copiar cor - Cor da pasta - Cole um código aRGB válido. - Nada para colar + Alpha + Vermelho + Verde + Azul + ARGB + Cor + Cores do modelo + Cor personalizada + Sem cor. + Copiar cor + Cor da pasta + Cole um código aRGB válido. + Nada para colar \ No newline at end of file diff --git a/color/src/main/res/values-ru/strings.xml b/color/src/main/res/values-ru/strings.xml index bb6007b1..8002b9fd 100644 --- a/color/src/main/res/values-ru/strings.xml +++ b/color/src/main/res/values-ru/strings.xml @@ -1,17 +1,17 @@ - Альфа - Красный - Зеленый - Синий - ARGB - Цвет - Цвета шаблона. - Custom color (Пользовательский цвет) - Без цвета - Копировать цвет - Цвет вставки - Вставьте действительный aRGB-код. - Нет текста для вставки + Альфа + Красный + Зеленый + Синий + ARGB + Цвет + Цвета шаблона. + Custom color (Пользовательский цвет) + Без цвета + Копировать цвет + Цвет вставки + Вставьте действительный aRGB-код. + Нет текста для вставки \ No newline at end of file diff --git a/color/src/main/res/values-sk/strings.xml b/color/src/main/res/values-sk/strings.xml index e729efb3..5f13a778 100644 --- a/color/src/main/res/values-sk/strings.xml +++ b/color/src/main/res/values-sk/strings.xml @@ -1,17 +1,17 @@ - Alpha - Červená - Zelená - Modrý - ARGB - Farba - Farby šablóny - Vlastná farba - Bez farby - Skopírovať farbu - Vložiť farbu - Vložte platný aRGB kód. - Nič na vloženie + Alpha + Červená + Zelená + Modrý + ARGB + Farba + Farby šablóny + Vlastná farba + Bez farby + Skopírovať farbu + Vložiť farbu + Vložte platný aRGB kód. + Nič na vloženie \ No newline at end of file diff --git a/color/src/main/res/values-sl/strings.xml b/color/src/main/res/values-sl/strings.xml index 7fd1fa64..9c83555b 100644 --- a/color/src/main/res/values-sl/strings.xml +++ b/color/src/main/res/values-sl/strings.xml @@ -1,17 +1,17 @@ - Alpha - Rdeča - Zelena - Modra - ARGB - Barva - Barve predloge - Prilagojena barva - Brez barve - Kopiraj barvo - Barva vstavi - Prilepite veljaven aRGB-kodo. - Nič za prilepiti + Alpha + Rdeča + Zelena + Modra + ARGB + Barva + Barve predloge + Prilagojena barva + Brez barve + Kopiraj barvo + Barva vstavi + Prilepite veljaven aRGB-kodo. + Nič za prilepiti \ No newline at end of file diff --git a/color/src/main/res/values-sr/strings.xml b/color/src/main/res/values-sr/strings.xml index d393126b..528b1ed5 100644 --- a/color/src/main/res/values-sr/strings.xml +++ b/color/src/main/res/values-sr/strings.xml @@ -1,17 +1,17 @@ - Alfa - Crvena - Zelena - Plavo. - ARGB - Boja - Boje predloška - Prilagođena boja - Bez boje - Kopiraj boju - Boja nalepljena - Nalepite validan aRGB kod. - Ništa za nalepiti + Alfa + Crvena + Zelena + Plavo. + ARGB + Boja + Boje predloška + Prilagođena boja + Bez boje + Kopiraj boju + Boja nalepljena + Nalepite validan aRGB kod. + Ništa za nalepiti \ No newline at end of file diff --git a/color/src/main/res/values-sv/strings.xml b/color/src/main/res/values-sv/strings.xml index e784d1fc..641b9256 100644 --- a/color/src/main/res/values-sv/strings.xml +++ b/color/src/main/res/values-sv/strings.xml @@ -1,17 +1,17 @@ - Alpha - Röd - Grön - Blå - ARGB - Färg - Färger på mallen - Anpassad färg - Ingen färg - Kopiera färg - Klistra in färg - Klistra in giltig aRGB-kod. - Inget att klistra in + Alpha + Röd + Grön + Blå + ARGB + Färg + Färger på mallen + Anpassad färg + Ingen färg + Kopiera färg + Klistra in färg + Klistra in giltig aRGB-kod. + Inget att klistra in \ No newline at end of file diff --git a/color/src/main/res/values-th/strings.xml b/color/src/main/res/values-th/strings.xml index 23affdc2..2622112e 100644 --- a/color/src/main/res/values-th/strings.xml +++ b/color/src/main/res/values-th/strings.xml @@ -1,18 +1,18 @@ - Alpha - สีแดง - เขียว - สีน้ำเงิน - ARGB - สี - สีของเทมเพลต - สีที่กำหนดเอง - ไม่มีสี - สำเนาสี - Paste color + Alpha + สีแดง + เขียว + สีน้ำเงิน + ARGB + สี + สีของเทมเพลต + สีที่กำหนดเอง + ไม่มีสี + สำเนาสี + Paste color วางสี - วางรหัส aRGB ที่ถูกต้อง - ไม่มีอะไรที่จะวาง + วางรหัส aRGB ที่ถูกต้อง + ไม่มีอะไรที่จะวาง \ No newline at end of file diff --git a/color/src/main/res/values-tr/strings.xml b/color/src/main/res/values-tr/strings.xml index 594ab333..03a84bcb 100644 --- a/color/src/main/res/values-tr/strings.xml +++ b/color/src/main/res/values-tr/strings.xml @@ -1,17 +1,17 @@ - Alpha - Kırmızı - Yeşil - Mavi - ARGB - Renk - Şablon renkleri - Özel renk - Renksiz - Renk kopyala - Renk yapıştır - Geçerli bir aRGB Kodu yapıştırın. - Yapıştırılacak bir şey yok. + Alpha + Kırmızı + Yeşil + Mavi + ARGB + Renk + Şablon renkleri + Özel renk + Renksiz + Renk kopyala + Renk yapıştır + Geçerli bir aRGB Kodu yapıştırın. + Yapıştırılacak bir şey yok. \ No newline at end of file diff --git a/color/src/main/res/values-uk/strings.xml b/color/src/main/res/values-uk/strings.xml index e5f020f7..98bba0b5 100644 --- a/color/src/main/res/values-uk/strings.xml +++ b/color/src/main/res/values-uk/strings.xml @@ -1,17 +1,17 @@ - Альфа - Червоний - Зелений - Синій - ARGB - Колір - Кольори шаблону - Спеціальний колір - Без кольору - Копіювати колір - Вставити колір - Вставте дійсний aRGB-код. - Нічого немає для вставки + Альфа + Червоний + Зелений + Синій + ARGB + Колір + Кольори шаблону + Спеціальний колір + Без кольору + Копіювати колір + Вставити колір + Вставте дійсний aRGB-код. + Нічого немає для вставки \ No newline at end of file diff --git a/color/src/main/res/values-vi/strings.xml b/color/src/main/res/values-vi/strings.xml index 7db69861..8fa994b8 100644 --- a/color/src/main/res/values-vi/strings.xml +++ b/color/src/main/res/values-vi/strings.xml @@ -1,17 +1,17 @@ - Alpha - Đỏ - Màu xanh - Màu xanh - ARGB - Màu sắc - Màu sắc mẫu (OK) - Tùy chỉnh màu sắc - Không màu sắc. - Sao chép màu sắc - Màu dán - Dán mã aRGB hợp lệ. - Không có gì để dán + Alpha + Đỏ + Màu xanh + Màu xanh + ARGB + Màu sắc + Màu sắc mẫu (OK) + Tùy chỉnh màu sắc + Không màu sắc. + Sao chép màu sắc + Màu dán + Dán mã aRGB hợp lệ. + Không có gì để dán \ No newline at end of file diff --git a/color/src/main/res/values-zh-rCN/strings.xml b/color/src/main/res/values-zh-rCN/strings.xml index 441286de..f7a71279 100644 --- a/color/src/main/res/values-zh-rCN/strings.xml +++ b/color/src/main/res/values-zh-rCN/strings.xml @@ -1,17 +1,17 @@ - Alpha - 红色 - 绿色 - 蓝色 - ARGB - 颜色 - 模板颜色 - 自定义颜色 - 没有颜色 - 复制颜色 - 粘贴颜色 - 请粘贴有效的aRGB代码。 - 无可粘贴 + Alpha + 红色 + 绿色 + 蓝色 + ARGB + 颜色 + 模板颜色 + 自定义颜色 + 没有颜色 + 复制颜色 + 粘贴颜色 + 请粘贴有效的aRGB代码。 + 无可粘贴 \ No newline at end of file diff --git a/color/src/main/res/values-zh-rTW/strings.xml b/color/src/main/res/values-zh-rTW/strings.xml index ccc28816..77683b0f 100644 --- a/color/src/main/res/values-zh-rTW/strings.xml +++ b/color/src/main/res/values-zh-rTW/strings.xml @@ -1,17 +1,17 @@ - Alpha - 紅色 - 綠色 - 藍色 - ARGB - 顏色 - 模板顏色 - 自訂顏色 - 無色 - 複製顏色 - 貼上顏色 - 請貼上有效的aRGB代碼。 - 無內容可貼上 + Alpha + 紅色 + 綠色 + 藍色 + ARGB + 顏色 + 模板顏色 + 自訂顏色 + 無色 + 複製顏色 + 貼上顏色 + 請貼上有效的aRGB代碼。 + 無內容可貼上 \ No newline at end of file diff --git a/color/src/main/res/values/strings.xml b/color/src/main/res/values/strings.xml index 20d395a3..851f202f 100644 --- a/color/src/main/res/values/strings.xml +++ b/color/src/main/res/values/strings.xml @@ -1,17 +1,17 @@ - Alpha - Red - Green - Blue - ARGB - Color - Template colors - Custom color - No color - Copy color - Paste color - Paste valid aRGB-Code. - Nothing to paste + Alpha + Red + Green + Blue + ARGB + Color + Template colors + Custom color + No color + Copy color + Paste color + Paste valid aRGB-Code. + Nothing to paste diff --git a/core/src/commonMain/composeResources/values-de-rDE/strings.xml b/core/src/commonMain/composeResources/values-de-rDE/strings.xml index bf14c58e..bd27d95f 100644 --- a/core/src/commonMain/composeResources/values-de-rDE/strings.xml +++ b/core/src/commonMain/composeResources/values-de-rDE/strings.xml @@ -1,4 +1,3 @@ - Abbrechen Ok diff --git a/date_time/src/main/AndroidManifest.xml b/date_time/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/date_time/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/date_time/src/main/res/values-bg/strings.xml b/date_time/src/main/res/values-bg/strings.xml index 9086d1b9..7d4f9f63 100644 --- a/date_time/src/main/res/values-bg/strings.xml +++ b/date_time/src/main/res/values-bg/strings.xml @@ -1,14 +1,14 @@ - AM - ММ - Часове - Минути - Секунди - Ден - Месец - Година - Настройка на време - Задайте дата. + AM + ММ + Часове + Минути + Секунди + Ден + Месец + Година + Настройка на време + Задайте дата. \ No newline at end of file diff --git a/date_time/src/main/res/values-cs/strings.xml b/date_time/src/main/res/values-cs/strings.xml index d004471a..e656464e 100644 --- a/date_time/src/main/res/values-cs/strings.xml +++ b/date_time/src/main/res/values-cs/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Hodiny - Minuty - Sekundy - Den - Měsíc - Rok - Nastavte čas - Nastavit datum + AM + PM + Hodiny + Minuty + Sekundy + Den + Měsíc + Rok + Nastavte čas + Nastavit datum \ No newline at end of file diff --git a/date_time/src/main/res/values-da/strings.xml b/date_time/src/main/res/values-da/strings.xml index a6e6669d..587db796 100644 --- a/date_time/src/main/res/values-da/strings.xml +++ b/date_time/src/main/res/values-da/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Timer - Minutter - Sekunder - Dag - Måned - År - Indstil tid - Vælg dato + AM + PM + Timer + Minutter + Sekunder + Dag + Måned + År + Indstil tid + Vælg dato \ No newline at end of file diff --git a/date_time/src/main/res/values-de-rDE/strings.xml b/date_time/src/main/res/values-de-rDE/strings.xml index 92441059..84a8c774 100644 --- a/date_time/src/main/res/values-de-rDE/strings.xml +++ b/date_time/src/main/res/values-de-rDE/strings.xml @@ -1,4 +1,4 @@ - + AM diff --git a/date_time/src/main/res/values-de/strings.xml b/date_time/src/main/res/values-de/strings.xml index 20d64220..bcceb8ba 100644 --- a/date_time/src/main/res/values-de/strings.xml +++ b/date_time/src/main/res/values-de/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Stunden - Minuten - Sekunden - Tag - Monat - Jahr - Zeit einstellen - Datum festlegen + AM + PM + Stunden + Minuten + Sekunden + Tag + Monat + Jahr + Zeit einstellen + Datum festlegen \ No newline at end of file diff --git a/date_time/src/main/res/values-el/strings.xml b/date_time/src/main/res/values-el/strings.xml index 528263bc..d47de0be 100644 --- a/date_time/src/main/res/values-el/strings.xml +++ b/date_time/src/main/res/values-el/strings.xml @@ -1,14 +1,14 @@ - AM - ΚΥ - Ωρες - Λεπτά - Δευτερόλεπτα - Ημέρα - Μήνας - Έτος - Ρύθμιση ώρας - Ορισμός ημερομηνίας. + AM + ΚΥ + Ωρες + Λεπτά + Δευτερόλεπτα + Ημέρα + Μήνας + Έτος + Ρύθμιση ώρας + Ορισμός ημερομηνίας. \ No newline at end of file diff --git a/date_time/src/main/res/values-eo/strings.xml b/date_time/src/main/res/values-eo/strings.xml index f22bc81c..1c0b4419 100644 --- a/date_time/src/main/res/values-eo/strings.xml +++ b/date_time/src/main/res/values-eo/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Horoj - Minutes - Sekundoj - Tago - Monato - Jaro - Difini tempon - Agordi daton + AM + PM + Horoj + Minutes + Sekundoj + Tago + Monato + Jaro + Difini tempon + Agordi daton \ No newline at end of file diff --git a/date_time/src/main/res/values-es/strings.xml b/date_time/src/main/res/values-es/strings.xml index bc2f19fd..ee08e7d1 100644 --- a/date_time/src/main/res/values-es/strings.xml +++ b/date_time/src/main/res/values-es/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Horas - Minutos - Segundos - Día - Mes - Año - Establecer tiempo - Establecer fecha + AM + PM + Horas + Minutos + Segundos + Día + Mes + Año + Establecer tiempo + Establecer fecha \ No newline at end of file diff --git a/date_time/src/main/res/values-et/strings.xml b/date_time/src/main/res/values-et/strings.xml index 1dcbd4e3..27865598 100644 --- a/date_time/src/main/res/values-et/strings.xml +++ b/date_time/src/main/res/values-et/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Tunnid - Minutes - Sekundid - Day - Kuu - Aasta - Määra aeg - Määrake kuupäev + AM + PM + Tunnid + Minutes + Sekundid + Day + Kuu + Aasta + Määra aeg + Määrake kuupäev \ No newline at end of file diff --git a/date_time/src/main/res/values-fa/strings.xml b/date_time/src/main/res/values-fa/strings.xml index 9ca252fd..fe1f78ea 100644 --- a/date_time/src/main/res/values-fa/strings.xml +++ b/date_time/src/main/res/values-fa/strings.xml @@ -1,14 +1,14 @@ - AM - صبح بخیر - ساعات - دقایق - ثانیه - روز - ماه - سال - تنظیم زمان - تنظیم تاریخ + AM + صبح بخیر + ساعات + دقایق + ثانیه + روز + ماه + سال + تنظیم زمان + تنظیم تاریخ \ No newline at end of file diff --git a/date_time/src/main/res/values-fi/strings.xml b/date_time/src/main/res/values-fi/strings.xml index 25926929..1fef7ff4 100644 --- a/date_time/src/main/res/values-fi/strings.xml +++ b/date_time/src/main/res/values-fi/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Tunnit - Pöytäkirja - Sekunnit - Päivä - Kuukausi - Vuosi - Aseta aika - Aseta päivämäärä + AM + PM + Tunnit + Pöytäkirja + Sekunnit + Päivä + Kuukausi + Vuosi + Aseta aika + Aseta päivämäärä \ No newline at end of file diff --git a/date_time/src/main/res/values-fr/strings.xml b/date_time/src/main/res/values-fr/strings.xml index f8c58079..5f86c618 100644 --- a/date_time/src/main/res/values-fr/strings.xml +++ b/date_time/src/main/res/values-fr/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Heures - Minutes - Secondes - Jour - Mois - Année - Définir l\'heure - Définir la date + AM + PM + Heures + Minutes + Secondes + Jour + Mois + Année + Définir l\'heure + Définir la date \ No newline at end of file diff --git a/date_time/src/main/res/values-ga/strings.xml b/date_time/src/main/res/values-ga/strings.xml index 9b346151..a4ea2c9b 100644 --- a/date_time/src/main/res/values-ga/strings.xml +++ b/date_time/src/main/res/values-ga/strings.xml @@ -1,14 +1,14 @@ - AM - Príomh-Aire - Uaireanta - Nótaí - Soicindí - - - Bliain - Roghnaigh ama - Socrú dáta + AM + Príomh-Aire + Uaireanta + Nótaí + Soicindí + + + Bliain + Roghnaigh ama + Socrú dáta \ No newline at end of file diff --git a/date_time/src/main/res/values-gd/strings.xml b/date_time/src/main/res/values-gd/strings.xml index 14a2374d..02190196 100644 --- a/date_time/src/main/res/values-gd/strings.xml +++ b/date_time/src/main/res/values-gd/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Uairean - Gach mionaid - Dàrnaichean - Latha - Mìos - Bliadhna - Fhoirm - Deasaich dàta + AM + PM + Uairean + Gach mionaid + Dàrnaichean + Latha + Mìos + Bliadhna + Fhoirm + Deasaich dàta \ No newline at end of file diff --git a/date_time/src/main/res/values-hi/strings.xml b/date_time/src/main/res/values-hi/strings.xml index cb9b23fc..c66393bc 100644 --- a/date_time/src/main/res/values-hi/strings.xml +++ b/date_time/src/main/res/values-hi/strings.xml @@ -1,14 +1,14 @@ - AM - प्रधानमंत्री - घंटे - मिनट - सेकंड - दिन - महीना - वर्ष - समय सेट करें - तारीख सेट करें + AM + प्रधानमंत्री + घंटे + मिनट + सेकंड + दिन + महीना + वर्ष + समय सेट करें + तारीख सेट करें \ No newline at end of file diff --git a/date_time/src/main/res/values-hr/strings.xml b/date_time/src/main/res/values-hr/strings.xml index e621b05e..aa91fcaa 100644 --- a/date_time/src/main/res/values-hr/strings.xml +++ b/date_time/src/main/res/values-hr/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Sati - Minuta - Sekunde - Dan - Mjesec - Godina - Postavite vrijeme - Postavi datum + AM + PM + Sati + Minuta + Sekunde + Dan + Mjesec + Godina + Postavite vrijeme + Postavi datum \ No newline at end of file diff --git a/date_time/src/main/res/values-hu/strings.xml b/date_time/src/main/res/values-hu/strings.xml index a65355db..952704fb 100644 --- a/date_time/src/main/res/values-hu/strings.xml +++ b/date_time/src/main/res/values-hu/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Órák - Percek - Másodpercek - Nap - Hónap - Év - Idő beállítása - Dátum beállítása + AM + PM + Órák + Percek + Másodpercek + Nap + Hónap + Év + Idő beállítása + Dátum beállítása \ No newline at end of file diff --git a/date_time/src/main/res/values-in-rID/strings.xml b/date_time/src/main/res/values-in-rID/strings.xml index 855fd34b..45058a2b 100644 --- a/date_time/src/main/res/values-in-rID/strings.xml +++ b/date_time/src/main/res/values-in-rID/strings.xml @@ -1,14 +1,14 @@ - AM - PM (Perdana Menteri) - Jam - Menit - Detik - Hari - Bulan - Tahun - Atur waktu - Atur tanggal + AM + PM (Perdana Menteri) + Jam + Menit + Detik + Hari + Bulan + Tahun + Atur waktu + Atur tanggal \ No newline at end of file diff --git a/date_time/src/main/res/values-is/strings.xml b/date_time/src/main/res/values-is/strings.xml index 965a106d..695b9065 100644 --- a/date_time/src/main/res/values-is/strings.xml +++ b/date_time/src/main/res/values-is/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Klukkustundir - Mínútur - Sekúndur - Dagur - Mánuður - Ár - Taktu tímann - Setja dagsetningu + AM + PM + Klukkustundir + Mínútur + Sekúndur + Dagur + Mánuður + Ár + Taktu tímann + Setja dagsetningu \ No newline at end of file diff --git a/date_time/src/main/res/values-it/strings.xml b/date_time/src/main/res/values-it/strings.xml index f140371e..513ace13 100644 --- a/date_time/src/main/res/values-it/strings.xml +++ b/date_time/src/main/res/values-it/strings.xml @@ -1,14 +1,14 @@ - AM - PM (Post Meridiem) - Ore - Minuti - Secondi - Giorno - Mese - Anno - Imposta l\'orario - Inserisci data + AM + PM (Post Meridiem) + Ore + Minuti + Secondi + Giorno + Mese + Anno + Imposta l\'orario + Inserisci data \ No newline at end of file diff --git a/date_time/src/main/res/values-iw/strings.xml b/date_time/src/main/res/values-iw/strings.xml index f0961c09..7a54f8a8 100644 --- a/date_time/src/main/res/values-iw/strings.xml +++ b/date_time/src/main/res/values-iw/strings.xml @@ -1,14 +1,14 @@ - AM - ראש ממשלה - שעות - דקות - שניות - יום - חודש - שנה - הגדר זמן - הגדר תאריך + AM + ראש ממשלה + שעות + דקות + שניות + יום + חודש + שנה + הגדר זמן + הגדר תאריך \ No newline at end of file diff --git a/date_time/src/main/res/values-ja/strings.xml b/date_time/src/main/res/values-ja/strings.xml index 03be96d9..3d793f34 100644 --- a/date_time/src/main/res/values-ja/strings.xml +++ b/date_time/src/main/res/values-ja/strings.xml @@ -1,14 +1,14 @@ - AM - PM - 時間 - - - - - - 時間を設定してください。 - 日付を設定する + AM + PM + 時間 + + + + + + 時間を設定してください。 + 日付を設定する \ No newline at end of file diff --git a/date_time/src/main/res/values-jv/strings.xml b/date_time/src/main/res/values-jv/strings.xml index 6611ea5a..57aeb612 100644 --- a/date_time/src/main/res/values-jv/strings.xml +++ b/date_time/src/main/res/values-jv/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Jam - Menit - Detik - Sasi - Bulan - Tahun - Damel wanci - Tanggal ditetapke + AM + PM + Jam + Menit + Detik + Sasi + Bulan + Tahun + Damel wanci + Tanggal ditetapke \ No newline at end of file diff --git a/date_time/src/main/res/values-kk/strings.xml b/date_time/src/main/res/values-kk/strings.xml index 6e8a7f53..0beb4d2c 100644 --- a/date_time/src/main/res/values-kk/strings.xml +++ b/date_time/src/main/res/values-kk/strings.xml @@ -1,14 +1,14 @@ - AM - Өкесінлерге жаза беру үшін ПМ. - Сағаттар - Минут - Секундтер - Күн - Ай - Жыл - Уақытты орнату - Күнді таңдау + AM + Өкесінлерге жаза беру үшін ПМ. + Сағаттар + Минут + Секундтер + Күн + Ай + Жыл + Уақытты орнату + Күнді таңдау \ No newline at end of file diff --git a/date_time/src/main/res/values-ko/strings.xml b/date_time/src/main/res/values-ko/strings.xml index ed276719..1cb0848d 100644 --- a/date_time/src/main/res/values-ko/strings.xml +++ b/date_time/src/main/res/values-ko/strings.xml @@ -1,14 +1,14 @@ - 오전 - 오후 - 영업 시간 - 분 (Bun) - - - - - 시간 설정하기 - 날짜 설정하기 + 오전 + 오후 + 영업 시간 + 분 (Bun) + + + + + 시간 설정하기 + 날짜 설정하기 \ No newline at end of file diff --git a/date_time/src/main/res/values-ku/strings.xml b/date_time/src/main/res/values-ku/strings.xml index 461bcf99..56a92c50 100644 --- a/date_time/src/main/res/values-ku/strings.xml +++ b/date_time/src/main/res/values-ku/strings.xml @@ -1,17 +1,17 @@ - AM - PM - کاتژمێر - داقاوە - Seconds + AM + PM + کاتژمێر + داقاوە + Seconds چرکەکان - Ro - مانگ - Sal - کات دابنێ + Ro + مانگ + Sal + کات دابنێ (or simply \"کات دابنێ\" if used in an Android app for setting time) - دەستکاریکردنی بەروار + دەستکاریکردنی بەروار \ No newline at end of file diff --git a/date_time/src/main/res/values-lb/strings.xml b/date_time/src/main/res/values-lb/strings.xml index 1b42da5f..4a5f3229 100644 --- a/date_time/src/main/res/values-lb/strings.xml +++ b/date_time/src/main/res/values-lb/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Stonnen - Protokoll - Sekonnen - Dag - Monat - Johr - Festlegen vun der Zäit - Datum setzen + AM + PM + Stonnen + Protokoll + Sekonnen + Dag + Monat + Johr + Festlegen vun der Zäit + Datum setzen \ No newline at end of file diff --git a/date_time/src/main/res/values-lo/strings.xml b/date_time/src/main/res/values-lo/strings.xml index 270a6109..bd017969 100644 --- a/date_time/src/main/res/values-lo/strings.xml +++ b/date_time/src/main/res/values-lo/strings.xml @@ -1,14 +1,14 @@ - ອາເມລ - ລົດມອນ - ເວລາ - ນະຄູນ - ວິນາທີ່ໃນວິນາທີ - ວັນ - ເດືອນ - ປີ - ຕັ້ງເວລາ - ຕັ້ງວັນທີ + ອາເມລ + ລົດມອນ + ເວລາ + ນະຄູນ + ວິນາທີ່ໃນວິນາທີ + ວັນ + ເດືອນ + ປີ + ຕັ້ງເວລາ + ຕັ້ງວັນທີ \ No newline at end of file diff --git a/date_time/src/main/res/values-lt/strings.xml b/date_time/src/main/res/values-lt/strings.xml index fad2c526..8e7e84ff 100644 --- a/date_time/src/main/res/values-lt/strings.xml +++ b/date_time/src/main/res/values-lt/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Valandos - Minutės - Sekundės - Diena - Mėnuo - Metai - Nustatykite laiką - Nustatykite datą + AM + PM + Valandos + Minutės + Sekundės + Diena + Mėnuo + Metai + Nustatykite laiką + Nustatykite datą \ No newline at end of file diff --git a/date_time/src/main/res/values-lv/strings.xml b/date_time/src/main/res/values-lv/strings.xml index 5b22403d..084f6288 100644 --- a/date_time/src/main/res/values-lv/strings.xml +++ b/date_time/src/main/res/values-lv/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Stundas - Minūtes - Sekundes - Diena - Mēnesis. - Gads - Iestatīt laiku - Iestatīt datumu + AM + PM + Stundas + Minūtes + Sekundes + Diena + Mēnesis. + Gads + Iestatīt laiku + Iestatīt datumu \ No newline at end of file diff --git a/date_time/src/main/res/values-ms/strings.xml b/date_time/src/main/res/values-ms/strings.xml index 09fc560b..a046c746 100644 --- a/date_time/src/main/res/values-ms/strings.xml +++ b/date_time/src/main/res/values-ms/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Jam - Minit - Saiz - Hari - Bulan - Tahun - Masa yang ditetapkan - Tetapkan tarikh + AM + PM + Jam + Minit + Saiz + Hari + Bulan + Tahun + Masa yang ditetapkan + Tetapkan tarikh \ No newline at end of file diff --git a/date_time/src/main/res/values-ne/strings.xml b/date_time/src/main/res/values-ne/strings.xml index 65077c1c..b7daaf8b 100644 --- a/date_time/src/main/res/values-ne/strings.xml +++ b/date_time/src/main/res/values-ne/strings.xml @@ -1,14 +1,14 @@ - AM - प्रधानमन्त्री - कालों - मिनेटसह - सेकेन्ड - दिन - महिना - वर्ष - समय सेट गर्नुहोस् - मिति सेट गर्नुहोस् + AM + प्रधानमन्त्री + कालों + मिनेटसह + सेकेन्ड + दिन + महिना + वर्ष + समय सेट गर्नुहोस् + मिति सेट गर्नुहोस् \ No newline at end of file diff --git a/date_time/src/main/res/values-nl/strings.xml b/date_time/src/main/res/values-nl/strings.xml index 449222f7..327c0cdc 100644 --- a/date_time/src/main/res/values-nl/strings.xml +++ b/date_time/src/main/res/values-nl/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Uren - Notulen - Seconden - Dag - Maand - Jaar - Tijd instellen - Stel datum in + AM + PM + Uren + Notulen + Seconden + Dag + Maand + Jaar + Tijd instellen + Stel datum in \ No newline at end of file diff --git a/date_time/src/main/res/values-no/strings.xml b/date_time/src/main/res/values-no/strings.xml index b01e8f42..f6c214d9 100644 --- a/date_time/src/main/res/values-no/strings.xml +++ b/date_time/src/main/res/values-no/strings.xml @@ -1,14 +1,14 @@ - OK - PM - Timer - Minutter - Sekunder - Dag - Måned - År - Angi tid - Angi dato + OK + PM + Timer + Minutter + Sekunder + Dag + Måned + År + Angi tid + Angi dato \ No newline at end of file diff --git a/date_time/src/main/res/values-pl/strings.xml b/date_time/src/main/res/values-pl/strings.xml index bce46844..ea1a3859 100644 --- a/date_time/src/main/res/values-pl/strings.xml +++ b/date_time/src/main/res/values-pl/strings.xml @@ -1,14 +1,14 @@ - AM - OK. - Godziny - Minuty - Sekundy - Dzień - Miesiąc - Rok - Ustaw czas - Ustaw datę + AM + OK. + Godziny + Minuty + Sekundy + Dzień + Miesiąc + Rok + Ustaw czas + Ustaw datę \ No newline at end of file diff --git a/date_time/src/main/res/values-pt/strings.xml b/date_time/src/main/res/values-pt/strings.xml index 082609c4..fbed35ac 100644 --- a/date_time/src/main/res/values-pt/strings.xml +++ b/date_time/src/main/res/values-pt/strings.xml @@ -1,14 +1,14 @@ - AM - PM (Portador de Mensagens) - Horas - Minutos - Segundos - Dia - Mês - Ano - Definir horário - Definir data + AM + PM (Portador de Mensagens) + Horas + Minutos + Segundos + Dia + Mês + Ano + Definir horário + Definir data \ No newline at end of file diff --git a/date_time/src/main/res/values-ru/strings.xml b/date_time/src/main/res/values-ru/strings.xml index 54805b3f..a03afb48 100644 --- a/date_time/src/main/res/values-ru/strings.xml +++ b/date_time/src/main/res/values-ru/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Часы - Минуты - Секунды - День - Месяц - Год - Настроить время - Установить дату + AM + PM + Часы + Минуты + Секунды + День + Месяц + Год + Настроить время + Установить дату \ No newline at end of file diff --git a/date_time/src/main/res/values-sk/strings.xml b/date_time/src/main/res/values-sk/strings.xml index 1ebc0080..0af7c3be 100644 --- a/date_time/src/main/res/values-sk/strings.xml +++ b/date_time/src/main/res/values-sk/strings.xml @@ -1,14 +1,14 @@ - rýchly preklad am - PM - Hodiny - Minúty - Sekundy - Deň - Mesiac - Rok - Nastaviť čas - Nastaviť dátum + rýchly preklad am + PM + Hodiny + Minúty + Sekundy + Deň + Mesiac + Rok + Nastaviť čas + Nastaviť dátum \ No newline at end of file diff --git a/date_time/src/main/res/values-sl/strings.xml b/date_time/src/main/res/values-sl/strings.xml index 8898d9c3..1d5f2b0c 100644 --- a/date_time/src/main/res/values-sl/strings.xml +++ b/date_time/src/main/res/values-sl/strings.xml @@ -1,14 +1,14 @@ - AM - OK - Ure - Minuti - Sekunde - Dan - Mesec - Leto - Nastavi čas - Nastavi datum + AM + OK + Ure + Minuti + Sekunde + Dan + Mesec + Leto + Nastavi čas + Nastavi datum \ No newline at end of file diff --git a/date_time/src/main/res/values-sr/strings.xml b/date_time/src/main/res/values-sr/strings.xml index 8c021197..1d1762f3 100644 --- a/date_time/src/main/res/values-sr/strings.xml +++ b/date_time/src/main/res/values-sr/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Sati - Minuti - Sekunde - Dan - Mesec - Godina - Postavite vreme - Postavi datum + AM + PM + Sati + Minuti + Sekunde + Dan + Mesec + Godina + Postavite vreme + Postavi datum \ No newline at end of file diff --git a/date_time/src/main/res/values-sv/strings.xml b/date_time/src/main/res/values-sv/strings.xml index 7e6e1015..5f98b261 100644 --- a/date_time/src/main/res/values-sv/strings.xml +++ b/date_time/src/main/res/values-sv/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Timmar - Protokoll - Sekunder - Dag - Månad - År - Ställ in tid - Ange datum + AM + PM + Timmar + Protokoll + Sekunder + Dag + Månad + År + Ställ in tid + Ange datum \ No newline at end of file diff --git a/date_time/src/main/res/values-th/strings.xml b/date_time/src/main/res/values-th/strings.xml index 35957496..095a850b 100644 --- a/date_time/src/main/res/values-th/strings.xml +++ b/date_time/src/main/res/values-th/strings.xml @@ -1,14 +1,14 @@ - AM - นายกรัฐมนตรี - ชั่วโมง - นาที - วินาที - วัน - เดือน - ปี - ตั้งเวลา - กำหนดวันที่ + AM + นายกรัฐมนตรี + ชั่วโมง + นาที + วินาที + วัน + เดือน + ปี + ตั้งเวลา + กำหนดวันที่ \ No newline at end of file diff --git a/date_time/src/main/res/values-tr/strings.xml b/date_time/src/main/res/values-tr/strings.xml index fc4326fc..e91108ce 100644 --- a/date_time/src/main/res/values-tr/strings.xml +++ b/date_time/src/main/res/values-tr/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Saatler - Dakikalar - Saniye - Gün - Ay - Yıl - Zaman ayarla - Tarih ayarla + AM + PM + Saatler + Dakikalar + Saniye + Gün + Ay + Yıl + Zaman ayarla + Tarih ayarla \ No newline at end of file diff --git a/date_time/src/main/res/values-uk/strings.xml b/date_time/src/main/res/values-uk/strings.xml index 38671863..53ec2c9e 100644 --- a/date_time/src/main/res/values-uk/strings.xml +++ b/date_time/src/main/res/values-uk/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Години - Хвилини - Секунди - День - Місяць - Рік - Встановити час - Встановити дату + AM + PM + Години + Хвилини + Секунди + День + Місяць + Рік + Встановити час + Встановити дату \ No newline at end of file diff --git a/date_time/src/main/res/values-vi/strings.xml b/date_time/src/main/res/values-vi/strings.xml index 59353d1f..8eb34336 100644 --- a/date_time/src/main/res/values-vi/strings.xml +++ b/date_time/src/main/res/values-vi/strings.xml @@ -1,14 +1,14 @@ - AM - Thủ tướng - Giờ - Phút - Giây. - Ngày - Tháng - Năm - Đặt thời gian - Đặt ngày + AM + Thủ tướng + Giờ + Phút + Giây. + Ngày + Tháng + Năm + Đặt thời gian + Đặt ngày \ No newline at end of file diff --git a/date_time/src/main/res/values-zh-rCN/strings.xml b/date_time/src/main/res/values-zh-rCN/strings.xml index e351f02a..9633af04 100644 --- a/date_time/src/main/res/values-zh-rCN/strings.xml +++ b/date_time/src/main/res/values-zh-rCN/strings.xml @@ -1,14 +1,14 @@ - 上午 - PM - 小时 - 分钟 - - Day - 月份 - 年份 - 设置时间 - 设置日期 + 上午 + PM + 小时 + 分钟 + + Day + 月份 + 年份 + 设置时间 + 设置日期 \ No newline at end of file diff --git a/date_time/src/main/res/values-zh-rTW/strings.xml b/date_time/src/main/res/values-zh-rTW/strings.xml index 7865624f..a8fded18 100644 --- a/date_time/src/main/res/values-zh-rTW/strings.xml +++ b/date_time/src/main/res/values-zh-rTW/strings.xml @@ -1,16 +1,16 @@ - AM - PM (下午/晚上) - 小時 - 會議紀錄 - - Day + AM + PM (下午/晚上) + 小時 + 會議紀錄 + + Day 日子 - 月份 - 年份 - 設置時間 - 設置日期 + 月份 + 年份 + 設置時間 + 設置日期 \ No newline at end of file diff --git a/date_time/src/main/res/values/strings.xml b/date_time/src/main/res/values/strings.xml index a36608e7..d82a2256 100644 --- a/date_time/src/main/res/values/strings.xml +++ b/date_time/src/main/res/values/strings.xml @@ -1,14 +1,14 @@ - AM - PM - Hours - Minutes - Seconds - Day - Month - Year - Set time - Set date + AM + PM + Hours + Minutes + Seconds + Day + Month + Year + Set time + Set date diff --git a/duration/src/main/AndroidManifest.xml b/duration/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/duration/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/duration/src/main/res/values-bg/strings.xml b/duration/src/main/res/values-bg/strings.xml index dbe72d23..2b501979 100644 --- a/duration/src/main/res/values-bg/strings.xml +++ b/duration/src/main/res/values-bg/strings.xml @@ -1,14 +1,14 @@ - Минимум - Максимум - h - м - s - Часове - Минути - Секунди - Изтриване на последния въведен елемент. - Изчисти входа + Минимум + Максимум + h + м + s + Часове + Минути + Секунди + Изтриване на последния въведен елемент. + Изчисти входа \ No newline at end of file diff --git a/duration/src/main/res/values-cs/strings.xml b/duration/src/main/res/values-cs/strings.xml index 4cd6ac14..d5ad22e5 100644 --- a/duration/src/main/res/values-cs/strings.xml +++ b/duration/src/main/res/values-cs/strings.xml @@ -1,14 +1,14 @@ - Minimální - Maximum - h - m - s - Hodiny - Minuty - Sekundy - Smazat poslední zadání - Vyčistit vstup + Minimální + Maximum + h + m + s + Hodiny + Minuty + Sekundy + Smazat poslední zadání + Vyčistit vstup \ No newline at end of file diff --git a/duration/src/main/res/values-da/strings.xml b/duration/src/main/res/values-da/strings.xml index 53abee85..2f8091a2 100644 --- a/duration/src/main/res/values-da/strings.xml +++ b/duration/src/main/res/values-da/strings.xml @@ -1,14 +1,14 @@ - Minimum - Højst - h - m - s - Timer - Minutter - Sekunder - Slet seneste indtastning - Ryd indtastning + Minimum + Højst + h + m + s + Timer + Minutter + Sekunder + Slet seneste indtastning + Ryd indtastning \ No newline at end of file diff --git a/duration/src/main/res/values-de-rDE/strings.xml b/duration/src/main/res/values-de-rDE/strings.xml index f9dfa1fe..06d53b11 100644 --- a/duration/src/main/res/values-de-rDE/strings.xml +++ b/duration/src/main/res/values-de-rDE/strings.xml @@ -1,4 +1,4 @@ - + Mindestens diff --git a/duration/src/main/res/values-de/strings.xml b/duration/src/main/res/values-de/strings.xml index e9b53edf..53f429a5 100644 --- a/duration/src/main/res/values-de/strings.xml +++ b/duration/src/main/res/values-de/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maximal - h - m - s - Stunden - Minuten - Sekunden - Letzten Eingabe löschen - Eingabe löschen + Minimum + Maximal + h + m + s + Stunden + Minuten + Sekunden + Letzten Eingabe löschen + Eingabe löschen \ No newline at end of file diff --git a/duration/src/main/res/values-el/strings.xml b/duration/src/main/res/values-el/strings.xml index 7bf05564..bd27d8f8 100644 --- a/duration/src/main/res/values-el/strings.xml +++ b/duration/src/main/res/values-el/strings.xml @@ -1,14 +1,14 @@ - Ελάχιστο - Μέγιστο - h - m - s - Ωρες - Λεπτά - Δευτερόλεπτα - Διαγραφή τελευταίας εισόδου - Καθαρισμός εισόδου + Ελάχιστο + Μέγιστο + h + m + s + Ωρες + Λεπτά + Δευτερόλεπτα + Διαγραφή τελευταίας εισόδου + Καθαρισμός εισόδου \ No newline at end of file diff --git a/duration/src/main/res/values-eo/strings.xml b/duration/src/main/res/values-eo/strings.xml index cd15459c..94eefc0f 100644 --- a/duration/src/main/res/values-eo/strings.xml +++ b/duration/src/main/res/values-eo/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimuma - h - m - s - Horoj - Minute - Sekundoj - Forigi lastan enigon - Forigi eniron + Minimum + Maksimuma + h + m + s + Horoj + Minute + Sekundoj + Forigi lastan enigon + Forigi eniron \ No newline at end of file diff --git a/duration/src/main/res/values-es/strings.xml b/duration/src/main/res/values-es/strings.xml index 46d83a12..e90e1f39 100644 --- a/duration/src/main/res/values-es/strings.xml +++ b/duration/src/main/res/values-es/strings.xml @@ -1,14 +1,14 @@ - Mínimo - Máximo - h - m - s - Horas - Minutos - Segundos - Eliminar última entrada - Borrar entrada + Mínimo + Máximo + h + m + s + Horas + Minutos + Segundos + Eliminar última entrada + Borrar entrada \ No newline at end of file diff --git a/duration/src/main/res/values-et/strings.xml b/duration/src/main/res/values-et/strings.xml index 46ec193e..fd5982b7 100644 --- a/duration/src/main/res/values-et/strings.xml +++ b/duration/src/main/res/values-et/strings.xml @@ -1,14 +1,14 @@ - Miinimum - Maksimaalne - h - m - s - Tunnid - Minutes - Sekundid - Kustuta viimane sisend - Tühista sisend + Miinimum + Maksimaalne + h + m + s + Tunnid + Minutes + Sekundid + Kustuta viimane sisend + Tühista sisend \ No newline at end of file diff --git a/duration/src/main/res/values-fa/strings.xml b/duration/src/main/res/values-fa/strings.xml index ea00f509..a8ea53e4 100644 --- a/duration/src/main/res/values-fa/strings.xml +++ b/duration/src/main/res/values-fa/strings.xml @@ -1,14 +1,14 @@ - حداقل - حداکثر - h - m - s - ساعات - دقیقه - ثانیه - حذف آخرین ورودی - پاکسازی ورودی + حداقل + حداکثر + h + m + s + ساعات + دقیقه + ثانیه + حذف آخرین ورودی + پاکسازی ورودی \ No newline at end of file diff --git a/duration/src/main/res/values-fi/strings.xml b/duration/src/main/res/values-fi/strings.xml index d5c7b956..0a0a27f8 100644 --- a/duration/src/main/res/values-fi/strings.xml +++ b/duration/src/main/res/values-fi/strings.xml @@ -1,14 +1,14 @@ - Vähimmäis - Maksimi - h - m - s - Tunnit - Pöytäkirja - Sekunnit - Poista viimeisin syöte - Tyhjennä syöte + Vähimmäis + Maksimi + h + m + s + Tunnit + Pöytäkirja + Sekunnit + Poista viimeisin syöte + Tyhjennä syöte \ No newline at end of file diff --git a/duration/src/main/res/values-fr/strings.xml b/duration/src/main/res/values-fr/strings.xml index 3dd20e71..3cd63b83 100644 --- a/duration/src/main/res/values-fr/strings.xml +++ b/duration/src/main/res/values-fr/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maximum - h - m - s - Heures - Minutes - Secondes - Supprimer la dernière entrée - Effacer la saisie + Minimum + Maximum + h + m + s + Heures + Minutes + Secondes + Supprimer la dernière entrée + Effacer la saisie \ No newline at end of file diff --git a/duration/src/main/res/values-ga/strings.xml b/duration/src/main/res/values-ga/strings.xml index 0074c94c..6bb6714c 100644 --- a/duration/src/main/res/values-ga/strings.xml +++ b/duration/src/main/res/values-ga/strings.xml @@ -1,14 +1,14 @@ - Is íochtarach. - Teorainn Mórchumais - h - m - s - Uaireanta - Nótaí - Soicindí - Scrios an iontráil dheireanach - Cléiriú isteach + Is íochtarach. + Teorainn Mórchumais + h + m + s + Uaireanta + Nótaí + Soicindí + Scrios an iontráil dheireanach + Cléiriú isteach \ No newline at end of file diff --git a/duration/src/main/res/values-gd/strings.xml b/duration/src/main/res/values-gd/strings.xml index a927f3aa..74fdc6a2 100644 --- a/duration/src/main/res/values-gd/strings.xml +++ b/duration/src/main/res/values-gd/strings.xml @@ -1,14 +1,14 @@ - Cìogairin - Àrd-mhìneachadh - h - m - s - Uairean - Gach mionaid - Dàrnaichean - Sguab às am put mu dheireadh - Fuirich soilleir + Cìogairin + Àrd-mhìneachadh + h + m + s + Uairean + Gach mionaid + Dàrnaichean + Sguab às am put mu dheireadh + Fuirich soilleir \ No newline at end of file diff --git a/duration/src/main/res/values-hi/strings.xml b/duration/src/main/res/values-hi/strings.xml index 72aea324..ae7c981e 100644 --- a/duration/src/main/res/values-hi/strings.xml +++ b/duration/src/main/res/values-hi/strings.xml @@ -1,14 +1,14 @@ - न्यूनतम - अधिकतम - h - m - - घंटे - मिनट्स - सेकंड - पिछला इनपुट हटाएं - स्पष्ट इनपुट + न्यूनतम + अधिकतम + h + m + + घंटे + मिनट्स + सेकंड + पिछला इनपुट हटाएं + स्पष्ट इनपुट \ No newline at end of file diff --git a/duration/src/main/res/values-hr/strings.xml b/duration/src/main/res/values-hr/strings.xml index 57caddea..25a3f841 100644 --- a/duration/src/main/res/values-hr/strings.xml +++ b/duration/src/main/res/values-hr/strings.xml @@ -1,14 +1,14 @@ - Minimalno - Maksimum - h - m - s - Sati - Minuta - Sekunde - Izbriši posljednji unos - Očisti unos + Minimalno + Maksimum + h + m + s + Sati + Minuta + Sekunde + Izbriši posljednji unos + Očisti unos \ No newline at end of file diff --git a/duration/src/main/res/values-hu/strings.xml b/duration/src/main/res/values-hu/strings.xml index 584f190c..6936eed1 100644 --- a/duration/src/main/res/values-hu/strings.xml +++ b/duration/src/main/res/values-hu/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maximum - h - m - s - Órák - Percek - Másodpercek - Utolsó bevitel törlése - Tiszta bemenet + Minimum + Maximum + h + m + s + Órák + Percek + Másodpercek + Utolsó bevitel törlése + Tiszta bemenet \ No newline at end of file diff --git a/duration/src/main/res/values-in-rID/strings.xml b/duration/src/main/res/values-in-rID/strings.xml index e48c3718..bc175f11 100644 --- a/duration/src/main/res/values-in-rID/strings.xml +++ b/duration/src/main/res/values-in-rID/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimum - h - m - s - Jam - Menit - Detik - Hapus masukan terakhir - Hapus masukan + Minimum + Maksimum + h + m + s + Jam + Menit + Detik + Hapus masukan terakhir + Hapus masukan \ No newline at end of file diff --git a/duration/src/main/res/values-is/strings.xml b/duration/src/main/res/values-is/strings.xml index 0324977a..7a22d5c6 100644 --- a/duration/src/main/res/values-is/strings.xml +++ b/duration/src/main/res/values-is/strings.xml @@ -1,14 +1,14 @@ - Lágmarks- - Hámark - h - m - s - Klukkustundir - Mínútur - Sekúndur - Eyða síðasta inntaki - Hreinna innslátt + Lágmarks- + Hámark + h + m + s + Klukkustundir + Mínútur + Sekúndur + Eyða síðasta inntaki + Hreinna innslátt \ No newline at end of file diff --git a/duration/src/main/res/values-it/strings.xml b/duration/src/main/res/values-it/strings.xml index 79873bc1..b36174b2 100644 --- a/duration/src/main/res/values-it/strings.xml +++ b/duration/src/main/res/values-it/strings.xml @@ -1,14 +1,14 @@ - Minimo - Massimo - h - m - s - Orari - Minuti. - Secondi - Elimina l\'ultimo input - Cancella l\'input + Minimo + Massimo + h + m + s + Orari + Minuti. + Secondi + Elimina l\'ultimo input + Cancella l\'input \ No newline at end of file diff --git a/duration/src/main/res/values-iw/strings.xml b/duration/src/main/res/values-iw/strings.xml index 56097984..306c7839 100644 --- a/duration/src/main/res/values-iw/strings.xml +++ b/duration/src/main/res/values-iw/strings.xml @@ -1,14 +1,14 @@ - מינימום - מרבי - h - m - s - שעות - דקות - שניות - מחק את הקלט האחרון - נקה קלט + מינימום + מרבי + h + m + s + שעות + דקות + שניות + מחק את הקלט האחרון + נקה קלט \ No newline at end of file diff --git a/duration/src/main/res/values-ja/strings.xml b/duration/src/main/res/values-ja/strings.xml index 898977d2..e5269997 100644 --- a/duration/src/main/res/values-ja/strings.xml +++ b/duration/src/main/res/values-ja/strings.xml @@ -1,14 +1,14 @@ - 最小 - 最大 - h - m - s - 営業時間 - - - 最後の入力を削除する - 入力をクリア + 最小 + 最大 + h + m + s + 営業時間 + + + 最後の入力を削除する + 入力をクリア \ No newline at end of file diff --git a/duration/src/main/res/values-jv/strings.xml b/duration/src/main/res/values-jv/strings.xml index b759f65b..88c1c9f1 100644 --- a/duration/src/main/res/values-jv/strings.xml +++ b/duration/src/main/res/values-jv/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimal - h - m - s - Jam-jam - Menit - Detik - Ngapus data paling anyar - Terangake masukan + Minimum + Maksimal + h + m + s + Jam-jam + Menit + Detik + Ngapus data paling anyar + Terangake masukan \ No newline at end of file diff --git a/duration/src/main/res/values-kk/strings.xml b/duration/src/main/res/values-kk/strings.xml index c71b5a72..3fae2103 100644 --- a/duration/src/main/res/values-kk/strings.xml +++ b/duration/src/main/res/values-kk/strings.xml @@ -1,14 +1,14 @@ - Аза туралы - Ең көп - h - m - s - Сағаттар - Минутты. - Секунды - Соңғы кірістірмемен шығару - Таза кіру + Аза туралы + Ең көп + h + m + s + Сағаттар + Минутты. + Секунды + Соңғы кірістірмемен шығару + Таза кіру \ No newline at end of file diff --git a/duration/src/main/res/values-ko/strings.xml b/duration/src/main/res/values-ko/strings.xml index 62b71cbc..3d6f39d9 100644 --- a/duration/src/main/res/values-ko/strings.xml +++ b/duration/src/main/res/values-ko/strings.xml @@ -1,14 +1,14 @@ - 최소한의 - 최대한의 - h - m - s - 시간 - - - 마지막 입력 삭제 - 입력 지우기 + 최소한의 + 최대한의 + h + m + s + 시간 + + + 마지막 입력 삭제 + 입력 지우기 \ No newline at end of file diff --git a/duration/src/main/res/values-ku/strings.xml b/duration/src/main/res/values-ku/strings.xml index e31c326d..04332668 100644 --- a/duration/src/main/res/values-ku/strings.xml +++ b/duration/src/main/res/values-ku/strings.xml @@ -1,14 +1,14 @@ - Minimum - سەرەتایی - h - m - s - کاتژمێر - دەقایەکان - چرکەمینداڵان - تاکە لەسەرین دانە حذف بکە - جێگیرکردنەوەی دانەوە بەبڕوانە + Minimum + سەرەتایی + h + m + s + کاتژمێر + دەقایەکان + چرکەمینداڵان + تاکە لەسەرین دانە حذف بکە + جێگیرکردنەوەی دانەوە بەبڕوانە \ No newline at end of file diff --git a/duration/src/main/res/values-lb/strings.xml b/duration/src/main/res/values-lb/strings.xml index 26c4224f..bd6aa221 100644 --- a/duration/src/main/res/values-lb/strings.xml +++ b/duration/src/main/res/values-lb/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maximum - h - m - s - Stonnen - Minutten - Sekonnen - Läscht de leschte Input. - Läschen Eingabe + Minimum + Maximum + h + m + s + Stonnen + Minutten + Sekonnen + Läscht de leschte Input. + Läschen Eingabe \ No newline at end of file diff --git a/duration/src/main/res/values-lo/strings.xml b/duration/src/main/res/values-lo/strings.xml index adfddd49..cd17aad3 100644 --- a/duration/src/main/res/values-lo/strings.xml +++ b/duration/src/main/res/values-lo/strings.xml @@ -1,14 +1,14 @@ - ຕໍ່ໄປເກີດຄວາມຮ່ວມທີ່ບໍ່ດໍາເນີນການ. - ສູນເສຍສໍາລັບກ່ອນນັ້ນ - h - m - s - ຊົ່ວໂມງ - ນາທີ - ວິນາທີ່ - ລຶບຂໍ້ມູນຂອງການປ້ອນຫຼ້າສຸດ - ລົບຂໍ້ມູນເຂົ້າໃຊ້ໃດໆ + ຕໍ່ໄປເກີດຄວາມຮ່ວມທີ່ບໍ່ດໍາເນີນການ. + ສູນເສຍສໍາລັບກ່ອນນັ້ນ + h + m + s + ຊົ່ວໂມງ + ນາທີ + ວິນາທີ່ + ລຶບຂໍ້ມູນຂອງການປ້ອນຫຼ້າສຸດ + ລົບຂໍ້ມູນເຂົ້າໃຊ້ໃດໆ \ No newline at end of file diff --git a/duration/src/main/res/values-lt/strings.xml b/duration/src/main/res/values-lt/strings.xml index a1a2f597..a8fb1334 100644 --- a/duration/src/main/res/values-lt/strings.xml +++ b/duration/src/main/res/values-lt/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimalus - h - m - s - Valandos - Minutes - Minutės - Sekundės - Ištrinti paskutinį įvedimą. - Išvalyti įvestį + Minimum + Maksimalus + h + m + s + Valandos + Minutes - Minutės + Sekundės + Ištrinti paskutinį įvedimą. + Išvalyti įvestį \ No newline at end of file diff --git a/duration/src/main/res/values-lv/strings.xml b/duration/src/main/res/values-lv/strings.xml index cbfed632..8a58d004 100644 --- a/duration/src/main/res/values-lv/strings.xml +++ b/duration/src/main/res/values-lv/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimums - h - m - s - Stundas - Minūtes - Sekundes - Dzēst pēdējo ievadi. - Notklaust ievadījumu + Minimum + Maksimums + h + m + s + Stundas + Minūtes + Sekundes + Dzēst pēdējo ievadi. + Notklaust ievadījumu \ No newline at end of file diff --git a/duration/src/main/res/values-ms/strings.xml b/duration/src/main/res/values-ms/strings.xml index 9523ed2a..4858358e 100644 --- a/duration/src/main/res/values-ms/strings.xml +++ b/duration/src/main/res/values-ms/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimum - h - OK. - s - Jam - Minit - Sa(a)t - Padam input terakhir - Kosongkan input + Minimum + Maksimum + h + OK. + s + Jam + Minit + Sa(a)t + Padam input terakhir + Kosongkan input \ No newline at end of file diff --git a/duration/src/main/res/values-ne/strings.xml b/duration/src/main/res/values-ne/strings.xml index 526df4a2..705b0e1d 100644 --- a/duration/src/main/res/values-ne/strings.xml +++ b/duration/src/main/res/values-ne/strings.xml @@ -1,14 +1,14 @@ - न्यूनतम - अधिकतम - OK - - s - कालों - दक्षिण, क्षण - सेकेण्ड - अन्तिम इनपुटलाई मेटाउनुहोस्। - प्रविष्टि साफ गर्नुहोस् + न्यूनतम + अधिकतम + OK + + s + कालों + दक्षिण, क्षण + सेकेण्ड + अन्तिम इनपुटलाई मेटाउनुहोस्। + प्रविष्टि साफ गर्नुहोस् \ No newline at end of file diff --git a/duration/src/main/res/values-nl/strings.xml b/duration/src/main/res/values-nl/strings.xml index e2cabefa..d6db570e 100644 --- a/duration/src/main/res/values-nl/strings.xml +++ b/duration/src/main/res/values-nl/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maximum - h - m - s - Uren - Notulen - Seconden - Laatste invoer verwijderen - Wis invoer + Minimum + Maximum + h + m + s + Uren + Notulen + Seconden + Laatste invoer verwijderen + Wis invoer \ No newline at end of file diff --git a/duration/src/main/res/values-no/strings.xml b/duration/src/main/res/values-no/strings.xml index 69c39de5..6b5af144 100644 --- a/duration/src/main/res/values-no/strings.xml +++ b/duration/src/main/res/values-no/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimum - h - m - s - Timer - Minutter - Sekunder - Slett siste inndata - Tøm input + Minimum + Maksimum + h + m + s + Timer + Minutter + Sekunder + Slett siste inndata + Tøm input \ No newline at end of file diff --git a/duration/src/main/res/values-pl/strings.xml b/duration/src/main/res/values-pl/strings.xml index 894b05e3..da013c21 100644 --- a/duration/src/main/res/values-pl/strings.xml +++ b/duration/src/main/res/values-pl/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimum - OK - m - s - Godziny - Minuty - Sekundy - Usuń ostatni wpis - Wyczyść dane wejściowe + Minimum + Maksimum + OK + m + s + Godziny + Minuty + Sekundy + Usuń ostatni wpis + Wyczyść dane wejściowe \ No newline at end of file diff --git a/duration/src/main/res/values-pt/strings.xml b/duration/src/main/res/values-pt/strings.xml index 30c87505..8ee68df1 100644 --- a/duration/src/main/res/values-pt/strings.xml +++ b/duration/src/main/res/values-pt/strings.xml @@ -1,14 +1,14 @@ - Mínimo - Máximo - h - m - s - Horas - Minutos - Segundos - Apagar última entrada - Limpar entrada + Mínimo + Máximo + h + m + s + Horas + Minutos + Segundos + Apagar última entrada + Limpar entrada \ No newline at end of file diff --git a/duration/src/main/res/values-ru/strings.xml b/duration/src/main/res/values-ru/strings.xml index 0a666ee7..d548d73f 100644 --- a/duration/src/main/res/values-ru/strings.xml +++ b/duration/src/main/res/values-ru/strings.xml @@ -1,14 +1,14 @@ - Минимальный - Максимум - h - m - s - Часы - Минуты - Секунды - Удалить последний ввод - Очистить ввод + Минимальный + Максимум + h + m + s + Часы + Минуты + Секунды + Удалить последний ввод + Очистить ввод \ No newline at end of file diff --git a/duration/src/main/res/values-sk/strings.xml b/duration/src/main/res/values-sk/strings.xml index d38917bf..f628e2d0 100644 --- a/duration/src/main/res/values-sk/strings.xml +++ b/duration/src/main/res/values-sk/strings.xml @@ -1,14 +1,14 @@ - Minimálny - Maximálny - h - m - s - Hodiny - Protokol - Sekundy - Zmazať posledný vstup - Vyčistiť vstup + Minimálny + Maximálny + h + m + s + Hodiny + Protokol + Sekundy + Zmazať posledný vstup + Vyčistiť vstup \ No newline at end of file diff --git a/duration/src/main/res/values-sl/strings.xml b/duration/src/main/res/values-sl/strings.xml index 818346e9..fc52ccc6 100644 --- a/duration/src/main/res/values-sl/strings.xml +++ b/duration/src/main/res/values-sl/strings.xml @@ -1,14 +1,14 @@ - Najmanjše - Največ - h - m - s - Ure - Minuti - Sekunde - Izbriši zadnji vnos - Pobriši vnos + Najmanjše + Največ + h + m + s + Ure + Minuti + Sekunde + Izbriši zadnji vnos + Pobriši vnos \ No newline at end of file diff --git a/duration/src/main/res/values-sr/strings.xml b/duration/src/main/res/values-sr/strings.xml index dd98a07d..12547c95 100644 --- a/duration/src/main/res/values-sr/strings.xml +++ b/duration/src/main/res/values-sr/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimum - h - m - s - Sati - Minuti - Sekundi - Obriši poslednji unos - Obriši unos. + Minimum + Maksimum + h + m + s + Sati + Minuti + Sekundi + Obriši poslednji unos + Obriši unos. \ No newline at end of file diff --git a/duration/src/main/res/values-sv/strings.xml b/duration/src/main/res/values-sv/strings.xml index 29d2f194..7604398f 100644 --- a/duration/src/main/res/values-sv/strings.xml +++ b/duration/src/main/res/values-sv/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maximum - h - m - s - Timmar - Minuter - Sekunder - Radera senaste inmatningen - Rensa input + Minimum + Maximum + h + m + s + Timmar + Minuter + Sekunder + Radera senaste inmatningen + Rensa input \ No newline at end of file diff --git a/duration/src/main/res/values-th/strings.xml b/duration/src/main/res/values-th/strings.xml index e68143ad..36bb6ea2 100644 --- a/duration/src/main/res/values-th/strings.xml +++ b/duration/src/main/res/values-th/strings.xml @@ -1,14 +1,14 @@ - ขั้นต่ำ - มากที่สุด - h - m - s - เวลา - นาที - วินาที - ลบการป้อนข้อมูลล่าสุด - ล้างข้อมูลที่ป้อน + ขั้นต่ำ + มากที่สุด + h + m + s + เวลา + นาที + วินาที + ลบการป้อนข้อมูลล่าสุด + ล้างข้อมูลที่ป้อน \ No newline at end of file diff --git a/duration/src/main/res/values-tr/strings.xml b/duration/src/main/res/values-tr/strings.xml index 0b3f8770..30fd824f 100644 --- a/duration/src/main/res/values-tr/strings.xml +++ b/duration/src/main/res/values-tr/strings.xml @@ -1,14 +1,14 @@ - Minimum - Maksimum - h - m - s - Saatler - Dakikalar - Saniye - Son girişi sil - Girdiyi temizle + Minimum + Maksimum + h + m + s + Saatler + Dakikalar + Saniye + Son girişi sil + Girdiyi temizle \ No newline at end of file diff --git a/duration/src/main/res/values-uk/strings.xml b/duration/src/main/res/values-uk/strings.xml index efbf41a7..fc157448 100644 --- a/duration/src/main/res/values-uk/strings.xml +++ b/duration/src/main/res/values-uk/strings.xml @@ -1,14 +1,14 @@ - Мінімум - Максимум - h - m - s - Години - Хвилини - Секунди - Видалити останній введений запис - Очистити введення + Мінімум + Максимум + h + m + s + Години + Хвилини + Секунди + Видалити останній введений запис + Очистити введення \ No newline at end of file diff --git a/duration/src/main/res/values-vi/strings.xml b/duration/src/main/res/values-vi/strings.xml index 4dc16586..5b4cd150 100644 --- a/duration/src/main/res/values-vi/strings.xml +++ b/duration/src/main/res/values-vi/strings.xml @@ -1,14 +1,14 @@ - Tối thiểu - Tối đa - h - m - s - Giờ - Phút - Giây. - Xóa đầu vào cuối cùng - Xóa nội dung + Tối thiểu + Tối đa + h + m + s + Giờ + Phút + Giây. + Xóa đầu vào cuối cùng + Xóa nội dung \ No newline at end of file diff --git a/duration/src/main/res/values-zh-rCN/strings.xml b/duration/src/main/res/values-zh-rCN/strings.xml index e0696974..cdeba44c 100644 --- a/duration/src/main/res/values-zh-rCN/strings.xml +++ b/duration/src/main/res/values-zh-rCN/strings.xml @@ -1,14 +1,14 @@ - 最小 - 最大的 - h - m - s - 小时 - 分钟 - - 删除最后一个输入 - 清除输入 + 最小 + 最大的 + h + m + s + 小时 + 分钟 + + 删除最后一个输入 + 清除输入 \ No newline at end of file diff --git a/duration/src/main/res/values-zh-rTW/strings.xml b/duration/src/main/res/values-zh-rTW/strings.xml index 31f97317..d08573e5 100644 --- a/duration/src/main/res/values-zh-rTW/strings.xml +++ b/duration/src/main/res/values-zh-rTW/strings.xml @@ -1,14 +1,14 @@ - 最小的 - 最大化 - h - m - s - 小時 - 會議紀錄 - - 刪除最後的輸入 - 清除輸入 + 最小的 + 最大化 + h + m + s + 小時 + 會議紀錄 + + 刪除最後的輸入 + 清除輸入 \ No newline at end of file diff --git a/duration/src/main/res/values/strings.xml b/duration/src/main/res/values/strings.xml index c810f9c8..0aa4fb64 100644 --- a/duration/src/main/res/values/strings.xml +++ b/duration/src/main/res/values/strings.xml @@ -1,16 +1,16 @@ - + - Minimum - Maximum - h - m - s - Hours - Minutes - Seconds - Delete last input - Clear input + Minimum + Maximum + h + m + s + Hours + Minutes + Seconds + Delete last input + Clear input \ No newline at end of file diff --git a/emoji/src/main/AndroidManifest.xml b/emoji/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/emoji/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/info/src/main/AndroidManifest.xml b/info/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/info/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/input/src/main/AndroidManifest.xml b/input/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/input/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/list/src/commonMain/composeResources/values-de-rDE/strings.xml b/list/src/commonMain/composeResources/values-de-rDE/strings.xml index a7461260..00f2f6d7 100644 --- a/list/src/commonMain/composeResources/values-de-rDE/strings.xml +++ b/list/src/commonMain/composeResources/values-de-rDE/strings.xml @@ -1,4 +1,4 @@ - + Wähle mindestens %1$d Optionen aus diff --git a/option/src/commonMain/composeResources/values-de-rDE/strings.xml b/option/src/commonMain/composeResources/values-de-rDE/strings.xml index d6eb72d6..25fee209 100644 --- a/option/src/commonMain/composeResources/values-de-rDE/strings.xml +++ b/option/src/commonMain/composeResources/values-de-rDE/strings.xml @@ -1,4 +1,4 @@ - + Wähle mindestens %1$d Optionen aus diff --git a/state/src/main/AndroidManifest.xml b/state/src/main/AndroidManifest.xml deleted file mode 100644 index 568741e5..00000000 --- a/state/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file From b795aa95ee60530ed1399ea012d0c70bb9d9c549 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 4 Apr 2024 17:35:08 +0200 Subject: [PATCH 23/58] added possibility to deselect rating and rating of 0 is valid --- .../com/maxkeppeler/sheets/rating/RatingState.kt | 15 ++++++++++++--- .../sheets/rating/models/RatingConfig.kt | 1 + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt index 4b5cd285..551cb3a2 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt @@ -26,6 +26,7 @@ import com.maxkeppeker.sheets.core.views.BaseTypeState import com.maxkeppeler.sheets.rating.models.RatingConfig import com.maxkeppeler.sheets.rating.models.RatingSelection import kotlinx.serialization.Serializable +import kotlin.math.max /** * Handles the color state. @@ -51,7 +52,11 @@ internal class RatingState( } fun updateRating(newRating: Int) { - rating = newRating + rating = if (rating == newRating) { + max(newRating - 1, 0) + } else { + newRating + } checkValid() } @@ -60,14 +65,18 @@ internal class RatingState( checkValid() } - private fun isRatingValid(): Boolean = rating != null + private fun isRatingValid(): Boolean = if (config.ratingZeroValid) { + true + } else { + rating != null + } private fun isFeedbackValid(): Boolean = if (config.feedbackOptional) true else !feedback.isNullOrBlank() fun onFinish() { - selection.onSelectRating(rating!!, feedback) + selection.onSelectRating(rating ?: 0, feedback) } override fun reset() { diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt index 022bfbe9..475c3020 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt @@ -31,6 +31,7 @@ class RatingConfig( val feedbackOptional: Boolean = true, val ratingOptionsCount: Int = DEFAULT_RATING_OPTIONS_COUNT, val ratingOptionsSelected: Int? = null, + val ratingZeroValid: Boolean = false, override val icons: LibIcons = DEFAULT_ICON_STYLE, ) : BaseConfigs() From 47a5cca1df8252bf41681085d08226105d5c6f50 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 4 Apr 2024 20:24:59 +0200 Subject: [PATCH 24/58] migrate state module --- .../maxkeppeler/sheets/rating/RatingState.kt | 2 +- settings.gradle.kts | 2 +- state/build.gradle.kts | 68 +++++++++++++------ .../maxkeppeler/sheets/state/StateDialog.kt | 0 .../maxkeppeler/sheets/state/StatePopup.kt | 0 .../com/maxkeppeler/sheets/state/StateView.kt | 3 +- .../sheets/state/models/ProgressIndicator.kt | 0 .../maxkeppeler/sheets/state/models/State.kt | 0 .../sheets/state/models/StateConfig.kt | 0 .../sheets/state/models/StateSelection.kt | 0 .../state/views/CircularProgressIndicator.kt | 6 +- .../state/views/LinearProgressIndicator.kt | 7 +- .../sheets/state/views/StateComponent.kt | 0 .../state/views/StateFailureComponent.kt | 5 +- .../sheets/state/views/StateLabel.kt | 0 .../state/views/StateLoadingComponent.kt | 0 .../state/views/StateSuccessComponent.kt | 5 +- state/src/main/res/values/dimens.xml | 5 -- 18 files changed, 61 insertions(+), 42 deletions(-) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/StateDialog.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/StatePopup.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/StateView.kt (95%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/models/ProgressIndicator.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/models/State.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/models/StateConfig.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/models/StateSelection.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt (92%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/views/LinearProgressIndicator.kt (94%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/views/StateComponent.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/views/StateFailureComponent.kt (91%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/views/StateLabel.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/views/StateLoadingComponent.kt (100%) rename state/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/state/views/StateSuccessComponent.kt (91%) delete mode 100644 state/src/main/res/values/dimens.xml diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt index 551cb3a2..ef2fe75d 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt @@ -68,7 +68,7 @@ internal class RatingState( private fun isRatingValid(): Boolean = if (config.ratingZeroValid) { true } else { - rating != null + rating != null && (rating ?: 0) > 0 } private fun isFeedbackValid(): Boolean = diff --git a/settings.gradle.kts b/settings.gradle.kts index cf8a961e..a7812e93 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -19,7 +19,7 @@ include( //":date_time", //":color", ":option", - //":state", + ":state", //":input", //":emoji", ":list", diff --git a/state/build.gradle.kts b/state/build.gradle.kts index 4b46c51a..3e17a378 100644 --- a/state/build.gradle.kts +++ b/state/build.gradle.kts @@ -1,27 +1,57 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +import com.vanniktech.maven.publish.SonatypeHost + plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) + alias(libs.plugins.publish) + `maven-publish` } android { namespace = Modules.STATE.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } } -mavenPublishing { - publishToMavenCentral() - signAllPublications() +kotlin { + androidTarget { + publishAllLibraryVariants() + } + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.components.resources) + + implementation(libs.serialization) + + api(project(":core")) + } + } } \ No newline at end of file diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/StateDialog.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/StateDialog.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/StateDialog.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/StateDialog.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/StatePopup.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/StatePopup.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/StatePopup.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/StatePopup.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/StateView.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/StateView.kt similarity index 95% rename from state/src/main/java/com/maxkeppeler/sheets/state/StateView.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/StateView.kt index 0e94edc7..f268559b 100644 --- a/state/src/main/java/com/maxkeppeler/sheets/state/StateView.kt +++ b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/StateView.kt @@ -21,13 +21,12 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.views.base.FrameBase import com.maxkeppeler.sheets.state.models.StateConfig import com.maxkeppeler.sheets.state.models.StateSelection import com.maxkeppeler.sheets.state.views.StateComponent -import com.maxkeppeler.sheets.core.R as RC /** * State dialog for the use-case to display various states. diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/models/ProgressIndicator.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/models/ProgressIndicator.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/models/ProgressIndicator.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/models/ProgressIndicator.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/models/State.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/models/State.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/models/State.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/models/State.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/models/StateConfig.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/models/StateConfig.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/models/StateConfig.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/models/StateConfig.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/models/StateSelection.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/models/StateSelection.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/models/StateSelection.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/models/StateSelection.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt similarity index 92% rename from state/src/main/java/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt index 795ff304..dd2fba33 100644 --- a/state/src/main/java/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt +++ b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt @@ -22,12 +22,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.state.R import com.maxkeppeler.sheets.state.models.ProgressIndicator -import com.maxkeppeler.sheets.core.R as RC @Composable internal fun CircularProgressIndicator( @@ -35,7 +33,7 @@ internal fun CircularProgressIndicator( ) { val circularIndicatorModifier = Modifier .padding(24.dp) - .width(dimensionResource(id = R.dimen.scd_state_dialog_indicator_width)) + .width(64.dp) .aspectRatio(1f) indicator.customProgressIndicator?.invoke(indicator.value!!) diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/views/LinearProgressIndicator.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/LinearProgressIndicator.kt similarity index 94% rename from state/src/main/java/com/maxkeppeler/sheets/state/views/LinearProgressIndicator.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/LinearProgressIndicator.kt index 27cec4a5..5e59a687 100644 --- a/state/src/main/java/com/maxkeppeler/sheets/state/views/LinearProgressIndicator.kt +++ b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/LinearProgressIndicator.kt @@ -22,11 +22,10 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.state.models.ProgressIndicator -import com.maxkeppeler.sheets.core.R as RC @Composable internal fun LinearProgressIndicator( @@ -47,9 +46,9 @@ internal fun LinearProgressIndicator( ) } LinearProgressIndicator( - progress = progress, + progress = { progress }, modifier = linearIndicatorModifier - .testTags(TestTags.STATE_LOADING_LINEAR, progress) + .testTags(TestTags.STATE_LOADING_LINEAR, progress), ) } ?: run { LinearProgressIndicator( diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/views/StateComponent.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateComponent.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/views/StateComponent.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateComponent.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/views/StateFailureComponent.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateFailureComponent.kt similarity index 91% rename from state/src/main/java/com/maxkeppeler/sheets/state/views/StateFailureComponent.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateFailureComponent.kt index d93b9230..6bdf94fa 100644 --- a/state/src/main/java/com/maxkeppeler/sheets/state/views/StateFailureComponent.kt +++ b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateFailureComponent.kt @@ -22,11 +22,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeler.sheets.state.models.State import com.maxkeppeler.sheets.state.models.StateConfig -import com.maxkeppeler.sheets.core.R as RC /** * The failure state component. @@ -43,7 +42,7 @@ internal fun StateFailureComponent( modifier = Modifier .testTag(TestTags.STATE_FAILURE) .padding(vertical = 16.dp) - .size(dimensionResource(id = RC.dimen.scd_size_350)), + .size(56.dp), imageVector = config.icons.Error, contentDescription = null, tint = Color.Red diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/views/StateLabel.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateLabel.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/views/StateLabel.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateLabel.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/views/StateLoadingComponent.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateLoadingComponent.kt similarity index 100% rename from state/src/main/java/com/maxkeppeler/sheets/state/views/StateLoadingComponent.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateLoadingComponent.kt diff --git a/state/src/main/java/com/maxkeppeler/sheets/state/views/StateSuccessComponent.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateSuccessComponent.kt similarity index 91% rename from state/src/main/java/com/maxkeppeler/sheets/state/views/StateSuccessComponent.kt rename to state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateSuccessComponent.kt index aca00e84..816c9bb0 100644 --- a/state/src/main/java/com/maxkeppeler/sheets/state/views/StateSuccessComponent.kt +++ b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/StateSuccessComponent.kt @@ -22,11 +22,10 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeler.sheets.state.models.State import com.maxkeppeler.sheets.state.models.StateConfig -import com.maxkeppeler.sheets.core.R as RC /** * The success state component. @@ -43,7 +42,7 @@ internal fun StateSuccessComponent( modifier = Modifier .testTag(TestTags.STATE_SUCCESS) .padding(vertical = 16.dp) - .size(dimensionResource(id = RC.dimen.scd_size_350)), + .size(56.dp), imageVector = config.icons.Check, contentDescription = null, tint = Color.Green diff --git a/state/src/main/res/values/dimens.xml b/state/src/main/res/values/dimens.xml deleted file mode 100644 index d578f417..00000000 --- a/state/src/main/res/values/dimens.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - 64dp - - From 8d3262ecbc206ce151f6cc88d0b242e644e78323 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 4 Apr 2024 20:39:36 +0200 Subject: [PATCH 25/58] migrate input module --- input/build.gradle.kts | 71 ++++++++++++++----- .../maxkeppeler/sheets/input/InputDialog.kt | 0 .../maxkeppeler/sheets/input/InputPopup.kt | 1 + .../maxkeppeler/sheets/input/InputState.kt | 11 ++- .../com/maxkeppeler/sheets/input/InputView.kt | 0 .../maxkeppeler/sheets/input/models/Input.kt | 14 ++-- .../sheets/input/models/InputCheckbox.kt | 4 -- .../sheets/input/models/InputCheckboxGroup.kt | 4 -- .../sheets/input/models/InputConfig.kt | 0 .../sheets/input/models/InputCustomView.kt | 0 .../sheets/input/models/InputDivider.kt | 0 .../sheets/input/models/InputHeader.kt | 9 ++- .../input/models/InputRadioButtonGroup.kt | 4 -- .../sheets/input/models/InputSelection.kt | 3 +- .../sheets/input/models/InputText.kt | 0 .../sheets/input/models/InputTextField.kt | 5 -- .../sheets/input/models/InputTextFieldType.kt | 0 .../sheets/input/models/ValidationResult.kt | 0 .../input/views/InputCheckboxComponent.kt | 3 +- .../views/InputCheckboxGroupComponent.kt | 3 +- .../input/views/InputCheckboxItemComponent.kt | 3 +- .../sheets/input/views/InputComponent.kt | 3 +- .../input/views/InputDividerComponent.kt | 3 +- .../sheets/input/views/InputItemComponent.kt | 0 .../input/views/InputItemHeaderComponent.kt | 2 - .../input/views/InputItemOverlayComponent.kt | 5 +- .../input/views/InputItemTypeComponent.kt | 0 .../views/InputRadioButtonGroupComponent.kt | 3 +- .../views/InputRadioButtonItemComponent.kt | 3 +- .../sheets/input/views/InputTextComponent.kt | 0 .../input/views/InputTextFieldComponent.kt | 0 .../sheets/input/views/InputViewComponent.kt | 0 .../input/views/TextFieldErrorContainer.kt | 3 +- settings.gradle.kts | 2 +- state/build.gradle.kts | 9 +-- 35 files changed, 85 insertions(+), 83 deletions(-) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/InputDialog.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/InputPopup.kt (98%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/InputState.kt (94%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/InputView.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/Input.kt (87%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputCheckbox.kt (94%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt (94%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputConfig.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputCustomView.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputDivider.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputHeader.kt (83%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputRadioButtonGroup.kt (94%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputSelection.kt (95%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputText.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputTextField.kt (97%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/InputTextFieldType.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/models/ValidationResult.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt (96%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt (96%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt (96%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputComponent.kt (96%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt (94%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputItemComponent.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt (96%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt (91%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputItemTypeComponent.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt (95%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt (96%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputTextComponent.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputTextFieldComponent.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/InputViewComponent.kt (100%) rename input/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt (95%) diff --git a/input/build.gradle.kts b/input/build.gradle.kts index ad65c3a2..9ded24f2 100644 --- a/input/build.gradle.kts +++ b/input/build.gradle.kts @@ -1,27 +1,60 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +import com.vanniktech.maven.publish.SonatypeHost + plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) + alias(libs.plugins.publish) + `maven-publish` } android { namespace = Modules.INPUT.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + androidTarget { + publishAllLibraryVariants() + } + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + + implementation(libs.serialization) + + api(project(":core")) + } + } } mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) +} diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/InputDialog.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputDialog.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/InputDialog.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputDialog.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/InputPopup.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputPopup.kt similarity index 98% rename from input/src/main/java/com/maxkeppeler/sheets/input/InputPopup.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputPopup.kt index cc3d5e59..7c82f834 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/InputPopup.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputPopup.kt @@ -38,6 +38,7 @@ import com.maxkeppeler.sheets.input.models.InputSelection * @param offset The offset of the popup. * @param properties PopupProperties for further customization of this popup's behavior. */ +@OptIn(ExperimentalMaterial3Api::class) @Composable fun InputPopup( state: UseCaseState, diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/InputState.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputState.kt similarity index 94% rename from input/src/main/java/com/maxkeppeler/sheets/input/InputState.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputState.kt index 3b985bca..b5b8fef3 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/InputState.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputState.kt @@ -15,14 +15,14 @@ */ package com.maxkeppeler.sheets.input -import android.os.Bundle import androidx.compose.runtime.* import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.rememberSaveable +import com.maxkeppeker.sheets.core.utils.JvmSerializable import com.maxkeppeker.sheets.core.views.BaseTypeState import com.maxkeppeler.sheets.input.models.Input import com.maxkeppeler.sheets.input.models.InputSelection -import java.io.Serializable +import kotlinx.serialization.Serializable /** * Handles the list state. @@ -61,14 +61,12 @@ internal class InputState( } fun onFinish() { - val bundle = Bundle() input.forEach { input -> if (input.isInput()) { input.onResult() - input.putValue(bundle) } } - selection.onPositiveClick?.invoke(bundle) + selection.onPositiveClick?.invoke() } override fun reset() { @@ -95,9 +93,10 @@ internal class InputState( * Data class that stores the important information of the current state * and can be used by the [Saver] to save and restore the state. */ + @Serializable data class InputStateData( val input: List - ) : Serializable + ) : JvmSerializable } diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/InputView.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputView.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/InputView.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/InputView.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/Input.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/Input.kt similarity index 87% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/Input.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/Input.kt index 924e402e..ea016d9f 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/models/Input.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/Input.kt @@ -17,8 +17,8 @@ package com.maxkeppeler.sheets.input.models -import android.os.Bundle -import java.io.Serializable +import com.maxkeppeker.sheets.core.utils.JvmSerializable +import kotlinx.serialization.Serializable /** * Base input definition that can be added to the input dialog. @@ -27,12 +27,13 @@ import java.io.Serializable * @param header The additional [InputHeader] to add more context information to the selection. * @param columns The columns that this input spans. */ +@Serializable abstract class Input( internal open val key: String? = null, internal open val required: Boolean = false, internal open val header: InputHeader? = null, internal open val columns: Int? = null, -) : Serializable { +) : JvmSerializable { internal var position: Int = 0 @@ -58,13 +59,6 @@ abstract class Input( */ internal open fun onResult(): Unit? = Unit - /** - * Save the input value into the bundle. - * Takes the index as an key, if there's no unique input key available. - * @param bundle The bundle where the input data is saved. - */ - internal open fun putValue(bundle: Bundle): Unit? = Unit - /** * Helper method that either uses the key or the index as String to assign key-value pairs * Returns the key that is used to store input data in the bundle. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputCheckbox.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckbox.kt similarity index 94% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputCheckbox.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckbox.kt index 64e78220..ef7d5cf1 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputCheckbox.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckbox.kt @@ -17,8 +17,6 @@ package com.maxkeppeler.sheets.input.models -import android.os.Bundle - /** * Represents a checkbox. * @param text The text to the checkbox. @@ -56,6 +54,4 @@ class InputCheckbox( override fun isValid(): Boolean = (required && value) || !required - override fun putValue(bundle: Bundle) = bundle.putBoolean(getBundleKey(), value) - } \ No newline at end of file diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt similarity index 94% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt index 7e7b9334..7b4ad085 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt @@ -17,8 +17,6 @@ package com.maxkeppeler.sheets.input.models -import android.os.Bundle - /** * Represents a group of checkboxes. * @param items A list of Strings representing the individual checkbox text. @@ -55,6 +53,4 @@ class InputCheckboxGroup( override fun onResult() = resultListener?.invoke(value) override fun isValid(): Boolean = required && value.isNotEmpty() || !required - - override fun putValue(bundle: Bundle) = bundle.putIntArray(getBundleKey(), value.toIntArray()) } \ No newline at end of file diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputConfig.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputConfig.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputCustomView.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputCustomView.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputDivider.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputDivider.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputHeader.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt similarity index 83% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputHeader.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt index 93e21b17..9aca9448 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputHeader.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt @@ -18,7 +18,9 @@ package com.maxkeppeler.sheets.input.models import com.maxkeppeker.sheets.core.models.base.IconSource -import java.io.Serializable +import com.maxkeppeker.sheets.core.utils.JvmSerializable +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient /** * Represents a header that can be added to invidual input types. @@ -26,8 +28,9 @@ import java.io.Serializable * @param body The text that is used for the body. * @param icon The icon that is displayed on the left side of the title. */ +@Serializable class InputHeader( val title: String? = null, val body: String? = null, - val icon: IconSource? = null, -) : Serializable + @Transient val icon: IconSource? = null, +) : JvmSerializable diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputRadioButtonGroup.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputRadioButtonGroup.kt similarity index 94% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputRadioButtonGroup.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputRadioButtonGroup.kt index 5a21326d..296b6c6b 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputRadioButtonGroup.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputRadioButtonGroup.kt @@ -17,8 +17,6 @@ package com.maxkeppeler.sheets.input.models -import android.os.Bundle - /** * Represents a group of radio buttons. * @param items A list of Strings representing the individual radio button text. @@ -56,6 +54,4 @@ class InputRadioButtonGroup( override fun isValid(): Boolean = required && value != null || !required - override fun putValue(bundle: Bundle) = value?.let { bundle.putInt(getBundleKey(), it) } - } \ No newline at end of file diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputSelection.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputSelection.kt similarity index 95% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputSelection.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputSelection.kt index 4107a1e6..b1e40370 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputSelection.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputSelection.kt @@ -17,7 +17,6 @@ package com.maxkeppeler.sheets.input.models -import android.os.Bundle import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants @@ -41,5 +40,5 @@ class InputSelection( override val negativeButton: SelectionButton? = BaseConstants.DEFAULT_NEGATIVE_BUTTON, override val onNegativeClick: (() -> Unit)? = null, override val positiveButton: SelectionButton = BaseConstants.DEFAULT_POSITIVE_BUTTON, - val onPositiveClick: ((result: Bundle) -> Unit)? = null, + val onPositiveClick: (() -> Unit)? = null, ) : BaseSelection() \ No newline at end of file diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputText.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputText.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputTextField.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputTextField.kt similarity index 97% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputTextField.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputTextField.kt index a7391bca..ce35259b 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputTextField.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputTextField.kt @@ -18,7 +18,6 @@ package com.maxkeppeler.sheets.input.models -import android.os.Bundle import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.ExperimentalMaterial3Api @@ -89,8 +88,4 @@ data class InputTextField( val requiredValid = (required && value?.isNotEmpty() == true || !required) return customValidationOk && requiredValid } - - override fun putValue(bundle: Bundle) { - bundle.putString(getBundleKey(), value) - } } \ No newline at end of file diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/InputTextFieldType.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputTextFieldType.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/InputTextFieldType.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputTextFieldType.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/models/ValidationResult.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/ValidationResult.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/models/ValidationResult.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/ValidationResult.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt similarity index 96% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt index cfcf8150..4ef96479 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxComponent.kt @@ -24,12 +24,11 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.input.models.Input import com.maxkeppeler.sheets.input.models.InputCheckbox -import com.maxkeppeler.sheets.core.R as RC /** * Checkbox component. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt similarity index 96% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt index de0e26f9..8e3ba9f5 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxGroupComponent.kt @@ -23,12 +23,11 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.mutableStateListOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.input.models.Input import com.maxkeppeler.sheets.input.models.InputCheckboxGroup -import com.maxkeppeler.sheets.core.R as RC /** * Checkbox-Group component. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt similarity index 96% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt index 1ee3a8b9..25688852 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputCheckboxItemComponent.kt @@ -24,10 +24,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R as RC /** * The CheckBox item for the CheckBox-Group. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputComponent.kt similarity index 96% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputComponent.kt index 0d585245..eee1c4b0 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputComponent.kt @@ -22,10 +22,9 @@ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.input.models.Input import com.maxkeppeler.sheets.input.models.InputConfig -import com.maxkeppeler.sheets.core.R as RC /** * Input component that displays the setup inputs. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt similarity index 94% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt index e374377c..870578f3 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputDividerComponent.kt @@ -21,10 +21,9 @@ import androidx.compose.material3.Divider import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R as RC /** * Divider component. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemComponent.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemComponent.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt similarity index 96% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt index 684eb0a5..162b12f7 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemHeaderComponent.kt @@ -21,13 +21,11 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeker.sheets.core.views.IconComponent import com.maxkeppeler.sheets.input.models.InputHeader -import com.maxkeppeler.sheets.core.R as RC /** * The header for an input item type component. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt similarity index 91% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt index 1992dfd5..d3123548 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemOverlayComponent.kt @@ -23,11 +23,10 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.input.models.InputConfig -import com.maxkeppeler.sheets.core.R as RC /** * The overlay for an input item type component when the data is required. @@ -43,7 +42,7 @@ internal fun BoxScope.InputItemOverlayComponent( .align(Alignment.TopEnd) .testTags(TestTags.INPUT_ITEM_OVERLAY, index) .padding(8.dp) - .size(dimensionResource(RC.dimen.scd_size_50)), + .size(8.dp), imageVector = config.icons.Star, contentDescription = null, tint = MaterialTheme.colorScheme.error diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemTypeComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemTypeComponent.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputItemTypeComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputItemTypeComponent.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt similarity index 95% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt index 7d6e432f..ef555f68 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputRadioButtonGroupComponent.kt @@ -20,12 +20,11 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.height import androidx.compose.runtime.* import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.input.models.Input import com.maxkeppeler.sheets.input.models.InputRadioButtonGroup -import com.maxkeppeler.sheets.core.R as RC /** * RadioButton-Group component. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt similarity index 96% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt index 8353d41d..7e4fd4b7 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputRadioButtonItemComponent.kt @@ -24,10 +24,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R as RC /** * The RadioButton item for the RadioButton-Group. diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputTextComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputTextComponent.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputTextComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputTextComponent.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputTextFieldComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputTextFieldComponent.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputTextFieldComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputTextFieldComponent.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/InputViewComponent.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputViewComponent.kt similarity index 100% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/InputViewComponent.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/InputViewComponent.kt diff --git a/input/src/main/java/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt similarity index 95% rename from input/src/main/java/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt rename to input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt index 30b456c2..4fc0a085 100644 --- a/input/src/main/java/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/views/TextFieldErrorContainer.kt @@ -23,10 +23,9 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R as RC /** * A container to apply an error message to the TextField if the data is invalid. diff --git a/settings.gradle.kts b/settings.gradle.kts index a7812e93..2076a846 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -20,7 +20,7 @@ include( //":color", ":option", ":state", - //":input", + ":input", //":emoji", ":list", ) \ No newline at end of file diff --git a/state/build.gradle.kts b/state/build.gradle.kts index 3e17a378..8ea60678 100644 --- a/state/build.gradle.kts +++ b/state/build.gradle.kts @@ -47,11 +47,12 @@ kotlin { implementation(compose.runtime) implementation(compose.foundation) implementation(compose.material3) - implementation(compose.components.resources) - - implementation(libs.serialization) api(project(":core")) } } -} \ No newline at end of file +} + +mavenPublishing { + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) +} From adeb1c092a1a794bfc8d6a37ccb97c10338a474f Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 4 Apr 2024 20:44:11 +0200 Subject: [PATCH 26/58] migrate info module --- info/build.gradle.kts | 73 ++++++++++++++----- .../com/maxkeppeler/sheets/info/InfoDialog.kt | 0 .../com/maxkeppeler/sheets/info/InfoPopup.kt | 0 .../com/maxkeppeler/sheets/info/InfoView.kt | 0 .../sheets/info/models/InfoBody.kt | 0 .../sheets/info/models/InfoSelection.kt | 0 .../sheets/info/views/BodyComponent.kt | 0 .../sheets/info/views/DefaultBodyComponent.kt | 3 +- settings.gradle.kts | 2 +- 9 files changed, 55 insertions(+), 23 deletions(-) rename info/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/info/InfoDialog.kt (100%) rename info/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/info/InfoPopup.kt (100%) rename info/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/info/InfoView.kt (100%) rename info/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/info/models/InfoBody.kt (100%) rename info/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/info/models/InfoSelection.kt (100%) rename info/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/info/views/BodyComponent.kt (100%) rename info/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt (94%) diff --git a/info/build.gradle.kts b/info/build.gradle.kts index ee2113c0..2d320791 100644 --- a/info/build.gradle.kts +++ b/info/build.gradle.kts @@ -1,27 +1,60 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +import com.vanniktech.maven.publish.SonatypeHost + plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) + alias(libs.plugins.publish) + `maven-publish` } android { - namespace = Modules.INFO.namespace + namespace = Modules.OPTION.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + androidTarget { + publishAllLibraryVariants() + } + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + + implementation(libs.serialization) + + api(project(":core")) + } + } } mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) +} diff --git a/info/src/main/java/com/maxkeppeler/sheets/info/InfoDialog.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/InfoDialog.kt similarity index 100% rename from info/src/main/java/com/maxkeppeler/sheets/info/InfoDialog.kt rename to info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/InfoDialog.kt diff --git a/info/src/main/java/com/maxkeppeler/sheets/info/InfoPopup.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/InfoPopup.kt similarity index 100% rename from info/src/main/java/com/maxkeppeler/sheets/info/InfoPopup.kt rename to info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/InfoPopup.kt diff --git a/info/src/main/java/com/maxkeppeler/sheets/info/InfoView.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/InfoView.kt similarity index 100% rename from info/src/main/java/com/maxkeppeler/sheets/info/InfoView.kt rename to info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/InfoView.kt diff --git a/info/src/main/java/com/maxkeppeler/sheets/info/models/InfoBody.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoBody.kt similarity index 100% rename from info/src/main/java/com/maxkeppeler/sheets/info/models/InfoBody.kt rename to info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoBody.kt diff --git a/info/src/main/java/com/maxkeppeler/sheets/info/models/InfoSelection.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt similarity index 100% rename from info/src/main/java/com/maxkeppeler/sheets/info/models/InfoSelection.kt rename to info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt diff --git a/info/src/main/java/com/maxkeppeler/sheets/info/views/BodyComponent.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/views/BodyComponent.kt similarity index 100% rename from info/src/main/java/com/maxkeppeler/sheets/info/views/BodyComponent.kt rename to info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/views/BodyComponent.kt diff --git a/info/src/main/java/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt similarity index 94% rename from info/src/main/java/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt rename to info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt index 46102174..6d7d4992 100644 --- a/info/src/main/java/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt +++ b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/views/DefaultBodyComponent.kt @@ -22,10 +22,9 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeler.sheets.info.models.InfoBody -import com.maxkeppeler.sheets.core.R as RC /** * The default body component for the info dialog. diff --git a/settings.gradle.kts b/settings.gradle.kts index 2076a846..59802357 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,7 +11,7 @@ include( //":test", // Include all modules ":core", - //":info", + ":info", ":rating", ":calendar", //":duration", From 6f30cb1e935dc3ab5d12d568323f9044ebf6530b Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 4 Apr 2024 21:26:19 +0200 Subject: [PATCH 27/58] migrate color module --- .../com/maxkeppeler/sheets/clock/ClockView.kt | 2 +- color/build.gradle.kts | 62 +++++++++++++------ .../scd_color_dialog_transparent_pattern.svg | 1 + .../composeResources}/values-bg/strings.xml | 0 .../composeResources}/values-cs/strings.xml | 0 .../composeResources}/values-da/strings.xml | 0 .../values-de-rDE/strings.xml | 0 .../composeResources}/values-de/strings.xml | 0 .../composeResources}/values-el/strings.xml | 0 .../composeResources}/values-eo/strings.xml | 0 .../composeResources}/values-es/strings.xml | 0 .../composeResources}/values-et/strings.xml | 0 .../composeResources}/values-fa/strings.xml | 0 .../composeResources}/values-fi/strings.xml | 0 .../composeResources}/values-fr/strings.xml | 0 .../composeResources}/values-ga/strings.xml | 0 .../composeResources}/values-gd/strings.xml | 0 .../composeResources}/values-hi/strings.xml | 0 .../composeResources}/values-hr/strings.xml | 0 .../composeResources}/values-hu/strings.xml | 0 .../values-in-rID/strings.xml | 0 .../composeResources}/values-is/strings.xml | 0 .../composeResources}/values-it/strings.xml | 0 .../composeResources}/values-iw/strings.xml | 0 .../composeResources}/values-ja/strings.xml | 0 .../composeResources}/values-jv/strings.xml | 0 .../composeResources}/values-kk/strings.xml | 0 .../composeResources}/values-ko/strings.xml | 0 .../composeResources}/values-ku/strings.xml | 0 .../composeResources}/values-lb/strings.xml | 0 .../composeResources}/values-lo/strings.xml | 0 .../composeResources}/values-lt/strings.xml | 0 .../composeResources}/values-lv/strings.xml | 0 .../composeResources}/values-ms/strings.xml | 0 .../composeResources}/values-ne/strings.xml | 0 .../composeResources}/values-nl/strings.xml | 0 .../composeResources}/values-no/strings.xml | 0 .../composeResources}/values-pl/strings.xml | 0 .../composeResources}/values-pt/strings.xml | 0 .../composeResources}/values-ru/strings.xml | 0 .../composeResources}/values-sk/strings.xml | 0 .../composeResources}/values-sl/strings.xml | 0 .../composeResources}/values-sr/strings.xml | 0 .../composeResources}/values-sv/strings.xml | 0 .../composeResources}/values-th/strings.xml | 0 .../composeResources}/values-tr/strings.xml | 0 .../composeResources}/values-uk/strings.xml | 0 .../composeResources}/values-vi/strings.xml | 0 .../values-zh-rCN/strings.xml | 0 .../values-zh-rTW/strings.xml | 0 .../composeResources}/values/strings.xml | 0 .../maxkeppeler/sheets/color/ColorDialog.kt | 0 .../maxkeppeler/sheets/color/ColorPopup.kt | 0 .../maxkeppeler/sheets/color/ColorState.kt | 14 ++--- .../com/maxkeppeler/sheets/color/ColorView.kt | 4 +- .../sheets/color/models/ColorConfig.kt | 0 .../sheets/color/models/ColorSelection.kt | 0 .../sheets/color/models/ColorSelectionMode.kt | 0 .../sheets/color/models/MultipleColors.kt | 40 +++--------- .../sheets/color/models/SingleColor.kt | 19 +++--- .../sheets/color/utils/Constants.kt | 0 .../maxkeppeler/sheets/color/utils/Utils.kt | 22 +++++++ .../color/views/ColorCustomComponent.kt | 0 .../views/ColorCustomControlComponent.kt | 45 ++++++++------ .../ColorCustomControlGridItemComponent.kt | 5 +- .../color/views/ColorCustomInfoComponent.kt | 56 +++-------------- .../views/ColorSelectionModeComponent.kt | 28 +++++---- .../color/views/ColorTemplateComponent.kt | 3 +- .../color/views/ColorTemplateItemComponent.kt | 19 +++--- .../maxkeppeler/sheets/color/utils/Utils.kt | 60 ------------------ .../scd_color_dialog_transparent_pattern.xml | 12 ---- settings.gradle.kts | 2 +- 72 files changed, 156 insertions(+), 238 deletions(-) create mode 100644 color/src/commonMain/composeResources/drawable/scd_color_dialog_transparent_pattern.svg rename color/src/{main/res => commonMain/composeResources}/values-bg/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-cs/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-da/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-de-rDE/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-de/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-el/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-eo/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-es/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-et/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-fa/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-fi/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-fr/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-ga/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-gd/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-hi/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-hr/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-hu/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-in-rID/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-is/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-it/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-iw/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-ja/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-jv/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-kk/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-ko/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-ku/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-lb/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-lo/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-lt/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-lv/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-ms/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-ne/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-nl/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-no/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-pl/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-pt/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-ru/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-sk/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-sl/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-sr/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-sv/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-th/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-tr/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-uk/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-vi/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-zh-rCN/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values-zh-rTW/strings.xml (100%) rename color/src/{main/res => commonMain/composeResources}/values/strings.xml (100%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/ColorDialog.kt (100%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/ColorPopup.kt (100%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/ColorState.kt (90%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/ColorView.kt (96%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/models/ColorConfig.kt (100%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/models/ColorSelection.kt (100%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt (100%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/models/MultipleColors.kt (65%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/models/SingleColor.kt (68%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/utils/Constants.kt (100%) create mode 100644 color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/utils/Utils.kt rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/views/ColorCustomComponent.kt (100%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt (71%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/views/ColorCustomControlGridItemComponent.kt (96%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt (63%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt (78%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt (97%) rename color/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt (86%) delete mode 100644 color/src/main/java/com/maxkeppeler/sheets/color/utils/Utils.kt delete mode 100644 color/src/main/res/drawable/scd_color_dialog_transparent_pattern.xml diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt b/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt index 0634b5ae..a02165f6 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt +++ b/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt @@ -67,7 +67,7 @@ fun ClockView( PortraitTimeValueComponent( modifier = Modifier .fillMaxWidth() - .padding(bottom = dimensionResource(R.dimen.scd_normal_100)), + .padding(bottom = 16.dp), unitValues = clockState.timeTextValues, isAm = clockState.isAm, is24hourFormat = clockState.is24HourFormat, diff --git a/color/build.gradle.kts b/color/build.gradle.kts index 772b9aa2..b39b5568 100644 --- a/color/build.gradle.kts +++ b/color/build.gradle.kts @@ -1,27 +1,49 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +import com.vanniktech.maven.publish.SonatypeHost + plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) + alias(libs.plugins.publish) + `maven-publish` } android { - namespace = Modules.COLOR.namespace + namespace = Modules.OPTION.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + androidTarget { + publishAllLibraryVariants() + } + jvm() + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.components.resources) + + implementation(libs.serialization) + + api(project(":core")) + } + } } mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) +} diff --git a/color/src/commonMain/composeResources/drawable/scd_color_dialog_transparent_pattern.svg b/color/src/commonMain/composeResources/drawable/scd_color_dialog_transparent_pattern.svg new file mode 100644 index 00000000..9b2d2ed8 --- /dev/null +++ b/color/src/commonMain/composeResources/drawable/scd_color_dialog_transparent_pattern.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/color/src/main/res/values-bg/strings.xml b/color/src/commonMain/composeResources/values-bg/strings.xml similarity index 100% rename from color/src/main/res/values-bg/strings.xml rename to color/src/commonMain/composeResources/values-bg/strings.xml diff --git a/color/src/main/res/values-cs/strings.xml b/color/src/commonMain/composeResources/values-cs/strings.xml similarity index 100% rename from color/src/main/res/values-cs/strings.xml rename to color/src/commonMain/composeResources/values-cs/strings.xml diff --git a/color/src/main/res/values-da/strings.xml b/color/src/commonMain/composeResources/values-da/strings.xml similarity index 100% rename from color/src/main/res/values-da/strings.xml rename to color/src/commonMain/composeResources/values-da/strings.xml diff --git a/color/src/main/res/values-de-rDE/strings.xml b/color/src/commonMain/composeResources/values-de-rDE/strings.xml similarity index 100% rename from color/src/main/res/values-de-rDE/strings.xml rename to color/src/commonMain/composeResources/values-de-rDE/strings.xml diff --git a/color/src/main/res/values-de/strings.xml b/color/src/commonMain/composeResources/values-de/strings.xml similarity index 100% rename from color/src/main/res/values-de/strings.xml rename to color/src/commonMain/composeResources/values-de/strings.xml diff --git a/color/src/main/res/values-el/strings.xml b/color/src/commonMain/composeResources/values-el/strings.xml similarity index 100% rename from color/src/main/res/values-el/strings.xml rename to color/src/commonMain/composeResources/values-el/strings.xml diff --git a/color/src/main/res/values-eo/strings.xml b/color/src/commonMain/composeResources/values-eo/strings.xml similarity index 100% rename from color/src/main/res/values-eo/strings.xml rename to color/src/commonMain/composeResources/values-eo/strings.xml diff --git a/color/src/main/res/values-es/strings.xml b/color/src/commonMain/composeResources/values-es/strings.xml similarity index 100% rename from color/src/main/res/values-es/strings.xml rename to color/src/commonMain/composeResources/values-es/strings.xml diff --git a/color/src/main/res/values-et/strings.xml b/color/src/commonMain/composeResources/values-et/strings.xml similarity index 100% rename from color/src/main/res/values-et/strings.xml rename to color/src/commonMain/composeResources/values-et/strings.xml diff --git a/color/src/main/res/values-fa/strings.xml b/color/src/commonMain/composeResources/values-fa/strings.xml similarity index 100% rename from color/src/main/res/values-fa/strings.xml rename to color/src/commonMain/composeResources/values-fa/strings.xml diff --git a/color/src/main/res/values-fi/strings.xml b/color/src/commonMain/composeResources/values-fi/strings.xml similarity index 100% rename from color/src/main/res/values-fi/strings.xml rename to color/src/commonMain/composeResources/values-fi/strings.xml diff --git a/color/src/main/res/values-fr/strings.xml b/color/src/commonMain/composeResources/values-fr/strings.xml similarity index 100% rename from color/src/main/res/values-fr/strings.xml rename to color/src/commonMain/composeResources/values-fr/strings.xml diff --git a/color/src/main/res/values-ga/strings.xml b/color/src/commonMain/composeResources/values-ga/strings.xml similarity index 100% rename from color/src/main/res/values-ga/strings.xml rename to color/src/commonMain/composeResources/values-ga/strings.xml diff --git a/color/src/main/res/values-gd/strings.xml b/color/src/commonMain/composeResources/values-gd/strings.xml similarity index 100% rename from color/src/main/res/values-gd/strings.xml rename to color/src/commonMain/composeResources/values-gd/strings.xml diff --git a/color/src/main/res/values-hi/strings.xml b/color/src/commonMain/composeResources/values-hi/strings.xml similarity index 100% rename from color/src/main/res/values-hi/strings.xml rename to color/src/commonMain/composeResources/values-hi/strings.xml diff --git a/color/src/main/res/values-hr/strings.xml b/color/src/commonMain/composeResources/values-hr/strings.xml similarity index 100% rename from color/src/main/res/values-hr/strings.xml rename to color/src/commonMain/composeResources/values-hr/strings.xml diff --git a/color/src/main/res/values-hu/strings.xml b/color/src/commonMain/composeResources/values-hu/strings.xml similarity index 100% rename from color/src/main/res/values-hu/strings.xml rename to color/src/commonMain/composeResources/values-hu/strings.xml diff --git a/color/src/main/res/values-in-rID/strings.xml b/color/src/commonMain/composeResources/values-in-rID/strings.xml similarity index 100% rename from color/src/main/res/values-in-rID/strings.xml rename to color/src/commonMain/composeResources/values-in-rID/strings.xml diff --git a/color/src/main/res/values-is/strings.xml b/color/src/commonMain/composeResources/values-is/strings.xml similarity index 100% rename from color/src/main/res/values-is/strings.xml rename to color/src/commonMain/composeResources/values-is/strings.xml diff --git a/color/src/main/res/values-it/strings.xml b/color/src/commonMain/composeResources/values-it/strings.xml similarity index 100% rename from color/src/main/res/values-it/strings.xml rename to color/src/commonMain/composeResources/values-it/strings.xml diff --git a/color/src/main/res/values-iw/strings.xml b/color/src/commonMain/composeResources/values-iw/strings.xml similarity index 100% rename from color/src/main/res/values-iw/strings.xml rename to color/src/commonMain/composeResources/values-iw/strings.xml diff --git a/color/src/main/res/values-ja/strings.xml b/color/src/commonMain/composeResources/values-ja/strings.xml similarity index 100% rename from color/src/main/res/values-ja/strings.xml rename to color/src/commonMain/composeResources/values-ja/strings.xml diff --git a/color/src/main/res/values-jv/strings.xml b/color/src/commonMain/composeResources/values-jv/strings.xml similarity index 100% rename from color/src/main/res/values-jv/strings.xml rename to color/src/commonMain/composeResources/values-jv/strings.xml diff --git a/color/src/main/res/values-kk/strings.xml b/color/src/commonMain/composeResources/values-kk/strings.xml similarity index 100% rename from color/src/main/res/values-kk/strings.xml rename to color/src/commonMain/composeResources/values-kk/strings.xml diff --git a/color/src/main/res/values-ko/strings.xml b/color/src/commonMain/composeResources/values-ko/strings.xml similarity index 100% rename from color/src/main/res/values-ko/strings.xml rename to color/src/commonMain/composeResources/values-ko/strings.xml diff --git a/color/src/main/res/values-ku/strings.xml b/color/src/commonMain/composeResources/values-ku/strings.xml similarity index 100% rename from color/src/main/res/values-ku/strings.xml rename to color/src/commonMain/composeResources/values-ku/strings.xml diff --git a/color/src/main/res/values-lb/strings.xml b/color/src/commonMain/composeResources/values-lb/strings.xml similarity index 100% rename from color/src/main/res/values-lb/strings.xml rename to color/src/commonMain/composeResources/values-lb/strings.xml diff --git a/color/src/main/res/values-lo/strings.xml b/color/src/commonMain/composeResources/values-lo/strings.xml similarity index 100% rename from color/src/main/res/values-lo/strings.xml rename to color/src/commonMain/composeResources/values-lo/strings.xml diff --git a/color/src/main/res/values-lt/strings.xml b/color/src/commonMain/composeResources/values-lt/strings.xml similarity index 100% rename from color/src/main/res/values-lt/strings.xml rename to color/src/commonMain/composeResources/values-lt/strings.xml diff --git a/color/src/main/res/values-lv/strings.xml b/color/src/commonMain/composeResources/values-lv/strings.xml similarity index 100% rename from color/src/main/res/values-lv/strings.xml rename to color/src/commonMain/composeResources/values-lv/strings.xml diff --git a/color/src/main/res/values-ms/strings.xml b/color/src/commonMain/composeResources/values-ms/strings.xml similarity index 100% rename from color/src/main/res/values-ms/strings.xml rename to color/src/commonMain/composeResources/values-ms/strings.xml diff --git a/color/src/main/res/values-ne/strings.xml b/color/src/commonMain/composeResources/values-ne/strings.xml similarity index 100% rename from color/src/main/res/values-ne/strings.xml rename to color/src/commonMain/composeResources/values-ne/strings.xml diff --git a/color/src/main/res/values-nl/strings.xml b/color/src/commonMain/composeResources/values-nl/strings.xml similarity index 100% rename from color/src/main/res/values-nl/strings.xml rename to color/src/commonMain/composeResources/values-nl/strings.xml diff --git a/color/src/main/res/values-no/strings.xml b/color/src/commonMain/composeResources/values-no/strings.xml similarity index 100% rename from color/src/main/res/values-no/strings.xml rename to color/src/commonMain/composeResources/values-no/strings.xml diff --git a/color/src/main/res/values-pl/strings.xml b/color/src/commonMain/composeResources/values-pl/strings.xml similarity index 100% rename from color/src/main/res/values-pl/strings.xml rename to color/src/commonMain/composeResources/values-pl/strings.xml diff --git a/color/src/main/res/values-pt/strings.xml b/color/src/commonMain/composeResources/values-pt/strings.xml similarity index 100% rename from color/src/main/res/values-pt/strings.xml rename to color/src/commonMain/composeResources/values-pt/strings.xml diff --git a/color/src/main/res/values-ru/strings.xml b/color/src/commonMain/composeResources/values-ru/strings.xml similarity index 100% rename from color/src/main/res/values-ru/strings.xml rename to color/src/commonMain/composeResources/values-ru/strings.xml diff --git a/color/src/main/res/values-sk/strings.xml b/color/src/commonMain/composeResources/values-sk/strings.xml similarity index 100% rename from color/src/main/res/values-sk/strings.xml rename to color/src/commonMain/composeResources/values-sk/strings.xml diff --git a/color/src/main/res/values-sl/strings.xml b/color/src/commonMain/composeResources/values-sl/strings.xml similarity index 100% rename from color/src/main/res/values-sl/strings.xml rename to color/src/commonMain/composeResources/values-sl/strings.xml diff --git a/color/src/main/res/values-sr/strings.xml b/color/src/commonMain/composeResources/values-sr/strings.xml similarity index 100% rename from color/src/main/res/values-sr/strings.xml rename to color/src/commonMain/composeResources/values-sr/strings.xml diff --git a/color/src/main/res/values-sv/strings.xml b/color/src/commonMain/composeResources/values-sv/strings.xml similarity index 100% rename from color/src/main/res/values-sv/strings.xml rename to color/src/commonMain/composeResources/values-sv/strings.xml diff --git a/color/src/main/res/values-th/strings.xml b/color/src/commonMain/composeResources/values-th/strings.xml similarity index 100% rename from color/src/main/res/values-th/strings.xml rename to color/src/commonMain/composeResources/values-th/strings.xml diff --git a/color/src/main/res/values-tr/strings.xml b/color/src/commonMain/composeResources/values-tr/strings.xml similarity index 100% rename from color/src/main/res/values-tr/strings.xml rename to color/src/commonMain/composeResources/values-tr/strings.xml diff --git a/color/src/main/res/values-uk/strings.xml b/color/src/commonMain/composeResources/values-uk/strings.xml similarity index 100% rename from color/src/main/res/values-uk/strings.xml rename to color/src/commonMain/composeResources/values-uk/strings.xml diff --git a/color/src/main/res/values-vi/strings.xml b/color/src/commonMain/composeResources/values-vi/strings.xml similarity index 100% rename from color/src/main/res/values-vi/strings.xml rename to color/src/commonMain/composeResources/values-vi/strings.xml diff --git a/color/src/main/res/values-zh-rCN/strings.xml b/color/src/commonMain/composeResources/values-zh-rCN/strings.xml similarity index 100% rename from color/src/main/res/values-zh-rCN/strings.xml rename to color/src/commonMain/composeResources/values-zh-rCN/strings.xml diff --git a/color/src/main/res/values-zh-rTW/strings.xml b/color/src/commonMain/composeResources/values-zh-rTW/strings.xml similarity index 100% rename from color/src/main/res/values-zh-rTW/strings.xml rename to color/src/commonMain/composeResources/values-zh-rTW/strings.xml diff --git a/color/src/main/res/values/strings.xml b/color/src/commonMain/composeResources/values/strings.xml similarity index 100% rename from color/src/main/res/values/strings.xml rename to color/src/commonMain/composeResources/values/strings.xml diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/ColorDialog.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorDialog.kt similarity index 100% rename from color/src/main/java/com/maxkeppeler/sheets/color/ColorDialog.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorDialog.kt diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/ColorPopup.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorPopup.kt similarity index 100% rename from color/src/main/java/com/maxkeppeler/sheets/color/ColorPopup.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorPopup.kt diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/ColorState.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorState.kt similarity index 90% rename from color/src/main/java/com/maxkeppeler/sheets/color/ColorState.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorState.kt index f921c9e9..b46f2da2 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/ColorState.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorState.kt @@ -15,7 +15,6 @@ */ package com.maxkeppeler.sheets.color -import android.content.Context import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -36,7 +35,6 @@ import java.io.Serializable * @param stateData The data of the state when the state is required to be restored. */ internal class ColorState( - private val context: Context, val selection: ColorSelection, val config: ColorConfig = ColorConfig(), stateData: ColorStateData? = null, @@ -48,10 +46,10 @@ internal class ColorState( var valid by mutableStateOf(isValid()) private fun getInitColor(): Int? = - selection.selectedColor?.colorInInt(context) + selection.selectedColor?.colorInInt() private fun getInitColors(): List = - config.templateColors.getColorsAsInt(context) + config.templateColors.getColorsAsInt() private fun getInitDisplayMode(): ColorSelectionMode = config.defaultDisplayMode.takeUnless { @@ -86,12 +84,11 @@ internal class ColorState( * @param config The general configuration for the dialog view. */ fun Saver( - context: Context, selection: ColorSelection, config: ColorConfig ): Saver = Saver( save = { state -> ColorStateData(state.color, state.displayMode) }, - restore = { data -> ColorState(context, selection, config, data) } + restore = { data -> ColorState(selection, config, data) } ) } @@ -113,11 +110,10 @@ internal class ColorState( */ @Composable internal fun rememberColorState( - context: Context, selection: ColorSelection, config: ColorConfig, ): ColorState = rememberSaveable( inputs = arrayOf(selection, config), - saver = ColorState.Saver(context, selection, config), - init = { ColorState(context, selection, config) } + saver = ColorState.Saver(selection, config), + init = { ColorState(selection, config) } ) \ No newline at end of file diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/ColorView.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorView.kt similarity index 96% rename from color/src/main/java/com/maxkeppeler/sheets/color/ColorView.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorView.kt index 322d6cd5..5b404721 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/ColorView.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorView.kt @@ -22,7 +22,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext import com.maxkeppeker.sheets.core.models.base.* import com.maxkeppeker.sheets.core.views.ButtonsComponent import com.maxkeppeker.sheets.core.views.base.FrameBase @@ -48,8 +47,7 @@ fun ColorView( config: ColorConfig = ColorConfig(), header: Header? = null, ) { - val context = LocalContext.current - val colorState = rememberColorState(context, selection, config) + val colorState = rememberColorState(selection, config) StateHandler(useCaseState, colorState) val coroutine = rememberCoroutineScope() diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/models/ColorConfig.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt similarity index 100% rename from color/src/main/java/com/maxkeppeler/sheets/color/models/ColorConfig.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/models/ColorSelection.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt similarity index 100% rename from color/src/main/java/com/maxkeppeler/sheets/color/models/ColorSelection.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt similarity index 100% rename from color/src/main/java/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/models/MultipleColors.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/MultipleColors.kt similarity index 65% rename from color/src/main/java/com/maxkeppeler/sheets/color/models/MultipleColors.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/MultipleColors.kt index f65d78a6..48c9951f 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/models/MultipleColors.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/MultipleColors.kt @@ -17,11 +17,8 @@ package com.maxkeppeler.sheets.color.models -import android.content.Context -import android.graphics.Color -import androidx.annotation.ColorInt -import androidx.annotation.ColorRes -import androidx.core.content.ContextCompat +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb /** * Holds various colors of a specific type. @@ -30,29 +27,10 @@ import androidx.core.content.ContextCompat * @param colorsHex color as String value, #RRGGBB or #AARRGGBB. */ sealed class MultipleColors( - @ColorInt private var colorsInt: Array? = null, - @ColorRes private var colorsRes: Array? = null, + private var colorsInt: Array? = null, private var colorsHex: Array? = null, ) { - /** - * Define a variety of color integers. - */ - class ColorsRes : MultipleColors { - - /** - * Define dynamic amount of colors. - * @param colors The color integers - */ - constructor(@ColorRes vararg colors: Int) : super(colorsRes = colors.toTypedArray()) - - /** - * Define a list of colors. - * @param colors The color integers - */ - constructor(@ColorRes colors: List) : super(colorsRes = colors.toTypedArray()) - } - /** * Define a variety of color resource references. */ @@ -62,13 +40,13 @@ sealed class MultipleColors( * Define dynamic amount of colors. * @param colors The color resource references */ - constructor(@ColorInt vararg colors: Int) : super(colorsInt = colors.toTypedArray()) + constructor(vararg colors: Int) : super(colorsInt = colors.toTypedArray()) /** * Define an array of colors. * @param colors The color resource references */ - constructor(@ColorInt colors: List) : super(colorsInt = colors.toTypedArray()) + constructor(colors: List) : super(colorsInt = colors.toTypedArray()) } /** @@ -93,10 +71,12 @@ sealed class MultipleColors( * Resolve the defined colors as color integers. * @param context the Context to resolve the colors. */ - fun getColorsAsInt(context: Context): List { + @OptIn(ExperimentalStdlibApi::class) + fun getColorsAsInt(): List { return colorsInt?.toList() - ?: colorsRes?.map { ContextCompat.getColor(context, it) } - ?: colorsHex?.map { Color.parseColor(it) } + ?: colorsHex?.map { + Color(it.substringAfter('#').hexToLong()).toArgb() + } ?: throw IllegalStateException("No colors available for color templates view. Either disabled template view or add colors.") } } diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/models/SingleColor.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt similarity index 68% rename from color/src/main/java/com/maxkeppeler/sheets/color/models/SingleColor.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt index f9b4cbcf..54f5a798 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/models/SingleColor.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt @@ -15,11 +15,9 @@ */ package com.maxkeppeler.sheets.color.models -import android.content.Context -import android.graphics.Color -import androidx.annotation.ColorInt -import androidx.annotation.ColorRes -import androidx.core.content.ContextCompat +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb + /** * Helper class to simplify passing colors. @@ -28,11 +26,12 @@ import androidx.core.content.ContextCompat * @param colorHex Color value as Hex-String. */ data class SingleColor( - @ColorInt val colorInt: Int? = null, - @ColorRes val colorRes: Int? = null, + val colorInt: Int? = null, val colorHex: String? = null, ) { - fun colorInInt(context: Context): Int? = colorInt - ?: colorRes?.let { ContextCompat.getColor(context, it) } - ?: colorHex?.let { Color.parseColor(it) } + @OptIn(ExperimentalStdlibApi::class) + fun colorInInt(): Int? = colorInt + ?: colorHex?.let { + Color(it.substringAfter('#').hexToLong()).toArgb() + } } diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/utils/Constants.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/utils/Constants.kt similarity index 100% rename from color/src/main/java/com/maxkeppeler/sheets/color/utils/Constants.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/utils/Constants.kt diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/utils/Utils.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/utils/Utils.kt new file mode 100644 index 00000000..9d3cf41e --- /dev/null +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/utils/Utils.kt @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.maxkeppeler.sheets.color.utils + +/** Receive the clipboard data. */ +@OptIn(ExperimentalStdlibApi::class) +internal fun getFormattedColor(color: Int): String { + return "#" + (0xFFFFFFFF and color.toLong()).toHexString() +} diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomComponent.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomComponent.kt similarity index 100% rename from color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomComponent.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomComponent.kt diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt similarity index 71% rename from color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt index 62f0f4b0..42c8e661 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomControlComponent.kt @@ -21,20 +21,19 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp -import androidx.core.graphics.alpha -import androidx.core.graphics.blue -import androidx.core.graphics.green -import androidx.core.graphics.red import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testSequenceTagOf import com.maxkeppeker.sheets.core.views.Grid -import com.maxkeppeler.sheets.color.R import com.maxkeppeler.sheets.color.models.ColorConfig -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.color.generated.resources.* +import sheets_compose_dialogs.color.generated.resources.Res +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_alpha +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_blue +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_green /** * The control component to build up a custom color. @@ -42,6 +41,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param color The color that is currently selected. * @param onColorChange The listener that returns a selected color. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun ColorCustomControlComponent( config: ColorConfig, @@ -50,13 +50,18 @@ internal fun ColorCustomControlComponent( onColorChange: (Int) -> Unit ) { + val composeColor = Color(color) val alphaValue = remember(color) { - val value = if (config.allowCustomColorAlphaValues) color.alpha else 255 + val value = if (config.allowCustomColorAlphaValues) { + composeColor.alpha + } else { + 1F + } mutableStateOf(value) } - val redValue = remember(color) { mutableStateOf(color.red) } - val greenValue = remember(color) { mutableStateOf(color.green) } - val blueValue = remember(color) { mutableStateOf(color.blue) } + val redValue = remember(color) { mutableStateOf(composeColor.red) } + val greenValue = remember(color) { mutableStateOf(composeColor.green) } + val blueValue = remember(color) { mutableStateOf(composeColor.blue) } val newColor by remember(alphaValue.value, redValue.value, greenValue.value, blueValue.value) { mutableStateOf(Color(redValue.value, greenValue.value, blueValue.value, alphaValue.value)) @@ -68,10 +73,10 @@ internal fun ColorCustomControlComponent( val colorValueLabelWidth = remember { mutableStateOf(null) } val colorItems = mutableListOf( - if (config.allowCustomColorAlphaValues) stringResource(R.string.scd_color_dialog_alpha) to alphaValue else null, - stringResource(R.string.scd_color_dialog_red) to redValue, - stringResource(R.string.scd_color_dialog_green) to greenValue, - stringResource(R.string.scd_color_dialog_blue) to blueValue + if (config.allowCustomColorAlphaValues) stringResource(Res.string.scd_color_dialog_alpha) to alphaValue else null, + stringResource(Res.string.scd_color_dialog_red) to redValue, + stringResource(Res.string.scd_color_dialog_green) to greenValue, + stringResource(Res.string.scd_color_dialog_blue) to blueValue ).filterNotNull() Grid( @@ -87,7 +92,9 @@ internal fun ColorCustomControlComponent( columnSpacing = 24.dp ) { entry -> val index = colorItems.indexOf(entry) - val onValueChange: (Int) -> Unit = { entry.second.value = it } + val onValueChange: (Int) -> Unit = { + entry.second.value = it.toFloat() + } val sliderTestTag = testSequenceTagOf( TestTags.COLOR_CUSTOM_VALUE_SLIDER, index.toString() @@ -96,7 +103,7 @@ internal fun ColorCustomControlComponent( LibOrientation.PORTRAIT -> ColorCustomControlListItemComponent( label = entry.first, - value = entry.second.value, + value = entry.second.value.toInt(), onValueChange = onValueChange, colorItemLabelWidth = colorItemLabelWidth, colorValueLabelWidth = colorValueLabelWidth, @@ -105,7 +112,7 @@ internal fun ColorCustomControlComponent( LibOrientation.LANDSCAPE -> ColorCustomControlGridItemComponent( label = entry.first, - value = entry.second.value, + value = entry.second.value.toInt(), onValueChange = onValueChange, sliderTestTag = sliderTestTag, ) diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlGridItemComponent.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomControlGridItemComponent.kt similarity index 96% rename from color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlGridItemComponent.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomControlGridItemComponent.kt index 1e29fc8a..7bc47625 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomControlGridItemComponent.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomControlGridItemComponent.kt @@ -27,9 +27,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextAlign -import com.maxkeppeler.sheets.core.R +import androidx.compose.ui.unit.dp /** * The control item component to build up a value of a custom color. @@ -124,7 +123,7 @@ internal fun ColorCustomControlListItemComponent( modifier = Modifier .testTag(sliderTestTag) .weight(1f) - .padding(horizontal = dimensionResource(R.dimen.scd_normal_100)), + .padding(horizontal = 16.dp), valueRange = 0f..255f, value = value.toFloat(), onValueChange = { onValueChange(it.toInt()) }, diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt similarity index 63% rename from color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt index 621cf7d2..c25127a7 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt @@ -26,19 +26,19 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.color.R import com.maxkeppeler.sheets.color.models.ColorConfig import com.maxkeppeler.sheets.color.utils.Constants -import com.maxkeppeler.sheets.color.utils.copyColorIntoClipboard import com.maxkeppeler.sheets.color.utils.getFormattedColor -import com.maxkeppeler.sheets.color.utils.pasteColorFromClipboard import kotlinx.coroutines.delay -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.color.generated.resources.Res +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_argb +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_copy_color +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_paste_color /** * A information view for the custom color picker. @@ -46,28 +46,14 @@ import com.maxkeppeler.sheets.core.R as RC * @param color The color that is currently selected. * @param onColorChange The listener that returns a selected color. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun ColorCustomInfoComponent( config: ColorConfig, color: Int, onColorChange: (Int) -> Unit, ) { - val context = LocalContext.current val colorPasteError = rememberSaveable { mutableStateOf(null) } - val onCopyCustomColor = { - copyColorIntoClipboard( - ctx = context, - label = context.getString(R.string.scd_color_dialog_color), - value = getFormattedColor(color) - ) - } - val onPasteCustomColor = { - pasteColorFromClipboard( - ctx = context, - onPastedColor = { onColorChange(it) }, - onPastedColorFailure = { colorPasteError.value = it }, - ) - } LaunchedEffect(colorPasteError.value) { delay(3000) colorPasteError.value = null @@ -110,7 +96,7 @@ internal fun ColorCustomInfoComponent( ) } else { Text( - text = stringResource(R.string.scd_color_dialog_argb), + text = stringResource(Res.string.scd_color_dialog_argb), style = MaterialTheme.typography.titleSmall, maxLines = 1 ) @@ -124,30 +110,6 @@ internal fun ColorCustomInfoComponent( } if (colorPasteError.value == null) { Spacer(modifier = Modifier.weight(1f)) - FilledIconButton( - colors = IconButtonDefaults.filledIconButtonColors(containerColor = MaterialTheme.colorScheme.background), - modifier = Modifier, - onClick = onCopyCustomColor - ) { - Icon( - modifier = Modifier - .size(dimensionResource(RC.dimen.scd_size_125)), - imageVector = config.icons.ContentCopy, - contentDescription = stringResource(R.string.scd_color_dialog_copy_color), - ) - } - FilledIconButton( - colors = IconButtonDefaults.filledIconButtonColors(containerColor = MaterialTheme.colorScheme.background), - modifier = Modifier, - onClick = onPasteCustomColor - ) { - Icon( - modifier = Modifier - .size(dimensionResource(RC.dimen.scd_size_125)), - imageVector = config.icons.ContentPaste, - contentDescription = stringResource(R.string.scd_color_dialog_paste_color), - ) - } } } } diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt similarity index 78% rename from color/src/main/java/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt index cafbbf55..32fa4e70 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorSelectionModeComponent.kt @@ -27,13 +27,16 @@ import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource -import com.maxkeppeler.sheets.color.R +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.color.models.ColorConfig import com.maxkeppeler.sheets.color.models.ColorSelection import com.maxkeppeler.sheets.color.models.ColorSelectionMode -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.color.generated.resources.Res +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_custom_color +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_no_color +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_template_colors /** * The color selection mode component that allows the user to switch between template colors, custom color and no color. @@ -43,6 +46,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param onModeChange The listener that returns the new color selection mode. * @param onNoColorClick The listener that is invoked when no color is selected. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun ColorSelectionModeComponent( selection: ColorSelection, @@ -63,15 +67,15 @@ internal fun ColorSelectionModeComponent( }, modifier = Modifier, contentPadding = PaddingValues( - vertical = dimensionResource(id = RC.dimen.scd_small_100), - horizontal = dimensionResource(id = RC.dimen.scd_small_100) + vertical = 8.dp, + horizontal = 8.dp ), shape = RoundedCornerShape(50) ) { val text = stringResource( when (mode) { - ColorSelectionMode.CUSTOM -> R.string.scd_color_dialog_template_colors - ColorSelectionMode.TEMPLATE -> R.string.scd_color_dialog_custom_color + ColorSelectionMode.CUSTOM -> Res.string.scd_color_dialog_template_colors + ColorSelectionMode.TEMPLATE -> Res.string.scd_color_dialog_custom_color } ) Icon( @@ -92,20 +96,20 @@ internal fun ColorSelectionModeComponent( onClick = onNoColorClick, modifier = Modifier, contentPadding = PaddingValues( - vertical = dimensionResource(id = RC.dimen.scd_small_100), - horizontal = dimensionResource(id = RC.dimen.scd_small_100) + vertical = 8.dp, + horizontal = 8.dp ), shape = RoundedCornerShape(50) ) { Icon( modifier = Modifier.size(48.dp), imageVector = config.icons.NotInterested, - contentDescription = stringResource(R.string.scd_color_dialog_no_color), + contentDescription = stringResource(Res.string.scd_color_dialog_no_color), tint = MaterialTheme.colorScheme.primary ) Text( modifier = Modifier.padding(horizontal = 8.dp), - text = stringResource(R.string.scd_color_dialog_no_color), + text = stringResource(Res.string.scd_color_dialog_no_color), ) } } diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt similarity index 97% rename from color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt index ffab1c6d..bc21541c 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorTemplateComponent.kt @@ -30,13 +30,12 @@ import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.BaseConstants import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.color.models.ColorConfig import com.maxkeppeler.sheets.color.utils.Constants -import com.maxkeppeler.sheets.core.R as RC /** * The template mode that displays a list of colors to choose from. diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt similarity index 86% rename from color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt rename to color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt index 4ee84021..c2e4b8b3 100644 --- a/color/src/main/java/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorTemplateItemComponent.kt @@ -28,13 +28,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextOverflow -import androidx.core.graphics.alpha -import com.maxkeppeler.sheets.color.R +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.color.models.ColorConfig -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.painterResource +import sheets_compose_dialogs.color.generated.resources.Res +import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_transparent_pattern /** * The template item component that represents one color. @@ -45,6 +45,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param inputDisabled If input is disabled. * @param onColorClick The listener that returns the selected color. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun ColorTemplateItemComponent( config: ColorConfig, @@ -68,7 +69,7 @@ internal fun ColorTemplateItemComponent( Box(modifier = Modifier.fillMaxSize()) { Image( modifier = Modifier.fillMaxSize(), - painter = painterResource(id = R.drawable.scd_color_dialog_transparent_pattern), + painter = painterResource(Res.drawable.scd_color_dialog_transparent_pattern), contentDescription = null, ) Row( @@ -95,16 +96,16 @@ internal fun ColorTemplateItemComponent( tint = MaterialTheme.colorScheme.primary ) } - } else if (color.alpha < 255) { + } else if (Color(color).alpha < 1F) { Text( modifier = Modifier .clip(RoundedCornerShape(50)) .background(MaterialTheme.colorScheme.background) - .padding(dimensionResource(id = RC.dimen.scd_small_25)), + .padding(2.dp), overflow = TextOverflow.Ellipsis, maxLines = 1, style = MaterialTheme.typography.labelSmall, - text = "${color.alpha.toFloat().div(255).times(100).toInt()}%" + text = "${Color(color).alpha.times(100).toInt()}%" ) } } diff --git a/color/src/main/java/com/maxkeppeler/sheets/color/utils/Utils.kt b/color/src/main/java/com/maxkeppeler/sheets/color/utils/Utils.kt deleted file mode 100644 index 6050cd90..00000000 --- a/color/src/main/java/com/maxkeppeler/sheets/color/utils/Utils.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.maxkeppeler.sheets.color.utils - -import android.content.ClipData -import android.content.ClipboardManager -import android.content.Context -import android.graphics.Color -import androidx.annotation.RestrictTo -import com.maxkeppeler.sheets.color.R - -/** Save a text into the clipboard. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -internal fun copyColorIntoClipboard(ctx: Context, label: String, value: String) { - val clipboard = ctx.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val clip = ClipData.newPlainText(label, value) - clipboard.setPrimaryClip(clip) -} - -/** Receive the clipboard data. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -internal fun pasteColorFromClipboard( - ctx: Context, - onPastedColor: (Int) -> Unit, - onPastedColorFailure: (String) -> Unit, -) { - val clipboard = ctx.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - val item = clipboard.primaryClip?.getItemAt(0) - val text = item?.text?.toString() - text?.let { - runCatching { - // Color detected - onPastedColor(Color.parseColor(it)) - }.getOrElse { - // Clipboard information can not be parsed to color - onPastedColorFailure(ctx.getString(R.string.scd_color_dialog_clipboard_paste_invalid_color_code)) - } - } ?: run { - // Clipboard was empty - onPastedColorFailure(ctx.getString(R.string.scd_color_dialog_clipboard_paste_invalid_empty)) - } -} - -/** Receive the clipboard data. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -internal fun getFormattedColor(color: Int): String = - String.format("#%08X", (0xFFFFFFFF and color.toLong())) diff --git a/color/src/main/res/drawable/scd_color_dialog_transparent_pattern.xml b/color/src/main/res/drawable/scd_color_dialog_transparent_pattern.xml deleted file mode 100644 index 41179bbd..00000000 --- a/color/src/main/res/drawable/scd_color_dialog_transparent_pattern.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 59802357..fa2fb4e8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -17,7 +17,7 @@ include( //":duration", //":clock", //":date_time", - //":color", + ":color", ":option", ":state", ":input", From 446bdd01a72272569f069b9563bec173d6247ff7 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 11 Apr 2024 20:14:27 +0200 Subject: [PATCH 28/58] migrate emoji module --- emoji/build.gradle.kts | 66 ++++++++++++------- .../maxkeppeler/sheets/emoji/EmojiDialog.kt | 0 .../maxkeppeler/sheets/emoji/EmojiPopup.kt | 0 .../maxkeppeler/sheets/emoji/EmojiState.kt | 0 .../com/maxkeppeler/sheets/emoji/EmojiView.kt | 2 - .../emoji/models/EmojiCategoryAppearance.kt | 0 .../sheets/emoji/models/EmojiConfig.kt | 0 .../sheets/emoji/models/EmojiProvider.kt | 0 .../sheets/emoji/models/EmojiSelection.kt | 0 .../sheets/emoji/utils/Constants.kt | 0 .../sheets/emoji/utils/EmojiInstaller.kt | 17 +++-- .../emoji/views/EmojiHeaderComponent.kt | 5 +- .../emoji/views/EmojiHeaderItemComponent.kt | 3 +- .../sheets/emoji/views/EmojiItemComponent.kt | 19 ++---- .../views/EmojiTextHeaderItemComponent.kt | 3 +- .../sheets/emoji/views/VariantsPopup.kt | 3 +- gradle/libs.versions.toml | 9 ++- settings.gradle.kts | 2 +- 18 files changed, 70 insertions(+), 59 deletions(-) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/EmojiDialog.kt (100%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/EmojiPopup.kt (100%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/EmojiState.kt (100%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/EmojiView.kt (98%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/models/EmojiCategoryAppearance.kt (100%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/models/EmojiConfig.kt (100%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/models/EmojiProvider.kt (100%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/models/EmojiSelection.kt (100%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/utils/Constants.kt (100%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/utils/EmojiInstaller.kt (75%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/views/EmojiHeaderComponent.kt (95%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt (96%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt (87%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt (95%) rename emoji/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt (97%) diff --git a/emoji/build.gradle.kts b/emoji/build.gradle.kts index 35651f4b..39a48268 100644 --- a/emoji/build.gradle.kts +++ b/emoji/build.gradle.kts @@ -1,34 +1,52 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +import com.vanniktech.maven.publish.SonatypeHost + plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) + alias(libs.plugins.publish) + `maven-publish` } android { namespace = Modules.EMOJI.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } } -dependencies { - implementations(Dependencies.Vanniktech.EMOJI_GOOGLE) - implementations(Dependencies.Vanniktech.EMOJI_IOS) - implementations(Dependencies.Vanniktech.EMOJI_TWITTER) - implementations(Dependencies.Vanniktech.EMOJI_FACEBOOK) +kotlin { + androidTarget { + publishAllLibraryVariants() + } + jvm() + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + + implementation(libs.emoji.facebook) + implementation(libs.emoji.google) + implementation(libs.emoji.ios) + implementation(libs.emoji.twitter) + implementation(libs.serialization) + + api(project(":core")) + } + } } mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) +} diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiDialog.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiDialog.kt similarity index 100% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiDialog.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiDialog.kt diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiPopup.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiPopup.kt similarity index 100% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiPopup.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiPopup.kt diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiState.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiState.kt similarity index 100% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiState.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiState.kt diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiView.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiView.kt similarity index 98% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiView.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiView.kt index dcf73120..08206b3b 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/EmojiView.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiView.kt @@ -30,7 +30,6 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.BaseBehaviors import com.maxkeppeker.sheets.core.models.base.Header @@ -46,7 +45,6 @@ import com.maxkeppeler.sheets.emoji.utils.EmojiInstaller import com.maxkeppeler.sheets.emoji.views.EmojiHeaderComponent import com.maxkeppeler.sheets.emoji.views.EmojiItemComponent import com.vanniktech.emoji.Emoji -import com.maxkeppeler.sheets.core.R as RC /** * Emoji view for the use-case to to select any emoji or a variant, if available. diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/models/EmojiCategoryAppearance.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/models/EmojiCategoryAppearance.kt similarity index 100% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/models/EmojiCategoryAppearance.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/models/EmojiCategoryAppearance.kt diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/models/EmojiConfig.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/models/EmojiConfig.kt similarity index 100% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/models/EmojiConfig.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/models/EmojiConfig.kt diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/models/EmojiProvider.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/models/EmojiProvider.kt similarity index 100% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/models/EmojiProvider.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/models/EmojiProvider.kt diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/models/EmojiSelection.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/models/EmojiSelection.kt similarity index 100% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/models/EmojiSelection.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/models/EmojiSelection.kt diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/utils/Constants.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/utils/Constants.kt similarity index 100% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/utils/Constants.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/utils/Constants.kt diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/utils/EmojiInstaller.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/utils/EmojiInstaller.kt similarity index 75% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/utils/EmojiInstaller.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/utils/EmojiInstaller.kt index f78dbe5c..104858f3 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/utils/EmojiInstaller.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/utils/EmojiInstaller.kt @@ -34,17 +34,16 @@ internal object EmojiInstaller { * Installs an emoji provider. * @param emojiProvider The emoji provider that will be installed. */ + @Synchronized fun installProvider(emojiProvider: EmojiProvider) { - synchronized(EmojiInstaller::class.java) { - if (!initiated) { - when (emojiProvider) { - EmojiProvider.GOOGLE -> EmojiManager.install(GoogleEmojiProvider()) - EmojiProvider.IOS -> EmojiManager.install(IosEmojiProvider()) - EmojiProvider.FACEBOOK -> EmojiManager.install(FacebookEmojiProvider()) - EmojiProvider.TWITTER -> EmojiManager.install(TwitterEmojiProvider()) - } - initiated = true + if (!initiated) { + when (emojiProvider) { + EmojiProvider.GOOGLE -> EmojiManager.install(GoogleEmojiProvider()) + EmojiProvider.IOS -> EmojiManager.install(IosEmojiProvider()) + EmojiProvider.FACEBOOK -> EmojiManager.install(FacebookEmojiProvider()) + EmojiProvider.TWITTER -> EmojiManager.install(TwitterEmojiProvider()) } + initiated = true } } diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderComponent.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiHeaderComponent.kt similarity index 95% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderComponent.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiHeaderComponent.kt index 0de2bebd..c1ca1410 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderComponent.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiHeaderComponent.kt @@ -25,10 +25,9 @@ import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R import com.maxkeppeler.sheets.emoji.models.EmojiCategoryAppearance import com.maxkeppeler.sheets.emoji.models.EmojiConfig import com.vanniktech.emoji.EmojiCategory @@ -58,7 +57,7 @@ internal fun EmojiHeaderComponent( modifier = Modifier.testTags(TestTags.EMOJI_CATEGORY, config.categoryAppearance), columns = GridCells.Fixed(categories.size), userScrollEnabled = false, - horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.scd_small_25)), + horizontalArrangement = Arrangement.spacedBy(2.dp), ) { itemsIndexed(categoryIcons) { index, icon -> val selected = index == selectedCategory diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt similarity index 96% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt index 3e333173..d31f136d 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiHeaderItemComponent.kt @@ -27,10 +27,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R as RC /** * The emoji header item component. diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt similarity index 87% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt index 3b53efd6..d55270ac 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiItemComponent.kt @@ -23,6 +23,7 @@ import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -31,14 +32,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.onGloballyPositioned -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.IntSize -import androidx.compose.ui.viewinterop.AndroidView +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.vanniktech.emoji.Emoji -import com.vanniktech.emoji.EmojiTextView -import com.maxkeppeler.sheets.core.R as RC /** @@ -47,6 +46,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param selectedEmoji The emoji that is currently selected. * @param onClick The listener that returns the selected emoji. */ +@OptIn(ExperimentalFoundationApi::class) @Composable internal fun EmojiItemComponent( emoji: Emoji, @@ -86,15 +86,10 @@ internal fun EmojiItemComponent( ) .padding(2.dp), ) { - - AndroidView( + Text( modifier = Modifier.align(Alignment.Center), - factory = { context -> - EmojiTextView(context).apply { - setEmojiSize(constraints.maxWidth, false) - text = emoji.unicode - } - }, + fontSize = constraints.maxWidth.sp, + text = emoji.unicode ) } } \ No newline at end of file diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt similarity index 95% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt index 48c7246c..2fe1d1e1 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/EmojiTextHeaderItemComponent.kt @@ -25,10 +25,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.core.R as RC /** diff --git a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt similarity index 97% rename from emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt rename to emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt index 33f7386f..ad4e897c 100644 --- a/emoji/src/main/java/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/views/VariantsPopup.kt @@ -26,11 +26,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Popup import com.vanniktech.emoji.Emoji -import com.maxkeppeler.sheets.core.R as RC /** * A popup that shows the various variants of an emoji. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 78172a6c..e4d928d4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,10 @@ [versions] android = "8.2.2" -compose = "1.6.1" +compose = "1.6.2" datetime = "0.5.0" desugar = "2.0.4" -kotlin = "1.9.22" +emoji = "0.18.0" +kotlin = "1.9.23" publish = "0.28.0" serialization = "1.6.3" window-size = "0.5.0" @@ -11,6 +12,10 @@ window-size = "0.5.0" [libraries] datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "datetime" } desugar = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } +emoji-facebook = { group = "com.vanniktech", name = "emoji-facebook", version.ref = "emoji" } +emoji-google = { group = "com.vanniktech", name = "emoji-google", version.ref = "emoji" } +emoji-ios = { group = "com.vanniktech", name = "emoji-ios", version.ref = "emoji" } +emoji-twitter = { group = "com.vanniktech", name = "emoji-twitter", version.ref = "emoji" } serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-core", version.ref = "serialization" } stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" } window-size = { group = "dev.chrisbanes.material3", name = "material3-window-size-class-multiplatform", version.ref = "window-size" } diff --git a/settings.gradle.kts b/settings.gradle.kts index fa2fb4e8..0c006db8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,6 +21,6 @@ include( ":option", ":state", ":input", - //":emoji", + ":emoji", ":list", ) \ No newline at end of file From 37bc03c6a21f4f9a5e087a20931e9ab6b8e0cb04 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 11 Apr 2024 20:15:05 +0200 Subject: [PATCH 29/58] migrate emoji module --- .../commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiPopup.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiPopup.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiPopup.kt index 096eea63..03f101fd 100644 --- a/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiPopup.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiPopup.kt @@ -38,6 +38,7 @@ import com.maxkeppeler.sheets.emoji.models.EmojiSelection * @param offset The offset of the popup. * @param properties PopupProperties for further customization of this popup's behavior. */ +@OptIn(ExperimentalMaterial3Api::class) @Composable fun EmojiPopup( state: UseCaseState, From 2a6a65869144b960f176c9f5838462b91452cf15 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 11 Apr 2024 22:23:43 +0200 Subject: [PATCH 30/58] migrate date_time module --- date_time/build.gradle.kts | 69 +++++++++++++++--- .../sheets/date_time/utils/Utils.android.kt | 25 +++++++ .../sheets/date_time/utils/Utils.apple.kt | 25 +++++++ .../composeResources}/values-bg/strings.xml | 0 .../composeResources}/values-cs/strings.xml | 0 .../composeResources}/values-da/strings.xml | 0 .../values-de-rDE/strings.xml | 0 .../composeResources}/values-de/strings.xml | 0 .../composeResources}/values-el/strings.xml | 0 .../composeResources}/values-eo/strings.xml | 0 .../composeResources}/values-es/strings.xml | 0 .../composeResources}/values-et/strings.xml | 0 .../composeResources}/values-fa/strings.xml | 0 .../composeResources}/values-fi/strings.xml | 0 .../composeResources}/values-fr/strings.xml | 0 .../composeResources}/values-ga/strings.xml | 0 .../composeResources}/values-gd/strings.xml | 0 .../composeResources}/values-hi/strings.xml | 0 .../composeResources}/values-hr/strings.xml | 0 .../composeResources}/values-hu/strings.xml | 0 .../values-in-rID/strings.xml | 0 .../composeResources}/values-is/strings.xml | 0 .../composeResources}/values-it/strings.xml | 0 .../composeResources}/values-iw/strings.xml | 0 .../composeResources}/values-ja/strings.xml | 0 .../composeResources}/values-jv/strings.xml | 0 .../composeResources}/values-kk/strings.xml | 0 .../composeResources}/values-ko/strings.xml | 0 .../composeResources}/values-ku/strings.xml | 0 .../composeResources}/values-lb/strings.xml | 0 .../composeResources}/values-lo/strings.xml | 0 .../composeResources}/values-lt/strings.xml | 0 .../composeResources}/values-lv/strings.xml | 0 .../composeResources}/values-ms/strings.xml | 0 .../composeResources}/values-ne/strings.xml | 0 .../composeResources}/values-nl/strings.xml | 0 .../composeResources}/values-no/strings.xml | 0 .../composeResources}/values-pl/strings.xml | 0 .../composeResources}/values-pt/strings.xml | 0 .../composeResources}/values-ru/strings.xml | 0 .../composeResources}/values-sk/strings.xml | 0 .../composeResources}/values-sl/strings.xml | 0 .../composeResources}/values-sr/strings.xml | 0 .../composeResources}/values-sv/strings.xml | 0 .../composeResources}/values-th/strings.xml | 0 .../composeResources}/values-tr/strings.xml | 0 .../composeResources}/values-uk/strings.xml | 0 .../composeResources}/values-vi/strings.xml | 0 .../values-zh-rCN/strings.xml | 0 .../values-zh-rTW/strings.xml | 0 .../composeResources}/values/strings.xml | 0 .../sheets/date_time/DateTimeDialog.kt | 1 + .../sheets/date_time/DateTimePopup.kt | 0 .../sheets/date_time/DateTimeState.kt | 11 ++- .../sheets/date_time/DateTimeView.kt | 18 +++-- .../sheets/date_time/models/DateTimeConfig.kt | 2 - .../date_time/models/DateTimeSelection.kt | 9 +-- .../date_time/models/UnitOptionEntry.kt | 12 ++-- .../sheets/date_time/models/UnitSelection.kt | 24 ++++--- .../sheets/date_time/utils/Constants.kt | 3 +- .../sheets/date_time/utils/ExtendDateTime.kt | 57 +++++++++++++++ .../sheets/date_time/utils/FormatStyle.kt | 34 +++++++++ .../sheets/date_time/utils/Utils.kt | 70 ++++++++++--------- .../sheets/date_time/views/PickerComponent.kt | 5 +- .../views/PickerDateCharacterComponent.kt | 3 +- .../views/SelectionContainerComponent.kt | 18 ++--- .../date_time/views/SelectionValueItem.kt | 9 +-- .../date_time/views/UnitContainerComponent.kt | 3 +- .../sheets/date_time/views/UnitLabel.kt | 8 +-- .../sheets/date_time/views/ValueComponent.kt | 13 ++-- .../views/ValueContainerComponent.kt | 3 +- .../views/ValueEmptyOverlayComponent.kt | 0 .../sheets/date_time/utils/Utils.js.kt | 22 ++++++ .../sheets/date_time/utils/Utils.jvm.kt | 25 +++++++ .../maxkeppeler/sheets/emoji/EmojiState.kt | 4 +- gradle/libs.versions.toml | 2 +- settings.gradle.kts | 2 +- 77 files changed, 363 insertions(+), 114 deletions(-) create mode 100644 date_time/src/androidMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.android.kt create mode 100644 date_time/src/appleMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.apple.kt rename date_time/src/{main/res => commonMain/composeResources}/values-bg/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-cs/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-da/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-de-rDE/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-de/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-el/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-eo/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-es/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-et/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-fa/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-fi/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-fr/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-ga/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-gd/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-hi/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-hr/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-hu/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-in-rID/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-is/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-it/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-iw/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-ja/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-jv/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-kk/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-ko/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-ku/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-lb/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-lo/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-lt/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-lv/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-ms/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-ne/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-nl/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-no/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-pl/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-pt/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-ru/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-sk/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-sl/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-sr/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-sv/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-th/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-tr/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-uk/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-vi/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-zh-rCN/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values-zh-rTW/strings.xml (100%) rename date_time/src/{main/res => commonMain/composeResources}/values/strings.xml (100%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/DateTimeDialog.kt (98%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/DateTimePopup.kt (100%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/DateTimeState.kt (97%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/DateTimeView.kt (83%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/models/DateTimeConfig.kt (95%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/models/DateTimeSelection.kt (96%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/models/UnitOptionEntry.kt (76%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/models/UnitSelection.kt (77%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/utils/Constants.kt (97%) create mode 100644 date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/ExtendDateTime.kt create mode 100644 date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/FormatStyle.kt rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/utils/Utils.kt (82%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt (96%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt (93%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt (89%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt (87%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt (96%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/UnitLabel.kt (84%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt (87%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt (96%) rename date_time/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/date_time/views/ValueEmptyOverlayComponent.kt (100%) create mode 100644 date_time/src/jsMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.js.kt create mode 100644 date_time/src/jvmMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.jvm.kt diff --git a/date_time/build.gradle.kts b/date_time/build.gradle.kts index fea538f4..f187d9c9 100644 --- a/date_time/build.gradle.kts +++ b/date_time/build.gradle.kts @@ -1,3 +1,5 @@ +import com.vanniktech.maven.publish.SonatypeHost + /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) * @@ -14,23 +16,74 @@ * limitations under the License. */ plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) + alias(libs.plugins.publish) + `maven-publish` } android { - namespace = Modules.DATE_TIME.namespace + namespace = Modules.CALENDAR.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } compileOptions { - // Flag to enable support for the new language APIs isCoreLibraryDesugaringEnabled = true + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + androidTarget { + publishAllLibraryVariants() + } + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.components.resources) + + implementation(libs.datetime) + implementation(libs.serialization) + + api(project(":core")) + } + + val nonJvmMain by creating { + dependsOn(commonMain.get()) + + nativeMain.orNull?.dependsOn(this) + jsMain.orNull?.dependsOn(this) + } } } dependencies { - implementations(Dependencies.SNAPPER) - coreLibraryDesugaring(Dependencies.DESUGAR) + coreLibraryDesugaring(libs.desugar) } mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) +} diff --git a/date_time/src/androidMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.android.kt b/date_time/src/androidMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.android.kt new file mode 100644 index 00000000..20ff2415 --- /dev/null +++ b/date_time/src/androidMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.android.kt @@ -0,0 +1,25 @@ +package com.maxkeppeler.sheets.date_time.utils + +import java.time.chrono.Chronology +import java.time.format.DateTimeFormatterBuilder +import java.util.Locale + +internal fun FormatStyle.toJava(): java.time.format.FormatStyle { + return when (this) { + FormatStyle.FULL -> java.time.format.FormatStyle.FULL + FormatStyle.LONG -> java.time.format.FormatStyle.LONG + FormatStyle.MEDIUM -> java.time.format.FormatStyle.MEDIUM + FormatStyle.SHORT -> java.time.format.FormatStyle.SHORT + } +} + +internal actual fun getLocalizedPattern( + isDate: Boolean, + formatStyle: FormatStyle +): String { + val locale = Locale.getDefault() + return DateTimeFormatterBuilder.getLocalizedDateTimePattern( + if (isDate) formatStyle.toJava() else null, + if (!isDate) formatStyle.toJava() else null, Chronology.ofLocale(locale), locale + ).toString() +} \ No newline at end of file diff --git a/date_time/src/appleMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.apple.kt b/date_time/src/appleMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.apple.kt new file mode 100644 index 00000000..d0baaba8 --- /dev/null +++ b/date_time/src/appleMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.apple.kt @@ -0,0 +1,25 @@ +package com.maxkeppeler.sheets.date_time.utils + +import platform.Foundation.* + +internal fun FormatStyle.toSwift(isAbsent: Boolean): NSDateFormatterStyle { + if (isAbsent) { + return NSDateFormatterNoStyle + } + return when (this) { + FormatStyle.FULL -> NSDateFormatterFullStyle + FormatStyle.LONG -> NSDateFormatterLongStyle + FormatStyle.MEDIUM -> NSDateFormatterMediumStyle + FormatStyle.SHORT -> NSDateFormatterShortStyle + } +} + +internal actual fun getLocalizedPattern( + isDate: Boolean, + formatStyle: FormatStyle +): String { + val formatter = NSDateFormatter() + formatter.setDateStyle(formatStyle.toSwift(!isDate)) + formatter.setTimeStyle(formatStyle.toSwift(isDate)) + return formatter.dateFormat() +} \ No newline at end of file diff --git a/date_time/src/main/res/values-bg/strings.xml b/date_time/src/commonMain/composeResources/values-bg/strings.xml similarity index 100% rename from date_time/src/main/res/values-bg/strings.xml rename to date_time/src/commonMain/composeResources/values-bg/strings.xml diff --git a/date_time/src/main/res/values-cs/strings.xml b/date_time/src/commonMain/composeResources/values-cs/strings.xml similarity index 100% rename from date_time/src/main/res/values-cs/strings.xml rename to date_time/src/commonMain/composeResources/values-cs/strings.xml diff --git a/date_time/src/main/res/values-da/strings.xml b/date_time/src/commonMain/composeResources/values-da/strings.xml similarity index 100% rename from date_time/src/main/res/values-da/strings.xml rename to date_time/src/commonMain/composeResources/values-da/strings.xml diff --git a/date_time/src/main/res/values-de-rDE/strings.xml b/date_time/src/commonMain/composeResources/values-de-rDE/strings.xml similarity index 100% rename from date_time/src/main/res/values-de-rDE/strings.xml rename to date_time/src/commonMain/composeResources/values-de-rDE/strings.xml diff --git a/date_time/src/main/res/values-de/strings.xml b/date_time/src/commonMain/composeResources/values-de/strings.xml similarity index 100% rename from date_time/src/main/res/values-de/strings.xml rename to date_time/src/commonMain/composeResources/values-de/strings.xml diff --git a/date_time/src/main/res/values-el/strings.xml b/date_time/src/commonMain/composeResources/values-el/strings.xml similarity index 100% rename from date_time/src/main/res/values-el/strings.xml rename to date_time/src/commonMain/composeResources/values-el/strings.xml diff --git a/date_time/src/main/res/values-eo/strings.xml b/date_time/src/commonMain/composeResources/values-eo/strings.xml similarity index 100% rename from date_time/src/main/res/values-eo/strings.xml rename to date_time/src/commonMain/composeResources/values-eo/strings.xml diff --git a/date_time/src/main/res/values-es/strings.xml b/date_time/src/commonMain/composeResources/values-es/strings.xml similarity index 100% rename from date_time/src/main/res/values-es/strings.xml rename to date_time/src/commonMain/composeResources/values-es/strings.xml diff --git a/date_time/src/main/res/values-et/strings.xml b/date_time/src/commonMain/composeResources/values-et/strings.xml similarity index 100% rename from date_time/src/main/res/values-et/strings.xml rename to date_time/src/commonMain/composeResources/values-et/strings.xml diff --git a/date_time/src/main/res/values-fa/strings.xml b/date_time/src/commonMain/composeResources/values-fa/strings.xml similarity index 100% rename from date_time/src/main/res/values-fa/strings.xml rename to date_time/src/commonMain/composeResources/values-fa/strings.xml diff --git a/date_time/src/main/res/values-fi/strings.xml b/date_time/src/commonMain/composeResources/values-fi/strings.xml similarity index 100% rename from date_time/src/main/res/values-fi/strings.xml rename to date_time/src/commonMain/composeResources/values-fi/strings.xml diff --git a/date_time/src/main/res/values-fr/strings.xml b/date_time/src/commonMain/composeResources/values-fr/strings.xml similarity index 100% rename from date_time/src/main/res/values-fr/strings.xml rename to date_time/src/commonMain/composeResources/values-fr/strings.xml diff --git a/date_time/src/main/res/values-ga/strings.xml b/date_time/src/commonMain/composeResources/values-ga/strings.xml similarity index 100% rename from date_time/src/main/res/values-ga/strings.xml rename to date_time/src/commonMain/composeResources/values-ga/strings.xml diff --git a/date_time/src/main/res/values-gd/strings.xml b/date_time/src/commonMain/composeResources/values-gd/strings.xml similarity index 100% rename from date_time/src/main/res/values-gd/strings.xml rename to date_time/src/commonMain/composeResources/values-gd/strings.xml diff --git a/date_time/src/main/res/values-hi/strings.xml b/date_time/src/commonMain/composeResources/values-hi/strings.xml similarity index 100% rename from date_time/src/main/res/values-hi/strings.xml rename to date_time/src/commonMain/composeResources/values-hi/strings.xml diff --git a/date_time/src/main/res/values-hr/strings.xml b/date_time/src/commonMain/composeResources/values-hr/strings.xml similarity index 100% rename from date_time/src/main/res/values-hr/strings.xml rename to date_time/src/commonMain/composeResources/values-hr/strings.xml diff --git a/date_time/src/main/res/values-hu/strings.xml b/date_time/src/commonMain/composeResources/values-hu/strings.xml similarity index 100% rename from date_time/src/main/res/values-hu/strings.xml rename to date_time/src/commonMain/composeResources/values-hu/strings.xml diff --git a/date_time/src/main/res/values-in-rID/strings.xml b/date_time/src/commonMain/composeResources/values-in-rID/strings.xml similarity index 100% rename from date_time/src/main/res/values-in-rID/strings.xml rename to date_time/src/commonMain/composeResources/values-in-rID/strings.xml diff --git a/date_time/src/main/res/values-is/strings.xml b/date_time/src/commonMain/composeResources/values-is/strings.xml similarity index 100% rename from date_time/src/main/res/values-is/strings.xml rename to date_time/src/commonMain/composeResources/values-is/strings.xml diff --git a/date_time/src/main/res/values-it/strings.xml b/date_time/src/commonMain/composeResources/values-it/strings.xml similarity index 100% rename from date_time/src/main/res/values-it/strings.xml rename to date_time/src/commonMain/composeResources/values-it/strings.xml diff --git a/date_time/src/main/res/values-iw/strings.xml b/date_time/src/commonMain/composeResources/values-iw/strings.xml similarity index 100% rename from date_time/src/main/res/values-iw/strings.xml rename to date_time/src/commonMain/composeResources/values-iw/strings.xml diff --git a/date_time/src/main/res/values-ja/strings.xml b/date_time/src/commonMain/composeResources/values-ja/strings.xml similarity index 100% rename from date_time/src/main/res/values-ja/strings.xml rename to date_time/src/commonMain/composeResources/values-ja/strings.xml diff --git a/date_time/src/main/res/values-jv/strings.xml b/date_time/src/commonMain/composeResources/values-jv/strings.xml similarity index 100% rename from date_time/src/main/res/values-jv/strings.xml rename to date_time/src/commonMain/composeResources/values-jv/strings.xml diff --git a/date_time/src/main/res/values-kk/strings.xml b/date_time/src/commonMain/composeResources/values-kk/strings.xml similarity index 100% rename from date_time/src/main/res/values-kk/strings.xml rename to date_time/src/commonMain/composeResources/values-kk/strings.xml diff --git a/date_time/src/main/res/values-ko/strings.xml b/date_time/src/commonMain/composeResources/values-ko/strings.xml similarity index 100% rename from date_time/src/main/res/values-ko/strings.xml rename to date_time/src/commonMain/composeResources/values-ko/strings.xml diff --git a/date_time/src/main/res/values-ku/strings.xml b/date_time/src/commonMain/composeResources/values-ku/strings.xml similarity index 100% rename from date_time/src/main/res/values-ku/strings.xml rename to date_time/src/commonMain/composeResources/values-ku/strings.xml diff --git a/date_time/src/main/res/values-lb/strings.xml b/date_time/src/commonMain/composeResources/values-lb/strings.xml similarity index 100% rename from date_time/src/main/res/values-lb/strings.xml rename to date_time/src/commonMain/composeResources/values-lb/strings.xml diff --git a/date_time/src/main/res/values-lo/strings.xml b/date_time/src/commonMain/composeResources/values-lo/strings.xml similarity index 100% rename from date_time/src/main/res/values-lo/strings.xml rename to date_time/src/commonMain/composeResources/values-lo/strings.xml diff --git a/date_time/src/main/res/values-lt/strings.xml b/date_time/src/commonMain/composeResources/values-lt/strings.xml similarity index 100% rename from date_time/src/main/res/values-lt/strings.xml rename to date_time/src/commonMain/composeResources/values-lt/strings.xml diff --git a/date_time/src/main/res/values-lv/strings.xml b/date_time/src/commonMain/composeResources/values-lv/strings.xml similarity index 100% rename from date_time/src/main/res/values-lv/strings.xml rename to date_time/src/commonMain/composeResources/values-lv/strings.xml diff --git a/date_time/src/main/res/values-ms/strings.xml b/date_time/src/commonMain/composeResources/values-ms/strings.xml similarity index 100% rename from date_time/src/main/res/values-ms/strings.xml rename to date_time/src/commonMain/composeResources/values-ms/strings.xml diff --git a/date_time/src/main/res/values-ne/strings.xml b/date_time/src/commonMain/composeResources/values-ne/strings.xml similarity index 100% rename from date_time/src/main/res/values-ne/strings.xml rename to date_time/src/commonMain/composeResources/values-ne/strings.xml diff --git a/date_time/src/main/res/values-nl/strings.xml b/date_time/src/commonMain/composeResources/values-nl/strings.xml similarity index 100% rename from date_time/src/main/res/values-nl/strings.xml rename to date_time/src/commonMain/composeResources/values-nl/strings.xml diff --git a/date_time/src/main/res/values-no/strings.xml b/date_time/src/commonMain/composeResources/values-no/strings.xml similarity index 100% rename from date_time/src/main/res/values-no/strings.xml rename to date_time/src/commonMain/composeResources/values-no/strings.xml diff --git a/date_time/src/main/res/values-pl/strings.xml b/date_time/src/commonMain/composeResources/values-pl/strings.xml similarity index 100% rename from date_time/src/main/res/values-pl/strings.xml rename to date_time/src/commonMain/composeResources/values-pl/strings.xml diff --git a/date_time/src/main/res/values-pt/strings.xml b/date_time/src/commonMain/composeResources/values-pt/strings.xml similarity index 100% rename from date_time/src/main/res/values-pt/strings.xml rename to date_time/src/commonMain/composeResources/values-pt/strings.xml diff --git a/date_time/src/main/res/values-ru/strings.xml b/date_time/src/commonMain/composeResources/values-ru/strings.xml similarity index 100% rename from date_time/src/main/res/values-ru/strings.xml rename to date_time/src/commonMain/composeResources/values-ru/strings.xml diff --git a/date_time/src/main/res/values-sk/strings.xml b/date_time/src/commonMain/composeResources/values-sk/strings.xml similarity index 100% rename from date_time/src/main/res/values-sk/strings.xml rename to date_time/src/commonMain/composeResources/values-sk/strings.xml diff --git a/date_time/src/main/res/values-sl/strings.xml b/date_time/src/commonMain/composeResources/values-sl/strings.xml similarity index 100% rename from date_time/src/main/res/values-sl/strings.xml rename to date_time/src/commonMain/composeResources/values-sl/strings.xml diff --git a/date_time/src/main/res/values-sr/strings.xml b/date_time/src/commonMain/composeResources/values-sr/strings.xml similarity index 100% rename from date_time/src/main/res/values-sr/strings.xml rename to date_time/src/commonMain/composeResources/values-sr/strings.xml diff --git a/date_time/src/main/res/values-sv/strings.xml b/date_time/src/commonMain/composeResources/values-sv/strings.xml similarity index 100% rename from date_time/src/main/res/values-sv/strings.xml rename to date_time/src/commonMain/composeResources/values-sv/strings.xml diff --git a/date_time/src/main/res/values-th/strings.xml b/date_time/src/commonMain/composeResources/values-th/strings.xml similarity index 100% rename from date_time/src/main/res/values-th/strings.xml rename to date_time/src/commonMain/composeResources/values-th/strings.xml diff --git a/date_time/src/main/res/values-tr/strings.xml b/date_time/src/commonMain/composeResources/values-tr/strings.xml similarity index 100% rename from date_time/src/main/res/values-tr/strings.xml rename to date_time/src/commonMain/composeResources/values-tr/strings.xml diff --git a/date_time/src/main/res/values-uk/strings.xml b/date_time/src/commonMain/composeResources/values-uk/strings.xml similarity index 100% rename from date_time/src/main/res/values-uk/strings.xml rename to date_time/src/commonMain/composeResources/values-uk/strings.xml diff --git a/date_time/src/main/res/values-vi/strings.xml b/date_time/src/commonMain/composeResources/values-vi/strings.xml similarity index 100% rename from date_time/src/main/res/values-vi/strings.xml rename to date_time/src/commonMain/composeResources/values-vi/strings.xml diff --git a/date_time/src/main/res/values-zh-rCN/strings.xml b/date_time/src/commonMain/composeResources/values-zh-rCN/strings.xml similarity index 100% rename from date_time/src/main/res/values-zh-rCN/strings.xml rename to date_time/src/commonMain/composeResources/values-zh-rCN/strings.xml diff --git a/date_time/src/main/res/values-zh-rTW/strings.xml b/date_time/src/commonMain/composeResources/values-zh-rTW/strings.xml similarity index 100% rename from date_time/src/main/res/values-zh-rTW/strings.xml rename to date_time/src/commonMain/composeResources/values-zh-rTW/strings.xml diff --git a/date_time/src/main/res/values/strings.xml b/date_time/src/commonMain/composeResources/values/strings.xml similarity index 100% rename from date_time/src/main/res/values/strings.xml rename to date_time/src/commonMain/composeResources/values/strings.xml diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeDialog.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeDialog.kt similarity index 98% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeDialog.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeDialog.kt index 95e5180c..b97ce952 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeDialog.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeDialog.kt @@ -34,6 +34,7 @@ import com.maxkeppeler.sheets.date_time.models.DateTimeSelection * @param header The header to be displayed at the top of the dialog. * @param properties DialogProperties for further customization of this dialog's behavior. */ +@OptIn(ExperimentalMaterial3Api::class) @Composable fun DateTimeDialog( state: UseCaseState, diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimePopup.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimePopup.kt similarity index 100% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimePopup.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimePopup.kt diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeState.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeState.kt similarity index 97% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeState.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeState.kt index 1f20d90d..9b234ae2 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeState.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeState.kt @@ -24,9 +24,10 @@ import androidx.compose.runtime.setValue import com.maxkeppeker.sheets.core.views.BaseTypeState import com.maxkeppeler.sheets.date_time.models.* import com.maxkeppeler.sheets.date_time.utils.* -import java.io.Serializable -import java.time.LocalDate -import java.time.LocalTime +import com.maxkeppeker.sheets.core.utils.JvmSerializable +import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalTime +import kotlinx.datetime.atTime /** * Handles the date time state. @@ -128,7 +129,6 @@ internal class DateTimeState( private fun getDatePatternValue(): String? = selection.dateFormatStyle?.let { getLocalizedPattern( isDate = true, - locale = config.locale, formatStyle = it ) } @@ -136,7 +136,6 @@ internal class DateTimeState( private fun getTimePatternValue(): String? = selection.timeFormatStyle?.let { getLocalizedPattern( isDate = false, - locale = config.locale, formatStyle = it ) } @@ -200,7 +199,7 @@ internal class DateTimeState( val dateSelection: LocalDate?, val timeSelection: LocalTime?, val typeValues: MutableMap - ) : Serializable + ) : JvmSerializable } /** diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeView.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeView.kt similarity index 83% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeView.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeView.kt index 72e92800..d4aea444 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/DateTimeView.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/DateTimeView.kt @@ -26,7 +26,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import com.maxkeppeker.sheets.core.models.base.BaseBehaviors import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.models.base.StateHandler @@ -36,6 +35,12 @@ import com.maxkeppeker.sheets.core.views.base.FrameBase import com.maxkeppeler.sheets.date_time.models.DateTimeConfig import com.maxkeppeler.sheets.date_time.models.DateTimeSelection import com.maxkeppeler.sheets.date_time.views.PickerComponent +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.StringResource +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.date_time.generated.resources.Res +import sheets_compose_dialogs.date_time.generated.resources.sheets_compose_dialogs_set_date +import sheets_compose_dialogs.date_time.generated.resources.sheets_compose_dialogs_set_time /** * Date Time dialog for the use-case to select a date, time or both in a quick way. @@ -44,6 +49,7 @@ import com.maxkeppeler.sheets.date_time.views.PickerComponent * @param config The general configuration for the dialog view. * @param header The header to be displayed at the top of the dialog view. */ +@OptIn(ExperimentalResourceApi::class) @ExperimentalMaterial3Api @Composable fun DateTimeView( @@ -70,7 +76,7 @@ fun DateTimeView( LaunchedEffect(state.isDateValid) { processSelection() } LaunchedEffect(state.isDateValid) { processSelection() } - val skipButton: @Composable ColumnScope.(Int, Boolean) -> Unit = @Composable { labelRes, error -> + val skipButton: @Composable ColumnScope.(StringResource, Boolean) -> Unit = @Composable { labelRes, error -> Button( modifier = Modifier.align(Alignment.CenterHorizontally), onClick = state::skipSelection, @@ -112,18 +118,18 @@ fun DateTimeView( if (selection.startWithTime) { if (!state.firstSkipped) { timePicker() - skipButton(R.string.sheets_compose_dialogs_set_date, !state.isDateValid) + skipButton(Res.string.sheets_compose_dialogs_set_date, !state.isDateValid) } else { datePicker() - skipButton(R.string.sheets_compose_dialogs_set_time, !state.isTimeValid) + skipButton(Res.string.sheets_compose_dialogs_set_time, !state.isTimeValid) } } else { if (!state.firstSkipped) { datePicker() - skipButton(R.string.sheets_compose_dialogs_set_time, !state.isTimeValid) + skipButton(Res.string.sheets_compose_dialogs_set_time, !state.isTimeValid) } else { timePicker() - skipButton(R.string.sheets_compose_dialogs_set_date, !state.isDateValid) + skipButton(Res.string.sheets_compose_dialogs_set_date, !state.isDateValid) } } } diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/DateTimeConfig.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/DateTimeConfig.kt similarity index 95% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/DateTimeConfig.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/DateTimeConfig.kt index 52be7999..4fa37206 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/DateTimeConfig.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/DateTimeConfig.kt @@ -19,7 +19,6 @@ import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE import com.maxkeppeler.sheets.date_time.utils.Constants -import java.util.* /** * The general configuration for the date time dialog. @@ -31,7 +30,6 @@ import java.util.* * @param icons The style of icons that are used for dialog/ view-specific icons. */ class DateTimeConfig( - val locale: Locale = Locale.getDefault(), val hideDateCharacters: Boolean = false, val hideTimeCharacters: Boolean = false, val minYear: Int = Constants.DEFAULT_MIN_YEAR, diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/DateTimeSelection.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/DateTimeSelection.kt similarity index 96% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/DateTimeSelection.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/DateTimeSelection.kt index 3375cabe..d9715375 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/DateTimeSelection.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/DateTimeSelection.kt @@ -18,10 +18,11 @@ package com.maxkeppeler.sheets.date_time.models import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants -import java.time.LocalDate -import java.time.LocalDateTime -import java.time.LocalTime -import java.time.format.FormatStyle +import com.maxkeppeler.sheets.date_time.utils.FormatStyle +import kotlinx.datetime.LocalDate +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.LocalTime +import kotlinx.datetime.format.DateTimeFormat /** * The selection configuration for the date time dialog. diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/UnitOptionEntry.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/UnitOptionEntry.kt similarity index 76% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/UnitOptionEntry.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/UnitOptionEntry.kt index d6900154..b30a8313 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/UnitOptionEntry.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/UnitOptionEntry.kt @@ -15,8 +15,9 @@ */ package com.maxkeppeler.sheets.date_time.models -import androidx.annotation.StringRes -import java.io.Serializable +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.StringResource +import com.maxkeppeker.sheets.core.utils.JvmSerializable /** * A class that acts as a value item that can be selected for a unit. @@ -24,8 +25,9 @@ import java.io.Serializable * @param label The textual representation of the value. * @param labelRes The textual representation of the value by resource. */ -data class UnitOptionEntry( +@OptIn(ExperimentalResourceApi::class) +data class UnitOptionEntry constructor( val value: Int, val label: String? = null, - @StringRes val labelRes: Int? = null -) : Serializable + val labelRes: StringResource? = null +) : JvmSerializable diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/UnitSelection.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/UnitSelection.kt similarity index 77% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/UnitSelection.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/UnitSelection.kt index 89227ff4..f098dbe2 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/models/UnitSelection.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/models/UnitSelection.kt @@ -15,8 +15,13 @@ */ package com.maxkeppeler.sheets.date_time.models -import androidx.annotation.StringRes -import com.maxkeppeler.sheets.date_time.R +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.StringResource +import sheets_compose_dialogs.date_time.generated.resources.* +import sheets_compose_dialogs.date_time.generated.resources.Res +import sheets_compose_dialogs.date_time.generated.resources.sheets_compose_dialogs_date_time_hour +import sheets_compose_dialogs.date_time.generated.resources.sheets_compose_dialogs_date_time_minutes +import sheets_compose_dialogs.date_time.generated.resources.sheets_compose_dialogs_date_time_seconds enum class UnitType(val isDate: Boolean) { DAY(true), @@ -34,8 +39,9 @@ enum class UnitType(val isDate: Boolean) { * @param options The list of of options that can be selected. * @param value The current selected value. */ +@OptIn(ExperimentalResourceApi::class) internal sealed class UnitSelection( - @StringRes open val placeholderRes: Int? = null, + open val placeholderRes: StringResource? = null, open val options: List = listOf(), open val value: UnitOptionEntry? = null, open val type: UnitType? = null @@ -60,7 +66,7 @@ internal sealed class UnitSelection( override val value: UnitOptionEntry? = null, override val options: List, ) : UnitSelection( - placeholderRes = R.string.sheets_compose_dialogs_date_time_hour, + placeholderRes = Res.string.sheets_compose_dialogs_date_time_hour, type = UnitType.HOUR ) @@ -73,7 +79,7 @@ internal sealed class UnitSelection( override val value: UnitOptionEntry? = null, override val options: List, ) : UnitSelection( - placeholderRes = R.string.sheets_compose_dialogs_date_time_minutes, + placeholderRes = Res.string.sheets_compose_dialogs_date_time_minutes, type = UnitType.MINUTE ) @@ -86,7 +92,7 @@ internal sealed class UnitSelection( override val value: UnitOptionEntry? = null, override val options: List, ) : UnitSelection( - placeholderRes = R.string.sheets_compose_dialogs_date_time_seconds, + placeholderRes = Res.string.sheets_compose_dialogs_date_time_seconds, type = UnitType.SECOND ) @@ -99,7 +105,7 @@ internal sealed class UnitSelection( override val value: UnitOptionEntry? = null, override val options: List ) : UnitSelection( - placeholderRes = R.string.sheets_compose_dialogs_date_time_day, + placeholderRes = Res.string.sheets_compose_dialogs_date_time_day, type = UnitType.DAY ) @@ -112,7 +118,7 @@ internal sealed class UnitSelection( override val value: UnitOptionEntry? = null, override val options: List, ) : UnitSelection( - placeholderRes = R.string.sheets_compose_dialogs_date_time_month, + placeholderRes = Res.string.sheets_compose_dialogs_date_time_month, type = UnitType.MONTH ) @@ -125,7 +131,7 @@ internal sealed class UnitSelection( override val value: UnitOptionEntry? = null, override val options: List ) : UnitSelection( - placeholderRes = R.string.sheets_compose_dialogs_date_time_year, + placeholderRes = Res.string.sheets_compose_dialogs_date_time_year, type = UnitType.YEAR ) } \ No newline at end of file diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/utils/Constants.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Constants.kt similarity index 97% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/utils/Constants.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Constants.kt index 99e7f906..d461e2c6 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/utils/Constants.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Constants.kt @@ -15,7 +15,8 @@ */ package com.maxkeppeler.sheets.date_time.utils -import java.time.LocalDate +import kotlinx.datetime.LocalDate + /** * Date Time dialog specific constants. diff --git a/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/ExtendDateTime.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/ExtendDateTime.kt new file mode 100644 index 00000000..83e5d0d5 --- /dev/null +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/ExtendDateTime.kt @@ -0,0 +1,57 @@ +package com.maxkeppeler.sheets.date_time.utils + +import kotlinx.datetime.* + +internal fun LocalDate.Companion.now(): LocalDate { + return Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date +} + +/** + * Extension function that gets the maximum days of month + * + * @return [Int] of days in month + */ +internal fun Month.length(leapYear: Boolean): Int = when (this) { + Month.JANUARY -> 31 + Month.FEBRUARY -> { + if (leapYear) { + 29 + } else { + 28 + } + } + Month.MARCH -> 31 + Month.APRIL -> 30 + Month.MAY -> 31 + Month.JUNE -> 30 + Month.JULY -> 31 + Month.AUGUST -> 31 + Month.SEPTEMBER -> 30 + Month.OCTOBER -> 31 + Month.NOVEMBER -> 30 + Month.DECEMBER -> 31 + else -> 30 +} + +/** + * Extension function that gets the maximum days of month + * + * @return [Int] of days in month + */ +internal val LocalDate.lengthOfMonth: Int + get() = month.length(isLeapYear) + +/** + * Extension function that checks if year is a leap year. + * + * Example: 2016, 2020, 2024, etc + * + * @return [Boolean] whether year is a leap year + */ +internal val LocalDate.isLeapYear: Boolean + get() { + var isLeapYear = year % 4 == 0 + isLeapYear = isLeapYear && (year % 100 != 0 || year % 400 == 0) + + return isLeapYear + } \ No newline at end of file diff --git a/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/FormatStyle.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/FormatStyle.kt new file mode 100644 index 00000000..71f29663 --- /dev/null +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/FormatStyle.kt @@ -0,0 +1,34 @@ +package com.maxkeppeler.sheets.date_time.utils + + +/** + * Enumeration of the style of a localized date, time or date-time formatter. + * + * These styles are used when obtaining a date-time style from configuration. + */ +enum class FormatStyle { + // ordered from large to small + /** + * Full text style, with the most detail. + * For example, the format might be 'Tuesday, April 12, 1952 AD' or '3:30:42pm PST'. + */ + FULL, + + /** + * Long text style, with lots of detail. + * For example, the format might be 'January 12, 1952'. + */ + LONG, + + /** + * Medium text style, with some detail. + * For example, the format might be 'Jan 12, 1952'. + */ + MEDIUM, + + /** + * Short text style, typically numeric. + * For example, the format might be '12.13.52' or '3:30pm'. + */ + SHORT +} diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/utils/Utils.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.kt similarity index 82% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/utils/Utils.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.kt index f4dad48c..2c530e6e 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/utils/Utils.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.kt @@ -15,19 +15,17 @@ */ package com.maxkeppeler.sheets.date_time.utils -import com.maxkeppeler.sheets.date_time.R import com.maxkeppeler.sheets.date_time.models.DateTimeConfig import com.maxkeppeler.sheets.date_time.models.UnitOptionEntry import com.maxkeppeler.sheets.date_time.models.UnitSelection import com.maxkeppeler.sheets.date_time.models.UnitType -import java.time.LocalDate -import java.time.LocalTime -import java.time.Month -import java.time.chrono.Chronology -import java.time.format.DateTimeFormatter -import java.time.format.DateTimeFormatterBuilder -import java.time.format.FormatStyle -import java.util.* +import kotlinx.datetime.* +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern +import org.jetbrains.compose.resources.ExperimentalResourceApi +import sheets_compose_dialogs.date_time.generated.resources.Res +import sheets_compose_dialogs.date_time.generated.resources.sheets_compose_dialogs_date_time_am +import sheets_compose_dialogs.date_time.generated.resources.sheets_compose_dialogs_date_time_pm internal fun getMapOptions( datePattern: String?, @@ -50,10 +48,10 @@ internal fun detectUnit( ): UnitSelection? { val now = LocalDate.now() val month = unitValues[UnitType.MONTH] - val date = LocalDate.of( - /* year = */ unitValues[UnitType.YEAR]?.value ?: now.year, - /* month = */ month?.value ?: now.monthValue, - /* dayOfMonth = */ 1 + val date = LocalDate( + year = unitValues[UnitType.YEAR]?.value ?: now.year, + monthNumber = month?.value ?: now.monthNumber, + dayOfMonth = 1 ) return when { segment.contains(Constants.SYMBOL_SECONDS) -> @@ -121,7 +119,7 @@ internal fun getInitTypeValues( } val year = dateSelection?.let { date -> options[UnitType.YEAR]?.let { it.firstOrNull { it.value == date.year } } } - val month = dateSelection?.let { options[UnitType.MONTH]?.getOrNull(it.monthValue.minus(1)) } + val month = dateSelection?.let { options[UnitType.MONTH]?.getOrNull(it.monthNumber.minus(1)) } val day = dateSelection?.let { options[UnitType.DAY]?.getOrNull(it.dayOfMonth.minus(1)) } return mutableMapOf( @@ -153,10 +151,10 @@ internal fun getLocalTimeOf( if (actualHourValue == 24) actualHourValue = 0 } - LocalTime.of( - actualHourValue, - minValue, - secValue + LocalTime( + hour = actualHourValue, + minute = minValue, + second = secValue ) }.getOrNull() @@ -164,21 +162,17 @@ internal fun getLocalTimeOf( internal fun getLocalDateOf( values: List, ) = runCatching { - LocalDate.of( + LocalDate( values[2]!!.value, values[1]!!.value, values[0]!!.value ) }.getOrNull() -internal fun getLocalizedPattern( +internal expect fun getLocalizedPattern( isDate: Boolean, - formatStyle: FormatStyle, - locale: Locale -): String = DateTimeFormatterBuilder.getLocalizedDateTimePattern( - if (isDate) formatStyle else null, - if (!isDate) formatStyle else null, Chronology.ofLocale(locale), locale -).toString() + formatStyle: FormatStyle +): String internal fun getLocalizedValues( config: DateTimeConfig, @@ -211,9 +205,10 @@ private fun containsAmPm(pattern: String?): Boolean = internal fun containsSeconds(pattern: String): Boolean = pattern.contains(Constants.SYMBOL_SECONDS) +@OptIn(ExperimentalResourceApi::class) internal fun getAmPmOptions() = listOf( - UnitOptionEntry(value = 0, labelRes = R.string.sheets_compose_dialogs_date_time_am), - UnitOptionEntry(value = 1, labelRes = R.string.sheets_compose_dialogs_date_time_pm), + UnitOptionEntry(value = 0, labelRes = Res.string.sheets_compose_dialogs_date_time_am), + UnitOptionEntry(value = 1, labelRes = Res.string.sheets_compose_dialogs_date_time_pm), ) internal fun getMinutesSecondsOptions(): List { @@ -243,7 +238,7 @@ internal fun getHoursOptions(pattern: String): List = } internal fun getDayOptions(date: LocalDate, month: UnitOptionEntry?): List { - val daysInMonth = date.lengthOfMonth() + val daysInMonth = date.lengthOfMonth return (1..(if (month?.value != null) 31 else daysInMonth)).map { UnitOptionEntry( it, @@ -252,19 +247,28 @@ internal fun getDayOptions(date: LocalDate, month: UnitOptionEntry?): List { val actualMonthPattern = pattern.filter { it == 'M' } val occurrences = actualMonthPattern.count { it == 'M' } return when { occurrences >= 3 -> { - Month.values().map { month -> + Month.entries.map { month -> + val currentDate = LocalDate.now() + val localDate = LocalDate( + year = currentDate.year, + monthNumber = month.number, + dayOfMonth = currentDate.dayOfMonth + ) UnitOptionEntry( - month.value, LocalDate.now().withMonth(month.value) - .format(DateTimeFormatter.ofPattern(actualMonthPattern)) + month.number, + localDate.format(LocalDate.Format { + byUnicodePattern(actualMonthPattern) + }) ) } } - else -> Month.values().map { it.value }.map { + else -> Month.entries.map { it.number }.map { UnitOptionEntry(it, it.toString()) }.toList() } diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt similarity index 96% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt index 81a434da..4f6d042f 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/PickerComponent.kt @@ -25,8 +25,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.onGloballyPositioned -import androidx.compose.ui.res.dimensionResource -import com.maxkeppeler.sheets.core.R +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.date_time.models.DateTimeConfig import com.maxkeppeler.sheets.date_time.models.UnitOptionEntry import com.maxkeppeler.sheets.date_time.models.UnitSelection @@ -80,7 +79,7 @@ internal fun PickerComponent( Text( modifier = Modifier .clip(MaterialTheme.shapes.extraSmall) - .padding(horizontal = dimensionResource(R.dimen.scd_small_75)) + .padding(horizontal = 6.dp) .padding(top = 24.dp), text = ":" ) diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt similarity index 93% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt index 7f48978f..17d909f3 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/PickerDateCharacterComponent.kt @@ -21,8 +21,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource -import com.maxkeppeler.sheets.core.R as RC +import androidx.compose.ui.unit.dp /** * A component that displays a character of the date pattern. diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt similarity index 89% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt index b55b1357..e83d4472 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@file:OptIn(ExperimentalSnapperApi::class, ExperimentalSnapperApi::class) - package com.maxkeppeler.sheets.date_time.views import androidx.compose.animation.core.animateIntAsState +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -39,9 +39,6 @@ import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.date_time.models.UnitOptionEntry import com.maxkeppeler.sheets.date_time.models.UnitSelection -import dev.chrisbanes.snapper.ExperimentalSnapperApi -import dev.chrisbanes.snapper.SnapOffsets -import dev.chrisbanes.snapper.rememberSnapperFlingBehavior /** * The container of a selection. @@ -52,6 +49,7 @@ import dev.chrisbanes.snapper.rememberSnapperFlingBehavior * @param onValueChange The listener that returns the selected unit option item. * @param heightOffsetTopPadding The height offset that is applied to the top of this component. */ +@OptIn(ExperimentalFoundationApi::class) @Composable internal fun SelectionContainerComponent( unit: UnitSelection, @@ -74,19 +72,13 @@ internal fun SelectionContainerComponent( val listState = rememberLazyListState(getCurrentIndex()) val contentPadding = PaddingValues(0.dp, itemHeightDp) - val behavior = rememberSnapperFlingBehavior( - lazyListState = listState, - snapOffsetForItem = SnapOffsets.Center, - ) LaunchedEffect(height.value, unit, options) { listState.scrollToItem(getCurrentIndex()) - // Issue: https://github.com/chrisbanes/snapper/issues/32 - listState.scroll { scrollBy(20f) } } LazyColumn( state = listState, - flingBehavior = behavior, + flingBehavior = rememberSnapFlingBehavior(listState), contentPadding = contentPadding, modifier = Modifier .testTags(TestTags.DATE_TIME_VALUE_CONTAINER_SELECTION, unit::class.simpleName!!) @@ -111,7 +103,7 @@ internal fun SelectionContainerComponent( item { SelectionValueItem( modifier = Modifier - .testTags(TestTags.DATE_TIME_VALUE_SELECTION, unit.javaClass.simpleName, option.value) + .testTags(TestTags.DATE_TIME_VALUE_SELECTION, unit::class.simpleName ?: unit::class.qualifiedName ?: "UnitSelection", option.value) .widthIn(min = LocalDensity.current.run { animatedWidth.value.toDp() }) .onGloballyPositioned { coordinates -> if (itemHeight.value < coordinates.size.height) { diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt similarity index 87% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt index 85c859eb..3809354d 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionValueItem.kt @@ -22,11 +22,11 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.date_time.models.UnitOptionEntry -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource /** * The value item component that can be selected. @@ -34,6 +34,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param option The option that the current component reflect. * @param onValueChange The listener that returns the new selection. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun SelectionValueItem( modifier: Modifier = Modifier, @@ -47,7 +48,7 @@ internal fun SelectionValueItem( .clickable { option?.let { onValueChange.invoke(it) } } .padding(vertical = 8.dp) .padding(horizontal = 8.dp), - text = option?.labelRes?.let { stringResource(id = it) } ?: option?.label ?: "", + text = option?.labelRes?.let { stringResource(it) } ?: option?.label ?: "", textAlign = TextAlign.Center, style = MaterialTheme.typography.bodyLarge ) diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt similarity index 96% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt index 9f91cdf1..52c7f445 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/UnitContainerComponent.kt @@ -21,11 +21,10 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.date_time.models.DateTimeConfig import com.maxkeppeler.sheets.date_time.models.UnitOptionEntry import com.maxkeppeler.sheets.date_time.models.UnitSelection -import com.maxkeppeler.sheets.core.R as RC /** diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitLabel.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/UnitLabel.kt similarity index 84% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitLabel.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/UnitLabel.kt index 54522b46..65e278b7 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/UnitLabel.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/UnitLabel.kt @@ -20,21 +20,21 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.date_time.models.UnitSelection -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource /** * The label that is displayed above the value unit. * @param unit The value unit */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun UnitLabel(unit: UnitSelection) { Text( modifier = Modifier.padding(bottom = 12.dp), - text = unit.placeholderRes?.let { stringResource(id = it) } ?: "", + text = unit.placeholderRes?.let { stringResource(it) } ?: "", style = MaterialTheme.typography.labelMedium ) } \ No newline at end of file diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt similarity index 87% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt index 2a8dea8d..3032cf46 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt @@ -25,12 +25,12 @@ import androidx.compose.runtime.MutableState import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.onGloballyPositioned -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.date_time.models.UnitSelection -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource /** * The value component that is displayed if a selection was made. @@ -38,6 +38,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param width The width of the component. * @param onClick The listener that is invoked if this component was selected. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun ValueComponent( unit: UnitSelection, @@ -46,7 +47,7 @@ internal fun ValueComponent( ) { Text( modifier = Modifier - .testTags(TestTags.DATE_TIME_VALUE_SELECTION, if(unit is UnitSelection.Hour) "Hour" else unit.javaClass.simpleName) + .testTags(TestTags.DATE_TIME_VALUE_SELECTION, if(unit is UnitSelection.Hour) "Hour" else unit::class.simpleName ?: unit::class.qualifiedName ?: "UnitSelection") .onGloballyPositioned { coordinates -> if (width.value < coordinates.size.width) { width.value = coordinates.size.width @@ -60,9 +61,9 @@ internal fun ValueComponent( .clickable { onClick() } .padding(16.dp), text = unit.value?.label - ?: unit.value?.labelRes?.let { stringResource(id = it) } + ?: unit.value?.labelRes?.let { stringResource(it) } ?: unit.options.last().label?.map { " " }?.joinToString(separator = "") - ?: unit.options.last().labelRes?.let { stringResource(id = it) } + ?: unit.options.last().labelRes?.let { stringResource(it) } ?.map { " " }?.joinToString(separator = "")!!, style = MaterialTheme.typography.bodyLarge ) diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt similarity index 96% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt index f5a00560..17e32170 100644 --- a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueContainerComponent.kt @@ -22,10 +22,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.unit.dp import com.maxkeppeler.sheets.date_time.models.DateTimeConfig import com.maxkeppeler.sheets.date_time.models.UnitSelection -import com.maxkeppeler.sheets.core.R as RC /** * The container view that builds up the value view. It consists of the label and the value. diff --git a/date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueEmptyOverlayComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueEmptyOverlayComponent.kt similarity index 100% rename from date_time/src/main/java/com/maxkeppeler/sheets/date_time/views/ValueEmptyOverlayComponent.kt rename to date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueEmptyOverlayComponent.kt diff --git a/date_time/src/jsMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.js.kt b/date_time/src/jsMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.js.kt new file mode 100644 index 00000000..91132967 --- /dev/null +++ b/date_time/src/jsMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.js.kt @@ -0,0 +1,22 @@ +package com.maxkeppeler.sheets.date_time.utils + +internal actual fun getLocalizedPattern( + isDate: Boolean, + formatStyle: FormatStyle +): String { + return if (isDate) { + when (formatStyle) { + FormatStyle.FULL -> "EEEE, MMMM d, yyyy G" + FormatStyle.LONG -> "MMMM d, yyyy" + FormatStyle.MEDIUM -> "MMM d, yyyy" + FormatStyle.SHORT -> "dd.MM.yyyy" + } + } else { + when (formatStyle) { + FormatStyle.FULL -> "HH:mm:ss zzz" + FormatStyle.LONG -> "HH:mm:ss" + FormatStyle.MEDIUM -> "H:mm:ss" + FormatStyle.SHORT -> "H:m:s" + } + } +} \ No newline at end of file diff --git a/date_time/src/jvmMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.jvm.kt b/date_time/src/jvmMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.jvm.kt new file mode 100644 index 00000000..20ff2415 --- /dev/null +++ b/date_time/src/jvmMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.jvm.kt @@ -0,0 +1,25 @@ +package com.maxkeppeler.sheets.date_time.utils + +import java.time.chrono.Chronology +import java.time.format.DateTimeFormatterBuilder +import java.util.Locale + +internal fun FormatStyle.toJava(): java.time.format.FormatStyle { + return when (this) { + FormatStyle.FULL -> java.time.format.FormatStyle.FULL + FormatStyle.LONG -> java.time.format.FormatStyle.LONG + FormatStyle.MEDIUM -> java.time.format.FormatStyle.MEDIUM + FormatStyle.SHORT -> java.time.format.FormatStyle.SHORT + } +} + +internal actual fun getLocalizedPattern( + isDate: Boolean, + formatStyle: FormatStyle +): String { + val locale = Locale.getDefault() + return DateTimeFormatterBuilder.getLocalizedDateTimePattern( + if (isDate) formatStyle.toJava() else null, + if (!isDate) formatStyle.toJava() else null, Chronology.ofLocale(locale), locale + ).toString() +} \ No newline at end of file diff --git a/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiState.kt b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiState.kt index 75505a27..af6ed527 100644 --- a/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiState.kt +++ b/emoji/src/commonMain/kotlin/com/maxkeppeler/sheets/emoji/EmojiState.kt @@ -27,7 +27,7 @@ import com.maxkeppeler.sheets.emoji.models.EmojiSelection import com.vanniktech.emoji.Emoji import com.vanniktech.emoji.EmojiCategory import com.vanniktech.emoji.google.GoogleEmojiProvider -import java.io.Serializable +import com.maxkeppeker.sheets.core.utils.JvmSerializable /** * Handles the emoji state. @@ -109,7 +109,7 @@ internal class EmojiState( */ data class EmojiStateData( val selectedEmoji: Emoji? - ) : Serializable + ) : JvmSerializable } /** diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e4d928d4..a47afb02 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] android = "8.2.2" compose = "1.6.2" -datetime = "0.5.0" +datetime = "0.6.0-RC.2" desugar = "2.0.4" emoji = "0.18.0" kotlin = "1.9.23" diff --git a/settings.gradle.kts b/settings.gradle.kts index 0c006db8..8f9cecf1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,7 +16,7 @@ include( ":calendar", //":duration", //":clock", - //":date_time", + ":date_time", ":color", ":option", ":state", From dcc5d95166367625eacec53b399288fd3543f076 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 11 Apr 2024 22:27:27 +0200 Subject: [PATCH 31/58] migrate date_time module --- date_time/build.gradle.kts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/date_time/build.gradle.kts b/date_time/build.gradle.kts index f187d9c9..96c8de72 100644 --- a/date_time/build.gradle.kts +++ b/date_time/build.gradle.kts @@ -25,7 +25,7 @@ plugins { } android { - namespace = Modules.CALENDAR.namespace + namespace = Modules.DATE_TIME.namespace compileSdk = 34 defaultConfig { @@ -70,13 +70,6 @@ kotlin { api(project(":core")) } - - val nonJvmMain by creating { - dependsOn(commonMain.get()) - - nativeMain.orNull?.dependsOn(this) - jsMain.orNull?.dependsOn(this) - } } } From 7b2940aac3bb1c5dd5ccb3b559eaf8ae1b4e1b7e Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 11 Apr 2024 22:46:00 +0200 Subject: [PATCH 32/58] migrate date_time module --- .../sheets/date_time/views/SelectionContainerComponent.kt | 2 -- .../com/maxkeppeler/sheets/date_time/views/ValueComponent.kt | 1 - 2 files changed, 3 deletions(-) diff --git a/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt index e83d4472..3d96d4d4 100644 --- a/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/SelectionContainerComponent.kt @@ -81,7 +81,6 @@ internal fun SelectionContainerComponent( flingBehavior = rememberSnapFlingBehavior(listState), contentPadding = contentPadding, modifier = Modifier - .testTags(TestTags.DATE_TIME_VALUE_CONTAINER_SELECTION, unit::class.simpleName!!) .height(LocalDensity.current.run { height.value.toDp() }) .padding(top = heightOffsetTopPadding) .graphicsLayer { alpha = 0.99F } @@ -103,7 +102,6 @@ internal fun SelectionContainerComponent( item { SelectionValueItem( modifier = Modifier - .testTags(TestTags.DATE_TIME_VALUE_SELECTION, unit::class.simpleName ?: unit::class.qualifiedName ?: "UnitSelection", option.value) .widthIn(min = LocalDensity.current.run { animatedWidth.value.toDp() }) .onGloballyPositioned { coordinates -> if (itemHeight.value < coordinates.size.height) { diff --git a/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt index 3032cf46..666274bd 100644 --- a/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt +++ b/date_time/src/commonMain/kotlin/com/maxkeppeler/sheets/date_time/views/ValueComponent.kt @@ -47,7 +47,6 @@ internal fun ValueComponent( ) { Text( modifier = Modifier - .testTags(TestTags.DATE_TIME_VALUE_SELECTION, if(unit is UnitSelection.Hour) "Hour" else unit::class.simpleName ?: unit::class.qualifiedName ?: "UnitSelection") .onGloballyPositioned { coordinates -> if (width.value < coordinates.size.width) { width.value = coordinates.size.width From 0d1f94ed76fcedb3f31b0e85f7cd17ed880a56d6 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 12 Apr 2024 13:52:18 +0200 Subject: [PATCH 33/58] migrate duration module --- .../sheets/clock/views/TimeValueComponent.kt | 4 +- duration/build.gradle.kts | 72 ++++++++++++++----- .../composeResources}/values-bg/strings.xml | 0 .../composeResources}/values-cs/strings.xml | 0 .../composeResources}/values-da/strings.xml | 0 .../values-de-rDE/strings.xml | 0 .../composeResources}/values-de/strings.xml | 0 .../composeResources}/values-el/strings.xml | 0 .../composeResources}/values-eo/strings.xml | 0 .../composeResources/values-es/strings.xml | 14 ++++ .../composeResources}/values-et/strings.xml | 0 .../composeResources}/values-fa/strings.xml | 0 .../composeResources}/values-fi/strings.xml | 0 .../composeResources}/values-fr/strings.xml | 0 .../composeResources}/values-ga/strings.xml | 0 .../composeResources}/values-gd/strings.xml | 0 .../composeResources}/values-hi/strings.xml | 0 .../composeResources}/values-hr/strings.xml | 0 .../composeResources}/values-hu/strings.xml | 0 .../values-in-rID/strings.xml | 0 .../composeResources}/values-is/strings.xml | 0 .../composeResources}/values-it/strings.xml | 0 .../composeResources}/values-iw/strings.xml | 0 .../composeResources}/values-ja/strings.xml | 0 .../composeResources}/values-jv/strings.xml | 0 .../composeResources}/values-kk/strings.xml | 0 .../composeResources}/values-ko/strings.xml | 0 .../composeResources}/values-ku/strings.xml | 0 .../composeResources}/values-lb/strings.xml | 0 .../composeResources}/values-lo/strings.xml | 0 .../composeResources}/values-lt/strings.xml | 0 .../composeResources}/values-lv/strings.xml | 0 .../composeResources}/values-ms/strings.xml | 0 .../composeResources}/values-ne/strings.xml | 0 .../composeResources}/values-nl/strings.xml | 0 .../composeResources}/values-no/strings.xml | 0 .../composeResources}/values-pl/strings.xml | 0 .../composeResources}/values-pt/strings.xml | 0 .../composeResources}/values-ru/strings.xml | 0 .../composeResources}/values-sk/strings.xml | 0 .../composeResources}/values-sl/strings.xml | 0 .../composeResources}/values-sr/strings.xml | 0 .../composeResources}/values-sv/strings.xml | 0 .../composeResources}/values-th/strings.xml | 0 .../composeResources}/values-tr/strings.xml | 0 .../composeResources}/values-uk/strings.xml | 0 .../composeResources}/values-vi/strings.xml | 0 .../values-zh-rCN/strings.xml | 0 .../values-zh-rTW/strings.xml | 0 .../composeResources}/values/strings.xml | 0 .../sheets/duration/DurationDialog.kt | 0 .../sheets/duration/DurationPopup.kt | 0 .../sheets/duration/DurationState.kt | 8 +-- .../sheets/duration/DurationView.kt | 0 .../sheets/duration/models/DurationConfig.kt | 7 +- .../sheets/duration/models/DurationFormat.kt | 0 .../duration/models/DurationSelection.kt | 0 .../sheets/duration/utils/Constants.kt | 0 .../sheets/duration/utils/Utils.kt | 52 ++++++++------ .../sheets/duration/views/KeyItemComponent.kt | 15 ++-- .../duration/views/KeyboardComponent.kt | 0 .../duration/views/TimeDisplayComponent.kt | 0 .../duration/views/TimeHintComponent.kt | 14 ++-- .../duration/views/TimeValueComponent.kt | 8 +-- duration/src/main/res/values-es/strings.xml | 14 ---- settings.gradle.kts | 2 +- 66 files changed, 130 insertions(+), 80 deletions(-) rename duration/src/{main/res => commonMain/composeResources}/values-bg/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-cs/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-da/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-de-rDE/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-de/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-el/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-eo/strings.xml (100%) create mode 100644 duration/src/commonMain/composeResources/values-es/strings.xml rename duration/src/{main/res => commonMain/composeResources}/values-et/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-fa/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-fi/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-fr/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-ga/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-gd/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-hi/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-hr/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-hu/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-in-rID/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-is/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-it/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-iw/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-ja/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-jv/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-kk/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-ko/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-ku/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-lb/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-lo/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-lt/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-lv/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-ms/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-ne/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-nl/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-no/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-pl/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-pt/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-ru/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-sk/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-sl/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-sr/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-sv/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-th/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-tr/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-uk/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-vi/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-zh-rCN/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values-zh-rTW/strings.xml (100%) rename duration/src/{main/res => commonMain/composeResources}/values/strings.xml (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/DurationDialog.kt (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/DurationPopup.kt (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/DurationState.kt (97%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/DurationView.kt (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/models/DurationConfig.kt (88%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/models/DurationFormat.kt (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/models/DurationSelection.kt (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/utils/Constants.kt (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/utils/Utils.kt (76%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt (90%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/views/KeyboardComponent.kt (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/views/TimeDisplayComponent.kt (100%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/views/TimeHintComponent.kt (72%) rename duration/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt (96%) delete mode 100644 duration/src/main/res/values-es/strings.xml diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt index ee28c8b4..b1aff4d4 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt +++ b/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt @@ -77,7 +77,7 @@ internal fun PortraitTimeValueComponent( .clip(MaterialTheme.shapes.medium) .background(if (currentGroupIndex == groupIndex) MaterialTheme.colorScheme.secondaryContainer else Color.Transparent) .clickable { onGroupClick.invoke(currentGroupIndex) } - .padding(horizontal = dimensionResource(RC.dimen.scd_small_75)), + .padding(horizontal = 6.dp), text = buildAnnotatedString { val values = value.toString().toCharArray() val selectedStyle = SpanStyle( @@ -174,7 +174,7 @@ internal fun LandscapeTimeValueComponent( .clip(MaterialTheme.shapes.medium) .background(if (currentGroupIndex == groupIndex) MaterialTheme.colorScheme.secondaryContainer else Color.Transparent) .clickable { onGroupClick.invoke(currentGroupIndex) } - .padding(horizontal = dimensionResource(RC.dimen.scd_small_75)), + .padding(horizontal = 6.dp), text = buildAnnotatedString { val values = value.toString().toCharArray() val selectedStyle = SpanStyle( diff --git a/duration/build.gradle.kts b/duration/build.gradle.kts index 70e62ac3..18053dad 100644 --- a/duration/build.gradle.kts +++ b/duration/build.gradle.kts @@ -1,27 +1,61 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +import com.vanniktech.maven.publish.SonatypeHost + plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) + alias(libs.plugins.publish) + `maven-publish` } android { namespace = Modules.DURATION.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + androidTarget { + publishAllLibraryVariants() + } + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.components.resources) + + implementation(libs.serialization) + + api(project(":core")) + } + } } mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) +} diff --git a/duration/src/main/res/values-bg/strings.xml b/duration/src/commonMain/composeResources/values-bg/strings.xml similarity index 100% rename from duration/src/main/res/values-bg/strings.xml rename to duration/src/commonMain/composeResources/values-bg/strings.xml diff --git a/duration/src/main/res/values-cs/strings.xml b/duration/src/commonMain/composeResources/values-cs/strings.xml similarity index 100% rename from duration/src/main/res/values-cs/strings.xml rename to duration/src/commonMain/composeResources/values-cs/strings.xml diff --git a/duration/src/main/res/values-da/strings.xml b/duration/src/commonMain/composeResources/values-da/strings.xml similarity index 100% rename from duration/src/main/res/values-da/strings.xml rename to duration/src/commonMain/composeResources/values-da/strings.xml diff --git a/duration/src/main/res/values-de-rDE/strings.xml b/duration/src/commonMain/composeResources/values-de-rDE/strings.xml similarity index 100% rename from duration/src/main/res/values-de-rDE/strings.xml rename to duration/src/commonMain/composeResources/values-de-rDE/strings.xml diff --git a/duration/src/main/res/values-de/strings.xml b/duration/src/commonMain/composeResources/values-de/strings.xml similarity index 100% rename from duration/src/main/res/values-de/strings.xml rename to duration/src/commonMain/composeResources/values-de/strings.xml diff --git a/duration/src/main/res/values-el/strings.xml b/duration/src/commonMain/composeResources/values-el/strings.xml similarity index 100% rename from duration/src/main/res/values-el/strings.xml rename to duration/src/commonMain/composeResources/values-el/strings.xml diff --git a/duration/src/main/res/values-eo/strings.xml b/duration/src/commonMain/composeResources/values-eo/strings.xml similarity index 100% rename from duration/src/main/res/values-eo/strings.xml rename to duration/src/commonMain/composeResources/values-eo/strings.xml diff --git a/duration/src/commonMain/composeResources/values-es/strings.xml b/duration/src/commonMain/composeResources/values-es/strings.xml new file mode 100644 index 00000000..46afed38 --- /dev/null +++ b/duration/src/commonMain/composeResources/values-es/strings.xml @@ -0,0 +1,14 @@ + + + Mínimo + Máximo + h + m + s + Horas + Minutos + Segundos + Eliminar última entrada + Borrar entrada + + \ No newline at end of file diff --git a/duration/src/main/res/values-et/strings.xml b/duration/src/commonMain/composeResources/values-et/strings.xml similarity index 100% rename from duration/src/main/res/values-et/strings.xml rename to duration/src/commonMain/composeResources/values-et/strings.xml diff --git a/duration/src/main/res/values-fa/strings.xml b/duration/src/commonMain/composeResources/values-fa/strings.xml similarity index 100% rename from duration/src/main/res/values-fa/strings.xml rename to duration/src/commonMain/composeResources/values-fa/strings.xml diff --git a/duration/src/main/res/values-fi/strings.xml b/duration/src/commonMain/composeResources/values-fi/strings.xml similarity index 100% rename from duration/src/main/res/values-fi/strings.xml rename to duration/src/commonMain/composeResources/values-fi/strings.xml diff --git a/duration/src/main/res/values-fr/strings.xml b/duration/src/commonMain/composeResources/values-fr/strings.xml similarity index 100% rename from duration/src/main/res/values-fr/strings.xml rename to duration/src/commonMain/composeResources/values-fr/strings.xml diff --git a/duration/src/main/res/values-ga/strings.xml b/duration/src/commonMain/composeResources/values-ga/strings.xml similarity index 100% rename from duration/src/main/res/values-ga/strings.xml rename to duration/src/commonMain/composeResources/values-ga/strings.xml diff --git a/duration/src/main/res/values-gd/strings.xml b/duration/src/commonMain/composeResources/values-gd/strings.xml similarity index 100% rename from duration/src/main/res/values-gd/strings.xml rename to duration/src/commonMain/composeResources/values-gd/strings.xml diff --git a/duration/src/main/res/values-hi/strings.xml b/duration/src/commonMain/composeResources/values-hi/strings.xml similarity index 100% rename from duration/src/main/res/values-hi/strings.xml rename to duration/src/commonMain/composeResources/values-hi/strings.xml diff --git a/duration/src/main/res/values-hr/strings.xml b/duration/src/commonMain/composeResources/values-hr/strings.xml similarity index 100% rename from duration/src/main/res/values-hr/strings.xml rename to duration/src/commonMain/composeResources/values-hr/strings.xml diff --git a/duration/src/main/res/values-hu/strings.xml b/duration/src/commonMain/composeResources/values-hu/strings.xml similarity index 100% rename from duration/src/main/res/values-hu/strings.xml rename to duration/src/commonMain/composeResources/values-hu/strings.xml diff --git a/duration/src/main/res/values-in-rID/strings.xml b/duration/src/commonMain/composeResources/values-in-rID/strings.xml similarity index 100% rename from duration/src/main/res/values-in-rID/strings.xml rename to duration/src/commonMain/composeResources/values-in-rID/strings.xml diff --git a/duration/src/main/res/values-is/strings.xml b/duration/src/commonMain/composeResources/values-is/strings.xml similarity index 100% rename from duration/src/main/res/values-is/strings.xml rename to duration/src/commonMain/composeResources/values-is/strings.xml diff --git a/duration/src/main/res/values-it/strings.xml b/duration/src/commonMain/composeResources/values-it/strings.xml similarity index 100% rename from duration/src/main/res/values-it/strings.xml rename to duration/src/commonMain/composeResources/values-it/strings.xml diff --git a/duration/src/main/res/values-iw/strings.xml b/duration/src/commonMain/composeResources/values-iw/strings.xml similarity index 100% rename from duration/src/main/res/values-iw/strings.xml rename to duration/src/commonMain/composeResources/values-iw/strings.xml diff --git a/duration/src/main/res/values-ja/strings.xml b/duration/src/commonMain/composeResources/values-ja/strings.xml similarity index 100% rename from duration/src/main/res/values-ja/strings.xml rename to duration/src/commonMain/composeResources/values-ja/strings.xml diff --git a/duration/src/main/res/values-jv/strings.xml b/duration/src/commonMain/composeResources/values-jv/strings.xml similarity index 100% rename from duration/src/main/res/values-jv/strings.xml rename to duration/src/commonMain/composeResources/values-jv/strings.xml diff --git a/duration/src/main/res/values-kk/strings.xml b/duration/src/commonMain/composeResources/values-kk/strings.xml similarity index 100% rename from duration/src/main/res/values-kk/strings.xml rename to duration/src/commonMain/composeResources/values-kk/strings.xml diff --git a/duration/src/main/res/values-ko/strings.xml b/duration/src/commonMain/composeResources/values-ko/strings.xml similarity index 100% rename from duration/src/main/res/values-ko/strings.xml rename to duration/src/commonMain/composeResources/values-ko/strings.xml diff --git a/duration/src/main/res/values-ku/strings.xml b/duration/src/commonMain/composeResources/values-ku/strings.xml similarity index 100% rename from duration/src/main/res/values-ku/strings.xml rename to duration/src/commonMain/composeResources/values-ku/strings.xml diff --git a/duration/src/main/res/values-lb/strings.xml b/duration/src/commonMain/composeResources/values-lb/strings.xml similarity index 100% rename from duration/src/main/res/values-lb/strings.xml rename to duration/src/commonMain/composeResources/values-lb/strings.xml diff --git a/duration/src/main/res/values-lo/strings.xml b/duration/src/commonMain/composeResources/values-lo/strings.xml similarity index 100% rename from duration/src/main/res/values-lo/strings.xml rename to duration/src/commonMain/composeResources/values-lo/strings.xml diff --git a/duration/src/main/res/values-lt/strings.xml b/duration/src/commonMain/composeResources/values-lt/strings.xml similarity index 100% rename from duration/src/main/res/values-lt/strings.xml rename to duration/src/commonMain/composeResources/values-lt/strings.xml diff --git a/duration/src/main/res/values-lv/strings.xml b/duration/src/commonMain/composeResources/values-lv/strings.xml similarity index 100% rename from duration/src/main/res/values-lv/strings.xml rename to duration/src/commonMain/composeResources/values-lv/strings.xml diff --git a/duration/src/main/res/values-ms/strings.xml b/duration/src/commonMain/composeResources/values-ms/strings.xml similarity index 100% rename from duration/src/main/res/values-ms/strings.xml rename to duration/src/commonMain/composeResources/values-ms/strings.xml diff --git a/duration/src/main/res/values-ne/strings.xml b/duration/src/commonMain/composeResources/values-ne/strings.xml similarity index 100% rename from duration/src/main/res/values-ne/strings.xml rename to duration/src/commonMain/composeResources/values-ne/strings.xml diff --git a/duration/src/main/res/values-nl/strings.xml b/duration/src/commonMain/composeResources/values-nl/strings.xml similarity index 100% rename from duration/src/main/res/values-nl/strings.xml rename to duration/src/commonMain/composeResources/values-nl/strings.xml diff --git a/duration/src/main/res/values-no/strings.xml b/duration/src/commonMain/composeResources/values-no/strings.xml similarity index 100% rename from duration/src/main/res/values-no/strings.xml rename to duration/src/commonMain/composeResources/values-no/strings.xml diff --git a/duration/src/main/res/values-pl/strings.xml b/duration/src/commonMain/composeResources/values-pl/strings.xml similarity index 100% rename from duration/src/main/res/values-pl/strings.xml rename to duration/src/commonMain/composeResources/values-pl/strings.xml diff --git a/duration/src/main/res/values-pt/strings.xml b/duration/src/commonMain/composeResources/values-pt/strings.xml similarity index 100% rename from duration/src/main/res/values-pt/strings.xml rename to duration/src/commonMain/composeResources/values-pt/strings.xml diff --git a/duration/src/main/res/values-ru/strings.xml b/duration/src/commonMain/composeResources/values-ru/strings.xml similarity index 100% rename from duration/src/main/res/values-ru/strings.xml rename to duration/src/commonMain/composeResources/values-ru/strings.xml diff --git a/duration/src/main/res/values-sk/strings.xml b/duration/src/commonMain/composeResources/values-sk/strings.xml similarity index 100% rename from duration/src/main/res/values-sk/strings.xml rename to duration/src/commonMain/composeResources/values-sk/strings.xml diff --git a/duration/src/main/res/values-sl/strings.xml b/duration/src/commonMain/composeResources/values-sl/strings.xml similarity index 100% rename from duration/src/main/res/values-sl/strings.xml rename to duration/src/commonMain/composeResources/values-sl/strings.xml diff --git a/duration/src/main/res/values-sr/strings.xml b/duration/src/commonMain/composeResources/values-sr/strings.xml similarity index 100% rename from duration/src/main/res/values-sr/strings.xml rename to duration/src/commonMain/composeResources/values-sr/strings.xml diff --git a/duration/src/main/res/values-sv/strings.xml b/duration/src/commonMain/composeResources/values-sv/strings.xml similarity index 100% rename from duration/src/main/res/values-sv/strings.xml rename to duration/src/commonMain/composeResources/values-sv/strings.xml diff --git a/duration/src/main/res/values-th/strings.xml b/duration/src/commonMain/composeResources/values-th/strings.xml similarity index 100% rename from duration/src/main/res/values-th/strings.xml rename to duration/src/commonMain/composeResources/values-th/strings.xml diff --git a/duration/src/main/res/values-tr/strings.xml b/duration/src/commonMain/composeResources/values-tr/strings.xml similarity index 100% rename from duration/src/main/res/values-tr/strings.xml rename to duration/src/commonMain/composeResources/values-tr/strings.xml diff --git a/duration/src/main/res/values-uk/strings.xml b/duration/src/commonMain/composeResources/values-uk/strings.xml similarity index 100% rename from duration/src/main/res/values-uk/strings.xml rename to duration/src/commonMain/composeResources/values-uk/strings.xml diff --git a/duration/src/main/res/values-vi/strings.xml b/duration/src/commonMain/composeResources/values-vi/strings.xml similarity index 100% rename from duration/src/main/res/values-vi/strings.xml rename to duration/src/commonMain/composeResources/values-vi/strings.xml diff --git a/duration/src/main/res/values-zh-rCN/strings.xml b/duration/src/commonMain/composeResources/values-zh-rCN/strings.xml similarity index 100% rename from duration/src/main/res/values-zh-rCN/strings.xml rename to duration/src/commonMain/composeResources/values-zh-rCN/strings.xml diff --git a/duration/src/main/res/values-zh-rTW/strings.xml b/duration/src/commonMain/composeResources/values-zh-rTW/strings.xml similarity index 100% rename from duration/src/main/res/values-zh-rTW/strings.xml rename to duration/src/commonMain/composeResources/values-zh-rTW/strings.xml diff --git a/duration/src/main/res/values/strings.xml b/duration/src/commonMain/composeResources/values/strings.xml similarity index 100% rename from duration/src/main/res/values/strings.xml rename to duration/src/commonMain/composeResources/values/strings.xml diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/DurationDialog.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationDialog.kt similarity index 100% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/DurationDialog.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationDialog.kt diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/DurationPopup.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationPopup.kt similarity index 100% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/DurationPopup.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationPopup.kt diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/DurationState.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt similarity index 97% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/DurationState.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt index 861dbf5b..ebba288c 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/DurationState.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt @@ -25,7 +25,7 @@ import com.maxkeppeker.sheets.core.views.BaseTypeState import com.maxkeppeler.sheets.duration.models.DurationConfig import com.maxkeppeler.sheets.duration.models.DurationSelection import com.maxkeppeler.sheets.duration.utils.* -import java.io.Serializable +import com.maxkeppeker.sheets.core.utils.JvmSerializable /** * Handles the duration state. @@ -96,7 +96,7 @@ internal class DurationState( fun onEnterValue(value: String) { val newTimeBuilder = timeTextValue.apply { if (length >= config.timeFormat.length) { - repeat(value.length) { deleteCharAt(0) } + repeat(value.length) { deleteAt(0) } } append(value) } @@ -106,7 +106,7 @@ internal class DurationState( fun onBackspaceAction() { val newTimeBuilder = timeTextValue.apply { - deleteCharAt(lastIndex) + deleteAt(lastIndex) insert(0, 0.toString()) } timeTextValue = StringBuilder(newTimeBuilder) @@ -151,7 +151,7 @@ internal class DurationState( */ data class DurationStateData( val timeTextValue: StringBuilder, - ) : Serializable + ) : JvmSerializable } /** diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/DurationView.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationView.kt similarity index 100% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/DurationView.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationView.kt diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/models/DurationConfig.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt similarity index 88% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/models/DurationConfig.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt index c02e32af..1ab09a0a 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/models/DurationConfig.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt @@ -15,7 +15,6 @@ */ package com.maxkeppeler.sheets.duration.models -import androidx.annotation.IntRange import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.models.base.LibOrientation @@ -33,9 +32,9 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants */ data class DurationConfig( val timeFormat: DurationFormat = DurationFormat.MM_SS, - @IntRange(from = 0L) val currentTime: Long? = null, - @IntRange(from = 0L) val minTime: Long = 0, - @IntRange(from = 1L) val maxTime: Long = Long.MAX_VALUE, + val currentTime: Long? = null, + val minTime: Long = 0, + val maxTime: Long = Long.MAX_VALUE, val displayClearButton: Boolean = false, override val icons: LibIcons = BaseConstants.DEFAULT_ICON_STYLE, override val orientation: LibOrientation? = BaseConstants.DEFAULT_LIB_LAYOUT, diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/models/DurationFormat.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt similarity index 100% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/models/DurationFormat.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/models/DurationSelection.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt similarity index 100% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/models/DurationSelection.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/utils/Constants.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/utils/Constants.kt similarity index 100% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/utils/Constants.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/utils/Constants.kt diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/utils/Utils.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/utils/Utils.kt similarity index 76% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/utils/Utils.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/utils/Utils.kt index d1d3f3ad..434c10d7 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/utils/Utils.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/utils/Utils.kt @@ -15,16 +15,22 @@ */ package com.maxkeppeler.sheets.duration.utils -import androidx.annotation.RestrictTo -import androidx.annotation.StringRes -import com.maxkeppeler.sheets.duration.R import com.maxkeppeler.sheets.duration.models.DurationConfig import com.maxkeppeler.sheets.duration.models.DurationFormat -import java.util.concurrent.TimeUnit +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.StringResource +import sheets_compose_dialogs.duration.generated.resources.* +import sheets_compose_dialogs.duration.generated.resources.Res +import sheets_compose_dialogs.duration.generated.resources.scd_duration_dialog_hour_code +import sheets_compose_dialogs.duration.generated.resources.scd_duration_dialog_minute_code +import sheets_compose_dialogs.duration.generated.resources.scd_duration_dialog_second_code +import kotlin.time.Duration.Companion.days +import kotlin.time.Duration.Companion.hours +import kotlin.time.Duration.Companion.minutes +import kotlin.time.Duration.Companion.seconds /** Splits seconds into days, hours, minutes and seconds. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) fun splitTime(timeInSeconds: Long): TimeInfo { val days = timeInSeconds / 86400 @@ -41,7 +47,6 @@ fun splitTime(timeInSeconds: Long): TimeInfo { } /** Helper class to store time units. */ -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) data class TimeInfo( val days: Long = 0, val hours: Long = 0, @@ -55,7 +60,7 @@ data class TimeInfo( internal fun parseCurrentTime(format: DurationFormat, currentTime: Long? = null): StringBuilder { - val time = StringBuffer("") + val time = StringBuilder() val (days, hours, minutes, seconds) = splitTime(currentTime ?: 0) // No support for days yet @@ -96,12 +101,17 @@ internal fun parseCurrentTime(format: DurationFormat, currentTime: Long? = null) return filledTimeString } -data class Label(@StringRes val short: Int, @StringRes val long: Int) +@OptIn(ExperimentalResourceApi::class) +data class Label( + val short: StringResource, + val long: StringResource +) -val labels = listOf( - Label(R.string.scd_duration_dialog_hour_code, R.string.scd_duration_dialog_hours), - Label(R.string.scd_duration_dialog_minute_code, R.string.scd_duration_dialog_minutes), - Label(R.string.scd_duration_dialog_second_code, R.string.scd_duration_dialog_seconds) +@OptIn(ExperimentalResourceApi::class) +internal val labels = listOf( + Label(Res.string.scd_duration_dialog_hour_code, Res.string.scd_duration_dialog_hours), + Label(Res.string.scd_duration_dialog_minute_code, Res.string.scd_duration_dialog_minutes), + Label(Res.string.scd_duration_dialog_second_code, Res.string.scd_duration_dialog_seconds) ) internal fun getValuePairs( @@ -144,10 +154,10 @@ internal fun parseToSeconds(time: StringBuilder, format: DurationFormat): Long { if (time.isEmpty()) return@forEachIndexed when { formatTimeUnit.contains("H", ignoreCase = true) -> { - timeInSeconds += TimeUnit.HOURS.toSeconds(time.reversed().toLong()) + timeInSeconds += time.reversed().toLong().hours.inWholeSeconds } formatTimeUnit.contains("M", ignoreCase = true) -> { - timeInSeconds += TimeUnit.MINUTES.toSeconds(time.reversed().toLong()) + timeInSeconds += time.reversed().toLong().minutes.inWholeSeconds } formatTimeUnit.contains("S", ignoreCase = true) -> { timeInSeconds += time.reversed().toInt() @@ -175,13 +185,13 @@ internal fun getFormattedHintTime(timeInSeconds: Long): MutableList 0) { var secondsValue = timeInSeconds - val days = TimeUnit.SECONDS.toDays(secondsValue).toInt() - secondsValue -= TimeUnit.DAYS.toSeconds(days.toLong()) - val hours = TimeUnit.SECONDS.toHours(secondsValue).toInt() - secondsValue -= TimeUnit.HOURS.toSeconds(hours.toLong()) - val minutes = TimeUnit.SECONDS.toMinutes(secondsValue).toInt() - secondsValue -= TimeUnit.MINUTES.toSeconds(minutes.toLong()) - val seconds = TimeUnit.SECONDS.toSeconds(secondsValue).toInt() + val days = secondsValue.seconds.inWholeDays.toInt() + secondsValue -= days.days.inWholeSeconds + val hours = secondsValue.seconds.inWholeHours.toInt() + secondsValue -= hours.hours.inWholeSeconds + val minutes = secondsValue.seconds.inWholeMinutes.toInt() + secondsValue -= minutes.minutes.inWholeSeconds + val seconds = secondsValue.seconds.inWholeSeconds.toInt() if (hours > 0) pairs.add(Pair(hours.toString(), labels[0])) if (minutes > 0) pairs.add(Pair(minutes.toString(),labels[1])) diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt similarity index 90% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt index c89b27e5..bb49c408 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/KeyItemComponent.kt @@ -33,17 +33,19 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.duration.R import com.maxkeppeler.sheets.duration.models.DurationConfig import com.maxkeppeler.sheets.duration.utils.Constants -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.duration.generated.resources.Res +import sheets_compose_dialogs.duration.generated.resources.scd_duration_dialog_clear_input +import sheets_compose_dialogs.duration.generated.resources.scd_duration_dialog_delete_last_input /** * The item component of the keyboard. @@ -53,6 +55,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param onBackspaceAction The listener that is invoked when [Constants.ACTION_BACKSPACE] was clicked. * @param onEmptyAction The listener that is invoked when [Constants.ACTION_CLEAR] was clicked. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun KeyItemComponent( config: DurationConfig, @@ -116,8 +119,8 @@ internal fun KeyItemComponent( .fillMaxSize(), imageVector = if (isActionBackspace) config.icons.Backspace else config.icons.Clear, contentDescription = stringResource( - if (isActionBackspace) R.string.scd_duration_dialog_delete_last_input - else R.string.scd_duration_dialog_clear_input + if (isActionBackspace) Res.string.scd_duration_dialog_delete_last_input + else Res.string.scd_duration_dialog_clear_input ), tint = MaterialTheme.colorScheme.secondary ) diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyboardComponent.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/KeyboardComponent.kt similarity index 100% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/views/KeyboardComponent.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/KeyboardComponent.kt diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeDisplayComponent.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/TimeDisplayComponent.kt similarity index 100% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeDisplayComponent.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/TimeDisplayComponent.kt diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeHintComponent.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/TimeHintComponent.kt similarity index 72% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeHintComponent.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/TimeHintComponent.kt index 069845fe..beb72d8e 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeHintComponent.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/TimeHintComponent.kt @@ -18,10 +18,13 @@ package com.maxkeppeler.sheets.duration.views import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import com.maxkeppeker.sheets.core.models.base.LibOrientation -import com.maxkeppeler.sheets.duration.R import com.maxkeppeler.sheets.duration.utils.getFormattedHintTime +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.duration.generated.resources.Res +import sheets_compose_dialogs.duration.generated.resources.scd_duration_dialog_at_least_placeholder +import sheets_compose_dialogs.duration.generated.resources.scd_duration_dialog_at_most_placeholder /** * The info component that will show a hint if the selected time is out of the specified bounds. @@ -29,6 +32,7 @@ import com.maxkeppeler.sheets.duration.utils.getFormattedHintTime * @param minTime The minimum valid time. * @param maxTime The maximum valid time. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun TimeHintComponent( orientation: LibOrientation, @@ -38,8 +42,8 @@ internal fun TimeHintComponent( if (minTime != null || maxTime != null) { - val hintRes = if (minTime != null) R.string.scd_duration_dialog_at_least_placeholder - else R.string.scd_duration_dialog_at_most_placeholder + val hintRes = if (minTime != null) Res.string.scd_duration_dialog_at_least_placeholder + else Res.string.scd_duration_dialog_at_most_placeholder val time = minTime ?: maxTime ?: throw IllegalStateException("Hint is shown but min and max time values are null.") @@ -49,7 +53,7 @@ internal fun TimeHintComponent( modifier = Modifier, orientation = orientation, values = values, - hintValue = stringResource(id = hintRes) + hintValue = stringResource(hintRes) ) } } diff --git a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt similarity index 96% rename from duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt rename to duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt index 8602c3d1..87fe4aef 100644 --- a/duration/src/main/java/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/views/TimeValueComponent.kt @@ -21,15 +21,14 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeler.sheets.duration.utils.Label -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource /** * The value component that reflects one unit and its value. @@ -40,6 +39,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param indexOfFirstValue The index of the first valid value. * @param isHintView If the current component will be displays as a small hint or not. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun TimeValueComponent( modifier: Modifier = Modifier, @@ -129,7 +129,7 @@ internal fun TimeValueComponent( style = labelStyle, ) if (!isHintView && index != values.lastIndex) { - Spacer(modifier = Modifier.width(dimensionResource(RC.dimen.scd_small_75))) + Spacer(modifier = Modifier.width(6.dp)) } } } diff --git a/duration/src/main/res/values-es/strings.xml b/duration/src/main/res/values-es/strings.xml deleted file mode 100644 index e90e1f39..00000000 --- a/duration/src/main/res/values-es/strings.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - Mínimo - Máximo - h - m - s - Horas - Minutos - Segundos - Eliminar última entrada - Borrar entrada - - \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 8f9cecf1..b8b365a8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,7 +14,7 @@ include( ":info", ":rating", ":calendar", - //":duration", + ":duration", //":clock", ":date_time", ":color", From 38d33721d7192035f267c822e9885404d3845bae Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 12 Apr 2024 14:55:53 +0200 Subject: [PATCH 34/58] migrate clock module --- clock/build.gradle.kts | 59 +++++++++++++++++-- .../sheets/clock/ClockState.android.kt | 10 ++++ .../clock/views/TimeHintComponent.android.kt | 31 ++++++++++ .../sheets/clock/ClockState.apple.kt | 12 ++++ .../clock/views/TimeHintComponent.apple.kt | 29 +++++++++ .../composeResources}/values-bg/strings.xml | 0 .../composeResources}/values-cs/strings.xml | 0 .../composeResources}/values-da/strings.xml | 0 .../values-de-rDE/strings.xml | 0 .../composeResources}/values-de/strings.xml | 0 .../composeResources}/values-el/strings.xml | 0 .../composeResources}/values-eo/strings.xml | 0 .../composeResources}/values-es/strings.xml | 0 .../composeResources}/values-et/strings.xml | 0 .../composeResources}/values-fa/strings.xml | 0 .../composeResources}/values-fi/strings.xml | 0 .../composeResources}/values-fr/strings.xml | 0 .../composeResources}/values-ga/strings.xml | 0 .../composeResources}/values-gd/strings.xml | 0 .../composeResources}/values-hi/strings.xml | 0 .../composeResources}/values-hr/strings.xml | 0 .../composeResources}/values-hu/strings.xml | 0 .../values-in-rID/strings.xml | 0 .../composeResources}/values-is/strings.xml | 0 .../composeResources}/values-it/strings.xml | 0 .../composeResources}/values-iw/strings.xml | 0 .../composeResources}/values-ja/strings.xml | 0 .../composeResources}/values-jv/strings.xml | 0 .../composeResources}/values-kk/strings.xml | 0 .../composeResources}/values-ko/strings.xml | 0 .../composeResources}/values-ku/strings.xml | 0 .../composeResources}/values-lb/strings.xml | 0 .../composeResources}/values-lo/strings.xml | 0 .../composeResources}/values-lt/strings.xml | 0 .../composeResources}/values-lv/strings.xml | 0 .../composeResources}/values-ms/strings.xml | 0 .../composeResources}/values-ne/strings.xml | 0 .../composeResources}/values-nl/strings.xml | 0 .../composeResources}/values-no/strings.xml | 0 .../composeResources}/values-pl/strings.xml | 0 .../composeResources}/values-pt/strings.xml | 0 .../composeResources}/values-ru/strings.xml | 0 .../composeResources}/values-sk/strings.xml | 0 .../composeResources}/values-sl/strings.xml | 0 .../composeResources}/values-sr/strings.xml | 0 .../composeResources}/values-sv/strings.xml | 0 .../composeResources}/values-th/strings.xml | 0 .../composeResources}/values-tr/strings.xml | 0 .../composeResources}/values-uk/strings.xml | 0 .../composeResources}/values-vi/strings.xml | 0 .../values-zh-rCN/strings.xml | 0 .../values-zh-rTW/strings.xml | 0 .../composeResources}/values/strings.xml | 0 .../maxkeppeler/sheets/clock/ClockDialog.kt | 0 .../maxkeppeler/sheets/clock/ClockPopup.kt | 0 .../maxkeppeler/sheets/clock/ClockState.kt | 39 +++++++----- .../com/maxkeppeler/sheets/clock/ClockView.kt | 6 +- .../sheets/clock/models/ClockConfig.kt | 2 +- .../sheets/clock/models/ClockSelection.kt | 0 .../sheets/clock/utils/Constants.kt | 0 .../sheets/clock/utils/ExtendAny.kt | 40 +++++++++++++ .../sheets/clock/utils/FormatStyle.kt | 33 +++++++++++ .../maxkeppeler/sheets/clock/utils/Utils.kt | 34 +++++------ .../sheets/clock/views/KeyItemComponent.kt | 13 ++-- .../sheets/clock/views/KeyboardComponent.kt | 0 .../sheets/clock/views/TimeHintComponent.kt | 22 ++++--- .../clock/views/TimeTypeItemComponent.kt | 4 +- .../sheets/clock/views/TimeValueComponent.kt | 30 ++++++---- .../maxkeppeler/sheets/clock/ClockState.js.kt | 8 +++ .../clock/views/TimeHintComponent.js.kt | 21 +++++++ .../sheets/clock/ClockState.jvm.kt | 8 +++ .../clock/views/TimeHintComponent.jvm.kt | 31 ++++++++++ settings.gradle.kts | 2 +- 73 files changed, 358 insertions(+), 76 deletions(-) create mode 100644 clock/src/androidMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.android.kt create mode 100644 clock/src/androidMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.android.kt create mode 100644 clock/src/appleMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.apple.kt create mode 100644 clock/src/appleMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.apple.kt rename clock/src/{main/res => commonMain/composeResources}/values-bg/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-cs/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-da/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-de-rDE/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-de/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-el/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-eo/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-es/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-et/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-fa/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-fi/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-fr/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-ga/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-gd/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-hi/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-hr/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-hu/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-in-rID/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-is/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-it/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-iw/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-ja/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-jv/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-kk/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-ko/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-ku/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-lb/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-lo/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-lt/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-lv/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-ms/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-ne/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-nl/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-no/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-pl/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-pt/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-ru/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-sk/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-sl/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-sr/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-sv/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-th/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-tr/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-uk/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-vi/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-zh-rCN/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values-zh-rTW/strings.xml (100%) rename clock/src/{main/res => commonMain/composeResources}/values/strings.xml (100%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/ClockDialog.kt (100%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/ClockPopup.kt (100%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/ClockState.kt (90%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/ClockView.kt (96%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/models/ClockConfig.kt (96%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/models/ClockSelection.kt (100%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/utils/Constants.kt (100%) create mode 100644 clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/ExtendAny.kt create mode 100644 clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/FormatStyle.kt rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/utils/Utils.kt (86%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt (92%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/views/KeyboardComponent.kt (100%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/views/TimeHintComponent.kt (74%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt (96%) rename clock/src/{main/java => commonMain/kotlin}/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt (88%) create mode 100644 clock/src/jsMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.js.kt create mode 100644 clock/src/jsMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.js.kt create mode 100644 clock/src/jvmMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.jvm.kt create mode 100644 clock/src/jvmMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.jvm.kt diff --git a/clock/build.gradle.kts b/clock/build.gradle.kts index e4e2e004..78aa8ad7 100644 --- a/clock/build.gradle.kts +++ b/clock/build.gradle.kts @@ -1,3 +1,5 @@ +import com.vanniktech.maven.publish.SonatypeHost + /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) * @@ -14,22 +16,67 @@ * limitations under the License. */ plugins { - id(Plugins.CUSTOM_LIBRARY_MODULE.id) + alias(libs.plugins.android.library) + alias(libs.plugins.compose) + alias(libs.plugins.multiplatform) + alias(libs.plugins.serialization) + alias(libs.plugins.publish) + `maven-publish` } android { namespace = Modules.CLOCK.namespace + compileSdk = 34 + + defaultConfig { + minSdk = 21 + } compileOptions { - // Flag to enable support for the new language APIs isCoreLibraryDesugaringEnabled = true + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } +} + +kotlin { + androidTarget { + publishAllLibraryVariants() + } + jvm() + + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + browser() + binaries.executable() + } + + applyDefaultHierarchyTemplate() + + sourceSets { + commonMain.dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material3) + implementation(compose.components.resources) + + implementation(libs.datetime) + implementation(libs.serialization) + + api(project(":core")) + } } } dependencies { - coreLibraryDesugaring(Dependencies.DESUGAR) + coreLibraryDesugaring(libs.desugar) } mavenPublishing { - publishToMavenCentral() - signAllPublications() -} \ No newline at end of file + publishToMavenCentral(SonatypeHost.S01, automaticRelease = true) +} diff --git a/clock/src/androidMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.android.kt b/clock/src/androidMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.android.kt new file mode 100644 index 00000000..af9a8d59 --- /dev/null +++ b/clock/src/androidMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.android.kt @@ -0,0 +1,10 @@ +package com.maxkeppeler.sheets.clock + +import android.text.format.DateFormat +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +@Composable +internal actual fun is24HourFormat(): Boolean { + return DateFormat.is24HourFormat(LocalContext.current) +} \ No newline at end of file diff --git a/clock/src/androidMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.android.kt b/clock/src/androidMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.android.kt new file mode 100644 index 00000000..2e7bce2d --- /dev/null +++ b/clock/src/androidMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.android.kt @@ -0,0 +1,31 @@ +package com.maxkeppeler.sheets.clock.views + +import com.maxkeppeler.sheets.clock.utils.FormatStyle +import kotlinx.datetime.LocalTime +import kotlinx.datetime.format.DateTimeFormat +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern +import java.time.chrono.Chronology +import java.time.format.DateTimeFormatterBuilder +import java.util.Locale + +internal fun FormatStyle.toJava(): java.time.format.FormatStyle { + return when (this) { + FormatStyle.FULL -> java.time.format.FormatStyle.FULL + FormatStyle.LONG -> java.time.format.FormatStyle.LONG + FormatStyle.MEDIUM -> java.time.format.FormatStyle.MEDIUM + FormatStyle.SHORT -> java.time.format.FormatStyle.SHORT + } +} + +@OptIn(FormatStringsInDatetimeFormats::class) +internal actual fun getTimeFormatter(style: FormatStyle): DateTimeFormat { + val locale = Locale.getDefault() + val pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern( + null, style.toJava(), Chronology.ofLocale(locale), locale + ).toString() + + return LocalTime.Format { + byUnicodePattern(pattern) + } +} \ No newline at end of file diff --git a/clock/src/appleMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.apple.kt b/clock/src/appleMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.apple.kt new file mode 100644 index 00000000..68c59a5b --- /dev/null +++ b/clock/src/appleMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.apple.kt @@ -0,0 +1,12 @@ +package com.maxkeppeler.sheets.clock + +import androidx.compose.runtime.Composable +import platform.Foundation.NSDateFormatter +import platform.Foundation.NSLocale +import platform.Foundation.currentLocale + +@Composable +internal actual fun is24HourFormat(): Boolean { + val dateFormat = NSDateFormatter.dateFormatFromTemplate("j", 0u, NSLocale.currentLocale) + return dateFormat?.contains('a')?.not() ?: true +} \ No newline at end of file diff --git a/clock/src/appleMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.apple.kt b/clock/src/appleMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.apple.kt new file mode 100644 index 00000000..f74dd80c --- /dev/null +++ b/clock/src/appleMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.apple.kt @@ -0,0 +1,29 @@ +package com.maxkeppeler.sheets.clock.views + +import com.maxkeppeler.sheets.clock.utils.FormatStyle +import kotlinx.datetime.LocalTime +import kotlinx.datetime.format.DateTimeFormat +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern +import platform.Foundation.* + +internal fun FormatStyle.toSwift(): NSDateFormatterStyle { + return when (this) { + FormatStyle.FULL -> NSDateFormatterFullStyle + FormatStyle.LONG -> NSDateFormatterLongStyle + FormatStyle.MEDIUM -> NSDateFormatterMediumStyle + FormatStyle.SHORT -> NSDateFormatterShortStyle + } +} + +@OptIn(FormatStringsInDatetimeFormats::class) +internal actual fun getTimeFormatter(style: FormatStyle): DateTimeFormat { + val formatter = NSDateFormatter() + formatter.setDateStyle(NSDateFormatterNoStyle) + formatter.setTimeStyle(style.toSwift()) + val pattern = formatter.dateFormat() + + return LocalTime.Format { + byUnicodePattern(pattern) + } +} \ No newline at end of file diff --git a/clock/src/main/res/values-bg/strings.xml b/clock/src/commonMain/composeResources/values-bg/strings.xml similarity index 100% rename from clock/src/main/res/values-bg/strings.xml rename to clock/src/commonMain/composeResources/values-bg/strings.xml diff --git a/clock/src/main/res/values-cs/strings.xml b/clock/src/commonMain/composeResources/values-cs/strings.xml similarity index 100% rename from clock/src/main/res/values-cs/strings.xml rename to clock/src/commonMain/composeResources/values-cs/strings.xml diff --git a/clock/src/main/res/values-da/strings.xml b/clock/src/commonMain/composeResources/values-da/strings.xml similarity index 100% rename from clock/src/main/res/values-da/strings.xml rename to clock/src/commonMain/composeResources/values-da/strings.xml diff --git a/clock/src/main/res/values-de-rDE/strings.xml b/clock/src/commonMain/composeResources/values-de-rDE/strings.xml similarity index 100% rename from clock/src/main/res/values-de-rDE/strings.xml rename to clock/src/commonMain/composeResources/values-de-rDE/strings.xml diff --git a/clock/src/main/res/values-de/strings.xml b/clock/src/commonMain/composeResources/values-de/strings.xml similarity index 100% rename from clock/src/main/res/values-de/strings.xml rename to clock/src/commonMain/composeResources/values-de/strings.xml diff --git a/clock/src/main/res/values-el/strings.xml b/clock/src/commonMain/composeResources/values-el/strings.xml similarity index 100% rename from clock/src/main/res/values-el/strings.xml rename to clock/src/commonMain/composeResources/values-el/strings.xml diff --git a/clock/src/main/res/values-eo/strings.xml b/clock/src/commonMain/composeResources/values-eo/strings.xml similarity index 100% rename from clock/src/main/res/values-eo/strings.xml rename to clock/src/commonMain/composeResources/values-eo/strings.xml diff --git a/clock/src/main/res/values-es/strings.xml b/clock/src/commonMain/composeResources/values-es/strings.xml similarity index 100% rename from clock/src/main/res/values-es/strings.xml rename to clock/src/commonMain/composeResources/values-es/strings.xml diff --git a/clock/src/main/res/values-et/strings.xml b/clock/src/commonMain/composeResources/values-et/strings.xml similarity index 100% rename from clock/src/main/res/values-et/strings.xml rename to clock/src/commonMain/composeResources/values-et/strings.xml diff --git a/clock/src/main/res/values-fa/strings.xml b/clock/src/commonMain/composeResources/values-fa/strings.xml similarity index 100% rename from clock/src/main/res/values-fa/strings.xml rename to clock/src/commonMain/composeResources/values-fa/strings.xml diff --git a/clock/src/main/res/values-fi/strings.xml b/clock/src/commonMain/composeResources/values-fi/strings.xml similarity index 100% rename from clock/src/main/res/values-fi/strings.xml rename to clock/src/commonMain/composeResources/values-fi/strings.xml diff --git a/clock/src/main/res/values-fr/strings.xml b/clock/src/commonMain/composeResources/values-fr/strings.xml similarity index 100% rename from clock/src/main/res/values-fr/strings.xml rename to clock/src/commonMain/composeResources/values-fr/strings.xml diff --git a/clock/src/main/res/values-ga/strings.xml b/clock/src/commonMain/composeResources/values-ga/strings.xml similarity index 100% rename from clock/src/main/res/values-ga/strings.xml rename to clock/src/commonMain/composeResources/values-ga/strings.xml diff --git a/clock/src/main/res/values-gd/strings.xml b/clock/src/commonMain/composeResources/values-gd/strings.xml similarity index 100% rename from clock/src/main/res/values-gd/strings.xml rename to clock/src/commonMain/composeResources/values-gd/strings.xml diff --git a/clock/src/main/res/values-hi/strings.xml b/clock/src/commonMain/composeResources/values-hi/strings.xml similarity index 100% rename from clock/src/main/res/values-hi/strings.xml rename to clock/src/commonMain/composeResources/values-hi/strings.xml diff --git a/clock/src/main/res/values-hr/strings.xml b/clock/src/commonMain/composeResources/values-hr/strings.xml similarity index 100% rename from clock/src/main/res/values-hr/strings.xml rename to clock/src/commonMain/composeResources/values-hr/strings.xml diff --git a/clock/src/main/res/values-hu/strings.xml b/clock/src/commonMain/composeResources/values-hu/strings.xml similarity index 100% rename from clock/src/main/res/values-hu/strings.xml rename to clock/src/commonMain/composeResources/values-hu/strings.xml diff --git a/clock/src/main/res/values-in-rID/strings.xml b/clock/src/commonMain/composeResources/values-in-rID/strings.xml similarity index 100% rename from clock/src/main/res/values-in-rID/strings.xml rename to clock/src/commonMain/composeResources/values-in-rID/strings.xml diff --git a/clock/src/main/res/values-is/strings.xml b/clock/src/commonMain/composeResources/values-is/strings.xml similarity index 100% rename from clock/src/main/res/values-is/strings.xml rename to clock/src/commonMain/composeResources/values-is/strings.xml diff --git a/clock/src/main/res/values-it/strings.xml b/clock/src/commonMain/composeResources/values-it/strings.xml similarity index 100% rename from clock/src/main/res/values-it/strings.xml rename to clock/src/commonMain/composeResources/values-it/strings.xml diff --git a/clock/src/main/res/values-iw/strings.xml b/clock/src/commonMain/composeResources/values-iw/strings.xml similarity index 100% rename from clock/src/main/res/values-iw/strings.xml rename to clock/src/commonMain/composeResources/values-iw/strings.xml diff --git a/clock/src/main/res/values-ja/strings.xml b/clock/src/commonMain/composeResources/values-ja/strings.xml similarity index 100% rename from clock/src/main/res/values-ja/strings.xml rename to clock/src/commonMain/composeResources/values-ja/strings.xml diff --git a/clock/src/main/res/values-jv/strings.xml b/clock/src/commonMain/composeResources/values-jv/strings.xml similarity index 100% rename from clock/src/main/res/values-jv/strings.xml rename to clock/src/commonMain/composeResources/values-jv/strings.xml diff --git a/clock/src/main/res/values-kk/strings.xml b/clock/src/commonMain/composeResources/values-kk/strings.xml similarity index 100% rename from clock/src/main/res/values-kk/strings.xml rename to clock/src/commonMain/composeResources/values-kk/strings.xml diff --git a/clock/src/main/res/values-ko/strings.xml b/clock/src/commonMain/composeResources/values-ko/strings.xml similarity index 100% rename from clock/src/main/res/values-ko/strings.xml rename to clock/src/commonMain/composeResources/values-ko/strings.xml diff --git a/clock/src/main/res/values-ku/strings.xml b/clock/src/commonMain/composeResources/values-ku/strings.xml similarity index 100% rename from clock/src/main/res/values-ku/strings.xml rename to clock/src/commonMain/composeResources/values-ku/strings.xml diff --git a/clock/src/main/res/values-lb/strings.xml b/clock/src/commonMain/composeResources/values-lb/strings.xml similarity index 100% rename from clock/src/main/res/values-lb/strings.xml rename to clock/src/commonMain/composeResources/values-lb/strings.xml diff --git a/clock/src/main/res/values-lo/strings.xml b/clock/src/commonMain/composeResources/values-lo/strings.xml similarity index 100% rename from clock/src/main/res/values-lo/strings.xml rename to clock/src/commonMain/composeResources/values-lo/strings.xml diff --git a/clock/src/main/res/values-lt/strings.xml b/clock/src/commonMain/composeResources/values-lt/strings.xml similarity index 100% rename from clock/src/main/res/values-lt/strings.xml rename to clock/src/commonMain/composeResources/values-lt/strings.xml diff --git a/clock/src/main/res/values-lv/strings.xml b/clock/src/commonMain/composeResources/values-lv/strings.xml similarity index 100% rename from clock/src/main/res/values-lv/strings.xml rename to clock/src/commonMain/composeResources/values-lv/strings.xml diff --git a/clock/src/main/res/values-ms/strings.xml b/clock/src/commonMain/composeResources/values-ms/strings.xml similarity index 100% rename from clock/src/main/res/values-ms/strings.xml rename to clock/src/commonMain/composeResources/values-ms/strings.xml diff --git a/clock/src/main/res/values-ne/strings.xml b/clock/src/commonMain/composeResources/values-ne/strings.xml similarity index 100% rename from clock/src/main/res/values-ne/strings.xml rename to clock/src/commonMain/composeResources/values-ne/strings.xml diff --git a/clock/src/main/res/values-nl/strings.xml b/clock/src/commonMain/composeResources/values-nl/strings.xml similarity index 100% rename from clock/src/main/res/values-nl/strings.xml rename to clock/src/commonMain/composeResources/values-nl/strings.xml diff --git a/clock/src/main/res/values-no/strings.xml b/clock/src/commonMain/composeResources/values-no/strings.xml similarity index 100% rename from clock/src/main/res/values-no/strings.xml rename to clock/src/commonMain/composeResources/values-no/strings.xml diff --git a/clock/src/main/res/values-pl/strings.xml b/clock/src/commonMain/composeResources/values-pl/strings.xml similarity index 100% rename from clock/src/main/res/values-pl/strings.xml rename to clock/src/commonMain/composeResources/values-pl/strings.xml diff --git a/clock/src/main/res/values-pt/strings.xml b/clock/src/commonMain/composeResources/values-pt/strings.xml similarity index 100% rename from clock/src/main/res/values-pt/strings.xml rename to clock/src/commonMain/composeResources/values-pt/strings.xml diff --git a/clock/src/main/res/values-ru/strings.xml b/clock/src/commonMain/composeResources/values-ru/strings.xml similarity index 100% rename from clock/src/main/res/values-ru/strings.xml rename to clock/src/commonMain/composeResources/values-ru/strings.xml diff --git a/clock/src/main/res/values-sk/strings.xml b/clock/src/commonMain/composeResources/values-sk/strings.xml similarity index 100% rename from clock/src/main/res/values-sk/strings.xml rename to clock/src/commonMain/composeResources/values-sk/strings.xml diff --git a/clock/src/main/res/values-sl/strings.xml b/clock/src/commonMain/composeResources/values-sl/strings.xml similarity index 100% rename from clock/src/main/res/values-sl/strings.xml rename to clock/src/commonMain/composeResources/values-sl/strings.xml diff --git a/clock/src/main/res/values-sr/strings.xml b/clock/src/commonMain/composeResources/values-sr/strings.xml similarity index 100% rename from clock/src/main/res/values-sr/strings.xml rename to clock/src/commonMain/composeResources/values-sr/strings.xml diff --git a/clock/src/main/res/values-sv/strings.xml b/clock/src/commonMain/composeResources/values-sv/strings.xml similarity index 100% rename from clock/src/main/res/values-sv/strings.xml rename to clock/src/commonMain/composeResources/values-sv/strings.xml diff --git a/clock/src/main/res/values-th/strings.xml b/clock/src/commonMain/composeResources/values-th/strings.xml similarity index 100% rename from clock/src/main/res/values-th/strings.xml rename to clock/src/commonMain/composeResources/values-th/strings.xml diff --git a/clock/src/main/res/values-tr/strings.xml b/clock/src/commonMain/composeResources/values-tr/strings.xml similarity index 100% rename from clock/src/main/res/values-tr/strings.xml rename to clock/src/commonMain/composeResources/values-tr/strings.xml diff --git a/clock/src/main/res/values-uk/strings.xml b/clock/src/commonMain/composeResources/values-uk/strings.xml similarity index 100% rename from clock/src/main/res/values-uk/strings.xml rename to clock/src/commonMain/composeResources/values-uk/strings.xml diff --git a/clock/src/main/res/values-vi/strings.xml b/clock/src/commonMain/composeResources/values-vi/strings.xml similarity index 100% rename from clock/src/main/res/values-vi/strings.xml rename to clock/src/commonMain/composeResources/values-vi/strings.xml diff --git a/clock/src/main/res/values-zh-rCN/strings.xml b/clock/src/commonMain/composeResources/values-zh-rCN/strings.xml similarity index 100% rename from clock/src/main/res/values-zh-rCN/strings.xml rename to clock/src/commonMain/composeResources/values-zh-rCN/strings.xml diff --git a/clock/src/main/res/values-zh-rTW/strings.xml b/clock/src/commonMain/composeResources/values-zh-rTW/strings.xml similarity index 100% rename from clock/src/main/res/values-zh-rTW/strings.xml rename to clock/src/commonMain/composeResources/values-zh-rTW/strings.xml diff --git a/clock/src/main/res/values/strings.xml b/clock/src/commonMain/composeResources/values/strings.xml similarity index 100% rename from clock/src/main/res/values/strings.xml rename to clock/src/commonMain/composeResources/values/strings.xml diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockDialog.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockDialog.kt similarity index 100% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/ClockDialog.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockDialog.kt diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockPopup.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockPopup.kt similarity index 100% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/ClockPopup.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockPopup.kt diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockState.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.kt similarity index 90% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/ClockState.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.kt index 26bc2aa2..2576fc91 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockState.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.kt @@ -15,8 +15,6 @@ */ package com.maxkeppeler.sheets.clock -import android.content.Context -import android.text.format.DateFormat import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -27,6 +25,7 @@ import com.maxkeppeker.sheets.core.models.base.Debouncer import com.maxkeppeker.sheets.core.views.BaseTypeState import com.maxkeppeler.sheets.clock.models.ClockConfig import com.maxkeppeler.sheets.clock.models.ClockSelection +import com.maxkeppeler.sheets.clock.utils.* import com.maxkeppeler.sheets.clock.utils.Constants import com.maxkeppeler.sheets.clock.utils.convertTimeIntoTimeTextValues import com.maxkeppeler.sheets.clock.utils.convertTimeTextValuesIntoTime @@ -36,8 +35,9 @@ import com.maxkeppeler.sheets.clock.utils.inputValue import com.maxkeppeler.sheets.clock.utils.isAm import com.maxkeppeler.sheets.clock.utils.moveToNextIndex import com.maxkeppeler.sheets.clock.utils.moveToPreviousIndex -import java.io.Serializable -import java.time.LocalTime +import kotlinx.datetime.LocalTime +import kotlinx.serialization.Serializable +import com.maxkeppeker.sheets.core.utils.JvmSerializable /** * Handles the clock state. @@ -47,9 +47,9 @@ import java.time.LocalTime * @param stateData The data of the state when the state is required to be restored. */ internal class ClockState( - private val context: Context, val selection: ClockSelection, val config: ClockConfig, + private val _is24HourFormat: Boolean, stateData: ClockStateData? = null ) : BaseTypeState() { @@ -79,7 +79,7 @@ internal class ClockState( private fun isValid(): Boolean = config.boundary?.let { time in it } ?: true private fun isInit24HourFormat(): Boolean { - return config.is24HourFormat ?: DateFormat.is24HourFormat(context) + return config.is24HourFormat ?: _is24HourFormat } private fun getInitTime(): LocalTime { @@ -194,9 +194,9 @@ internal class ClockState( * @param config The general configuration for the dialog view. */ fun Saver( - context: Context, selection: ClockSelection, - config: ClockConfig + config: ClockConfig, + is24HourFormat: Boolean ): Saver = Saver( save = { state -> ClockStateData( @@ -207,7 +207,7 @@ internal class ClockState( isAm = state.isAm ) }, - restore = { data -> ClockState(context, selection, config, data) } + restore = { data -> ClockState(selection, config, is24HourFormat, data) } ) } @@ -215,13 +215,14 @@ internal class ClockState( * Data class that stores the important information of the current state * and can be used by the [Saver] to save and restore the state. */ + @Serializable data class ClockStateData( val groupIndex: Int, val valueIndex: Int, val is24HourFormat: Boolean, val time: LocalTime, val isAm: Boolean - ) : Serializable + ) : JvmSerializable } /** @@ -232,11 +233,17 @@ internal class ClockState( */ @Composable internal fun rememberClockState( - context: Context, selection: ClockSelection, config: ClockConfig, -): ClockState = rememberSaveable( - inputs = arrayOf(selection, config), - saver = ClockState.Saver(context, selection, config), - init = { ClockState(context, selection, config) } -) \ No newline at end of file +): ClockState { + val is24Hour = is24HourFormat() + + return rememberSaveable( + inputs = arrayOf(selection, config), + saver = ClockState.Saver(selection, config, is24Hour), + init = { ClockState(selection, config, is24Hour) } + ) +} + +@Composable +internal expect fun is24HourFormat(): Boolean \ No newline at end of file diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockView.kt similarity index 96% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockView.kt index a02165f6..9b55d5a7 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/ClockView.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/ClockView.kt @@ -22,8 +22,6 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.models.base.LibOrientation @@ -38,7 +36,6 @@ import com.maxkeppeler.sheets.clock.views.KeyboardComponent import com.maxkeppeler.sheets.clock.views.LandscapeTimeValueComponent import com.maxkeppeler.sheets.clock.views.PortraitTimeValueComponent import com.maxkeppeler.sheets.clock.views.TimeHintComponent -import com.maxkeppeler.sheets.core.R /** * Clock view for the use-case to to select a clock time. @@ -55,8 +52,7 @@ fun ClockView( config: ClockConfig = ClockConfig(), header: Header? = null, ) { - val context = LocalContext.current - val clockState = rememberClockState(context, selection, config) + val clockState = rememberClockState(selection, config) StateHandler(useCaseState, clockState) FrameBase( diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/models/ClockConfig.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt similarity index 96% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/models/ClockConfig.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt index 8f69a94e..09e44a9b 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/models/ClockConfig.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt @@ -19,7 +19,7 @@ import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeker.sheets.core.utils.BaseConstants -import java.time.LocalTime +import kotlinx.datetime.LocalTime /** * The general configuration for the clock dialog. diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/models/ClockSelection.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt similarity index 100% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/models/ClockSelection.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/utils/Constants.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/Constants.kt similarity index 100% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/utils/Constants.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/Constants.kt diff --git a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/ExtendAny.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/ExtendAny.kt new file mode 100644 index 00000000..a9f350f6 --- /dev/null +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/ExtendAny.kt @@ -0,0 +1,40 @@ +package com.maxkeppeler.sheets.clock.utils + +import kotlinx.datetime.Clock +import kotlinx.datetime.LocalTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime + +internal fun LocalTime.Companion.now(): LocalTime { + return Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).time +} + +internal val Char.numericValue: Int + get() { + if (this.isDigit()) { + return this.digitToInt() + } + val codePoint = this.code + + if (codePoint < 128) { + if (codePoint >= '0'.code && codePoint <= '9'.code) { + return codePoint - '0'.code + } + if (codePoint >= 'a'.code && codePoint <= 'z'.code) { + return codePoint - ('a'.code - 10) + } + if (codePoint >= 'A'.code && codePoint <= 'Z'.code) { + return codePoint - ('A'.code - 10) + } + return codePoint + } + // Full-width uppercase A-Z. + if (codePoint in 0xff21..0xff3a) { + return codePoint - 0xff17 + } + // Full-width lowercase a-z. + if (codePoint in 0xff41..0xff5a) { + return codePoint - 0xff37 + } + return codePoint + } \ No newline at end of file diff --git a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/FormatStyle.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/FormatStyle.kt new file mode 100644 index 00000000..fd664432 --- /dev/null +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/FormatStyle.kt @@ -0,0 +1,33 @@ +package com.maxkeppeler.sheets.clock.utils + +/** + * Enumeration of the style of a localized date, time or date-time formatter. + * + * These styles are used when obtaining a date-time style from configuration. + */ +enum class FormatStyle { + // ordered from large to small + /** + * Full text style, with the most detail. + * For example, the format might be 'Tuesday, April 12, 1952 AD' or '3:30:42pm PST'. + */ + FULL, + + /** + * Long text style, with lots of detail. + * For example, the format might be 'January 12, 1952'. + */ + LONG, + + /** + * Medium text style, with some detail. + * For example, the format might be 'Jan 12, 1952'. + */ + MEDIUM, + + /** + * Short text style, typically numeric. + * For example, the format might be '12.13.52' or '3:30pm'. + */ + SHORT +} diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/utils/Utils.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/Utils.kt similarity index 86% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/utils/Utils.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/Utils.kt index c684c0a1..18cf4202 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/utils/Utils.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/utils/Utils.kt @@ -15,16 +15,13 @@ */ package com.maxkeppeler.sheets.clock.utils -import androidx.annotation.RestrictTo import androidx.compose.runtime.MutableState -import java.time.LocalTime +import kotlinx.datetime.LocalTime -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun isAm(currentTime: LocalTime): Boolean { return currentTime.hour < 12 } -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun convertTimeIntoTimeTextValues( is24hourFormat: Boolean, allowSeconds: Boolean, @@ -51,7 +48,6 @@ internal fun convertTimeIntoTimeTextValues( return timeTextValues } -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun convertTimeTextValuesIntoTime( is24HourFormat: Boolean, isAm: Boolean, @@ -73,10 +69,13 @@ internal fun convertTimeTextValuesIntoTime( } } - return LocalTime.of(actualHour, min, sec) + return LocalTime( + hour = actualHour, + minute = min, + second = sec + ) } -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun getInputKeys(): List { return mutableListOf( *(1..9).toList().map { it.toString() }.toTypedArray(), @@ -86,7 +85,6 @@ internal fun getInputKeys(): List { ) } -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun getDisabledInputKeys( timeValues: List, is24hourFormat: Boolean, @@ -122,7 +120,6 @@ internal fun getDisabledInputKeys( }?.map { it.toString() } ?: listOf() } -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun moveToPreviousIndex( valueIndex: MutableState, groupIndex: MutableState, @@ -141,7 +138,6 @@ internal fun moveToPreviousIndex( } } -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun moveToNextIndex( valueIndex: MutableState, groupIndex: MutableState, @@ -160,7 +156,6 @@ internal fun moveToNextIndex( } } -@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) internal fun inputValue( is24hourFormat: Boolean, timeValues: List, @@ -182,17 +177,16 @@ internal fun inputValue( onNextIndex() hourBuffer[currentIndex.value] = newValue.toString()[0] } else { - if (currentIndex.value == 0 && newValue != 0 && Character.getNumericValue( - hourBuffer[1] - ) > 3 + + if (currentIndex.value == 0 && newValue != 0 && hourBuffer[1].numericValue > 3 ) { hourBuffer[1] = 0.digitToChar() } hourBuffer[currentIndex.value] = newValue.toString()[0] } - repeat(2) { minBuffer.deleteCharAt(0) } + repeat(2) { minBuffer.deleteAt(0) } repeat(2) { minBuffer.append(0.digitToChar()) } - repeat(2) { secBuffer?.deleteCharAt(0) } + repeat(2) { secBuffer?.deleteAt(0) } repeat(2) { secBuffer?.append(0.digitToChar()) } } else { if (currentIndex.value == 0 && newValue >= 2 && newValue <= 9) { @@ -201,17 +195,17 @@ internal fun inputValue( hourBuffer[currentIndex.value] = newValue.toString()[0] } else { if (currentIndex.value == 0) { - if (newValue != 0 && Character.getNumericValue(hourBuffer[1]) > 2) { + if (newValue != 0 && hourBuffer[1].numericValue > 2) { hourBuffer[1] = 0.digitToChar() - } else if (newValue == 0 && Character.getNumericValue(hourBuffer[1]) == 0) { + } else if (newValue == 0 && hourBuffer[1].numericValue == 0) { hourBuffer[1] = 1.digitToChar() } } hourBuffer[currentIndex.value] = newValue.toString()[0] } - repeat(2) { minBuffer.deleteCharAt(0) } + repeat(2) { minBuffer.deleteAt(0) } repeat(2) { minBuffer.append(0.digitToChar()) } - repeat(2) { secBuffer?.deleteCharAt(0) } + repeat(2) { secBuffer?.deleteAt(0) } repeat(2) { secBuffer?.append(0.digitToChar()) } } } diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt similarity index 92% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt index c52dc32b..47563f96 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/KeyItemComponent.kt @@ -34,17 +34,19 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalHapticFeedback -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.LibOrientation import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.clock.R import com.maxkeppeler.sheets.clock.models.ClockConfig import com.maxkeppeler.sheets.clock.utils.Constants -import com.maxkeppeler.sheets.core.R as RC +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.clock.generated.resources.Res +import sheets_compose_dialogs.clock.generated.resources.scd_clock_dialog_next_value +import sheets_compose_dialogs.clock.generated.resources.scd_clock_dialog_previous_value /** * The item component of the keyboard. @@ -56,6 +58,7 @@ import com.maxkeppeler.sheets.core.R as RC * @param onPrevAction The listener that is invoked when [Constants.ACTION_PREV] was clicked. * @param onNextAction The listener that is invoked when [Constants.ACTION_NEXT] was clicked. */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun KeyItemComponent( config: ClockConfig, @@ -121,7 +124,7 @@ internal fun KeyItemComponent( ) .fillMaxSize(), imageVector = if (isActionNext) config.icons.ChevronRight else config.icons.ChevronLeft, - contentDescription = stringResource(if (isActionNext) R.string.scd_clock_dialog_next_value else R.string.scd_clock_dialog_previous_value), + contentDescription = stringResource(if (isActionNext) Res.string.scd_clock_dialog_next_value else Res.string.scd_clock_dialog_previous_value), tint = MaterialTheme.colorScheme.secondary ) } else { diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyboardComponent.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/KeyboardComponent.kt similarity index 100% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/views/KeyboardComponent.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/KeyboardComponent.kt diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeHintComponent.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.kt similarity index 74% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeHintComponent.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.kt index 34fbdbe5..9413f50c 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeHintComponent.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.kt @@ -26,13 +26,16 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.ExperimentalTextApi import androidx.compose.ui.text.style.TextAlign -import com.maxkeppeler.sheets.clock.R -import java.time.LocalTime -import java.time.format.DateTimeFormatter -import java.time.format.FormatStyle +import com.maxkeppeler.sheets.clock.utils.FormatStyle +import kotlinx.datetime.LocalTime +import kotlinx.datetime.format +import kotlinx.datetime.format.DateTimeFormat +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.clock.generated.resources.Res +import sheets_compose_dialogs.clock.generated.resources.scd_clock_dialog_boundary_hint /** * A component that displays a hint that the current time is out of the defined boundary, if set and invalid. @@ -40,6 +43,7 @@ import java.time.format.FormatStyle * @param valid Boolean representing the validity of the time * @param boundary Optional [ClosedRange] of [LocalTime] representing the time boundary */ +@OptIn(ExperimentalResourceApi::class) @Composable internal fun TimeHintComponent( modifier: Modifier, @@ -48,7 +52,7 @@ internal fun TimeHintComponent( ) { if (valid || boundary == null) return - val formatter = remember { DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT) } + val formatter = remember { getTimeFormatter(FormatStyle.SHORT) } val startTime = remember(boundary) { boundary.start.format(formatter) } val endTime = remember(boundary) { boundary.endInclusive.format(formatter) } @@ -58,9 +62,11 @@ internal fun TimeHintComponent( verticalAlignment = Alignment.Bottom ) { Text( - text = stringResource(R.string.scd_clock_dialog_boundary_hint, startTime, endTime), + text = stringResource(Res.string.scd_clock_dialog_boundary_hint, startTime, endTime), textAlign = TextAlign.Center, style = MaterialTheme.typography.bodySmall ) } -} \ No newline at end of file +} + +internal expect fun getTimeFormatter(style: FormatStyle): DateTimeFormat \ No newline at end of file diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt similarity index 96% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt index 58da6289..f7dd4940 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeTypeItemComponent.kt @@ -14,6 +14,7 @@ * limitations under the License. */ package com.maxkeppeler.sheets.clock.views + import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row @@ -24,8 +25,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.dimensionResource -import com.maxkeppeler.sheets.core.R as RC +import androidx.compose.ui.unit.dp /** diff --git a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt similarity index 88% rename from clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt rename to clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt index b1aff4d4..6cd4e1c6 100644 --- a/clock/src/main/java/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeValueComponent.kt @@ -28,18 +28,23 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.dimensionResource -import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.ExperimentalTextApi import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.withStyle +import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags -import com.maxkeppeler.sheets.clock.R -import com.maxkeppeler.sheets.core.R as RC - +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.stringResource +import sheets_compose_dialogs.clock.generated.resources.* +import sheets_compose_dialogs.clock.generated.resources.Res +import sheets_compose_dialogs.clock.generated.resources.scd_clock_dialog_am +import sheets_compose_dialogs.clock.generated.resources.scd_clock_dialog_hours +import sheets_compose_dialogs.clock.generated.resources.scd_clock_dialog_pm + +@OptIn(ExperimentalResourceApi::class) @Composable internal fun PortraitTimeValueComponent( modifier: Modifier, @@ -114,13 +119,13 @@ internal fun PortraitTimeValueComponent( modifier = Modifier.testTags(TestTags.CLOCK_12_HOUR_FORMAT, 0), selected = isAm, onClick = { onAm.invoke(true) }, - text = stringResource(id = R.string.scd_clock_dialog_am), + text = stringResource(Res.string.scd_clock_dialog_am), ) TimeTypeItemComponent( modifier = Modifier.testTags(TestTags.CLOCK_12_HOUR_FORMAT, 1), selected = !isAm, onClick = { onAm.invoke(false) }, - text = stringResource(id = R.string.scd_clock_dialog_pm), + text = stringResource(Res.string.scd_clock_dialog_pm), ) } } @@ -128,6 +133,7 @@ internal fun PortraitTimeValueComponent( } +@OptIn(ExperimentalResourceApi::class) @Composable internal fun LandscapeTimeValueComponent( modifier: Modifier, @@ -148,9 +154,9 @@ internal fun LandscapeTimeValueComponent( ) { val labelRes = listOf( - R.string.scd_clock_dialog_hours, - R.string.scd_clock_dialog_minutes, - R.string.scd_clock_dialog_seconds, + Res.string.scd_clock_dialog_hours, + Res.string.scd_clock_dialog_minutes, + Res.string.scd_clock_dialog_seconds, ) Column( @@ -209,13 +215,13 @@ internal fun LandscapeTimeValueComponent( modifier = Modifier.testTags(TestTags.CLOCK_12_HOUR_FORMAT, 0), selected = isAm, onClick = { onAm.invoke(true) }, - text = stringResource(id = R.string.scd_clock_dialog_am), + text = stringResource(Res.string.scd_clock_dialog_am), ) TimeTypeItemComponent( modifier = Modifier.testTags(TestTags.CLOCK_12_HOUR_FORMAT, 1), selected = !isAm, onClick = { onAm.invoke(false) }, - text = stringResource(id = R.string.scd_clock_dialog_pm), + text = stringResource(Res.string.scd_clock_dialog_pm), ) } } diff --git a/clock/src/jsMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.js.kt b/clock/src/jsMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.js.kt new file mode 100644 index 00000000..876edaa6 --- /dev/null +++ b/clock/src/jsMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.js.kt @@ -0,0 +1,8 @@ +package com.maxkeppeler.sheets.clock + +import androidx.compose.runtime.Composable + +@Composable +internal actual fun is24HourFormat(): Boolean { + return true +} \ No newline at end of file diff --git a/clock/src/jsMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.js.kt b/clock/src/jsMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.js.kt new file mode 100644 index 00000000..7a5f3998 --- /dev/null +++ b/clock/src/jsMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.js.kt @@ -0,0 +1,21 @@ +package com.maxkeppeler.sheets.clock.views + +import com.maxkeppeler.sheets.clock.utils.FormatStyle +import kotlinx.datetime.LocalTime +import kotlinx.datetime.format.DateTimeFormat +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern + +@OptIn(FormatStringsInDatetimeFormats::class) +internal actual fun getTimeFormatter(style: FormatStyle): DateTimeFormat { + val pattern = when (style) { + FormatStyle.FULL -> "HH:mm:ss zzz" + FormatStyle.LONG -> "HH:mm:ss" + FormatStyle.MEDIUM -> "H:mm:ss" + FormatStyle.SHORT -> "H:m:s" + } + + return LocalTime.Format { + byUnicodePattern(pattern) + } +} \ No newline at end of file diff --git a/clock/src/jvmMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.jvm.kt b/clock/src/jvmMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.jvm.kt new file mode 100644 index 00000000..876edaa6 --- /dev/null +++ b/clock/src/jvmMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.jvm.kt @@ -0,0 +1,8 @@ +package com.maxkeppeler.sheets.clock + +import androidx.compose.runtime.Composable + +@Composable +internal actual fun is24HourFormat(): Boolean { + return true +} \ No newline at end of file diff --git a/clock/src/jvmMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.jvm.kt b/clock/src/jvmMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.jvm.kt new file mode 100644 index 00000000..0caf435d --- /dev/null +++ b/clock/src/jvmMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.jvm.kt @@ -0,0 +1,31 @@ +package com.maxkeppeler.sheets.clock.views + +import com.maxkeppeler.sheets.clock.utils.FormatStyle +import kotlinx.datetime.LocalTime +import kotlinx.datetime.format.DateTimeFormat +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern +import java.time.chrono.Chronology +import java.time.format.DateTimeFormatterBuilder +import java.util.* + +internal fun FormatStyle.toJava(): java.time.format.FormatStyle { + return when (this) { + FormatStyle.FULL -> java.time.format.FormatStyle.FULL + FormatStyle.LONG -> java.time.format.FormatStyle.LONG + FormatStyle.MEDIUM -> java.time.format.FormatStyle.MEDIUM + FormatStyle.SHORT -> java.time.format.FormatStyle.SHORT + } +} + +@OptIn(FormatStringsInDatetimeFormats::class) +internal actual fun getTimeFormatter(style: FormatStyle): DateTimeFormat { + val locale = Locale.getDefault() + val pattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern( + null, style.toJava(), Chronology.ofLocale(locale), locale + ).toString() + + return LocalTime.Format { + byUnicodePattern(pattern) + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index b8b365a8..ef2d9efb 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,7 +15,7 @@ include( ":rating", ":calendar", ":duration", - //":clock", + ":clock", ":date_time", ":color", ":option", From 1d5bfa769da91ae548efe02f08bb13c3063ee951 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 12 Apr 2024 15:39:18 +0200 Subject: [PATCH 35/58] added missing configuration --- calendar/build.gradle.kts | 1 + clock/build.gradle.kts | 1 + color/build.gradle.kts | 15 ++++++++++++++- .../com/maxkeppeler/sheets/color/ColorState.kt | 6 ++++-- .../sheets/color/models/ColorSelectionMode.kt | 3 +++ .../color/views/ColorCustomInfoComponent.kt | 2 -- core/build.gradle.kts | 1 + date_time/build.gradle.kts | 1 + duration/build.gradle.kts | 1 + info/build.gradle.kts | 3 ++- input/build.gradle.kts | 1 + list/build.gradle.kts | 1 + option/build.gradle.kts | 1 + rating/build.gradle.kts | 1 + state/build.gradle.kts | 1 + 15 files changed, 33 insertions(+), 6 deletions(-) diff --git a/calendar/build.gradle.kts b/calendar/build.gradle.kts index 838f4c27..d805d383 100644 --- a/calendar/build.gradle.kts +++ b/calendar/build.gradle.kts @@ -52,6 +52,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.CALENDAR.moduleName browser() binaries.executable() } diff --git a/clock/build.gradle.kts b/clock/build.gradle.kts index 78aa8ad7..b861dfa8 100644 --- a/clock/build.gradle.kts +++ b/clock/build.gradle.kts @@ -52,6 +52,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.CLOCK.moduleName browser() binaries.executable() } diff --git a/color/build.gradle.kts b/color/build.gradle.kts index b39b5568..b735a397 100644 --- a/color/build.gradle.kts +++ b/color/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } android { - namespace = Modules.OPTION.namespace + namespace = Modules.COLOR.namespace compileSdk = 34 defaultConfig { @@ -28,6 +28,19 @@ kotlin { } jvm() + iosX64() + iosArm64() + iosSimulatorArm64() + + macosX64() + macosArm64() + + js(IR) { + moduleName = Modules.COLOR.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorState.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorState.kt index b46f2da2..0d196da3 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorState.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/ColorState.kt @@ -21,11 +21,12 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import com.maxkeppeker.sheets.core.utils.JvmSerializable import com.maxkeppeker.sheets.core.views.BaseTypeState import com.maxkeppeler.sheets.color.models.ColorConfig import com.maxkeppeler.sheets.color.models.ColorSelection import com.maxkeppeler.sheets.color.models.ColorSelectionMode -import java.io.Serializable +import kotlinx.serialization.Serializable /** * Handles the color state. @@ -96,10 +97,11 @@ internal class ColorState( * Data class that stores the important information of the current state * and can be used by the [Saver] to save and restore the state. */ + @Serializable data class ColorStateData( val color: Int?, val displayMode: ColorSelectionMode - ) : Serializable + ) : JvmSerializable } /** diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt index 4712b108..0aca003b 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt @@ -15,9 +15,12 @@ */ package com.maxkeppeler.sheets.color.models +import kotlinx.serialization.Serializable + /** * Defined display modes for the calendar. */ +@Serializable enum class ColorSelectionMode { /** diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt index c25127a7..a4804a8d 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/views/ColorCustomInfoComponent.kt @@ -37,8 +37,6 @@ import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.stringResource import sheets_compose_dialogs.color.generated.resources.Res import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_argb -import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_copy_color -import sheets_compose_dialogs.color.generated.resources.scd_color_dialog_paste_color /** * A information view for the custom color picker. diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 703c2882..7c85796d 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -52,6 +52,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.CORE.moduleName browser() binaries.executable() } diff --git a/date_time/build.gradle.kts b/date_time/build.gradle.kts index 96c8de72..587f99df 100644 --- a/date_time/build.gradle.kts +++ b/date_time/build.gradle.kts @@ -52,6 +52,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.DATE_TIME.moduleName browser() binaries.executable() } diff --git a/duration/build.gradle.kts b/duration/build.gradle.kts index 18053dad..c6e7d6c5 100644 --- a/duration/build.gradle.kts +++ b/duration/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.DURATION.moduleName browser() binaries.executable() } diff --git a/info/build.gradle.kts b/info/build.gradle.kts index 2d320791..e263435e 100644 --- a/info/build.gradle.kts +++ b/info/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } android { - namespace = Modules.OPTION.namespace + namespace = Modules.INFO.namespace compileSdk = 34 defaultConfig { @@ -36,6 +36,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.INFO.moduleName browser() binaries.executable() } diff --git a/input/build.gradle.kts b/input/build.gradle.kts index 9ded24f2..12c34358 100644 --- a/input/build.gradle.kts +++ b/input/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.INPUT.moduleName browser() binaries.executable() } diff --git a/list/build.gradle.kts b/list/build.gradle.kts index 05dc5939..224cfe55 100644 --- a/list/build.gradle.kts +++ b/list/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.LIST.moduleName browser() binaries.executable() } diff --git a/option/build.gradle.kts b/option/build.gradle.kts index 15624196..7bf5c1b9 100644 --- a/option/build.gradle.kts +++ b/option/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.OPTION.moduleName browser() binaries.executable() } diff --git a/rating/build.gradle.kts b/rating/build.gradle.kts index cfc55f7f..e63d9e64 100644 --- a/rating/build.gradle.kts +++ b/rating/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.RATING.moduleName browser() binaries.executable() } diff --git a/state/build.gradle.kts b/state/build.gradle.kts index 8ea60678..de90ed6e 100644 --- a/state/build.gradle.kts +++ b/state/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { macosArm64() js(IR) { + moduleName = Modules.STATE.moduleName browser() binaries.executable() } From b29bc84902caa8c3bd5d559f8be3c954c16fb143 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 12 Apr 2024 15:48:46 +0200 Subject: [PATCH 36/58] changed readme as core module is not required to add manually anymore --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index c1f31257..7655e724 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,6 @@ In your app `build.gradle` file: ```gradle dependencies { ... - // Implementing the `core` module is mandatory for using other use cases. - implementation 'com.maxkeppeler.sheets-compose-dialogs:core:' implementation 'com.maxkeppeler.sheets-compose-dialogs::' } ``` From 02dbb782721ff727b8baa413614585f676e345b3 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 12 Apr 2024 15:57:57 +0200 Subject: [PATCH 37/58] added wasm target --- calendar/build.gradle.kts | 8 ++++++++ clock/build.gradle.kts | 8 ++++++++ color/build.gradle.kts | 8 ++++++++ core/build.gradle.kts | 8 ++++++++ date_time/build.gradle.kts | 8 ++++++++ duration/build.gradle.kts | 8 ++++++++ info/build.gradle.kts | 8 ++++++++ input/build.gradle.kts | 8 ++++++++ list/build.gradle.kts | 8 ++++++++ option/build.gradle.kts | 8 ++++++++ rating/build.gradle.kts | 8 ++++++++ state/build.gradle.kts | 8 ++++++++ 12 files changed, 96 insertions(+) diff --git a/calendar/build.gradle.kts b/calendar/build.gradle.kts index d805d383..7280f0f4 100644 --- a/calendar/build.gradle.kts +++ b/calendar/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) @@ -57,6 +58,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.CALENDAR.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/clock/build.gradle.kts b/clock/build.gradle.kts index b861dfa8..144241b3 100644 --- a/clock/build.gradle.kts +++ b/clock/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) @@ -57,6 +58,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.CLOCK.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/color/build.gradle.kts b/color/build.gradle.kts index b735a397..5ab10154 100644 --- a/color/build.gradle.kts +++ b/color/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -41,6 +42,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.COLOR.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 7c85796d..83c153f9 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) @@ -57,6 +58,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.CORE.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/date_time/build.gradle.kts b/date_time/build.gradle.kts index 587f99df..31822771 100644 --- a/date_time/build.gradle.kts +++ b/date_time/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) @@ -57,6 +58,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.DATE_TIME.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/duration/build.gradle.kts b/duration/build.gradle.kts index c6e7d6c5..6b5ab478 100644 --- a/duration/build.gradle.kts +++ b/duration/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -41,6 +42,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.DURATION.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/info/build.gradle.kts b/info/build.gradle.kts index e263435e..eafdf090 100644 --- a/info/build.gradle.kts +++ b/info/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -41,6 +42,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.INFO.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/input/build.gradle.kts b/input/build.gradle.kts index 12c34358..ad8b7ebe 100644 --- a/input/build.gradle.kts +++ b/input/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -41,6 +42,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.INPUT.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/list/build.gradle.kts b/list/build.gradle.kts index 224cfe55..2405ff31 100644 --- a/list/build.gradle.kts +++ b/list/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -41,6 +42,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.LIST.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/option/build.gradle.kts b/option/build.gradle.kts index 7bf5c1b9..baa53bc9 100644 --- a/option/build.gradle.kts +++ b/option/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -41,6 +42,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.OPTION.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/rating/build.gradle.kts b/rating/build.gradle.kts index e63d9e64..5da728c2 100644 --- a/rating/build.gradle.kts +++ b/rating/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -41,6 +42,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.RATING.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { diff --git a/state/build.gradle.kts b/state/build.gradle.kts index de90ed6e..763ecc43 100644 --- a/state/build.gradle.kts +++ b/state/build.gradle.kts @@ -1,4 +1,5 @@ import com.vanniktech.maven.publish.SonatypeHost +import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -41,6 +42,13 @@ kotlin { binaries.executable() } + @OptIn(ExperimentalWasmDsl::class) + wasmJs { + moduleName = Modules.STATE.moduleName + browser() + binaries.executable() + } + applyDefaultHierarchyTemplate() sourceSets { From a6a90ff36e1359ba6a274a2782413e915447ff72 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 12 Apr 2024 16:09:21 +0200 Subject: [PATCH 38/58] added missing wasm implementations --- calendar/build.gradle.kts | 4 ++++ .../sheets/clock/ClockState.wasmJs.kt | 8 +++++++ .../clock/views/TimeHintComponent.wasmJs.kt | 21 ++++++++++++++++++ core/build.gradle.kts | 5 +++++ .../sheets/date_time/utils/Utils.wasmJs.kt | 22 +++++++++++++++++++ 5 files changed, 60 insertions(+) create mode 100644 clock/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.wasmJs.kt create mode 100644 clock/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.wasmJs.kt create mode 100644 date_time/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.wasmJs.kt diff --git a/calendar/build.gradle.kts b/calendar/build.gradle.kts index 7280f0f4..9a8108af 100644 --- a/calendar/build.gradle.kts +++ b/calendar/build.gradle.kts @@ -89,6 +89,10 @@ kotlin { nativeMain.orNull?.dependsOn(this) jsMain.orNull?.dependsOn(this) } + + val wasmJsMain by getting { + dependsOn(nonJvmMain) + } } } diff --git a/clock/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.wasmJs.kt b/clock/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.wasmJs.kt new file mode 100644 index 00000000..876edaa6 --- /dev/null +++ b/clock/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/clock/ClockState.wasmJs.kt @@ -0,0 +1,8 @@ +package com.maxkeppeler.sheets.clock + +import androidx.compose.runtime.Composable + +@Composable +internal actual fun is24HourFormat(): Boolean { + return true +} \ No newline at end of file diff --git a/clock/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.wasmJs.kt b/clock/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.wasmJs.kt new file mode 100644 index 00000000..7a5f3998 --- /dev/null +++ b/clock/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/clock/views/TimeHintComponent.wasmJs.kt @@ -0,0 +1,21 @@ +package com.maxkeppeler.sheets.clock.views + +import com.maxkeppeler.sheets.clock.utils.FormatStyle +import kotlinx.datetime.LocalTime +import kotlinx.datetime.format.DateTimeFormat +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern + +@OptIn(FormatStringsInDatetimeFormats::class) +internal actual fun getTimeFormatter(style: FormatStyle): DateTimeFormat { + val pattern = when (style) { + FormatStyle.FULL -> "HH:mm:ss zzz" + FormatStyle.LONG -> "HH:mm:ss" + FormatStyle.MEDIUM -> "H:mm:ss" + FormatStyle.SHORT -> "H:m:s" + } + + return LocalTime.Format { + byUnicodePattern(pattern) + } +} \ No newline at end of file diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 83c153f9..4d2c6c4c 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -98,6 +98,11 @@ kotlin { nativeMain.orNull?.dependsOn(this) jsMain.orNull?.dependsOn(this) } + + val wasmJsMain by getting { + dependsOn(nonJvmMain) + dependsOn(nonMacosMain) + } } } diff --git a/date_time/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.wasmJs.kt b/date_time/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.wasmJs.kt new file mode 100644 index 00000000..91132967 --- /dev/null +++ b/date_time/src/wasmJsMain/kotlin/com/maxkeppeler/sheets/date_time/utils/Utils.wasmJs.kt @@ -0,0 +1,22 @@ +package com.maxkeppeler.sheets.date_time.utils + +internal actual fun getLocalizedPattern( + isDate: Boolean, + formatStyle: FormatStyle +): String { + return if (isDate) { + when (formatStyle) { + FormatStyle.FULL -> "EEEE, MMMM d, yyyy G" + FormatStyle.LONG -> "MMMM d, yyyy" + FormatStyle.MEDIUM -> "MMM d, yyyy" + FormatStyle.SHORT -> "dd.MM.yyyy" + } + } else { + when (formatStyle) { + FormatStyle.FULL -> "HH:mm:ss zzz" + FormatStyle.LONG -> "HH:mm:ss" + FormatStyle.MEDIUM -> "H:mm:ss" + FormatStyle.SHORT -> "H:m:s" + } + } +} \ No newline at end of file From 5f185b5b4f0ba044bdb22062bc8798bf491e3540 Mon Sep 17 00:00:00 2001 From: Maicol Battistini Date: Tue, 16 Apr 2024 00:10:50 +0200 Subject: [PATCH 39/58] =?UTF-8?q?chore(deps):=20=E2=AC=86=EF=B8=8F=20Upgra?= =?UTF-8?q?ded=20Compose=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildSrc/src/main/java/Versions.kt | 2 +- gradle/libs.versions.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index df32f6c7..490329b7 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -6,7 +6,7 @@ object Versions { // Compose const val COMPOSE_BOM = "2024.02.00" const val COMPOSE = "1.6.1" - const val COMPOSE_COMPILER = "1.4.3" + const val COMPOSE_COMPILER = "1.5.11" // AndroidX const val CORE = "1.9.0" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a47afb02..bc56ceb5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] android = "8.2.2" -compose = "1.6.2" +compose = "1.6.10-dev1580" datetime = "0.6.0-RC.2" desugar = "2.0.4" emoji = "0.18.0" From fb7d802022ac1259281f67c917b1f32fab381dd8 Mon Sep 17 00:00:00 2001 From: Maicol Battistini Date: Tue, 16 Apr 2024 10:52:02 +0200 Subject: [PATCH 40/58] refactor: Moved dependency management from buildSrc to Version Catalog --- app/build.gradle.kts | 61 +++++++++--------- build.gradle.kts | 1 - buildSrc/src/main/java/Dependencies.kt | 56 ----------------- buildSrc/src/main/java/LibraryModulePlugin.kt | 63 ------------------- buildSrc/src/main/java/Plugins.kt | 14 ----- buildSrc/src/main/java/Versions.kt | 30 --------- buildSrc/src/main/java/models/Plugin.kt | 6 -- buildSrc/src/main/java/utils/DependencyExt.kt | 32 ---------- gradle/libs.versions.toml | 23 +++++++ test/build.gradle.kts | 22 ++++--- 10 files changed, 66 insertions(+), 242 deletions(-) delete mode 100644 buildSrc/src/main/java/Dependencies.kt delete mode 100644 buildSrc/src/main/java/LibraryModulePlugin.kt delete mode 100644 buildSrc/src/main/java/Plugins.kt delete mode 100644 buildSrc/src/main/java/Versions.kt delete mode 100644 buildSrc/src/main/java/models/Plugin.kt delete mode 100644 buildSrc/src/main/java/utils/DependencyExt.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 99f35f0f..566eebe7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,8 +14,19 @@ * limitations under the License. */ plugins { - id(Plugins.APPLICATION.id) - id(Plugins.KOTLIN.id) + alias(libs.plugins.android.application) + alias(libs.plugins.multiplatform) +} + +kotlin { + androidTarget { + compilations.all { + kotlinOptions { + jvmTarget = "${JavaVersion.VERSION_11}" + freeCompilerArgs += "-Xjdk-release=${JavaVersion.VERSION_11}" + } + } + } } android { @@ -46,14 +57,11 @@ android { // Flag to enable support for the new language APIs isCoreLibraryDesugaringEnabled = true } - kotlinOptions { - jvmTarget = "1.8" - } buildFeatures { compose = true } composeOptions { - kotlinCompilerExtensionVersion = Versions.COMPOSE_COMPILER + kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() } packagingOptions { resources { @@ -67,7 +75,7 @@ dependencies { // Modules Modules.values().forEach { module -> - apis(project(module.path)) + api(project(module.path)) } // Dependencies of sheets-compose-dialogs @@ -88,38 +96,25 @@ dependencies { // implementation("com.maxkeppeler.sheets-compose-dialogs:emoji:$sheetsVersion") - coreLibraryDesugaring(Dependencies.DESUGAR) - - // Kotlin libs - - implementations(Dependencies.Kotlin.KOTLIN_STD) + coreLibraryDesugaring(libs.desugar) // AndroidX libs - - implementations( - Dependencies.AndroidX.CORE_KTX, - Dependencies.AndroidX.LIFECYCLE_KTX, - Dependencies.AndroidX.ACTIVITY_COMPOSE, - Dependencies.AndroidX.NAVIGATION_COMPOSE, - ) + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.navigation.compose) // Compose libs // Test libs - - androidTestImplementations( - Dependencies.AndroidX.Test.TEST_CORE, - Dependencies.AndroidX.Test.TEST_RUNNER, - Dependencies.AndroidX.Test.JUNIT, - Dependencies.AndroidX.Test.ESPRESSO_CORE, - Dependencies.Compose.Test.JUNIT, - project(":test") - ) - debugImplementations( - Dependencies.Compose.Test.TOOLING, - Dependencies.Compose.Test.MANIFEST - ) - testImplementation(Dependencies.Test.JUNIT) + androidTestImplementation(libs.androidx.test.core) + androidTestImplementation(libs.androidx.runner) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(project(":test")) + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) + testImplementation(libs.junit) } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index b968bd6b..2a1838fd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import com.android.build.gradle.LibraryExtension import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt deleted file mode 100644 index eb44b096..00000000 --- a/buildSrc/src/main/java/Dependencies.kt +++ /dev/null @@ -1,56 +0,0 @@ -object Dependencies { - - object AndroidX { - - const val CORE_KTX = "androidx.core:core-ktx:${Versions.CORE}" - const val LIFECYCLE_KTX = "androidx.lifecycle:lifecycle-runtime-ktx:${Versions.RUNTIME}" - const val ACTIVITY_COMPOSE = "androidx.activity:activity-compose:${Versions.COMPOSE_ACTIVITY}" - const val NAVIGATION_COMPOSE = "androidx.navigation:navigation-compose:${Versions.COMPOSE_NAVIGATION}" - - object Test { - const val TEST_CORE = "androidx.test:core:${Versions.TEST_CORE}" - const val TEST_RUNNER = "androidx.test:runner:${Versions.TEST_RUNNER}" - const val JUNIT = "androidx.test.ext:junit:1.1.5" - const val ESPRESSO_CORE = "androidx.test.espresso:espresso-core:${Versions.ESPRESSO_CORE}" - } - } - - object Compose { - - object Test { - const val JUNIT = "androidx.compose.ui:ui-test-junit4:${Versions.COMPOSE}" - const val TOOLING = "androidx.compose.ui:ui-tooling" - const val MANIFEST = "androidx.compose.ui:ui-test-manifest" - } - } - - object Vanniktech { - - const val EMOJI_GOOGLE = "com.vanniktech:emoji-google:0.18.0" - const val EMOJI_IOS = "com.vanniktech:emoji-ios:0.18.0" - const val EMOJI_FACEBOOK = "com.vanniktech:emoji-facebook:0.18.0" - const val EMOJI_TWITTER = "com.vanniktech:emoji-twitter:0.18.0" - } - - object Test { - - const val JUNIT = "junit:junit:${Versions.JUNIT}" - } - - object Kotlin { - - const val GRADLE_PLUGIN = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.KOTLIN}" - const val KOTLIN_STD = "org.jetbrains.kotlin:kotlin-stdlib-jdk8${Versions.KOTLIN}" - } - - object Gradle { - - const val BUILD = "com.android.tools.build:gradle:${Versions.GRADLE}" - } - - const val DOKKA = "org.jetbrains.dokka:dokka-gradle-plugin:${Versions.DOKKA}" - const val SNAPPER = "dev.chrisbanes.snapper:snapper:${Versions.SNAPPER}" - const val DESUGAR = "com.android.tools:desugar_jdk_libs:${Versions.DESUGAR}" - - const val MAVEN_PUBLISH = "com.vanniktech:gradle-maven-publish-plugin:${Versions.MAVEN_PUBLISH}" -} \ No newline at end of file diff --git a/buildSrc/src/main/java/LibraryModulePlugin.kt b/buildSrc/src/main/java/LibraryModulePlugin.kt deleted file mode 100644 index 9e01441c..00000000 --- a/buildSrc/src/main/java/LibraryModulePlugin.kt +++ /dev/null @@ -1,63 +0,0 @@ -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.kotlin.dsl.project - -class LibraryModulePlugin : Plugin { - - override fun apply(project: Project) { - with(project) { - applyPlugins() - applyDependencies() - } - } - - private fun Project.applyPlugins() { - plugins.run { - apply(Plugins.LIBRARY.id) - apply(Plugins.KOTLIN.id) - apply(Plugins.DOKKA.id) - apply(Plugins.MAVEN_PUBLISH.id) - } - } - - private fun Project.applyDependencies() { - - dependencies.apply { - - // All modules require the core module - - if (name != Modules.CORE.moduleName) { - apis(project(Modules.CORE.path)) - } - - - // AndroidX & Kotlin libs - - implementations(Dependencies.Kotlin.KOTLIN_STD) - implementations(Dependencies.AndroidX.CORE_KTX) - - - // Compose libs - - implementations( - - ) - - - // Test libs - - androidTestImplementations( - Dependencies.AndroidX.Test.JUNIT, - Dependencies.AndroidX.Test.ESPRESSO_CORE, - Dependencies.Compose.Test.JUNIT, - project(":test") - ) - - debugImplementations( - Dependencies.Compose.Test.TOOLING, - Dependencies.Compose.Test.MANIFEST - ) - testImplementations(Dependencies.Test.JUNIT) - } - } -} \ No newline at end of file diff --git a/buildSrc/src/main/java/Plugins.kt b/buildSrc/src/main/java/Plugins.kt deleted file mode 100644 index 6c793101..00000000 --- a/buildSrc/src/main/java/Plugins.kt +++ /dev/null @@ -1,14 +0,0 @@ -import models.Plugin - -object Plugins { - - val APPLICATION = Plugin("com.android.application", "7.2.2") - val LIBRARY = Plugin("com.android.library", "7.2.2") - val KOTLIN = Plugin("org.jetbrains.kotlin.android", Versions.KOTLIN) - val SPOTLESS = Plugin("com.diffplug.spotless", "6.10.0") - val MAVEN_PUBLISH = Plugin("com.vanniktech.maven.publish") - val DOKKA = Plugin("org.jetbrains.dokka", Versions.DOKKA) - val COMPOSE = Plugin("org.jetbrains.compose", Versions.COMPOSE) - - val CUSTOM_LIBRARY_MODULE = Plugin("library-module") -} \ No newline at end of file diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt deleted file mode 100644 index 490329b7..00000000 --- a/buildSrc/src/main/java/Versions.kt +++ /dev/null @@ -1,30 +0,0 @@ -object Versions { - - // Kotlin - const val KOTLIN = "1.9.22" - - // Compose - const val COMPOSE_BOM = "2024.02.00" - const val COMPOSE = "1.6.1" - const val COMPOSE_COMPILER = "1.5.11" - - // AndroidX - const val CORE = "1.9.0" - const val RUNTIME = "2.5.1" - const val COMPOSE_ACTIVITY = "1.5.0" - const val COMPOSE_NAVIGATION = "2.7.6" - - // Misc - const val GRADLE = "7.4.2" - const val DESUGAR = "1.1.5" - const val MAVEN_PUBLISH = "0.21.0" - const val SNAPPER = "0.3.0" - const val DOKKA = "1.8.10" - const val KT_LINT = "0.47.1" - - // Test - const val JUNIT = "4.13.2" - const val ESPRESSO_CORE = "3.5.1" - const val TEST_CORE = "1.5.0" - const val TEST_RUNNER = "1.5.2" -} \ No newline at end of file diff --git a/buildSrc/src/main/java/models/Plugin.kt b/buildSrc/src/main/java/models/Plugin.kt deleted file mode 100644 index 957caa0f..00000000 --- a/buildSrc/src/main/java/models/Plugin.kt +++ /dev/null @@ -1,6 +0,0 @@ -package models - -data class Plugin( - val id: String, - val version: String? = "" -) \ No newline at end of file diff --git a/buildSrc/src/main/java/utils/DependencyExt.kt b/buildSrc/src/main/java/utils/DependencyExt.kt deleted file mode 100644 index 4461f116..00000000 --- a/buildSrc/src/main/java/utils/DependencyExt.kt +++ /dev/null @@ -1,32 +0,0 @@ -import org.gradle.api.artifacts.ProjectDependency -import org.gradle.api.artifacts.dsl.DependencyHandler - -fun DependencyHandler.apis(vararg list: ProjectDependency) { - list.forEach { dependency -> - add("api", dependency) - } -} - -fun DependencyHandler.implementations(vararg list: Any) { - list.forEach { dependency -> - add("implementation", dependency) - } -} - -fun DependencyHandler.debugImplementations(vararg list: Any) { - list.forEach { dependency -> - add("debugImplementation", dependency) - } -} - -fun DependencyHandler.androidTestImplementations(vararg list: Any) { - list.forEach { dependency -> - add("androidTestImplementation", dependency) - } -} - -fun DependencyHandler.testImplementations(vararg list: Any) { - list.forEach { dependency -> - add("testImplementation", dependency) - } -} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bc56ceb5..2eb1561f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,21 +1,44 @@ [versions] +activity-compose = "1.8.2" android = "8.2.2" +androidx-core-ktx = "1.12.0" compose = "1.6.10-dev1580" +compose-compiler = "1.5.11" +androidx-test-core = "1.5.0" datetime = "0.6.0-RC.2" desugar = "2.0.4" emoji = "0.18.0" +espresso-core = "3.5.1" +junit = "1.1.5" +junit-version = "4.13.2" kotlin = "1.9.23" +lifecycle-runtime-ktx = "2.7.0" +navigation-compose = "2.7.7" publish = "0.28.0" +runner = "1.5.2" serialization = "1.6.3" +ui-test-junit4 = "1.6.5" window-size = "0.5.0" [libraries] +androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activity-compose" } +androidx-test-core = { module = "androidx.test:core", version.ref = "androidx-test-core" } +androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core-ktx" } +androidx-junit = { module = "androidx.test.ext:junit", version.ref = "junit" } +androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso-core" } +androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "lifecycle-runtime-ktx" } +androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigation-compose" } +androidx-runner = { module = "androidx.test:runner", version.ref = "runner" } +androidx-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "ui-test-junit4" } +androidx-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } +androidx-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "datetime" } desugar = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } emoji-facebook = { group = "com.vanniktech", name = "emoji-facebook", version.ref = "emoji" } emoji-google = { group = "com.vanniktech", name = "emoji-google", version.ref = "emoji" } emoji-ios = { group = "com.vanniktech", name = "emoji-ios", version.ref = "emoji" } emoji-twitter = { group = "com.vanniktech", name = "emoji-twitter", version.ref = "emoji" } +junit = { module = "junit:junit", version.ref = "junit-version" } serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-core", version.ref = "serialization" } stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" } window-size = { group = "dev.chrisbanes.material3", name = "material3-window-size-class-multiplatform", version.ref = "window-size" } diff --git a/test/build.gradle.kts b/test/build.gradle.kts index 03d7e164..9cef8bb2 100644 --- a/test/build.gradle.kts +++ b/test/build.gradle.kts @@ -14,8 +14,19 @@ * limitations under the License. */ plugins { - id(Plugins.LIBRARY.id) - id(Plugins.KOTLIN.id) + alias(libs.plugins.android.application) + alias(libs.plugins.multiplatform) +} + +kotlin { + androidTarget { + compilations.all { + kotlinOptions { + jvmTarget = "${JavaVersion.VERSION_11}" + freeCompilerArgs += "-Xjdk-release=${JavaVersion.VERSION_11}" + } + } + } } android { @@ -32,14 +43,11 @@ android { sourceCompatibility(JavaVersion.VERSION_1_8) targetCompatibility(JavaVersion.VERSION_1_8) } - kotlinOptions { - jvmTarget = "1.8" - } buildFeatures { compose = true } composeOptions { - kotlinCompilerExtensionVersion = Versions.COMPOSE_COMPILER + kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() } packagingOptions { resources { @@ -50,5 +58,5 @@ android { dependencies { api(project(Modules.CORE.path)) - implementation(Dependencies.Compose.Test.JUNIT) + implementation(libs.androidx.ui.test.junit4) } \ No newline at end of file From da9f1f18cadabecb8266d69138503899933a4b55 Mon Sep 17 00:00:00 2001 From: DatLag Date: Wed, 17 Apr 2024 20:33:30 +0200 Subject: [PATCH 41/58] updated compose --- .gitignore | 1 + gradle/libs.versions.toml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 3841134a..1ea42ec6 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ bin/ gen/ out/ release/ +.kotlin/ # Gradle files .gradle/ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2eb1561f..4d5e3d91 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ activity-compose = "1.8.2" android = "8.2.2" androidx-core-ktx = "1.12.0" -compose = "1.6.10-dev1580" +compose = "1.6.10-beta01" compose-compiler = "1.5.11" androidx-test-core = "1.5.0" datetime = "0.6.0-RC.2" @@ -11,7 +11,7 @@ emoji = "0.18.0" espresso-core = "3.5.1" junit = "1.1.5" junit-version = "4.13.2" -kotlin = "1.9.23" +kotlin = "2.0.0-RC1" lifecycle-runtime-ktx = "2.7.0" navigation-compose = "2.7.7" publish = "0.28.0" From 3886da04062af4d6ac3a7c7d4e0c421af1f80caf Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 18 Apr 2024 13:57:56 +0200 Subject: [PATCH 42/58] ignore some fields from java serialization --- .../sheets/core/functional/CoreDialogTests.kt | 129 -------- .../sheets/core/functional/CorePopupTests.kt | 128 -------- .../sheets/core/functional/CoreViewTests.kt | 131 -------- .../functional/base/ButtonsComponentTests.kt | 280 ------------------ .../core/functional/base/DialogBaseTests.kt | 129 -------- .../core/functional/base/FrameBaseTests.kt | 112 ------- .../functional/base/HeaderComponentTests.kt | 105 ------- .../sheets/core/models/base/LibOrientation.kt | 6 +- .../sheets/core/views/base/FrameBase.kt | 7 +- gradle/libs.versions.toml | 2 +- .../sheets/input/models/InputHeader.kt | 2 +- kotlin-js-store/yarn.lock | 11 +- .../com/maxkeppeler/sheets/list/ListView.kt | 2 +- .../sheets/list/models/ListOption.kt | 2 +- .../sheets/option/models/Option.kt | 8 +- .../sheets/option/models/OptionDetails.kt | 2 +- 16 files changed, 29 insertions(+), 1027 deletions(-) delete mode 100644 core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CoreDialogTests.kt delete mode 100644 core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CorePopupTests.kt delete mode 100644 core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CoreViewTests.kt delete mode 100644 core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/ButtonsComponentTests.kt delete mode 100644 core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/DialogBaseTests.kt delete mode 100644 core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/FrameBaseTests.kt delete mode 100644 core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/HeaderComponentTests.kt diff --git a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CoreDialogTests.kt b/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CoreDialogTests.kt deleted file mode 100644 index 6a8886a0..00000000 --- a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CoreDialogTests.kt +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:OptIn(ExperimentalMaterial3Api::class) - -package com.maxkeppeker.sheets.core.functional - -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.performClick -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.maxkeppeker.sheets.core.CoreDialog -import com.maxkeppeker.sheets.core.models.CoreSelection -import com.maxkeppeker.sheets.core.models.base.SelectionButton -import com.maxkeppeker.sheets.core.models.base.UseCaseState -import com.maxkeppeler.sheets.test.utils.* -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class CoreDialogTests { - - @get:Rule - val rule = createComposeRule() - - @Test - fun coreDialogVisible() { - rule.setContentAndWaitForIdle { - CoreDialog( - state = UseCaseState(visible = true), - selection = CoreSelection(), - body = { }, - ) - } - rule.onDialog().assertExists() - rule.onDialog().assertIsDisplayed() - } - - @Test - fun coreDialogNotVisible() { - rule.setContentAndWaitForIdle { - CoreDialog( - state = UseCaseState(visible = false), - selection = CoreSelection(), - body = { }, - ) - } - rule.onDialog().assertDoesNotExist() - } - - @Test - fun coreDialogInvokesPositiveButton() { - var positiveCalled = false - rule.setContent { - CoreDialog( - state = UseCaseState(visible = true), - selection = CoreSelection( - onPositiveClick = { positiveCalled = true }, - ), - body = { }, - ) - } - rule.onPositiveButton().performClick() - rule.onDialog().assertDoesNotExist() - assert(positiveCalled) - } - - @Test - fun coreDialogInvokesNegativeButton() { - var negativeCalled = false - rule.setContent { - CoreDialog( - state = UseCaseState(visible = true), - selection = CoreSelection( - onNegativeClick = { negativeCalled = true }, - ), - body = { }, - ) - } - rule.onNegativeButton().performClick() - rule.onDialog().assertDoesNotExist() - assert(negativeCalled) - } - - @Test - fun coreDialogInvokesExtraButton() { - var extraCalled = false - rule.setContent { - CoreDialog( - state = UseCaseState(visible = true), - selection = CoreSelection( - extraButton = SelectionButton("test"), - onExtraButtonClick = { extraCalled = true }, - ), - body = { }, - ) - } - rule.onExtraButton().performClick() - rule.onDialog().assertExists() - assert(extraCalled) - } - - @Test - fun coreDialogDisplaysBody() { - var bodyCalled = false - rule.setContent { - CoreDialog( - selection = CoreSelection(), - state = UseCaseState(visible = true), - body = { bodyCalled = true }, - ) - } - assert(bodyCalled) - } -} \ No newline at end of file diff --git a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CorePopupTests.kt b/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CorePopupTests.kt deleted file mode 100644 index f9b75143..00000000 --- a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CorePopupTests.kt +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:OptIn(ExperimentalMaterial3Api::class) - -package com.maxkeppeker.sheets.core.functional - -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.performClick -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.maxkeppeker.sheets.core.CorePopup -import com.maxkeppeker.sheets.core.models.CoreSelection -import com.maxkeppeker.sheets.core.models.base.SelectionButton -import com.maxkeppeker.sheets.core.models.base.UseCaseState -import com.maxkeppeler.sheets.test.utils.* -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class CorePopupTests { - - @get:Rule - val rule = createComposeRule() - @Test - fun corePopup_visible() { - rule.setContentAndWaitForIdle { - CorePopup( - state = UseCaseState(visible = true), - selection = CoreSelection(), - body = { }, - ) - } - rule.onPopup().assertExists() - rule.onPopup().assertIsDisplayed() - } - - @Test - fun corePopup_notVisible() { - rule.setContentAndWaitForIdle { - CorePopup( - state = UseCaseState(visible = false), - selection = CoreSelection(), - body = { }, - ) - } - rule.onPopup().assertDoesNotExist() - } - - @Test - fun corePopup_invokesPositiveButton() { - var positiveCalled = false - rule.setContent { - CorePopup( - state = UseCaseState(visible = true), - selection = CoreSelection( - onPositiveClick = { positiveCalled = true }, - ), - body = { }, - ) - } - rule.onPositiveButton().performClick() - rule.onPopup().assertDoesNotExist() - assert(positiveCalled) - } - - @Test - fun corePopup_invokesNegativeButton() { - var negativeCalled = false - rule.setContent { - CorePopup( - state = UseCaseState(visible = true), - selection = CoreSelection( - onNegativeClick = { negativeCalled = true }, - ), - body = { }, - ) - } - rule.onNegativeButton().performClick() - rule.onPopup().assertDoesNotExist() - assert(negativeCalled) - } - - @Test - fun corePopup_invokesExtraButton() { - var extraCalled = false - rule.setContent { - CorePopup( - state = UseCaseState(visible = true), - selection = CoreSelection( - extraButton = SelectionButton("test"), - onExtraButtonClick = { extraCalled = true }, - ), - body = { }, - ) - } - rule.onExtraButton().performClick() - rule.onPopup().assertExists() - assert(extraCalled) - } - - @Test - fun corePopup_displaysBody() { - var bodyCalled = false - rule.setContent { - CorePopup( - selection = CoreSelection(), - state = UseCaseState(visible = true), - body = { bodyCalled = true }, - ) - } - assert(bodyCalled) - } -} \ No newline at end of file diff --git a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CoreViewTests.kt b/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CoreViewTests.kt deleted file mode 100644 index 9e970901..00000000 --- a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/CoreViewTests.kt +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:OptIn(ExperimentalMaterial3Api::class) - -package com.maxkeppeker.sheets.core.functional - -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.performClick -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.maxkeppeker.sheets.core.CoreView -import com.maxkeppeker.sheets.core.models.CoreSelection -import com.maxkeppeker.sheets.core.models.base.SelectionButton -import com.maxkeppeker.sheets.core.models.base.UseCaseState -import com.maxkeppeler.sheets.test.utils.* -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class CoreViewTests { - - @get:Rule - val rule = createComposeRule() - - @Test - fun coreViewVisible() { - rule.setContentAndWaitForIdle { - CoreView( - useCaseState = UseCaseState(visible = true), - selection = CoreSelection(), - body = { }, - ) - } - rule.onView().assertExists() - rule.onView().assertIsDisplayed() - } - - @Test - fun coreViewNotVisible() { - rule.setContentAndWaitForIdle { - CoreView( - useCaseState = UseCaseState(visible = false), - selection = CoreSelection(), - body = { }, - ) - } - rule.onView().assertExists() - rule.onView().assertIsDisplayed() - } - - @Test - fun coreViewInvokesPositiveButton() { - var positiveCalled = false - rule.setContent { - CoreView( - useCaseState = UseCaseState(visible = true), - selection = CoreSelection( - onPositiveClick = { positiveCalled = true }, - ), - body = { }, - ) - } - rule.onPositiveButton().performClick() - rule.onView().assertExists() - assert(positiveCalled) - } - - @Test - fun coreViewInvokesNegativeButton() { - var negativeCalled = false - rule.setContent { - CoreView( - useCaseState = UseCaseState(visible = true), - selection = CoreSelection( - onNegativeClick = { negativeCalled = true }, - ), - body = { }, - ) - } - rule.onNegativeButton().performClick() - rule.onView().assertExists() - assert(negativeCalled) - } - - @Test - fun coreViewInvokesExtraButton() { - var extraCalled = false - rule.setContent { - CoreView( - useCaseState = UseCaseState(visible = true), - selection = CoreSelection( - extraButton = SelectionButton("test"), - onExtraButtonClick = { extraCalled = true }, - ), - body = { }, - ) - } - rule.onExtraButton().performClick() - rule.onView().assertExists() - assert(extraCalled) - } - - @Test - fun coreViewDisplaysBody() { - var bodyCalled = false - rule.setContent { - CoreView( - selection = CoreSelection(), - useCaseState = UseCaseState(visible = true), - body = { bodyCalled = true }, - ) - } - assert(bodyCalled) - } - -} \ No newline at end of file diff --git a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/ButtonsComponentTests.kt b/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/ButtonsComponentTests.kt deleted file mode 100644 index 420aea23..00000000 --- a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/ButtonsComponentTests.kt +++ /dev/null @@ -1,280 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:OptIn(ExperimentalMaterial3Api::class) - -package com.maxkeppeker.sheets.core.functional.base - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Face -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.ui.test.* -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.maxkeppeker.sheets.core.models.base.BaseSelection -import com.maxkeppeker.sheets.core.models.base.IconSource -import com.maxkeppeker.sheets.core.models.base.LibOrientation -import com.maxkeppeker.sheets.core.models.base.SelectionButton -import com.maxkeppeker.sheets.core.models.base.UseCaseState -import com.maxkeppeker.sheets.core.utils.TestTags -import com.maxkeppeker.sheets.core.views.ButtonsComponent -import com.maxkeppeler.sheets.test.utils.onExtraButton -import com.maxkeppeler.sheets.test.utils.onNegativeButton -import com.maxkeppeler.sheets.test.utils.onNodeWithTags -import com.maxkeppeler.sheets.test.utils.onPositiveButton -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class ButtonsComponentTests { - - @get:Rule - val rule = createComposeRule() - - @Test - fun buttonsComponentInvokesValidPositiveButton() { - var positiveCalled = false - var negativeCalled = false - var closeCalled = false - rule.setContent { - ButtonsComponent( - state = UseCaseState( - onFinishedRequest = { closeCalled = true } - ), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() {}, - onPositive = { positiveCalled = true }, - onNegative = { negativeCalled = true }, - onPositiveValid = true, - ) - } - rule.onPositiveButton().assertIsEnabled() - rule.onPositiveButton().performClick() - assert(positiveCalled) - assert(!negativeCalled) - assert(closeCalled) - } - - @Test - fun buttonsComponentInvokesNotInvalidPositiveButton() { - var positiveCalled = false - var negativeCalled = false - var closeCalled = false - rule.setContent { - ButtonsComponent( - state = UseCaseState( - onFinishedRequest = { closeCalled = true } - ), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() {}, - onPositive = { positiveCalled = true }, - onNegative = { negativeCalled = true }, - onPositiveValid = false, - ) - } - rule.onPositiveButton().assertIsNotEnabled() - rule.onPositiveButton().performClick() - assert(!positiveCalled) - assert(!negativeCalled) - assert(!closeCalled) - } - - @Test - fun buttonsComponentInvokesNegativeButton() { - var positiveCalled = false - var negativeCalled = false - var closeCalled = false - rule.setContent { - ButtonsComponent( - state = UseCaseState( - onFinishedRequest = { closeCalled = true } - ), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() {}, - onPositive = { positiveCalled = true }, - onNegative = { negativeCalled = true }, - onPositiveValid = false, - ) - } - rule.onNegativeButton().performClick() - assert(!positiveCalled) - assert(negativeCalled) - assert(closeCalled) - } - - @Test - fun buttonsComponentInvokesExtraButton() { - var positiveCalled = false - var negativeCalled = false - var closeCalled = false - var extraCalled = false - rule.setContent { - ButtonsComponent( - state = UseCaseState( - onFinishedRequest = { closeCalled = true } - ), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() { - override val extraButton = SelectionButton("Test button") - override val onExtraButtonClick = { extraCalled = true } - }, - onPositive = { positiveCalled = true }, - onNegative = { negativeCalled = true }, - onPositiveValid = false, - ) - } - rule.onExtraButton().performClick() - assert(extraCalled) - assert(!positiveCalled) - assert(!negativeCalled) - assert(!closeCalled) - } - - @Test - fun buttonsComponentDisplaysPositiveButtonText() { - val text = "test-text-positive" - rule.setContent { - ButtonsComponent( - state = UseCaseState(), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() { - override val positiveButton = SelectionButton(text) - }, - onPositive = { }, - onNegative = { }, - onPositiveValid = false, - ) - } - rule.onPositiveButton().apply { - assertIsDisplayed() - assertTextEquals(text) - } - } - - @Test - fun buttonsComponentDisplaysNegativeButtonText() { - val text = "test-text-negative" - rule.setContent { - ButtonsComponent( - state = UseCaseState(), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() { - override val negativeButton = SelectionButton(text) - }, - onPositive = { }, - onNegative = { }, - onPositiveValid = false, - ) - } - rule.onNegativeButton().apply { - assertIsDisplayed() - assertTextEquals(text) - } - } - - @Test - fun buttonsComponentDisplaysExtraButtonText() { - val text = "test-text-extra" - rule.setContent { - ButtonsComponent( - state = UseCaseState(), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() { - override val extraButton = SelectionButton(text) - }, - onPositive = { }, - onNegative = { }, - onPositiveValid = false, - ) - } - rule.onExtraButton().apply { - assertIsDisplayed() - assertTextEquals(text) - } - } - - @Test - fun buttonsComponentDisplaysPositiveButtonIcon() { - val icon = IconSource(Icons.Rounded.Face) - rule.setContent { - ButtonsComponent( - state = UseCaseState(), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() { - override val positiveButton = SelectionButton("", icon) - }, - onPositive = { }, - onNegative = { }, - onPositiveValid = false, - ) - } - rule.onNodeWithTags( - TestTags.BUTTON_POSITIVE, - TestTags.BUTTON_ICON - ).apply { - assertExists() - assertIsDisplayed() - } - } - - @Test - fun buttonsComponentDisplaysNegativeButtonIcon() { - val icon = IconSource(Icons.Rounded.Face) - rule.setContent { - ButtonsComponent( - state = UseCaseState(), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() { - override val negativeButton = SelectionButton("", icon) - }, - onPositive = { }, - onNegative = { }, - onPositiveValid = false, - ) - } - rule.onNodeWithTags( - TestTags.BUTTON_NEGATIVE, - TestTags.BUTTON_ICON - ).apply { - assertExists() - assertIsDisplayed() - } - } - - @Test - fun buttonsComponentDisplaysExtraButtonIcon() { - val icon = IconSource(Icons.Rounded.Face) - rule.setContent { - ButtonsComponent( - state = UseCaseState(), - orientation = LibOrientation.PORTRAIT, - selection = object : BaseSelection() { - override val extraButton = SelectionButton("", icon) - }, - onPositive = { }, - onNegative = { }, - onPositiveValid = true, - ) - } - rule.onNodeWithTags( - TestTags.BUTTON_EXTRA, - TestTags.BUTTON_ICON - ).apply { - assertExists() - assertIsDisplayed() - } - } -} \ No newline at end of file diff --git a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/DialogBaseTests.kt b/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/DialogBaseTests.kt deleted file mode 100644 index 2ce075d9..00000000 --- a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/DialogBaseTests.kt +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:OptIn(ExperimentalMaterial3Api::class) - -package com.maxkeppeker.sheets.core.functional.base - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.height -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.ui.Modifier -import androidx.compose.ui.test.assertHasClickAction -import androidx.compose.ui.test.click -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.onNodeWithTag -import androidx.compose.ui.test.performTouchInput -import androidx.compose.ui.unit.dp -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.maxkeppeker.sheets.core.models.base.UseCaseState -import com.maxkeppeker.sheets.core.utils.TestTags -import com.maxkeppeker.sheets.core.views.base.DialogBase -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class DialogBaseTests { - - @get:Rule - val rule = createComposeRule() - - @Test - fun dialogVisibleDisplaysContent() { - var contentCalled = false - val state = UseCaseState(visible = true) - rule.setContent { - DialogBase( - state = state, - onDialogClick = {}, - content = { contentCalled = true } - ) - } - rule.onNodeWithTag(TestTags.DIALOG_BASE_CONTAINER).assertExists() - rule.onNodeWithTag(TestTags.DIALOG_BASE_CONTENT).assertExists() - assert(contentCalled) - } - - @Test - fun dialogNotVisibleDisplaysNoContent() { - var contentCalled = false - val state = UseCaseState(visible = false) - rule.setContent { - DialogBase( - state = state, - onDialogClick = {}, - content = { contentCalled = true } - ) - } - rule.onNodeWithTag(TestTags.DIALOG_BASE_CONTAINER).assertDoesNotExist() - rule.onNodeWithTag(TestTags.DIALOG_BASE_CONTENT).assertDoesNotExist() - assert(!contentCalled) - } - - @Test - fun dialogVisibleAllowsInteraction() { - var contentClicked = false - val state = UseCaseState(visible = true) - rule.setContent { - DialogBase( - state = state, - content = { Column(Modifier.height(200.dp)) {} }, // Otherwise no content / area to click - onDialogClick = { contentClicked = true } - ) - } - rule.onNodeWithTag(TestTags.DIALOG_BASE_CONTENT).apply { - assertExists() - assertHasClickAction() - performTouchInput { click(center) } - assert(contentClicked) - } - } - - @Test - fun dialogNotVisibleAllowsNoInteraction() { - var contentClicked = false - val state = UseCaseState(visible = false) - rule.setContent { - DialogBase( - state = state, - content = { }, - onDialogClick = { contentClicked = true } - ) - } - rule.onNodeWithTag(TestTags.DIALOG_BASE_CONTENT).apply { - assertDoesNotExist() - assert(!contentClicked) - } - } - - @Test - fun dialogDismissesOnClickOutside() { - var dismissCall = false - rule.setContent { - DialogBase( - state = UseCaseState( - visible = true, - onDismissRequest = { dismissCall = true } - ), - content = { }, - ) - } - rule.onNodeWithTag(TestTags.DIALOG_BASE_CONTAINER).apply { - performTouchInput { click(topLeft) } - assert(dismissCall) - } - } -} \ No newline at end of file diff --git a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/FrameBaseTests.kt b/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/FrameBaseTests.kt deleted file mode 100644 index 18c4b97d..00000000 --- a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/FrameBaseTests.kt +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:OptIn(ExperimentalMaterial3Api::class) - -package com.maxkeppeker.sheets.core.functional.base - -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.onNodeWithTag -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.maxkeppeker.sheets.core.models.base.Header -import com.maxkeppeker.sheets.core.utils.TestTags -import com.maxkeppeker.sheets.core.views.base.FrameBase -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class FrameBaseTests { - - @get:Rule - val rule = createComposeRule() - - @Test - fun frameDisplaysContent() { - var contentCalled = false - rule.setContent { - FrameBase( - header = null, - buttonsVisible = false, - buttons = {}, - layout = { contentCalled = true } - ) - } - rule.onNodeWithTag(TestTags.FRAME_BASE_CONTENT).assertExists() - assert(contentCalled) - } - - @Test - fun frameDisplaysNoHeader() { - rule.setContent { - FrameBase( - header = null, - buttonsVisible = false, - buttons = {}, - layout = { } - ) - } - rule.onNodeWithTag(TestTags.FRAME_BASE_HEADER).assertDoesNotExist() - rule.onNodeWithTag(TestTags.FRAME_BASE_NO_HEADER).assertExists() - } - - @Test - fun frameDisplaysHeader() { - rule.setContent { - FrameBase( - header = Header.Custom {}, - buttonsVisible = false, - buttons = {}, - layout = { } - ) - } - rule.onNodeWithTag(TestTags.FRAME_BASE_NO_HEADER).assertDoesNotExist() - rule.onNodeWithTag(TestTags.FRAME_BASE_HEADER).assertExists() - } - - @Test - fun frameDisplaysButtons() { - var buttonsCalled = false - rule.setContent { - FrameBase( - header = null, - buttonsVisible = true, - buttons = { buttonsCalled = true }, - layout = { } - ) - } - rule.onNodeWithTag(TestTags.FRAME_BASE_BUTTONS).assertExists() - rule.onNodeWithTag(TestTags.FRAME_BASE_NO_BUTTONS).assertDoesNotExist() - assert(buttonsCalled) - } - - @Test - fun frameDisplaysNoButtons() { - var buttonsCalled = false - rule.setContent { - FrameBase( - header = null, - buttonsVisible = false, - buttons = { buttonsCalled = true }, - layout = { } - ) - } - rule.onNodeWithTag(TestTags.FRAME_BASE_BUTTONS).assertDoesNotExist() - rule.onNodeWithTag(TestTags.FRAME_BASE_NO_BUTTONS).assertExists() - assert(!buttonsCalled) - } - -} \ No newline at end of file diff --git a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/HeaderComponentTests.kt b/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/HeaderComponentTests.kt deleted file mode 100644 index 98747bbd..00000000 --- a/core/src/androidTest/java/com/maxkeppeker/sheets/core/functional/base/HeaderComponentTests.kt +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -@file:OptIn(ExperimentalMaterial3Api::class) - -package com.maxkeppeker.sheets.core.functional.base - -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Face -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.assertTextEquals -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.onNodeWithTag -import androidx.test.ext.junit.runners.AndroidJUnit4 -import com.maxkeppeker.sheets.core.models.base.Header -import com.maxkeppeker.sheets.core.models.base.IconSource -import com.maxkeppeker.sheets.core.utils.TestTags -import com.maxkeppeker.sheets.core.views.HeaderComponent -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class HeaderComponentTests { - - @get:Rule - val rule = createComposeRule() - - @Test - fun headerDisplaysCustomHeader() { - var customHeaderCalled = false - rule.setContent { - HeaderComponent( - header = Header.Custom { customHeaderCalled = true }, - contentHorizontalPadding = PaddingValues() - ) - } - rule.onNodeWithTag(TestTags.HEADER_DEFAULT).assertDoesNotExist() - assert(customHeaderCalled) - } - - @Test - fun headerDisplaysDefaultHeader() { - rule.setContent { - HeaderComponent( - header = Header.Default("Title", IconSource(Icons.Rounded.Face)), - contentHorizontalPadding = PaddingValues() - ) - } - rule.onNodeWithTag(TestTags.HEADER_DEFAULT_TEXT).assertExists() - } - - @Test - fun headerDisplaysDefaultHeaderTextNoIcon() { - val text = "title" - rule.setContent { - HeaderComponent( - header = Header.Default(text, null), - contentHorizontalPadding = PaddingValues() - ) - } - rule.onNodeWithTag(TestTags.HEADER_DEFAULT_TEXT).apply { - assertIsDisplayed() - assertTextEquals(text) - } - rule.onNodeWithTag(TestTags.HEADER_DEFAULT_ICON).apply { - assertDoesNotExist() - } - } - - @Test - fun headerDisplaysDefaultHeaderTextWithIcon() { - val text = "title" - rule.setContent { - HeaderComponent( - header = Header.Default(text, IconSource(Icons.Rounded.Face)), - contentHorizontalPadding = PaddingValues() - ) - } - rule.onNodeWithTag(TestTags.HEADER_DEFAULT_TEXT).apply { - assertIsDisplayed() - assertTextEquals(text) - } - rule.onNodeWithTag(TestTags.HEADER_DEFAULT_ICON).apply { - assertExists() - assertIsDisplayed() - } - } - - -} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt index e741e539..aee11d1c 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/models/base/LibOrientation.kt @@ -15,13 +15,17 @@ */ package com.maxkeppeker.sheets.core.models.base +import kotlinx.serialization.Serializable +import com.maxkeppeker.sheets.core.utils.JvmSerializable + /** * Represents the orientations of the use-case views. * * @property PORTRAIT orientation with height greater than width * @property LANDSCAPE orientation with width greater than height */ -enum class LibOrientation { +@Serializable +enum class LibOrientation : JvmSerializable { PORTRAIT, LANDSCAPE, } \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt index c3d0f136..c8276ffa 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt @@ -59,8 +59,11 @@ fun FrameBase( ) { val layoutDirection = LocalLayoutDirection.current val isDeviceLandscape = isLandscape() - val deviceOrientation = - if (config?.orientation != LibOrientation.PORTRAIT && isDeviceLandscape) LibOrientation.LANDSCAPE else LibOrientation.PORTRAIT + val deviceOrientation = if (config?.orientation != LibOrientation.PORTRAIT && isDeviceLandscape) { + LibOrientation.LANDSCAPE + } else { + LibOrientation.PORTRAIT + } val layoutType = when (config?.orientation) { null -> { when { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4d5e3d91..61cbe8a5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ emoji = "0.18.0" espresso-core = "3.5.1" junit = "1.1.5" junit-version = "4.13.2" -kotlin = "2.0.0-RC1" +kotlin = "1.9.23" lifecycle-runtime-ktx = "2.7.0" navigation-compose = "2.7.7" publish = "0.28.0" diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt index 9aca9448..76bd0809 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt @@ -32,5 +32,5 @@ import kotlinx.serialization.Transient class InputHeader( val title: String? = null, val body: String? = null, - @Transient val icon: IconSource? = null, + @Transient @kotlin.jvm.Transient val icon: IconSource? = null, ) : JvmSerializable diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 8e771d53..34be3231 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -221,7 +221,7 @@ dependencies: "@types/express" "*" -"@types/serve-static@*", "@types/serve-static@^1.13.10": +"@types/serve-static@*": version "1.15.5" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== @@ -230,6 +230,15 @@ "@types/mime" "*" "@types/node" "*" +"@types/serve-static@^1.13.10": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + "@types/sockjs@^0.3.33": version "0.3.36" resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" diff --git a/list/src/commonMain/kotlin/com/maxkeppeler/sheets/list/ListView.kt b/list/src/commonMain/kotlin/com/maxkeppeler/sheets/list/ListView.kt index 83e8c6dc..6b4c0eda 100644 --- a/list/src/commonMain/kotlin/com/maxkeppeler/sheets/list/ListView.kt +++ b/list/src/commonMain/kotlin/com/maxkeppeler/sheets/list/ListView.kt @@ -83,7 +83,7 @@ fun ListView( ) }, buttonsVisible = selection.withButtonView - ) {orientation -> + ) { orientation -> ButtonsComponent( orientation = orientation, onPositiveValid = listState.valid, diff --git a/list/src/commonMain/kotlin/com/maxkeppeler/sheets/list/models/ListOption.kt b/list/src/commonMain/kotlin/com/maxkeppeler/sheets/list/models/ListOption.kt index 00b46eab..a18fc16d 100644 --- a/list/src/commonMain/kotlin/com/maxkeppeler/sheets/list/models/ListOption.kt +++ b/list/src/commonMain/kotlin/com/maxkeppeler/sheets/list/models/ListOption.kt @@ -31,7 +31,7 @@ import kotlinx.serialization.Transient */ @Serializable data class ListOption( - @Transient val icon: IconSource? = null, + @Transient @kotlin.jvm.Transient val icon: IconSource? = null, val titleText: String, val subtitleText: String? = null, val selected: Boolean = false, diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/Option.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/Option.kt index 259a1852..f6bc76ea 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/Option.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/Option.kt @@ -38,16 +38,16 @@ import kotlinx.serialization.Transient */ @Serializable data class Option( - @Transient val icon: IconSource? = null, + @Transient @kotlin.jvm.Transient val icon: IconSource? = null, val titleText: String, val subtitleText: String? = null, val selected: Boolean = false, val disabled: Boolean = false, val details: OptionDetails? = null, val onLongClick: (() -> Unit)? = null, - @Transient val customView: (@Composable (selected: Boolean) -> Unit)? = null, - @Transient val listTopView: (@Composable (selected: Boolean) -> Unit)? = null, - @Transient val listBottomView: (@Composable (selected: Boolean) -> Unit)? = null, + @Transient @kotlin.jvm.Transient val customView: (@Composable (selected: Boolean) -> Unit)? = null, + @Transient @kotlin.jvm.Transient val listTopView: (@Composable (selected: Boolean) -> Unit)? = null, + @Transient @kotlin.jvm.Transient val listBottomView: (@Composable (selected: Boolean) -> Unit)? = null, ) : JvmSerializable { internal var position: Int = 0 } diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionDetails.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionDetails.kt index 7e01b24c..8b38f81d 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionDetails.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionDetails.kt @@ -30,5 +30,5 @@ import kotlinx.serialization.Transient class OptionDetails( val title: String, val body: String, - @Transient val postView: (@Composable (selected: Boolean) -> Unit)? = null, + @Transient @kotlin.jvm.Transient val postView: (@Composable (selected: Boolean) -> Unit)? = null, ) : JvmSerializable \ No newline at end of file From 8c34770c034295cd1181bc83b20a4881ce80d4f5 Mon Sep 17 00:00:00 2001 From: DatLag Date: Thu, 18 Apr 2024 14:45:38 +0200 Subject: [PATCH 43/58] roll back compose version --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 61cbe8a5..2eb1561f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ activity-compose = "1.8.2" android = "8.2.2" androidx-core-ktx = "1.12.0" -compose = "1.6.10-beta01" +compose = "1.6.10-dev1580" compose-compiler = "1.5.11" androidx-test-core = "1.5.0" datetime = "0.6.0-RC.2" From e53bb5f9fbee9f99b7338d77a931e5e3013b9f6b Mon Sep 17 00:00:00 2001 From: DatLag Date: Mon, 29 Apr 2024 13:59:14 +0200 Subject: [PATCH 44/58] update to latest compose version --- .github/workflows/publish-release.yml | 2 +- calendar/build.gradle.kts | 17 +- clock/build.gradle.kts | 13 +- .../sheets/clock/models/ClockConfig.kt | 2 + .../sheets/clock/models/ClockSelection.kt | 8 +- color/build.gradle.kts | 13 +- .../sheets/color/models/ColorConfig.kt | 2 + .../sheets/color/models/ColorSelection.kt | 2 + .../sheets/color/models/ColorSelectionMode.kt | 2 + .../sheets/color/models/SingleColor.kt | 2 + core/build.gradle.kts | 18 +- .../maxkeppeker/sheets/core/icons/LibIcons.kt | 17 +- date_time/build.gradle.kts | 13 +- duration/build.gradle.kts | 13 +- .../sheets/duration/DurationState.kt | 2 + .../sheets/duration/models/DurationConfig.kt | 2 + .../sheets/duration/models/DurationFormat.kt | 3 + .../duration/models/DurationSelection.kt | 2 + emoji/build.gradle.kts | 5 + gradle/libs.versions.toml | 4 +- info/build.gradle.kts | 13 +- .../sheets/info/models/InfoSelection.kt | 2 + input/build.gradle.kts | 13 +- .../sheets/input/models/InputCheckbox.kt | 2 +- .../sheets/input/models/InputCheckboxGroup.kt | 2 +- .../sheets/input/models/InputConfig.kt | 2 + .../sheets/input/models/InputCustomView.kt | 4 +- .../sheets/input/models/InputDivider.kt | 3 + .../sheets/input/models/InputHeader.kt | 4 +- .../sheets/input/models/InputText.kt | 5 +- kotlin-js-store/yarn.lock | 545 ++++++++++++------ list/build.gradle.kts | 13 +- option/build.gradle.kts | 13 +- .../sheets/option/models/DisplayMode.kt | 3 + .../sheets/option/models/OptionConfig.kt | 2 + rating/build.gradle.kts | 13 +- .../maxkeppeler/sheets/rating/RatingState.kt | 2 + .../rating/models/FeedbackTextFieldType.kt | 3 + .../sheets/rating/models/RatingConfig.kt | 6 +- .../sheets/rating/models/RatingSelection.kt | 4 +- state/build.gradle.kts | 13 +- .../state/views/CircularProgressIndicator.kt | 2 +- 42 files changed, 515 insertions(+), 296 deletions(-) diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index a93833eb..589769e6 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -20,7 +20,7 @@ jobs: uses: gradle/gradle-build-action@v3 - name: Publish release - run: ./gradlew publishAllPublicationsToMavenCentralRepository + run: ./gradlew publishAllPublicationsToMavenCentralRepository -x lint -x lintVitalRelease env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} \ No newline at end of file diff --git a/calendar/build.gradle.kts b/calendar/build.gradle.kts index 9a8108af..105d44f8 100644 --- a/calendar/build.gradle.kts +++ b/calendar/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) @@ -37,6 +36,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -58,13 +62,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.CALENDAR.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { @@ -89,10 +86,6 @@ kotlin { nativeMain.orNull?.dependsOn(this) jsMain.orNull?.dependsOn(this) } - - val wasmJsMain by getting { - dependsOn(nonJvmMain) - } } } diff --git a/clock/build.gradle.kts b/clock/build.gradle.kts index 144241b3..702372d7 100644 --- a/clock/build.gradle.kts +++ b/clock/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) @@ -37,6 +36,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -58,13 +62,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.CLOCK.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt index 09e44a9b..73d1b6b6 100644 --- a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt @@ -15,6 +15,7 @@ */ package com.maxkeppeler.sheets.clock.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.models.base.LibOrientation @@ -29,6 +30,7 @@ import kotlinx.datetime.LocalTime * @param icons The style of icons that are used for dialog/ view-specific icons. * @param orientation The orientation of the view or null for auto orientation. */ +@Stable data class ClockConfig( val defaultTime: LocalTime? = null, val boundary: ClosedRange? = null, diff --git a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt index e69ee4f0..5b95d53f 100644 --- a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt @@ -17,6 +17,7 @@ package com.maxkeppeler.sheets.clock.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants @@ -24,6 +25,7 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants /** * The selection configuration for the clock dialog. */ +@Stable sealed class ClockSelection : BaseSelection() { /** @@ -36,7 +38,8 @@ sealed class ClockSelection : BaseSelection() { * @param positiveButton The button that will be used as a positive button. * @param onPositiveClick The listener that returns the selected hours and minutes. */ - class HoursMinutes( + @Stable + data class HoursMinutes( override val withButtonView: Boolean = false, override val extraButton: SelectionButton? = null, override val onExtraButtonClick: (() -> Unit)? = null, @@ -56,7 +59,8 @@ sealed class ClockSelection : BaseSelection() { * @param positiveButton The button that will be used as a positive button. * @param onPositiveClick The listener that returns the selected hours, minutes and seconds. */ - class HoursMinutesSeconds( + @Stable + data class HoursMinutesSeconds( override val withButtonView: Boolean = false, override val extraButton: SelectionButton? = null, override val onExtraButtonClick: (() -> Unit)? = null, diff --git a/color/build.gradle.kts b/color/build.gradle.kts index 5ab10154..92baa931 100644 --- a/color/build.gradle.kts +++ b/color/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -21,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -42,13 +46,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.COLOR.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt index e950319f..9668ab1d 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt @@ -15,6 +15,7 @@ */ package com.maxkeppeler.sheets.color.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE @@ -27,6 +28,7 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE * @param allowCustomColorAlphaValues Allow alpha values in the custom color picker. * @param icons The style of icons that are used for dialog/ view-specific icons. */ +@Stable data class ColorConfig( val displayMode: ColorSelectionMode? = null, val defaultDisplayMode: ColorSelectionMode? = null, diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt index b48393e6..6769fa13 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt @@ -17,6 +17,7 @@ package com.maxkeppeler.sheets.color.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants @@ -33,6 +34,7 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param onSelectNone The listener that is invoked when no color is selected. * @param onSelectColor The listener that returns the selected color. */ +@Stable data class ColorSelection( val selectedColor: SingleColor? = null, override val withButtonView: Boolean = true, diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt index 0aca003b..fdaec461 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt @@ -15,11 +15,13 @@ */ package com.maxkeppeler.sheets.color.models +import androidx.compose.runtime.Stable import kotlinx.serialization.Serializable /** * Defined display modes for the calendar. */ +@Stable @Serializable enum class ColorSelectionMode { diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt index 54f5a798..237d2190 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt @@ -15,6 +15,7 @@ */ package com.maxkeppeler.sheets.color.models +import androidx.compose.runtime.Stable import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb @@ -25,6 +26,7 @@ import androidx.compose.ui.graphics.toArgb * @param colorRes Res of color value. * @param colorHex Color value as Hex-String. */ +@Stable data class SingleColor( val colorInt: Int? = null, val colorHex: String? = null, diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 4d2c6c4c..a06608bc 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) @@ -37,6 +36,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -58,13 +62,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.CORE.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { @@ -98,11 +95,6 @@ kotlin { nativeMain.orNull?.dependsOn(this) jsMain.orNull?.dependsOn(this) } - - val wasmJsMain by getting { - dependsOn(nonJvmMain) - dependsOn(nonMacosMain) - } } } diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt index a8db42fb..c6a9a974 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt @@ -2,10 +2,12 @@ package com.maxkeppeker.sheets.core.icons +import androidx.compose.runtime.Stable import androidx.compose.ui.graphics.vector.ImageVector import com.maxkeppeker.sheets.core.utils.JvmSerializable import kotlinx.serialization.Serializable +@Stable sealed class LibIcons : JvmSerializable { abstract var EmojiEmotions: ImageVector @@ -35,7 +37,8 @@ sealed class LibIcons : JvmSerializable { * [Filled icons](https://material.io/resources/icons/?style=baseline) (previously the only * available theme, also known as the baseline theme) are the default icon theme. */ - object Filled : LibIcons() { + @Stable + data object Filled : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.filled.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.filled.EmojiNature override var EmojiFoodBeverage = com.maxkeppeker.sheets.core.icons.filled.EmojiFoodBeverage @@ -64,7 +67,8 @@ sealed class LibIcons : JvmSerializable { * [Outlined icons](https://material.io/resources/icons/?style=outline) make use of a thin * stroke and empty space inside for a lighter appearance. */ - object Outlined : LibIcons() { + @Stable + data object Outlined : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.outlined.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.outlined.EmojiNature override var EmojiFoodBeverage = com.maxkeppeker.sheets.core.icons.outlined.EmojiFoodBeverage @@ -94,7 +98,8 @@ sealed class LibIcons : JvmSerializable { * pairs well with brands that use heavier typography, curved logos, or circular elements to * express their style. */ - object Rounded : LibIcons() { + @Stable + data object Rounded : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.rounded.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.rounded.EmojiNature override var EmojiFoodBeverage = com.maxkeppeker.sheets.core.icons.rounded.EmojiFoodBeverage @@ -124,7 +129,8 @@ sealed class LibIcons : JvmSerializable { * straight edges, for a crisp style that remains legible even at smaller scales. These * rectangular shapes can support brand styles that are not well-reflected by rounded shapes. */ - object TwoTone : LibIcons() { + @Stable + data object TwoTone : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.twotone.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.twotone.EmojiNature override var EmojiFoodBeverage = com.maxkeppeker.sheets.core.icons.twotone.EmojiFoodBeverage @@ -154,7 +160,8 @@ sealed class LibIcons : JvmSerializable { * straight edges, for a crisp style that remains legible even at smaller scales. These * rectangular shapes can support brand styles that are not well-reflected by rounded shapes. */ - object Sharp : LibIcons() { + @Stable + data object Sharp : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.sharp.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.sharp.EmojiNature override var EmojiFoodBeverage = com.maxkeppeker.sheets.core.icons.sharp.EmojiFoodBeverage diff --git a/date_time/build.gradle.kts b/date_time/build.gradle.kts index 31822771..f5f1e109 100644 --- a/date_time/build.gradle.kts +++ b/date_time/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl /* * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) @@ -37,6 +36,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -58,13 +62,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.DATE_TIME.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/duration/build.gradle.kts b/duration/build.gradle.kts index 6b5ab478..a53a7f8d 100644 --- a/duration/build.gradle.kts +++ b/duration/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -21,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -42,13 +46,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.DURATION.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt index ebba288c..89a58da1 100644 --- a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt @@ -16,6 +16,7 @@ package com.maxkeppeler.sheets.duration import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.Saver @@ -33,6 +34,7 @@ import com.maxkeppeker.sheets.core.utils.JvmSerializable * @param config The general configuration for the dialog view. * @param stateData The data of the state when the state is required to be restored. */ +@Stable internal class DurationState( val selection: DurationSelection, val config: DurationConfig, diff --git a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt index 1ab09a0a..227697e9 100644 --- a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt @@ -15,6 +15,7 @@ */ package com.maxkeppeler.sheets.duration.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.models.base.LibOrientation @@ -30,6 +31,7 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param icons The style of icons that are used for dialog/ view-specific icons. * @param orientation The orientation of the view or null for auto orientation. */ +@Stable data class DurationConfig( val timeFormat: DurationFormat = DurationFormat.MM_SS, val currentTime: Long? = null, diff --git a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt index 307d82a0..deec2267 100644 --- a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt @@ -15,9 +15,12 @@ */ package com.maxkeppeler.sheets.duration.models +import androidx.compose.runtime.Stable + /** * Available time formats. */ +@Stable enum class DurationFormat { /** HH:mm:ss (e. g. 12h 10m 30s) */ diff --git a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt index 8fe4dde7..1ab30645 100644 --- a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt @@ -17,6 +17,7 @@ package com.maxkeppeler.sheets.duration.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants @@ -31,6 +32,7 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param positiveButton The button that will be used as a positive button. * @param onPositiveClick The listener that returns the selected duration time in seconds. */ +@Stable class DurationSelection( override val withButtonView: Boolean = true, override val extraButton: SelectionButton? = null, diff --git a/emoji/build.gradle.kts b/emoji/build.gradle.kts index 39a48268..57980271 100644 --- a/emoji/build.gradle.kts +++ b/emoji/build.gradle.kts @@ -20,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2eb1561f..7423761d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ activity-compose = "1.8.2" android = "8.2.2" androidx-core-ktx = "1.12.0" -compose = "1.6.10-dev1580" +compose = "1.6.10-beta02" compose-compiler = "1.5.11" androidx-test-core = "1.5.0" datetime = "0.6.0-RC.2" @@ -11,7 +11,7 @@ emoji = "0.18.0" espresso-core = "3.5.1" junit = "1.1.5" junit-version = "4.13.2" -kotlin = "1.9.23" +kotlin = "2.0.0-RC1" lifecycle-runtime-ktx = "2.7.0" navigation-compose = "2.7.7" publish = "0.28.0" diff --git a/info/build.gradle.kts b/info/build.gradle.kts index eafdf090..1fa2424c 100644 --- a/info/build.gradle.kts +++ b/info/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -21,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -42,13 +46,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.INFO.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt index c8cc18dc..671702a3 100644 --- a/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt +++ b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt @@ -17,6 +17,7 @@ package com.maxkeppeler.sheets.info.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants @@ -31,6 +32,7 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param positiveButton The button that will be used as a positive button. * @param onPositiveClick The listener that is invoked when the positive button is clicked. */ +@Stable class InfoSelection( override val withButtonView: Boolean = true, override val extraButton: SelectionButton? = null, diff --git a/input/build.gradle.kts b/input/build.gradle.kts index ad8b7ebe..c9d85d70 100644 --- a/input/build.gradle.kts +++ b/input/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -21,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -42,13 +46,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.INPUT.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckbox.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckbox.kt index ef7d5cf1..5c00c6b8 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckbox.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckbox.kt @@ -28,7 +28,7 @@ package com.maxkeppeler.sheets.input.models * @param header The additional [InputHeader] to add more context information to the selection. * @param columns The columns that this input spans. */ -class InputCheckbox( +data class InputCheckbox( internal val text: String, private val enabled: Boolean = false, private val changeListener: ((Boolean) -> Unit)? = null, diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt index 7b4ad085..bfd5d0cb 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCheckboxGroup.kt @@ -28,7 +28,7 @@ package com.maxkeppeler.sheets.input.models * @param header The additional [InputHeader] to add more context information to the selection. * @param columns The columns that this input spans. */ -class InputCheckboxGroup( +data class InputCheckboxGroup( internal val items: List, private val enabledIndices: List = listOf(), private val changeListener: ((List) -> Unit)? = null, diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt index 29d2854d..69fd5539 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt @@ -15,6 +15,7 @@ */ package com.maxkeppeler.sheets.input.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE @@ -24,6 +25,7 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE * @param columns Set the amount of columns inputs can span. * @param icons The style of icons that are used for dialog/ view-specific icons. */ +@Stable data class InputConfig( val columns: Int = 1, override val icons: LibIcons = DEFAULT_ICON_STYLE, diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt index 31c86c96..8838295b 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt @@ -18,6 +18,7 @@ package com.maxkeppeler.sheets.input.models import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable /** * Represents a custom view. @@ -25,7 +26,8 @@ import androidx.compose.runtime.Composable * @param header The additional [InputHeader] to add more context information to the selection. * @param columns The columns that this input spans. */ -class InputCustomView( +@Stable +data class InputCustomView( internal val view: @Composable () -> Unit, override val header: InputHeader? = null, override val columns: Int? = null, diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt index f121f366..f0f3ec92 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt @@ -17,10 +17,13 @@ package com.maxkeppeler.sheets.input.models +import androidx.compose.runtime.Stable + /** * Represents a divider. * @param columns The columns that this input spans. */ +@Stable data class InputDivider( override val columns: Int? = null, ) : Input() { diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt index 76bd0809..a1dce58d 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt @@ -17,6 +17,7 @@ package com.maxkeppeler.sheets.input.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.models.base.IconSource import com.maxkeppeker.sheets.core.utils.JvmSerializable import kotlinx.serialization.Serializable @@ -28,8 +29,9 @@ import kotlinx.serialization.Transient * @param body The text that is used for the body. * @param icon The icon that is displayed on the left side of the title. */ +@Stable @Serializable -class InputHeader( +data class InputHeader( val title: String? = null, val body: String? = null, @Transient @kotlin.jvm.Transient val icon: IconSource? = null, diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt index 34b4852a..ff9af272 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt @@ -17,13 +17,16 @@ package com.maxkeppeler.sheets.input.models +import androidx.compose.runtime.Stable + /** * Represents a text body. * @param text The text of the body * @param header The additional [InputHeader] to add more context information to the selection. * @param columns The columns that this input spans. */ -class InputText( +@Stable +data class InputText( internal val text: String, override val header: InputHeader? = null, override val columns: Int? = null, diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 34be3231..70c81ae2 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -12,6 +12,18 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -57,11 +69,38 @@ resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-3.2.0.tgz#3e61e21b7b2b8a6be746df1335cf91d70db2a273" integrity sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg== +"@jsonjoy.com/base64@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.1.tgz#a717fd8840f7bad49c7fe66cc65db8bcfc4c4dc5" + integrity sha512-LnFjVChaGY8cZVMwAIMjvA1XwQjZ/zIXHyh28IyJkyNkzof4Dkm1+KN9UIm3lHhREH4vs7XwZ0NpkZKnwOtEfg== + +"@jsonjoy.com/json-pack@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.0.2.tgz#d7c8c284db828b29eebb9082134251a8216ec5cc" + integrity sha512-4KMApTgb1Hvjz9Ue7unziJ1xNy3k6d2erp0hz1iXryXsf6LEM3KwN6YrfbqT0vqkUO8Tu+CSnvMia9cWX6YGVw== + dependencies: + "@jsonjoy.com/base64" "^1.1.1" + "@jsonjoy.com/util" "^1.0.0" + hyperdyperid "^1.2.0" + thingies "^1.20.0" + +"@jsonjoy.com/util@^1.0.0", "@jsonjoy.com/util@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.1.0.tgz#9726365362ede17405d2b521b4c782582df7ed4f" + integrity sha512-Yz+xITJ3Y/w0DBISwPkBETP5/cITHXscjgQNZIkfrVz1V7/ahJY8vw+T+LZy/KtXgKuUWqu4GALAQ3bhGt9J8A== + dependencies: + hyperdyperid "^1.2.0" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" @@ -75,14 +114,14 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.9": +"@types/bonjour@^3.5.13": version "3.5.13" resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" -"@types/connect-history-api-fallback@^1.3.5": +"@types/connect-history-api-fallback@^1.5.4": version "1.5.4" resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== @@ -125,7 +164,7 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/estree@*", "@types/estree@^1.0.0": +"@types/estree@*", "@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== @@ -140,7 +179,7 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.13": +"@types/express@*", "@types/express@^4.17.21": version "4.17.21" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== @@ -201,10 +240,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== "@types/send@*": version "0.17.4" @@ -214,7 +253,7 @@ "@types/mime" "^1" "@types/node" "*" -"@types/serve-index@^1.9.1": +"@types/serve-index@^1.9.4": version "1.9.4" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== @@ -230,7 +269,7 @@ "@types/mime" "*" "@types/node" "*" -"@types/serve-static@^1.13.10": +"@types/serve-static@^1.15.5": version "1.15.7" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== @@ -239,21 +278,21 @@ "@types/node" "*" "@types/send" "*" -"@types/sockjs@^0.3.33": +"@types/sockjs@^0.3.36": version "0.3.36" resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" -"@types/ws@^8.5.1": +"@types/ws@^8.5.10": version "8.5.10" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== dependencies: "@types/node" "*" -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.11.5": +"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== @@ -319,7 +358,7 @@ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== -"@webassemblyjs/wasm-edit@^1.11.5": +"@webassemblyjs/wasm-edit@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== @@ -354,7 +393,7 @@ "@webassemblyjs/wasm-gen" "1.12.1" "@webassemblyjs/wasm-parser" "1.12.1" -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.11.5": +"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== @@ -374,17 +413,17 @@ "@webassemblyjs/ast" "1.12.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^2.1.0": +"@webpack-cli/configtest@^2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== -"@webpack-cli/info@^2.0.1": +"@webpack-cli/info@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== -"@webpack-cli/serve@^2.0.3": +"@webpack-cli/serve@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== @@ -399,11 +438,6 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -412,7 +446,7 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: +acorn-import-assertions@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== @@ -476,6 +510,11 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -483,6 +522,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -539,7 +583,7 @@ body-parser@1.20.2, body-parser@^1.19.0: type-is "~1.6.18" unpipe "1.0.0" -bonjour-service@^1.0.11: +bonjour-service@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== @@ -574,7 +618,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5: +browserslist@^4.21.10: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -589,6 +633,13 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -643,7 +694,7 @@ chokidar@3.5.3: optionalDependencies: fsevents "~2.3.2" -chokidar@^3.5.1, chokidar@^3.5.3: +chokidar@^3.5.1, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -788,7 +839,7 @@ cors@~2.8.5: object-assign "^4" vary "^1" -cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -826,6 +877,19 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -842,10 +906,10 @@ define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== depd@2.0.0: version "2.0.0" @@ -894,6 +958,11 @@ dom-serialize@^2.2.1: extend "^3.0.0" void-elements "^2.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -909,6 +978,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -935,7 +1009,7 @@ engine.io@~6.5.2: engine.io-parser "~5.2.1" ws "~8.11.0" -enhanced-resolve@^5.13.0: +enhanced-resolve@^5.16.0: version "5.16.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== @@ -1168,6 +1242,14 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + format-util@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" @@ -1192,11 +1274,6 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1245,17 +1322,27 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" + +glob@^10.3.7: + version "10.3.12" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.12.tgz#3a65c363c2e9998d220338e88a5f6ac97302960b" + integrity sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.6" + minimatch "^9.0.1" + minipass "^7.0.4" + path-scurry "^1.10.2" glob@^7.1.3, glob@^7.1.7: version "7.2.3" @@ -1276,7 +1363,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -1330,7 +1417,7 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^2.3.2: +html-entities@^2.4.0: version "2.5.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== @@ -1391,6 +1478,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -1441,10 +1533,10 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== +ipaddr.js@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== is-binary-path@~2.1.0: version "2.1.0" @@ -1460,10 +1552,10 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-extglob@^2.1.1: version "2.1.1" @@ -1482,6 +1574,18 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-network-error@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.1.0.tgz#d26a760e3770226d11c169052f266a4803d9c997" + integrity sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1514,12 +1618,12 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== dependencies: - is-docker "^2.0.0" + is-inside-container "^1.0.0" isarray@~1.0.0: version "1.0.0" @@ -1541,6 +1645,15 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +jackspeak@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -1600,19 +1713,19 @@ karma-sourcemap-loader@0.4.0: dependencies: graceful-fs "^4.2.10" -karma-webpack@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.0.tgz#2a2c7b80163fe7ffd1010f83f5507f95ef39f840" - integrity sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA== +karma-webpack@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-5.0.1.tgz#4eafd31bbe684a747a6e8f3e4ad373e53979ced4" + integrity sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ== dependencies: glob "^7.1.3" - minimatch "^3.0.4" + minimatch "^9.0.3" webpack-merge "^4.1.5" -karma@6.4.2: - version "6.4.2" - resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.2.tgz#a983f874cee6f35990c4b2dcc3d274653714de8e" - integrity sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ== +karma@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/karma/-/karma-6.4.3.tgz#763e500f99597218bbb536de1a14acc4ceea7ce8" + integrity sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q== dependencies: "@colors/colors" "1.5.0" body-parser "^1.19.0" @@ -1633,7 +1746,7 @@ karma@6.4.2: qjobs "^1.2.0" range-parser "^1.2.1" rimraf "^3.0.2" - socket.io "^4.4.1" + socket.io "^4.7.2" source-map "^0.6.1" tmp "^0.2.1" ua-parser-js "^0.7.30" @@ -1644,7 +1757,7 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -launch-editor@^2.6.0: +launch-editor@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== @@ -1695,17 +1808,25 @@ log4js@^6.4.1: rfdc "^1.3.0" streamroller "^3.1.5" +lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memfs@^3.4.3: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== +memfs@^4.6.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.9.1.tgz#cd0b94987c365298a6e57b4beb98c658008d7ff1" + integrity sha512-36cVYFMaa9HNEYyvkyKCwker8DBmOdjWLrfekE/cHEKJ806fCfKNVhOJNvoyV/CrGSZDtfQPbhn0Zid0gbH0Hw== dependencies: - fs-monkey "^1.0.4" + "@jsonjoy.com/json-pack" "^1.0.2" + "@jsonjoy.com/util" "^1.1.0" + sonic-forest "^1.0.0" + tslib "^2.0.0" merge-descriptors@1.0.1: version "1.0.1" @@ -1776,11 +1897,30 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.1, minimatch@^9.0.3: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -1788,10 +1928,10 @@ mkdirp@^0.5.5: dependencies: minimist "^1.2.6" -mocha@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== +mocha@10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" + integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -1800,13 +1940,12 @@ mocha@10.2.0: diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -1838,11 +1977,6 @@ multicast-dns@^7.2.5: dns-packet "^5.2.2" thunky "^1.0.2" -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -1890,7 +2024,7 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: +on-finished@2.4.1, on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -1923,14 +2057,15 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^8.0.9: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== +open@^10.0.3: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" p-limit@^2.2.0: version "2.3.0" @@ -1960,12 +2095,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== +p-retry@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd" + integrity sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA== dependencies: - "@types/retry" "0.12.0" + "@types/retry" "0.12.2" + is-network-error "^1.0.0" retry "^0.13.1" p-try@^2.0.0: @@ -1998,6 +2134,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -2161,6 +2305,18 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +rimraf@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf" + integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A== + dependencies: + glob "^10.3.7" + +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -2176,7 +2332,7 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -schema-utils@^3.1.1, schema-utils@^3.1.2: +schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -2185,7 +2341,7 @@ schema-utils@^3.1.1, schema-utils@^3.1.2: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0: +schema-utils@^4.0.0, schema-utils@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== @@ -2200,7 +2356,7 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -selfsigned@^2.1.1: +selfsigned@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== @@ -2325,6 +2481,11 @@ signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + socket.io-adapter@~2.5.2: version "2.5.4" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz#4fdb1358667f6d68f25343353bd99bd11ee41006" @@ -2341,7 +2502,7 @@ socket.io-parser@~4.2.4: "@socket.io/component-emitter" "~3.1.0" debug "~4.3.1" -socket.io@^4.4.1: +socket.io@^4.7.2: version "4.7.5" resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== @@ -2363,17 +2524,21 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" +sonic-forest@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sonic-forest/-/sonic-forest-1.0.0.tgz#b0b77d9bca76434f4ef87b61042d041da63f3be5" + integrity sha512-yFO2N4uTUFtgKLw03WWFpN1iEwZySweMsa18XN3Kt0yYrlmVHunC2ZgM+437zDoKISAJHcH3Cg18U7d6tuSgSQ== + source-map-js@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== -source-map-loader@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" - integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== +source-map-loader@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-5.0.0.tgz#f593a916e1cc54471cfc8851b905c8a845fc7e38" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== dependencies: - abab "^2.0.6" iconv-lite "^0.6.3" source-map-js "^1.0.2" @@ -2432,7 +2597,7 @@ streamroller@^3.1.5: debug "^4.3.4" fs-extra "^8.1.0" -string-width@^4.1.0, string-width@^4.2.0: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2441,6 +2606,15 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -2455,13 +2629,20 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -2496,7 +2677,7 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.3.7: +terser-webpack-plugin@^5.3.10: version "5.3.10" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== @@ -2517,6 +2698,11 @@ terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" +thingies@^1.20.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" + integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -2539,6 +2725,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +tslib@^2.0.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -2547,10 +2738,10 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" - integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== +typescript@5.4.3: + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== ua-parser-js@^0.7.30: version "0.7.37" @@ -2612,7 +2803,7 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== -watchpack@^2.4.0: +watchpack@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== @@ -2627,15 +2818,15 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -webpack-cli@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.0.tgz#abc4b1f44b50250f2632d8b8b536cfe2f6257891" - integrity sha512-a7KRJnCxejFoDpYTOwzm5o21ZXMaNqtRlvS183XzGDUPRdVEzJNImcQokqYZ8BNTnk9DkKiuWxw75+DCCoZ26w== +webpack-cli@5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^2.1.0" - "@webpack-cli/info" "^2.0.1" - "@webpack-cli/serve" "^2.0.3" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" colorette "^2.0.14" commander "^10.0.1" cross-spawn "^7.0.3" @@ -2646,52 +2837,53 @@ webpack-cli@5.1.0: rechoir "^0.8.0" webpack-merge "^5.7.3" -webpack-dev-middleware@^5.3.1: - version "5.3.4" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" - integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== +webpack-dev-middleware@^7.1.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.2.1.tgz#2af00538b6e4eda05f5afdd5d711dbebc05958f7" + integrity sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA== dependencies: colorette "^2.0.10" - memfs "^3.4.3" + memfs "^4.6.0" mime-types "^2.1.31" + on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@4.15.0: - version "4.15.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz#87ba9006eca53c551607ea0d663f4ae88be7af21" - integrity sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" +webpack-dev-server@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz#cb6ea47ff796b9251ec49a94f24a425e12e3c9b8" + integrity sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" + bonjour-service "^1.2.1" + chokidar "^3.6.0" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" - html-entities "^2.3.2" + html-entities "^2.4.0" http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + rimraf "^5.0.5" + schema-utils "^4.2.0" + selfsigned "^2.4.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" + webpack-dev-middleware "^7.1.0" + ws "^8.16.0" webpack-merge@^4.1.5: version "4.2.2" @@ -2714,34 +2906,34 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.82.0: - version "5.82.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.82.0.tgz#3c0d074dec79401db026b4ba0fb23d6333f88e7d" - integrity sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg== +webpack@5.91.0: + version "5.91.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" + integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" + "@types/estree" "^1.0.5" + "@webassemblyjs/ast" "^1.12.1" + "@webassemblyjs/wasm-edit" "^1.12.1" + "@webassemblyjs/wasm-parser" "^1.12.1" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" + acorn-import-assertions "^1.9.0" + browserslist "^4.21.10" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.13.0" + enhanced-resolve "^5.16.0" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" + graceful-fs "^4.2.11" json-parse-even-better-errors "^2.3.1" loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.2" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" + terser-webpack-plugin "^5.3.10" + watchpack "^2.4.1" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: @@ -2782,7 +2974,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -2791,15 +2983,24 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.13.0: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== +ws@^8.16.0: + version "8.17.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea" + integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== ws@~8.11.0: version "8.11.0" diff --git a/list/build.gradle.kts b/list/build.gradle.kts index 2405ff31..ebed1b42 100644 --- a/list/build.gradle.kts +++ b/list/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -21,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -42,13 +46,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.LIST.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/option/build.gradle.kts b/option/build.gradle.kts index baa53bc9..5ef33fdd 100644 --- a/option/build.gradle.kts +++ b/option/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -21,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -42,13 +46,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.OPTION.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/DisplayMode.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/DisplayMode.kt index b2b3ea90..164a7981 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/DisplayMode.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/DisplayMode.kt @@ -15,9 +15,12 @@ */ package com.maxkeppeler.sheets.option.models +import androidx.compose.runtime.Stable + /** * The display modes that can be used. */ +@Stable enum class DisplayMode { /** diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionConfig.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionConfig.kt index fc8eff9f..d7137149 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionConfig.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionConfig.kt @@ -15,6 +15,7 @@ */ package com.maxkeppeler.sheets.option.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE @@ -26,6 +27,7 @@ import com.maxkeppeler.sheets.option.utils.Constants.GRID_COLUMNS_DEFAULT * @param gridColumns The amount of columns when display mode is [DisplayMode.GRID_VERTICAL]. * @param icons The style of icons that are used for dialog/ view-specific icons. */ +@Stable class OptionConfig( val mode: DisplayMode = DisplayMode.GRID_VERTICAL, val gridColumns: Int = GRID_COLUMNS_DEFAULT, diff --git a/rating/build.gradle.kts b/rating/build.gradle.kts index 5da728c2..a7ba94a4 100644 --- a/rating/build.gradle.kts +++ b/rating/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -21,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -42,13 +46,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.RATING.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt index ef2fe75d..220f7f75 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt @@ -16,6 +16,7 @@ package com.maxkeppeler.sheets.rating import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.Saver @@ -34,6 +35,7 @@ import kotlin.math.max * @param config The general configuration for the dialog view. * @param stateData The data of the state when the state is required to be restored. */ +@Stable internal class RatingState( val selection: RatingSelection, val config: RatingConfig = RatingConfig(), diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt index 6e24094e..2f52f0fa 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt @@ -15,9 +15,12 @@ */ package com.maxkeppeler.sheets.rating.models +import androidx.compose.runtime.Stable + /** * The type of text field that is displayed when using [FeedbackTextFieldType]. */ +@Stable enum class FeedbackTextFieldType { OUTLINED, DEFAULT, diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt index 475c3020..1be26452 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt @@ -15,6 +15,7 @@ */ package com.maxkeppeler.sheets.rating.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.icons.LibIcons import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE @@ -23,7 +24,8 @@ import com.maxkeppeler.sheets.rating.utils.Constants.DEFAULT_RATING_OPTIONS_COUN /** * The general configuration for the rating dialog. */ -class RatingConfig( +@Stable +data class RatingConfig( val ratingViewStyle: RatingViewStyle = RatingViewStyle.CENTER, val feedbackTextFieldType: FeedbackTextFieldType = FeedbackTextFieldType.DEFAULT, val feedbackErrorMessage: String? = null, @@ -35,7 +37,7 @@ class RatingConfig( override val icons: LibIcons = DEFAULT_ICON_STYLE, ) : BaseConfigs() - +@Stable enum class RatingViewStyle { START, CENTER, diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt index 38e6f383..fd2b4211 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt @@ -17,6 +17,7 @@ package com.maxkeppeler.sheets.rating.models +import androidx.compose.runtime.Stable import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants @@ -31,7 +32,8 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param positiveButton The button that will be used as a positive button. * @param onSelectRating The listener that is invoked when a rating is selected. */ -class RatingSelection( +@Stable +data class RatingSelection( override val withButtonView: Boolean = true, override val extraButton: SelectionButton? = null, override val onExtraButtonClick: (() -> Unit)? = null, diff --git a/state/build.gradle.kts b/state/build.gradle.kts index 763ecc43..3ac083ce 100644 --- a/state/build.gradle.kts +++ b/state/build.gradle.kts @@ -1,5 +1,4 @@ import com.vanniktech.maven.publish.SonatypeHost -import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl plugins { alias(libs.plugins.android.library) @@ -21,6 +20,11 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + lint { + checkGeneratedSources = false + checkReleaseBuilds = false + abortOnError = false + } } kotlin { @@ -42,13 +46,6 @@ kotlin { binaries.executable() } - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - moduleName = Modules.STATE.moduleName - browser() - binaries.executable() - } - applyDefaultHierarchyTemplate() sourceSets { diff --git a/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt index dd2fba33..b0300930 100644 --- a/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt +++ b/state/src/commonMain/kotlin/com/maxkeppeler/sheets/state/views/CircularProgressIndicator.kt @@ -41,7 +41,7 @@ internal fun CircularProgressIndicator( ?: indicator.value?.let { progress -> Box(modifier = Modifier.wrapContentSize()) { androidx.compose.material3.CircularProgressIndicator( - progress = progress, + progress = { progress }, modifier = circularIndicatorModifier .testTags(TestTags.STATE_LOADING_CIRCULAR, progress) .align(Alignment.Center) From cee7dbe275d700cad0cf985908c2e3b86e2f5d4d Mon Sep 17 00:00:00 2001 From: DatLag Date: Tue, 30 Apr 2024 20:16:45 +0200 Subject: [PATCH 45/58] update to latest compose version --- build.gradle.kts | 1 + calendar/build.gradle.kts | 1 + clock/build.gradle.kts | 1 + .../com/maxkeppeler/sheets/clock/models/ClockConfig.kt | 1 - .../com/maxkeppeler/sheets/clock/models/ClockSelection.kt | 3 --- color/build.gradle.kts | 1 + .../com/maxkeppeler/sheets/color/models/ColorConfig.kt | 1 - .../com/maxkeppeler/sheets/color/models/ColorSelection.kt | 1 - .../maxkeppeler/sheets/color/models/ColorSelectionMode.kt | 1 - .../com/maxkeppeler/sheets/color/models/SingleColor.kt | 1 - core/build.gradle.kts | 1 + .../kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt | 6 ------ date_time/build.gradle.kts | 1 + duration/build.gradle.kts | 1 + .../kotlin/com/maxkeppeler/sheets/duration/DurationState.kt | 1 - .../maxkeppeler/sheets/duration/models/DurationConfig.kt | 1 - .../maxkeppeler/sheets/duration/models/DurationFormat.kt | 1 - .../maxkeppeler/sheets/duration/models/DurationSelection.kt | 1 - emoji/build.gradle.kts | 1 + gradle/libs.versions.toml | 5 +++-- info/build.gradle.kts | 1 + .../com/maxkeppeler/sheets/info/models/InfoSelection.kt | 1 - input/build.gradle.kts | 1 + .../com/maxkeppeler/sheets/input/models/InputConfig.kt | 1 - .../com/maxkeppeler/sheets/input/models/InputCustomView.kt | 1 - .../com/maxkeppeler/sheets/input/models/InputDivider.kt | 1 - .../com/maxkeppeler/sheets/input/models/InputHeader.kt | 1 - .../kotlin/com/maxkeppeler/sheets/input/models/InputText.kt | 1 - list/build.gradle.kts | 1 + option/build.gradle.kts | 1 + .../com/maxkeppeler/sheets/option/models/DisplayMode.kt | 1 - .../com/maxkeppeler/sheets/option/models/OptionConfig.kt | 1 - rating/build.gradle.kts | 1 + .../kotlin/com/maxkeppeler/sheets/rating/RatingState.kt | 1 - .../sheets/rating/models/FeedbackTextFieldType.kt | 1 - .../com/maxkeppeler/sheets/rating/models/RatingConfig.kt | 2 -- .../com/maxkeppeler/sheets/rating/models/RatingSelection.kt | 1 - state/build.gradle.kts | 1 + 38 files changed, 17 insertions(+), 33 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2a1838fd..922e51ec 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,6 +20,7 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.compose) apply false + alias(libs.plugins.compose.compiler) apply false alias(libs.plugins.multiplatform) apply false alias(libs.plugins.publish) apply false } diff --git a/calendar/build.gradle.kts b/calendar/build.gradle.kts index 105d44f8..28847012 100644 --- a/calendar/build.gradle.kts +++ b/calendar/build.gradle.kts @@ -18,6 +18,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/clock/build.gradle.kts b/clock/build.gradle.kts index 702372d7..02b95b82 100644 --- a/clock/build.gradle.kts +++ b/clock/build.gradle.kts @@ -18,6 +18,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt index 73d1b6b6..b4989c0a 100644 --- a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockConfig.kt @@ -30,7 +30,6 @@ import kotlinx.datetime.LocalTime * @param icons The style of icons that are used for dialog/ view-specific icons. * @param orientation The orientation of the view or null for auto orientation. */ -@Stable data class ClockConfig( val defaultTime: LocalTime? = null, val boundary: ClosedRange? = null, diff --git a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt index 5b95d53f..0032cdc9 100644 --- a/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt +++ b/clock/src/commonMain/kotlin/com/maxkeppeler/sheets/clock/models/ClockSelection.kt @@ -25,7 +25,6 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants /** * The selection configuration for the clock dialog. */ -@Stable sealed class ClockSelection : BaseSelection() { /** @@ -38,7 +37,6 @@ sealed class ClockSelection : BaseSelection() { * @param positiveButton The button that will be used as a positive button. * @param onPositiveClick The listener that returns the selected hours and minutes. */ - @Stable data class HoursMinutes( override val withButtonView: Boolean = false, override val extraButton: SelectionButton? = null, @@ -59,7 +57,6 @@ sealed class ClockSelection : BaseSelection() { * @param positiveButton The button that will be used as a positive button. * @param onPositiveClick The listener that returns the selected hours, minutes and seconds. */ - @Stable data class HoursMinutesSeconds( override val withButtonView: Boolean = false, override val extraButton: SelectionButton? = null, diff --git a/color/build.gradle.kts b/color/build.gradle.kts index 92baa931..0c828378 100644 --- a/color/build.gradle.kts +++ b/color/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt index 9668ab1d..0dac9420 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorConfig.kt @@ -28,7 +28,6 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE * @param allowCustomColorAlphaValues Allow alpha values in the custom color picker. * @param icons The style of icons that are used for dialog/ view-specific icons. */ -@Stable data class ColorConfig( val displayMode: ColorSelectionMode? = null, val defaultDisplayMode: ColorSelectionMode? = null, diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt index 6769fa13..0bf0c814 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelection.kt @@ -34,7 +34,6 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param onSelectNone The listener that is invoked when no color is selected. * @param onSelectColor The listener that returns the selected color. */ -@Stable data class ColorSelection( val selectedColor: SingleColor? = null, override val withButtonView: Boolean = true, diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt index fdaec461..efdc70f7 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/ColorSelectionMode.kt @@ -21,7 +21,6 @@ import kotlinx.serialization.Serializable /** * Defined display modes for the calendar. */ -@Stable @Serializable enum class ColorSelectionMode { diff --git a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt index 237d2190..3c501d39 100644 --- a/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt +++ b/color/src/commonMain/kotlin/com/maxkeppeler/sheets/color/models/SingleColor.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.graphics.toArgb * @param colorRes Res of color value. * @param colorHex Color value as Hex-String. */ -@Stable data class SingleColor( val colorInt: Int? = null, val colorHex: String? = null, diff --git a/core/build.gradle.kts b/core/build.gradle.kts index a06608bc..c24c0d37 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -18,6 +18,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt index c6a9a974..fc40f34d 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/icons/LibIcons.kt @@ -7,7 +7,6 @@ import androidx.compose.ui.graphics.vector.ImageVector import com.maxkeppeker.sheets.core.utils.JvmSerializable import kotlinx.serialization.Serializable -@Stable sealed class LibIcons : JvmSerializable { abstract var EmojiEmotions: ImageVector @@ -37,7 +36,6 @@ sealed class LibIcons : JvmSerializable { * [Filled icons](https://material.io/resources/icons/?style=baseline) (previously the only * available theme, also known as the baseline theme) are the default icon theme. */ - @Stable data object Filled : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.filled.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.filled.EmojiNature @@ -67,7 +65,6 @@ sealed class LibIcons : JvmSerializable { * [Outlined icons](https://material.io/resources/icons/?style=outline) make use of a thin * stroke and empty space inside for a lighter appearance. */ - @Stable data object Outlined : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.outlined.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.outlined.EmojiNature @@ -98,7 +95,6 @@ sealed class LibIcons : JvmSerializable { * pairs well with brands that use heavier typography, curved logos, or circular elements to * express their style. */ - @Stable data object Rounded : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.rounded.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.rounded.EmojiNature @@ -129,7 +125,6 @@ sealed class LibIcons : JvmSerializable { * straight edges, for a crisp style that remains legible even at smaller scales. These * rectangular shapes can support brand styles that are not well-reflected by rounded shapes. */ - @Stable data object TwoTone : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.twotone.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.twotone.EmojiNature @@ -160,7 +155,6 @@ sealed class LibIcons : JvmSerializable { * straight edges, for a crisp style that remains legible even at smaller scales. These * rectangular shapes can support brand styles that are not well-reflected by rounded shapes. */ - @Stable data object Sharp : LibIcons() { override var EmojiEmotions = com.maxkeppeker.sheets.core.icons.sharp.EmojiEmotions override var EmojiNature = com.maxkeppeker.sheets.core.icons.sharp.EmojiNature diff --git a/date_time/build.gradle.kts b/date_time/build.gradle.kts index f5f1e109..9dd1cccd 100644 --- a/date_time/build.gradle.kts +++ b/date_time/build.gradle.kts @@ -18,6 +18,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/duration/build.gradle.kts b/duration/build.gradle.kts index a53a7f8d..a5601c17 100644 --- a/duration/build.gradle.kts +++ b/duration/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt index 89a58da1..ec86cac6 100644 --- a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/DurationState.kt @@ -34,7 +34,6 @@ import com.maxkeppeker.sheets.core.utils.JvmSerializable * @param config The general configuration for the dialog view. * @param stateData The data of the state when the state is required to be restored. */ -@Stable internal class DurationState( val selection: DurationSelection, val config: DurationConfig, diff --git a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt index 227697e9..e526bc54 100644 --- a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationConfig.kt @@ -31,7 +31,6 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param icons The style of icons that are used for dialog/ view-specific icons. * @param orientation The orientation of the view or null for auto orientation. */ -@Stable data class DurationConfig( val timeFormat: DurationFormat = DurationFormat.MM_SS, val currentTime: Long? = null, diff --git a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt index deec2267..884f20a9 100644 --- a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationFormat.kt @@ -20,7 +20,6 @@ import androidx.compose.runtime.Stable /** * Available time formats. */ -@Stable enum class DurationFormat { /** HH:mm:ss (e. g. 12h 10m 30s) */ diff --git a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt index 1ab30645..e5d44800 100644 --- a/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt +++ b/duration/src/commonMain/kotlin/com/maxkeppeler/sheets/duration/models/DurationSelection.kt @@ -32,7 +32,6 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param positiveButton The button that will be used as a positive button. * @param onPositiveClick The listener that returns the selected duration time in seconds. */ -@Stable class DurationSelection( override val withButtonView: Boolean = true, override val extraButton: SelectionButton? = null, diff --git a/emoji/build.gradle.kts b/emoji/build.gradle.kts index 57980271..0505de79 100644 --- a/emoji/build.gradle.kts +++ b/emoji/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7423761d..2626cf7f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ activity-compose = "1.8.2" android = "8.2.2" androidx-core-ktx = "1.12.0" -compose = "1.6.10-beta02" +compose = "1.6.10-beta03" compose-compiler = "1.5.11" androidx-test-core = "1.5.0" datetime = "0.6.0-RC.2" @@ -11,7 +11,7 @@ emoji = "0.18.0" espresso-core = "3.5.1" junit = "1.1.5" junit-version = "4.13.2" -kotlin = "2.0.0-RC1" +kotlin = "2.0.0-RC2" lifecycle-runtime-ktx = "2.7.0" navigation-compose = "2.7.7" publish = "0.28.0" @@ -48,6 +48,7 @@ android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } android-application = { id = "com.android.application", version.ref = "android" } android-library = { id = "com.android.library", version.ref = "android" } compose = { id = "org.jetbrains.compose", version.ref = "compose" } +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } publish = { id = "com.vanniktech.maven.publish", version.ref = "publish" } serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } \ No newline at end of file diff --git a/info/build.gradle.kts b/info/build.gradle.kts index 1fa2424c..00405def 100644 --- a/info/build.gradle.kts +++ b/info/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt index 671702a3..eea114e6 100644 --- a/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt +++ b/info/src/commonMain/kotlin/com/maxkeppeler/sheets/info/models/InfoSelection.kt @@ -32,7 +32,6 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param positiveButton The button that will be used as a positive button. * @param onPositiveClick The listener that is invoked when the positive button is clicked. */ -@Stable class InfoSelection( override val withButtonView: Boolean = true, override val extraButton: SelectionButton? = null, diff --git a/input/build.gradle.kts b/input/build.gradle.kts index c9d85d70..8fe05b8b 100644 --- a/input/build.gradle.kts +++ b/input/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt index 69fd5539..1f85a203 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputConfig.kt @@ -25,7 +25,6 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants.DEFAULT_ICON_STYLE * @param columns Set the amount of columns inputs can span. * @param icons The style of icons that are used for dialog/ view-specific icons. */ -@Stable data class InputConfig( val columns: Int = 1, override val icons: LibIcons = DEFAULT_ICON_STYLE, diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt index 8838295b..464b5f19 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputCustomView.kt @@ -26,7 +26,6 @@ import androidx.compose.runtime.Stable * @param header The additional [InputHeader] to add more context information to the selection. * @param columns The columns that this input spans. */ -@Stable data class InputCustomView( internal val view: @Composable () -> Unit, override val header: InputHeader? = null, diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt index f0f3ec92..71f4407d 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputDivider.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.Stable * Represents a divider. * @param columns The columns that this input spans. */ -@Stable data class InputDivider( override val columns: Int? = null, ) : Input() { diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt index a1dce58d..15cb7fb4 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputHeader.kt @@ -29,7 +29,6 @@ import kotlinx.serialization.Transient * @param body The text that is used for the body. * @param icon The icon that is displayed on the left side of the title. */ -@Stable @Serializable data class InputHeader( val title: String? = null, diff --git a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt index ff9af272..60f99d51 100644 --- a/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt +++ b/input/src/commonMain/kotlin/com/maxkeppeler/sheets/input/models/InputText.kt @@ -25,7 +25,6 @@ import androidx.compose.runtime.Stable * @param header The additional [InputHeader] to add more context information to the selection. * @param columns The columns that this input spans. */ -@Stable data class InputText( internal val text: String, override val header: InputHeader? = null, diff --git a/list/build.gradle.kts b/list/build.gradle.kts index ebed1b42..55f1681f 100644 --- a/list/build.gradle.kts +++ b/list/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/option/build.gradle.kts b/option/build.gradle.kts index 5ef33fdd..752160b2 100644 --- a/option/build.gradle.kts +++ b/option/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/DisplayMode.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/DisplayMode.kt index 164a7981..0a84376c 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/DisplayMode.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/DisplayMode.kt @@ -20,7 +20,6 @@ import androidx.compose.runtime.Stable /** * The display modes that can be used. */ -@Stable enum class DisplayMode { /** diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionConfig.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionConfig.kt index d7137149..d66e449c 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionConfig.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionConfig.kt @@ -27,7 +27,6 @@ import com.maxkeppeler.sheets.option.utils.Constants.GRID_COLUMNS_DEFAULT * @param gridColumns The amount of columns when display mode is [DisplayMode.GRID_VERTICAL]. * @param icons The style of icons that are used for dialog/ view-specific icons. */ -@Stable class OptionConfig( val mode: DisplayMode = DisplayMode.GRID_VERTICAL, val gridColumns: Int = GRID_COLUMNS_DEFAULT, diff --git a/rating/build.gradle.kts b/rating/build.gradle.kts index a7ba94a4..e3948abd 100644 --- a/rating/build.gradle.kts +++ b/rating/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt index 220f7f75..919a9153 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/RatingState.kt @@ -35,7 +35,6 @@ import kotlin.math.max * @param config The general configuration for the dialog view. * @param stateData The data of the state when the state is required to be restored. */ -@Stable internal class RatingState( val selection: RatingSelection, val config: RatingConfig = RatingConfig(), diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt index 2f52f0fa..382fc52e 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/FeedbackTextFieldType.kt @@ -20,7 +20,6 @@ import androidx.compose.runtime.Stable /** * The type of text field that is displayed when using [FeedbackTextFieldType]. */ -@Stable enum class FeedbackTextFieldType { OUTLINED, DEFAULT, diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt index 1be26452..7db02a95 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingConfig.kt @@ -24,7 +24,6 @@ import com.maxkeppeler.sheets.rating.utils.Constants.DEFAULT_RATING_OPTIONS_COUN /** * The general configuration for the rating dialog. */ -@Stable data class RatingConfig( val ratingViewStyle: RatingViewStyle = RatingViewStyle.CENTER, val feedbackTextFieldType: FeedbackTextFieldType = FeedbackTextFieldType.DEFAULT, @@ -37,7 +36,6 @@ data class RatingConfig( override val icons: LibIcons = DEFAULT_ICON_STYLE, ) : BaseConfigs() -@Stable enum class RatingViewStyle { START, CENTER, diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt index fd2b4211..bad88029 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/models/RatingSelection.kt @@ -32,7 +32,6 @@ import com.maxkeppeker.sheets.core.utils.BaseConstants * @param positiveButton The button that will be used as a positive button. * @param onSelectRating The listener that is invoked when a rating is selected. */ -@Stable data class RatingSelection( override val withButtonView: Boolean = true, override val extraButton: SelectionButton? = null, diff --git a/state/build.gradle.kts b/state/build.gradle.kts index 3ac083ce..7fe380bf 100644 --- a/state/build.gradle.kts +++ b/state/build.gradle.kts @@ -3,6 +3,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { alias(libs.plugins.android.library) alias(libs.plugins.compose) + alias(libs.plugins.compose.compiler) alias(libs.plugins.multiplatform) alias(libs.plugins.serialization) alias(libs.plugins.publish) From 90b23afa76543b34d20bb7646e16a3d08d16e6db Mon Sep 17 00:00:00 2001 From: DatLag Date: Tue, 30 Apr 2024 23:43:28 +0200 Subject: [PATCH 46/58] option invoke click listener --- .../com/maxkeppeler/sheets/option/models/Option.kt | 1 + .../sheets/option/views/OptionItemComponent.kt | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/Option.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/Option.kt index f6bc76ea..dd834468 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/Option.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/Option.kt @@ -44,6 +44,7 @@ data class Option( val selected: Boolean = false, val disabled: Boolean = false, val details: OptionDetails? = null, + val onClick: (() -> Unit)? = null, val onLongClick: (() -> Unit)? = null, @Transient @kotlin.jvm.Transient val customView: (@Composable (selected: Boolean) -> Unit)? = null, @Transient @kotlin.jvm.Transient val listTopView: (@Composable (selected: Boolean) -> Unit)? = null, diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionItemComponent.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionItemComponent.kt index cf182162..066b9231 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionItemComponent.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionItemComponent.kt @@ -16,8 +16,10 @@ package com.maxkeppeler.sheets.option.views +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.clickable +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -40,6 +42,7 @@ import com.maxkeppeler.sheets.option.models.OptionConfig * @param inputDisabled If input is disabled. * @param size The size that should be applied to the option component. */ +@OptIn(ExperimentalFoundationApi::class) @Composable internal fun OptionItemComponent( config: OptionConfig, @@ -63,7 +66,16 @@ internal fun OptionItemComponent( .testTags(TestTags.OPTION_VIEW_SELECTION, option.position) .wrapContentHeight() .clip(MaterialTheme.shapes.medium) - .clickable(!inputDisabled && !option.disabled) { onClick(option) } + .combinedClickable( + enabled = !inputDisabled && !option.disabled, + onClick = { + onClick(option) + option.onClick?.invoke() + }, + onLongClick = { + option.onLongClick?.invoke() + } + ) .then(if (option.disabled || option.selected) Modifier.background(backgroundColor) else Modifier) val detailDialogState = rememberUseCaseState(false) From 01e57b0c02b1a76d6536f620937dfba692104575 Mon Sep 17 00:00:00 2001 From: DatLag Date: Sun, 12 May 2024 17:06:59 +0200 Subject: [PATCH 47/58] option icon size --- .../maxkeppeler/sheets/option/views/OptionGridItemComponent.kt | 2 +- .../maxkeppeler/sheets/option/views/OptionListItemComponent.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt index 2e6d2fbd..ec7088b3 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt @@ -90,7 +90,7 @@ internal fun OptionGridItemComponent( ) { option.icon?.let { IconComponent( - modifier = Modifier.size(48.dp), + modifier = Modifier.size(24.dp).padding(12.dp), iconSource = it, tint = iconColor ) diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt index 2e2ddd8e..30a46cfe 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt @@ -61,7 +61,8 @@ internal fun OptionListItemComponent( IconComponent( modifier = Modifier .padding(start = 24.dp) - .size(48.dp), + .size(24.dp) + .padding(12.dp), iconSource = it, tint = iconColor ) From b022d95b598efb150c13b167ff19d96633da0d76 Mon Sep 17 00:00:00 2001 From: DatLag Date: Sun, 12 May 2024 17:10:06 +0200 Subject: [PATCH 48/58] rating body max width --- .../maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt index 361a3bb6..45ec85a0 100644 --- a/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt +++ b/rating/src/commonMain/kotlin/com/maxkeppeler/sheets/rating/views/BodyDefaultComponent.kt @@ -16,6 +16,7 @@ package com.maxkeppeler.sheets.rating.views import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text @@ -41,12 +42,13 @@ internal fun DefaultBodyComponent( ) { Column( modifier = Modifier + .fillMaxWidth() .testTag(TestTags.RATING_BODY_DEFAULT) .padding(top = 16.dp) ) { body.preBody() Text( - modifier = Modifier.testTag(TestTags.RATING_BODY_DEFAULT_TEXT), + modifier = Modifier.fillMaxWidth().testTag(TestTags.RATING_BODY_DEFAULT_TEXT), textAlign = if (config.ratingViewStyle == RatingViewStyle.START) TextAlign.Start else TextAlign.Center, text = body.bodyText, style = MaterialTheme.typography.bodyMedium From dd2451a706b41b869da4934344f00136fe33a5f4 Mon Sep 17 00:00:00 2001 From: DatLag Date: Sun, 12 May 2024 17:37:34 +0200 Subject: [PATCH 49/58] revert sizing --- .../maxkeppeler/sheets/option/views/OptionGridItemComponent.kt | 2 +- .../maxkeppeler/sheets/option/views/OptionListItemComponent.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt index ec7088b3..a6556abd 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionGridItemComponent.kt @@ -90,7 +90,7 @@ internal fun OptionGridItemComponent( ) { option.icon?.let { IconComponent( - modifier = Modifier.size(24.dp).padding(12.dp), + modifier = Modifier.size(48.dp).padding(12.dp), iconSource = it, tint = iconColor ) diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt index 30a46cfe..9dfff74b 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/OptionListItemComponent.kt @@ -61,7 +61,7 @@ internal fun OptionListItemComponent( IconComponent( modifier = Modifier .padding(start = 24.dp) - .size(24.dp) + .size(48.dp) .padding(12.dp), iconSource = it, tint = iconColor From f16d2d39f0c85d32f78325c663dd534206da4681 Mon Sep 17 00:00:00 2001 From: DatLag Date: Mon, 13 May 2024 23:03:43 +0200 Subject: [PATCH 50/58] revert LocalDate calculations and fix visual error --- .../calendar/models/FormatLocale.android.kt | 2 + .../sheets/calendar/ExtendDateTime.kt | 43 -- .../calendar/models/CalendarSelection.kt | 2 +- .../sheets/calendar/utils/Constants.kt | 9 +- .../sheets/calendar/utils/DayOfWeekUtils.kt | 5 +- .../sheets/calendar/utils/ExtendDateTime.kt | 474 ++++++++++++++++++ .../sheets/calendar/utils/Utils.kt | 418 --------------- .../views/CalendarDateItemComponent.kt | 16 +- .../calendar/views/CalendarTopComponent.kt | 25 +- .../calendar/views/MonthItemComponent.kt | 10 +- .../calendar/views/YearSelectionView.kt | 2 +- 11 files changed, 523 insertions(+), 483 deletions(-) delete mode 100644 calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/ExtendDateTime.kt create mode 100644 calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt diff --git a/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt b/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt index 53c13dd2..b5707273 100644 --- a/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt +++ b/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt @@ -1,5 +1,7 @@ package com.maxkeppeler.sheets.calendar.models +import android.util.Range +import java.time.LocalDate import java.util.* private fun FormatLocale.Companion.fromLocale(locale: Locale = Locale.getDefault()): FormatLocale { diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/ExtendDateTime.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/ExtendDateTime.kt deleted file mode 100644 index 7e6c573c..00000000 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/ExtendDateTime.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.maxkeppeler.sheets.calendar - -import kotlinx.datetime.* - -internal fun LocalDate.Companion.now(): LocalDate { - return Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date -} - -class LocalDateRange( - override val start: LocalDate, - override val endInclusive: LocalDate -) : ClosedRange, OpenEndRange { - - override val endExclusive: LocalDate - get() = endInclusive.plus(1, DateTimeUnit.DAY) - - override fun contains(value: LocalDate): Boolean { - return value in start..endInclusive - } - - override fun isEmpty(): Boolean { - return start > endInclusive - } - -} - -internal fun LocalDate.monthShort(): String { - return when (this.month) { - Month.JANUARY -> "Jan" - Month.FEBRUARY -> "Feb" - Month.MARCH -> "Mar" - Month.APRIL -> "Apr" - Month.MAY -> "May" - Month.JUNE -> "Jun" - Month.JULY -> "Jul" - Month.AUGUST -> "Aug" - Month.SEPTEMBER -> "Sep" - Month.OCTOBER -> "Oct" - Month.NOVEMBER -> "Nov" - Month.DECEMBER -> "Dec" - else -> month.name - } -} \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt index 46cba767..2fc1cb83 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/CalendarSelection.kt @@ -20,7 +20,7 @@ package com.maxkeppeler.sheets.calendar.models import com.maxkeppeker.sheets.core.models.base.BaseSelection import com.maxkeppeker.sheets.core.models.base.SelectionButton import com.maxkeppeker.sheets.core.utils.BaseConstants -import com.maxkeppeler.sheets.calendar.LocalDateRange +import com.maxkeppeler.sheets.calendar.utils.LocalDateRange import kotlinx.datetime.LocalDate /** diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt index ad315c23..5a5d2b36 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Constants.kt @@ -15,7 +15,6 @@ */ package com.maxkeppeler.sheets.calendar.utils -import com.maxkeppeler.sheets.calendar.now import kotlinx.datetime.DateTimeUnit import kotlinx.datetime.LocalDate import kotlinx.datetime.plus @@ -32,10 +31,10 @@ internal object Constants { internal const val DEFAULT_YEAR_SELECTION = false private val DEFAULT_RANGE_START_DATE = LocalDate(1980, 3, 15) - private const val DEFAULT_RANGE_END_YEAR_OFFSET = 20L - private val DEFAULT_RANGE_END_DATE = LocalDate.now().plus(DEFAULT_RANGE_END_YEAR_OFFSET, DateTimeUnit.YEAR).run { - LocalDate(this.year, 1, 15) - } + private const val DEFAULT_RANGE_END_YEAR_OFFSET = 20 + private val DEFAULT_RANGE_END_DATE = LocalDate.now().plusYears(DEFAULT_RANGE_END_YEAR_OFFSET) + .withMonth(1) + .withDayOfMonth(15) internal val DEFAULT_RANGE = DEFAULT_RANGE_START_DATE..DEFAULT_RANGE_END_DATE diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt index c802e6dc..3e925cb7 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt @@ -38,8 +38,9 @@ internal fun getDayOfWeekLabels(locale: FormatLocale): Map = * @return an ordered list of DayOfWeek values starting with the locale's first day of the week */ internal fun getOrderedDaysOfWeek(locale: FormatLocale): List { - val daysOfWeek = DayOfWeek.entries.toTypedArray() - val orderedDays = daysOfWeek.sortedBy { (it.isoDayNumber - 1 + 7) % 7 } + val firstDayOfWeek = DayOfWeek.MONDAY.isoDayNumber + val daysOfWeek = DayOfWeek.entries + val orderedDays = daysOfWeek.sortedBy { (it.isoDayNumber - firstDayOfWeek + 7) % 7 } return orderedDays } diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt new file mode 100644 index 00000000..c3c890ee --- /dev/null +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt @@ -0,0 +1,474 @@ +package com.maxkeppeler.sheets.calendar.utils + +import com.maxkeppeler.sheets.calendar.models.* +import com.maxkeppeler.sheets.calendar.models.CalendarMonthData +import kotlinx.datetime.* +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern + +internal fun LocalDate.Companion.now(): LocalDate { + return Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date +} + +class LocalDateRange( + override val start: LocalDate, + override val endInclusive: LocalDate +) : ClosedRange, OpenEndRange { + + override val endExclusive: LocalDate + get() = endInclusive.plus(1, DateTimeUnit.DAY) + + override fun contains(value: LocalDate): Boolean { + return value in start..endInclusive + } + + override fun isEmpty(): Boolean { + return start > endInclusive + } + +} + +// ToDo("wait for kotlin datetime with locale parser") +internal fun LocalDate.monthShort(): String { + return when (this.month) { + Month.JANUARY -> "Jan" + Month.FEBRUARY -> "Feb" + Month.MARCH -> "Mar" + Month.APRIL -> "Apr" + Month.MAY -> "May" + Month.JUNE -> "Jun" + Month.JULY -> "Jul" + Month.AUGUST -> "Aug" + Month.SEPTEMBER -> "Sep" + Month.OCTOBER -> "Oct" + Month.NOVEMBER -> "Nov" + Month.DECEMBER -> "Dec" + else -> month.name + } +} + +internal fun LocalDate.withYear(value: Int): LocalDate = LocalDate( + year = value, + month = this.month, + dayOfMonth = this.dayOfMonth +) + +internal fun LocalDate.withMonth(value: Month): LocalDate = LocalDate( + year = this.year, + month = value, + dayOfMonth = this.dayOfMonth, +) + +internal fun LocalDate.withMonth(value: Int): LocalDate = LocalDate( + year = this.year, + monthNumber = value, + dayOfMonth = this.dayOfMonth, +) + +internal fun LocalDate.withDayOfMonth(value: Int): LocalDate = LocalDate( + year = this.year, + month = this.month, + dayOfMonth = value +) + +internal fun LocalDate.plusYears(value: Int) = this.plus(value, DateTimeUnit.YEAR) + +internal fun LocalDate.minusYears(value: Int) = this.minus(value, DateTimeUnit.YEAR) + +internal fun LocalDate.plusMonths(value: Int) = this.plus(value, DateTimeUnit.MONTH) + +internal fun LocalDate.minusMonths(value: Int) = this.minus(value, DateTimeUnit.MONTH) + +internal fun LocalDate.plusWeeks(value: Int) = this.plus(value, DateTimeUnit.WEEK) + +internal fun LocalDate.minusWeeks(value: Int) = this.minus(value, DateTimeUnit.WEEK) + +internal fun LocalDate.plusDays(value: Int) = this.plus(value, DateTimeUnit.DAY) + +internal fun LocalDate.minusDays(value: Int) = this.minus(value, DateTimeUnit.DAY) + +internal val LocalDate.startOfWeek: LocalDate + get() = minusDays(dayOfWeek.isoDayNumber - 1) + +internal val LocalDate.endOfWeek: LocalDate + get() = plusDays(7 - dayOfWeek.isoDayNumber) + +/** + * Extension function that jumps to the first day of the month. + * + * @return [LocalDate] representing the first day of the month + */ +internal val LocalDate.startOfWeekOrMonth: LocalDate + get() { + var result = this + while (result.dayOfMonth > 1 && result.dayOfWeek != DayOfWeek.MONDAY) { + result = result.minusDays(1) + } + return result + } + +internal val LocalDate.startOfMonth: LocalDate + get() = withDayOfMonth(1) + +/** + * Extension function that checks if year is a leap year. + * + * Example: 2016, 2020, 2024, etc + * + * @return [Boolean] whether year is a leap year + */ +internal val LocalDate.isLeapYear: Boolean + get() { + var isLeapYear = year % 4 == 0 + isLeapYear = isLeapYear && (year % 100 != 0 || year % 400 == 0) + + return isLeapYear + } + +/** + * Extension function that gets the maximum days of month + * + * @return [Int] of days in month + */ +internal fun Month.length(leapYear: Boolean): Int = when (this) { + Month.JANUARY -> 31 + Month.FEBRUARY -> { + if (leapYear) { + 29 + } else { + 28 + } + } + Month.MARCH -> 31 + Month.APRIL -> 30 + Month.MAY -> 31 + Month.JUNE -> 30 + Month.JULY -> 31 + Month.AUGUST -> 31 + Month.SEPTEMBER -> 30 + Month.OCTOBER -> 31 + Month.NOVEMBER -> 30 + Month.DECEMBER -> 31 + else -> 30 +} + +internal fun LocalDate.with(dayOfWeek: DayOfWeek): LocalDate { + var result = this + while (result.dayOfWeek != dayOfWeek) { + result = result.minusDays(1) + } + return result +} + +/** + * Extension function that gets the maximum days of month + * + * @return [Int] of days in month + */ +internal val LocalDate.lengthOfMonth: Int + get() = month.length(isLeapYear) + +/** + +Extension function that jumps to the last day of the month. +@return [LocalDate] representing the last day of the month + */ +internal val LocalDate.endOfMonth: LocalDate + get() = withDayOfMonth(lengthOfMonth) + +/** + * Get the first day of the previous week from the current date. + * + * Skips in current week to previous month's Monday if day is the first day of the month and not Monday. + * Skips to previous week if the current day of the month is greater than or equal to 7 or is the first day of the month and is Monday. + * Skips to the first day of the previous month otherwise. + * @return The first day of the previous week as a `LocalDate` object. + */ +internal val LocalDate.previousWeek: LocalDate + get() = when { + dayOfMonth == Constants.FIRST_DAY_IN_MONTH + && dayOfWeek != DayOfWeek.MONDAY -> with(DayOfWeek.MONDAY) + + dayOfMonth >= Constants.DAYS_IN_WEEK + || dayOfMonth == Constants.FIRST_DAY_IN_MONTH + && dayOfWeek == DayOfWeek.MONDAY -> minusWeeks(1) + + else -> withDayOfMonth(Constants.FIRST_DAY_IN_MONTH) + } + +/** + * Get the date of the next week from the current date. + * + * The next week is determined based on the current day of the month and the remaining days in the month. + * If the current day of the month is the first day of the month, it skips to the next Monday. + * If there are less than 7 days remaining in the current month, it skips to the first day of the next month. + * @return The first day of the next week as a `LocalDate` object. + */ +internal val LocalDate.nextWeek: LocalDate + get() = when { + dayOfMonth == Constants.FIRST_DAY_IN_MONTH -> plusDays((7 - dayOfWeek.isoDayNumber) + 1) + lengthOfMonth - dayOfMonth >= Constants.DAYS_IN_WEEK -> plusWeeks(1) + else -> plusMonths(1).withDayOfMonth(Constants.FIRST_DAY_IN_MONTH) + } + +/** + * Returns a new `LocalDate` instance representing the previous date based on the `CalendarConfig` passed. + * + * If `CalendarConfig.style` is set to `CalendarStyle.MONTH`, the function returns the first day of the previous month. + * If `CalendarConfig.style` is set to `CalendarStyle.WEEK`, the function returns the first day (Monday) of the previous week. + * + * @param config The `CalendarConfig` to determine the jump step. + * @return A new `LocalDate` instance representing the previous date based on the `CalendarConfig`. + */ +internal fun LocalDate.jumpPrev(config: CalendarConfig): LocalDate = when (config.style) { + CalendarStyle.MONTH -> this.minusMonths(1).withDayOfMonth(1) + CalendarStyle.WEEK -> this.previousWeek +} + +/** + * Returns a new `LocalDate` instance representing the next date based on the `CalendarConfig` passed. + * + * If `CalendarConfig.style` is set to `CalendarStyle.MONTH`, the function returns the first day of the next month. + * If `CalendarConfig.style` is set to `CalendarStyle.WEEK`, the function returns the first day (Monday) of the next week. + * + * @param config The `CalendarConfig` to determine the jump step. + * @return A new `LocalDate` instance representing the next date based on the `CalendarConfig`. + */ +internal fun LocalDate.jumpNext(config: CalendarConfig): LocalDate = when (config.style) { + CalendarStyle.MONTH -> this.plusMonths(1).withDayOfMonth(1) + CalendarStyle.WEEK -> this.nextWeek +} + +/** + * Returns the initial date to be displayed on the CalendarView based on the selection mode. + * @param selection The selection mode. + * @param boundary The boundary of the calendar. + * @return The initial date to be displayed on the CalendarView. + */ +internal fun getInitialCameraDate( + selection: CalendarSelection, + boundary: ClosedRange +): LocalDate { + val cameraDateBasedOnMode = when (selection) { + is CalendarSelection.Date -> selection.selectedDate + is CalendarSelection.Dates -> selection.selectedDates?.firstOrNull() + is CalendarSelection.Period -> selection.selectedRange?.start + } ?: run { + val now = LocalDate.now() + if (now in boundary) now else boundary.start + } + return cameraDateBasedOnMode.startOfWeekOrMonth +} + +/** + * Returns the custom initial date in case the camera date is within the boundary. Otherwise, it returns null. + * + * @param cameraDate The initial camera date. + * @param boundary The boundary of the calendar. + * @return The initial camera date if it's within the boundary, otherwise null. + */ +internal fun getInitialCustomCameraDate( + cameraDate: LocalDate?, + boundary: ClosedRange +): LocalDate? = cameraDate?.takeIf { it in boundary }?.startOfWeekOrMonth + +/** + * Get selection value of date. + */ +internal val CalendarSelection.dateValue: LocalDate? + get() = if (this is CalendarSelection.Date) selectedDate else null + +/** + * Get selection value of dates. + */ +internal val CalendarSelection.datesValue: Array + get() = if (this is CalendarSelection.Dates) selectedDates.orEmpty().toTypedArray() else emptyArray() + +/** + * Get selection value of range. + */ +internal val CalendarSelection.rangeValue: Array + get() = if (this is CalendarSelection.Period) { + arrayOf(selectedRange?.start, selectedRange?.endInclusive) + } else { + emptyArray() + } + +/** + * Get range start value. + */ +internal val Iterable.startValue: LocalDate? + get() = this.toList().getOrNull(Constants.RANGE_START) + +/** + * Get range end value. + */ +internal val Iterable.endValue: LocalDate? + get() = this.toList().getOrNull(Constants.RANGE_END) + +internal fun LocalDate.isAfter(other: LocalDate): Boolean = this > other + +internal fun LocalDate.isBefore(other: LocalDate): Boolean = this < other + +/** + * Calculate the month data based on the camera date and the restrictions. + */ +internal fun calcMonthData( + config: CalendarConfig, + cameraDate: LocalDate, + today: LocalDate = LocalDate.now(), +): CalendarMonthData { + val months = Month.entries + + val boundaryFilteredMonths = months.filter { month -> + val maxDaysOfMonth = month.length(cameraDate.isLeapYear) + val startDay = minOf(config.boundary.start.dayOfMonth, maxDaysOfMonth) + val endDay = minOf(config.boundary.endInclusive.dayOfMonth, maxDaysOfMonth) + val cameraDateWithMonth = cameraDate.withMonth(month).withDayOfMonth(startDay) + cameraDateWithMonth in config.boundary || cameraDateWithMonth.withDayOfMonth(endDay) in config.boundary + } + + return CalendarMonthData( + selected = cameraDate.month, + thisMonth = today.month, + disabled = months.minus(boundaryFilteredMonths.toSet()) + ) +} + +/** + * Calculate the calendar data based on the camera-date. + */ +@OptIn(FormatStringsInDatetimeFormats::class) +internal fun calcCalendarData( + config: CalendarConfig, + cameraDate: LocalDate, +): CalendarData { + var weekCameraDate = cameraDate + + val firstDayOfWeek = DayOfWeek.MONDAY + val dayOfWeek = cameraDate.dayOfWeek + val diff = (dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7 + + val offsetStart = when (config.style) { + CalendarStyle.MONTH -> diff + CalendarStyle.WEEK -> { + val dayOfWeekInMonth = cameraDate.startOfMonth.dayOfWeek + val dayDiff = (dayOfWeekInMonth.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7 + + val adjustedWeekCameraDate = if (cameraDate.dayOfMonth <= Constants.DAYS_IN_WEEK && dayDiff > 0) { + cameraDate.minusDays((cameraDate.dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7) + } else { + weekCameraDate + } + + ((adjustedWeekCameraDate.dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7).also { + weekCameraDate = adjustedWeekCameraDate + } + } + } + + val days = when (config.style) { + CalendarStyle.MONTH -> cameraDate.lengthOfMonth + CalendarStyle.WEEK -> DayOfWeek.entries.size + } + + val rangedDays = (1..days.plus(offsetStart)).map { dayIndex -> + val date = when (config.style) { + CalendarStyle.MONTH -> cameraDate + .withDayOfMonth(1) + .plusDays(dayIndex.minus(1)) + .minusDays(offsetStart) + + CalendarStyle.WEEK -> weekCameraDate + .plusDays(dayIndex.minus(1)) + .minusDays(offsetStart) + } + Pair(CalendarViewType.DAY, date) + }.drop( + when (config.style) { + CalendarStyle.MONTH -> offsetStart + CalendarStyle.WEEK -> 0 + } + ).dropLast( + when (config.style) { + CalendarStyle.MONTH -> 0 + CalendarStyle.WEEK -> offsetStart + } + ).toMutableList() + + val isMonthStartOffset = weekCameraDate.dayOfMonth <= 7 + if (isMonthStartOffset) { + repeat(offsetStart) { + rangedDays.add(0, Pair(CalendarViewType.DAY_START_OFFSET, LocalDate.now())) + } + } + + val chunkedDays: List>> = rangedDays.chunked(Constants.DAYS_IN_WEEK) + + val weekDays: List>> = chunkedDays.map { week -> + if (config.displayCalendarWeeks) { + val newWeek = week.toMutableList().apply { + val firstDateCalendarWeek = week.first { it.first == CalendarViewType.DAY }.second as LocalDate + val formatter = LocalDate.Format { + byUnicodePattern("w") + } + val calendarWeek = formatter.format(firstDateCalendarWeek) + add(0, Pair(CalendarViewType.CW, calendarWeek)) + } + newWeek + } else week + } + + return CalendarData( + offsetStart = offsetStart, + weekCameraDate = weekCameraDate, + cameraDate = cameraDate, + days = weekDays + ) +} + +/** + * Calculate the calendar date-data based on the date. + */ +internal fun calcCalendarDateData( + date: LocalDate, + calendarViewData: CalendarData, + selection: CalendarSelection, + config: CalendarConfig, + selectedDate: LocalDate?, + selectedDates: List?, + selectedRange: Pair +): CalendarDateData? { + + if (date.monthNumber != calendarViewData.cameraDate.monthNumber) return null + + var selectedStartInit = false + var selectedEnd = false + var selectedBetween = false + val selected = when (selection) { + is CalendarSelection.Date -> selectedDate == date + is CalendarSelection.Dates -> { + selectedDates?.contains(date) ?: false + } + is CalendarSelection.Period -> { + val selectedStart = selectedRange.first == date + selectedStartInit = selectedStart && selectedRange.second != null + selectedEnd = selectedRange.second == date + selectedBetween = (selectedRange.first?.let { date.isAfter(it) } ?: false) + && selectedRange.second?.let { date.isBefore(it) } ?: false + selectedBetween || selectedStart || selectedEnd + } + } + val outOfBoundary = date !in config.boundary + val disabledDate = config.disabledDates?.contains(date) ?: false + + return CalendarDateData( + date = date, + disabled = disabledDate, + disabledPassively = outOfBoundary, + selected = selected, + selectedBetween = selectedBetween, + selectedStart = selectedStartInit, + selectedEnd = selectedEnd + ) +} diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt index ef8a2c4d..2099cb1f 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt @@ -24,421 +24,3 @@ import com.maxkeppeler.sheets.calendar.models.CalendarStyle import com.maxkeppeler.sheets.calendar.models.CalendarViewType import com.maxkeppeler.sheets.calendar.now import kotlinx.datetime.* - -/** - * Returns the date for the first day of the week (Monday) for this [LocalDate]. - */ -internal val LocalDate.startOfWeek: LocalDate - get() = minus(dayOfWeek.isoDayNumber - 1, DateTimeUnit.DAY) - -/** - * Returns the date for the last day of the week (Sunday) for this [LocalDate]. - */ -internal val LocalDate.endOfWeek: LocalDate - get() = plus(7 - dayOfWeek.isoDayNumber, DateTimeUnit.DAY) - -/** - * Extension function that jumps to the first day of the same week (Monday) or the first day of the month, whichever comes first. - * - * @return [LocalDate] representing the first day of the week or the month, whichever is earliest - */ -internal val LocalDate.startOfWeekOrMonth: LocalDate - get() { - var result = this - while (result.dayOfMonth > 1 && result.dayOfWeek != DayOfWeek.MONDAY) { - result = result.minus(1, DateTimeUnit.DAY) - } - return result - } - -/** - * Extension function that jumps to the first day of the month. - * - * @return [LocalDate] representing the first day of the month - */ -internal val LocalDate.startOfMonth: LocalDate - get() = LocalDate(this.year, this.month, 1) - -/** - * Extension function that checks if year is a leap year. - * - * Example: 2016, 2020, 2024, etc - * - * @return [Boolean] whether year is a leap year - */ -internal val LocalDate.isLeapYear: Boolean - get() { - var isLeapYear = year % 4 == 0 - isLeapYear = isLeapYear && (year % 100 != 0 || year % 400 == 0) - - return isLeapYear - } - -/** - * Extension function that gets the maximum days of month - * - * @return [Int] of days in month - */ -internal fun Month.length(leapYear: Boolean): Int = when (this) { - Month.JANUARY -> 31 - Month.FEBRUARY -> { - if (leapYear) { - 29 - } else { - 28 - } - } - Month.MARCH -> 31 - Month.APRIL -> 30 - Month.MAY -> 31 - Month.JUNE -> 30 - Month.JULY -> 31 - Month.AUGUST -> 31 - Month.SEPTEMBER -> 30 - Month.OCTOBER -> 31 - Month.NOVEMBER -> 30 - Month.DECEMBER -> 31 - else -> 30 -} - -/** - * Extension function that gets the maximum days of month - * - * @return [Int] of days in month - */ -internal val LocalDate.lengthOfMonth: Int - get() = month.length(isLeapYear) - -/** -Extension function that jumps to the last day of the month. -@return [LocalDate] representing the last day of the month - */ -internal val LocalDate.endOfMonth: LocalDate - get() { - return LocalDate(this.year, this.month, lengthOfMonth) - } - -/** - * Get the first day of the previous week from the current date. - * - * Skips in current week to previous month's Monday if day is the first day of the month and not Monday. - * Skips to previous week if the current day of the month is greater than or equal to 7 or is the first day of the month and is Monday. - * Skips to the first day of the previous month otherwise. - * @return The first day of the previous week as a `LocalDate` object. - */ -internal val LocalDate.previousWeek: LocalDate - get() = when { - dayOfMonth >= Constants.DAYS_IN_WEEK || - dayOfMonth == Constants.FIRST_DAY_IN_MONTH - && dayOfWeek == DayOfWeek.MONDAY -> minus(1, DateTimeUnit.WEEK) - - else -> startOfMonth - } - - -/** - * Get the date of the next week from the current date. - * - * The next week is determined based on the current day of the month and the remaining days in the month. - * If the current day of the month is the first day of the month, it skips to the next Monday. - * If there are less than 7 days remaining in the current month, it skips to the first day of the next month. - * @return The first day of the next week as a `LocalDate` object. - */ -internal val LocalDate.nextWeek: LocalDate - get() = when { - dayOfMonth == Constants.FIRST_DAY_IN_MONTH -> plus((7 - dayOfWeek.isoDayNumber) + 1, DateTimeUnit.DAY) - lengthOfMonth - dayOfMonth >= Constants.DAYS_IN_WEEK -> plus(1, DateTimeUnit.WEEK) - else -> plus(1, DateTimeUnit.MONTH).startOfMonth - } - -/** - * Returns a new `LocalDate` instance representing the previous date based on the `CalendarConfig` passed. - * - * If `CalendarConfig.style` is set to `CalendarStyle.MONTH`, the function returns the first day of the previous month. - * If `CalendarConfig.style` is set to `CalendarStyle.WEEK`, the function returns the first day (Monday) of the previous week. - * - * @param config The `CalendarConfig` to determine the jump step. - * @return A new `LocalDate` instance representing the previous date based on the `CalendarConfig`. - */ -fun LocalDate.jumpPrev(config: CalendarConfig): LocalDate = when (config.style) { - CalendarStyle.MONTH -> this.minus(1, DateTimeUnit.MONTH).startOfMonth - CalendarStyle.WEEK -> this.previousWeek -} - -/** - * Returns a new `LocalDate` instance representing the next date based on the `CalendarConfig` passed. - * - * If `CalendarConfig.style` is set to `CalendarStyle.MONTH`, the function returns the first day of the next month. - * If `CalendarConfig.style` is set to `CalendarStyle.WEEK`, the function returns the first day (Monday) of the next week. - * - * @param config The `CalendarConfig` to determine the jump step. - * @return A new `LocalDate` instance representing the next date based on the `CalendarConfig`. - */ -fun LocalDate.jumpNext(config: CalendarConfig): LocalDate = when (config.style) { - CalendarStyle.MONTH -> this.plus(1, DateTimeUnit.MONTH).startOfMonth - CalendarStyle.WEEK -> this.nextWeek -} - -/** - * Returns the initial date to be displayed on the CalendarView based on the selection mode. - * @param selection The selection mode. - * @param boundary The boundary of the calendar. - * @return The initial date to be displayed on the CalendarView. - */ -internal fun getInitialCameraDate( - selection: CalendarSelection, - boundary: ClosedRange -): LocalDate { - val cameraDateBasedOnMode = when (selection) { - is CalendarSelection.Date -> selection.selectedDate - is CalendarSelection.Dates -> selection.selectedDates?.firstOrNull() - is CalendarSelection.Period -> selection.selectedRange?.start - } ?: run { - val now = LocalDate.now() - if (now in boundary) now else boundary.start - } - return cameraDateBasedOnMode.startOfWeekOrMonth -} - -/** - * Returns the custom initial date in case the camera date is within the boundary. Otherwise, it returns null. - * - * @param cameraDate The initial camera date. - * @param boundary The boundary of the calendar. - * @return The initial camera date if it's within the boundary, otherwise null. - */ -internal fun getInitialCustomCameraDate( - cameraDate: LocalDate?, - boundary: ClosedRange -): LocalDate? = cameraDate?.takeIf { it in boundary }?.startOfWeekOrMonth - -/** - * Get selection value of date. - */ -internal val CalendarSelection.dateValue: LocalDate? - get() = if (this is CalendarSelection.Date) selectedDate else null - -/** - * Get selection value of dates. - */ -internal val CalendarSelection.datesValue: Array - get() { - val value = if (this is CalendarSelection.Dates) selectedDates?.toMutableList() - ?: emptyList() else emptyList() - return value.toTypedArray() - } - -/** - * Get selection value of range. - */ -internal val CalendarSelection.rangeValue: Array - get() { - val value = if (this is CalendarSelection.Period) selectedRange else null - return mutableListOf(value?.start, value?.endInclusive).toTypedArray() - } - -/** - * Get range start value. - */ -internal val List.startValue: LocalDate? - get() = this.getOrNull(Constants.RANGE_START) - -/** - * Get range end value. - */ -internal val List.endValue: LocalDate? - get() = this.getOrNull(Constants.RANGE_END) - -/** - * Calculate the month data based on the camera date and the restrictions. - */ -internal fun calcMonthData( - config: CalendarConfig, - cameraDate: LocalDate, - today: LocalDate = LocalDate.now() -): CalendarMonthData { - val months = Month.entries.toMutableList() - - // Check that months are within the boundary - val boundaryFilteredMonths = months.filter { month -> - val maxDayOfMonth = month.length(cameraDate.isLeapYear) - val startDay = minOf(config.boundary.start.dayOfMonth, maxDayOfMonth) - val endDay = minOf(config.boundary.endInclusive.dayOfMonth, maxDayOfMonth) - val cameraDateWithMonth = LocalDate(cameraDate.year, month, startDay) - cameraDateWithMonth in config.boundary || LocalDate(cameraDateWithMonth.year, cameraDateWithMonth.month, endDay) in config.boundary - } - - return CalendarMonthData( - selected = cameraDate.month, - thisMonth = today.month, - disabled = months.minus(boundaryFilteredMonths.toSet()), - ) -} - -private fun LocalDate.isoWeekNumber(): Int { - if (firstWeekInYearStart(year + 1) < this) return 1 - - val currentYearStart = firstWeekInYearStart(year) - val start = if (this < currentYearStart) firstWeekInYearStart(year - 1) else currentYearStart - - val currentCalendarWeek = start.until(this, DateTimeUnit.WEEK) + 1 - - return currentCalendarWeek -} - -private fun firstWeekInYearStart(year: Int): LocalDate { - val jan1st = LocalDate(year, 1, 1) - val previousMonday = jan1st.minus(jan1st.dayOfWeek.ordinal, DateTimeUnit.DAY) - - return if (jan1st.dayOfWeek <= DayOfWeek.THURSDAY) previousMonday else previousMonday.plus(1, DateTimeUnit.WEEK) -} - -/** - * Calculate the calendar data based on the camera-date. - */ -internal fun calcCalendarData(config: CalendarConfig, cameraDate: LocalDate): CalendarData { - var weekCameraDate = cameraDate - - val firstDayOfWeek = DayOfWeek.MONDAY - val dayOfWeek = cameraDate.dayOfWeek - val diff = (dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7 - - val offsetStart = when (config.style) { - CalendarStyle.MONTH -> diff - CalendarStyle.WEEK -> { - // Calculate the difference in days to the first day of the week from the camera date - val dayOfWeekInMonth = cameraDate.startOfMonth.dayOfWeek - val dayDiff = (dayOfWeekInMonth.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7 - - // Adjust weekCameraDate to the start of the week if necessary - val adjustedWeekCameraDate = - if (cameraDate.dayOfMonth <= Constants.DAYS_IN_WEEK && dayDiff > 0) { - cameraDate.minus((cameraDate.dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7, DateTimeUnit.DAY) - } else { - weekCameraDate - } - - // Calculate the offset based on the adjustedWeekCameraDate - ((adjustedWeekCameraDate.dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7).also { - // Update weekCameraDate if it was adjusted - weekCameraDate = adjustedWeekCameraDate - } - } - } - - val days = when (config.style) { - CalendarStyle.MONTH -> cameraDate.lengthOfMonth - CalendarStyle.WEEK -> DayOfWeek.entries.size - } - - val rangedDays = (1..days.plus(offsetStart)).toMutableList() - .map { dayIndex -> - val date = when (config.style) { - CalendarStyle.MONTH -> cameraDate - .startOfMonth - .plus(dayIndex.minus(1), DateTimeUnit.DAY) - .minus(offsetStart, DateTimeUnit.DAY) - - CalendarStyle.WEEK -> weekCameraDate - .plus(dayIndex.minus(1), DateTimeUnit.DAY) - .minus(offsetStart, DateTimeUnit.DAY) - } - Pair(CalendarViewType.DAY, date) - }.drop( - when (config.style) { - CalendarStyle.MONTH -> offsetStart - CalendarStyle.WEEK -> 0 - } - ).dropLast( - when (config.style) { - CalendarStyle.MONTH -> 0 - CalendarStyle.WEEK -> offsetStart - } - ).toMutableList() - - val isMonthStartOffset = weekCameraDate.dayOfMonth <= 7 - if (isMonthStartOffset) { - repeat(offsetStart) { - rangedDays.add(0, Pair(CalendarViewType.DAY_START_OFFSET, LocalDate.now())) - } - } - - val chunkedDays: List>> = - rangedDays.chunked(Constants.DAYS_IN_WEEK) - - val weekDays: List>> = chunkedDays.map { week -> - if (config.displayCalendarWeeks) { - val newWeek = week.toMutableList().apply { - val firstDateCalendarWeek = - week.first { it.first == CalendarViewType.DAY }.second as LocalDate - add(0, Pair(CalendarViewType.CW, firstDateCalendarWeek.isoWeekNumber())) - } - newWeek - } else week - } - - return CalendarData( - offsetStart = offsetStart, - weekCameraDate = weekCameraDate, - cameraDate = cameraDate, - days = weekDays, - ) -} - -internal fun LocalDate.isAfter(other: LocalDate): Boolean { - return this.toEpochDays() > other.toEpochDays() -} - -internal fun LocalDate.isBefore(other: LocalDate): Boolean { - return other.isAfter(this) -} - -/** - * Calculate the calendar date-data based on the date. - */ -internal fun calcCalendarDateData( - date: LocalDate, - calendarViewData: CalendarData, - selection: CalendarSelection, - config: CalendarConfig, - selectedDate: LocalDate?, - selectedDates: List?, - selectedRange: Pair -): CalendarDateData? { - - if (date.monthNumber != calendarViewData.cameraDate.monthNumber) return null - - var selectedStartInit = false - var selectedEnd = false - var selectedBetween = false - val selected = when (selection) { - is CalendarSelection.Date -> selectedDate == date - is CalendarSelection.Dates -> { - selectedDates?.contains(date) ?: false - } - - is CalendarSelection.Period -> { - val selectedStart = selectedRange.first == date - selectedStartInit = selectedStart && selectedRange.second != null - selectedEnd = selectedRange.second == date - selectedBetween = (selectedRange.first?.let { date.isAfter(it) } ?: false) - && selectedRange.second?.let { date.isBefore(it) } ?: false - selectedBetween || selectedStart || selectedEnd - } - } - val outOfBoundary = date !in config.boundary - val disabledDate = config.disabledDates?.contains(date) ?: false - - return CalendarDateData( - date = date, - disabled = disabledDate, - disabledPassively = outOfBoundary, - selected = selected, - selectedBetween = selectedBetween, - selectedStart = selectedStartInit, - selectedEnd = selectedEnd, - ) -} - - - diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt index 37601f17..92137fe3 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarDateItemComponent.kt @@ -27,6 +27,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha @@ -39,9 +40,12 @@ import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.calendar.models.CalendarDateData import com.maxkeppeler.sheets.calendar.models.CalendarSelection -import com.maxkeppeler.sheets.calendar.now import com.maxkeppeler.sheets.calendar.utils.Constants +import com.maxkeppeler.sheets.calendar.utils.now import kotlinx.datetime.LocalDate +import kotlinx.datetime.format +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern import kotlinx.datetime.isoDayNumber /** @@ -50,6 +54,7 @@ import kotlinx.datetime.isoDayNumber * @param selection The selection configuration for the dialog view. * @param onDateClick The listener that is invoked when a date is clicked. */ +@OptIn(FormatStringsInDatetimeFormats::class) @Composable internal fun CalendarDateItemComponent( orientation: LibOrientation, @@ -138,6 +143,12 @@ internal fun CalendarDateItemComponent( else -> Constants.DATE_ITEM_OPACITY } + val formatter = remember { + LocalDate.Format { + byUnicodePattern("d") + } + } + Column(modifier = parentModifier) { Row( modifier = cellModifier, @@ -148,8 +159,7 @@ internal fun CalendarDateItemComponent( modifier = Modifier .weight(1f) .alpha(textAlpha), - text = data.date?.dayOfWeek?.isoDayNumber?.toString() - ?.takeUnless { data.otherMonth } ?: "", + text = data.date?.format(formatter)?.takeUnless { data.otherMonth } ?: "", style = textStyle, textAlign = TextAlign.Center ) diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt index d62e3fec..f76bcd6f 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt @@ -57,11 +57,14 @@ import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.calendar.models.CalendarConfig import com.maxkeppeler.sheets.calendar.models.CalendarDisplayMode import com.maxkeppeler.sheets.calendar.models.CalendarStyle -import com.maxkeppeler.sheets.calendar.monthShort +import com.maxkeppeler.sheets.calendar.utils.monthShort import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import kotlinx.datetime.LocalDate +import kotlinx.datetime.format +import kotlinx.datetime.format.FormatStringsInDatetimeFormats +import kotlinx.datetime.format.byUnicodePattern import kotlinx.datetime.number import org.jetbrains.compose.resources.ExperimentalResourceApi import org.jetbrains.compose.resources.stringResource @@ -86,7 +89,7 @@ import kotlin.math.min * @param onMonthClick The listener that is invoked when the month selection was clicked. * @param onYearClick The listener that is invoked when the year selection was clicked. */ -@OptIn(ExperimentalResourceApi::class) +@OptIn(ExperimentalResourceApi::class, FormatStringsInDatetimeFormats::class) @ExperimentalMaterial3Api @Composable internal fun CalendarTopComponent( @@ -204,10 +207,16 @@ internal fun CalendarTopComponent( }, verticalAlignment = Alignment.CenterVertically ) { + val formatter = remember { + LocalDate.Format { + byUnicodePattern("yyyy") + } + } + Text( modifier = selectableItemModifier .testTags(TestTags.CALENDAR_YEAR_TITLE, cameraDate.year), - text = cameraDate.year.toString(), + text = cameraDate.format(formatter), style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Center ) @@ -266,7 +275,7 @@ internal fun CalendarTopComponent( * @param onMonthClick The listener that is invoked when the month selection was clicked. * @param onYearClick The listener that is invoked when the year selection was clicked. */ -@OptIn(ExperimentalResourceApi::class) +@OptIn(ExperimentalResourceApi::class, FormatStringsInDatetimeFormats::class) @ExperimentalMaterial3Api @Composable internal fun CalendarTopLandscapeComponent( @@ -325,9 +334,15 @@ internal fun CalendarTopLandscapeComponent( }, verticalAlignment = Alignment.CenterVertically ) { + val formatter = remember { + LocalDate.Format { + byUnicodePattern("yyyy") + } + } + Text( modifier = selectableItemModifier.weight(1f), - text = cameraDate.year.toString(), + text = cameraDate.format(formatter), style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Start ) diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt index b0d15ba6..bcc9403a 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt @@ -30,11 +30,13 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import com.maxkeppeler.sheets.calendar.monthShort -import com.maxkeppeler.sheets.calendar.now import com.maxkeppeler.sheets.calendar.utils.Constants +import com.maxkeppeler.sheets.calendar.utils.monthShort +import com.maxkeppeler.sheets.calendar.utils.now +import com.maxkeppeler.sheets.calendar.utils.withMonth import kotlinx.datetime.LocalDate import kotlinx.datetime.Month +import kotlinx.datetime.format /** * The item component of the month selection view. @@ -89,9 +91,7 @@ internal fun MonthItemComponent( .alpha(textAlpha) .padding(horizontal = 12.dp) .padding(vertical = 8.dp), - text = LocalDate.now().run { - LocalDate(this.year, month, this.dayOfMonth) - }.monthShort(), + text = LocalDate.now().withMonth(month).monthShort(), style = textStyle, textAlign = TextAlign.Center, maxLines = 1, diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt index 78c9fb9f..abe387e1 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/YearSelectionView.kt @@ -16,7 +16,7 @@ package com.maxkeppeler.sheets.calendar.views import androidx.compose.foundation.lazy.LazyListScope -import com.maxkeppeler.sheets.calendar.now +import com.maxkeppeler.sheets.calendar.utils.now import kotlinx.datetime.LocalDate /** From dce4cd06bed08ca16281118d7bf27b0738702cc4 Mon Sep 17 00:00:00 2001 From: DatLag Date: Mon, 13 May 2024 23:07:56 +0200 Subject: [PATCH 51/58] removed unused file --- .../sheets/calendar/utils/Utils.kt | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt deleted file mode 100644 index 2099cb1f..00000000 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/Utils.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2022-2024. Maximilian Keppeler (https://www.maxkeppeler.com) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.maxkeppeler.sheets.calendar.utils - -import com.maxkeppeler.sheets.calendar.models.CalendarConfig -import com.maxkeppeler.sheets.calendar.models.CalendarData -import com.maxkeppeler.sheets.calendar.models.CalendarDateData -import com.maxkeppeler.sheets.calendar.models.CalendarMonthData -import com.maxkeppeler.sheets.calendar.models.CalendarSelection -import com.maxkeppeler.sheets.calendar.models.CalendarStyle -import com.maxkeppeler.sheets.calendar.models.CalendarViewType -import com.maxkeppeler.sheets.calendar.now -import kotlinx.datetime.* From f21cd3dcc60c1672d5cb13ee7c5f4ef646ea49c1 Mon Sep 17 00:00:00 2001 From: DatLag Date: Tue, 14 May 2024 13:04:35 +0200 Subject: [PATCH 52/58] apply system locale on jvm --- .../calendar/models/FormatLocale.android.kt | 90 ++++++++++++++++--- .../sheets/calendar/CalendarView.kt | 2 + .../sheets/calendar/models/FormatLocale.kt | 24 +++-- .../sheets/calendar/utils/DayOfWeekUtils.kt | 70 +-------------- .../sheets/calendar/utils/ExtendDateTime.kt | 19 ---- .../calendar/views/CalendarTopComponent.kt | 5 +- .../calendar/views/MonthItemComponent.kt | 5 +- .../calendar/views/MonthSelectionView.kt | 3 + .../calendar/models/FormatLocale.jvm.kt | 86 ++++++++++++++++-- .../calendar/models/FormatLocale.nonJvm.kt | 78 +++++++++++++++- 10 files changed, 261 insertions(+), 121 deletions(-) diff --git a/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt b/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt index b5707273..80a8ed82 100644 --- a/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt +++ b/calendar/src/androidMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.android.kt @@ -1,17 +1,83 @@ package com.maxkeppeler.sheets.calendar.models -import android.util.Range -import java.time.LocalDate -import java.util.* - -private fun FormatLocale.Companion.fromLocale(locale: Locale = Locale.getDefault()): FormatLocale { - return when { - Locale.SIMPLIFIED_CHINESE.let { locale.language == it.language && locale.country == it.country } -> FormatLocale.Chinese - Locale.JAPANESE.let { locale.language == it.language } -> FormatLocale.Japanese - else -> FormatLocale.Default +import kotlinx.datetime.DayOfWeek +import kotlinx.datetime.LocalDate +import kotlinx.datetime.toJavaLocalDate +import java.time.format.DateTimeFormatter +import java.time.format.TextStyle +import java.time.temporal.WeekFields +import java.util.Locale + +actual sealed class FormatLocale(private val locale: Locale) { + + actual open val firstDayOfWeek: DayOfWeek + get() = WeekFields.of(locale).firstDayOfWeek + + actual open fun getDayOfWeekLabels(): Map { + return when (this) { + is CHINESE -> getSimplifiedChineseDayOfWeekLabels() + is JAPANESE -> getJapaneseDayOfWeekLabels() + else -> { + DayOfWeek.entries.associateWith { dayOfWeek -> + dayOfWeek.getDisplayName(TextStyle.NARROW, locale) + } + } + } + } + + actual open fun getMonthShort(date: LocalDate): String { + return date.toJavaLocalDate().format(DateTimeFormatter.ofPattern("MMM")) + } + + internal fun getSimplifiedChineseDayOfWeekLabels(): Map = mapOf( + DayOfWeek.MONDAY to "\u4e00", + DayOfWeek.TUESDAY to "\u4e8c", + DayOfWeek.WEDNESDAY to "\u4e09", + DayOfWeek.THURSDAY to "\u56db", + DayOfWeek.FRIDAY to "\u4e94", + DayOfWeek.SATURDAY to "\u516d", + DayOfWeek.SUNDAY to "\u65e5", + ) + + internal fun getJapaneseDayOfWeekLabels(): Map = mapOf( + DayOfWeek.MONDAY to "\u6708", + DayOfWeek.TUESDAY to "\u706b", + DayOfWeek.WEDNESDAY to "\u6c34", + DayOfWeek.THURSDAY to "\u6728", + DayOfWeek.FRIDAY to "\u91d1", + DayOfWeek.SATURDAY to "\u571f", + DayOfWeek.SUNDAY to "\u65e5", + ) + + actual data class CHINESE(private val locale: Locale) : FormatLocale(locale) { + override fun getDayOfWeekLabels(): Map { + return getSimplifiedChineseDayOfWeekLabels() + } + } + + actual data class JAPANESE(private val locale: Locale) : FormatLocale(locale) { + override fun getDayOfWeekLabels(): Map { + return getJapaneseDayOfWeekLabels() + } } -} -actual fun FormatLocale.Companion.getDefault(): FormatLocale { - return FormatLocale.fromLocale() + actual data class Default(private val locale: Locale) : FormatLocale(locale) + + actual companion object { + actual fun getDefault(): FormatLocale { + val defaultLocale = Locale.getDefault() + + return when { + Locale.SIMPLIFIED_CHINESE.let { + defaultLocale.language == it.language + } -> CHINESE(defaultLocale) + + Locale.JAPANESE.let { + defaultLocale.language == it.language + } -> JAPANESE(defaultLocale) + + else -> Default(defaultLocale) + } + } + } } \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt index 1b31841d..746f1271 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/CalendarView.kt @@ -135,6 +135,7 @@ fun CalendarView( }, onMonthView = { setupMonthSelectionView( + locale = config.locale, monthsData = calendarState.monthsData, onMonthClick = calendarState::onMonthClick ) @@ -199,6 +200,7 @@ fun CalendarView( }, onMonthView = { setupMonthSelectionView( + locale = config.locale, monthsData = calendarState.monthsData, onMonthClick = calendarState::onMonthClick ) diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.kt index 7d0e2d13..1af5c696 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.kt @@ -1,11 +1,21 @@ package com.maxkeppeler.sheets.calendar.models -enum class FormatLocale { - Chinese, - Japanese, - Default; +import kotlinx.datetime.DayOfWeek +import kotlinx.datetime.LocalDate +import kotlinx.datetime.Month - companion object -} +expect sealed class FormatLocale { -expect fun FormatLocale.Companion.getDefault(): FormatLocale \ No newline at end of file + val firstDayOfWeek: DayOfWeek + + fun getDayOfWeekLabels(): Map + fun getMonthShort(date: LocalDate): String + + class CHINESE : FormatLocale + class JAPANESE : FormatLocale + class Default : FormatLocale + + companion object { + fun getDefault(): FormatLocale + } +} \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt index 3e925cb7..2a230547 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/DayOfWeekUtils.kt @@ -19,18 +19,6 @@ import com.maxkeppeler.sheets.calendar.models.FormatLocale import kotlinx.datetime.DayOfWeek import kotlinx.datetime.isoDayNumber -/** - * Returns a map of day of week labels in the specified locale. - * - * @param locale the locale to get the labels for - * @return a map of day of week labels - */ -internal fun getDayOfWeekLabels(locale: FormatLocale): Map = when(locale) { - FormatLocale.Chinese -> getSimplifiedChineseDayOfWeekLabels() - FormatLocale.Japanese -> getJapaneseDayOfWeekLabels() - else -> getDefaultDayOfWeekLabels(locale) -} - /** * Adjusts the ordering of DayOfWeek values based on the locale's first day of the week. * @@ -38,9 +26,9 @@ internal fun getDayOfWeekLabels(locale: FormatLocale): Map = * @return an ordered list of DayOfWeek values starting with the locale's first day of the week */ internal fun getOrderedDaysOfWeek(locale: FormatLocale): List { - val firstDayOfWeek = DayOfWeek.MONDAY.isoDayNumber + val firstDayOfWeek = locale.firstDayOfWeek val daysOfWeek = DayOfWeek.entries - val orderedDays = daysOfWeek.sortedBy { (it.isoDayNumber - firstDayOfWeek + 7) % 7 } + val orderedDays = daysOfWeek.sortedBy { (it.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7 } return orderedDays } @@ -51,7 +39,7 @@ internal fun getOrderedDaysOfWeek(locale: FormatLocale): List { * @return a linked map of ordered day of week labels */ internal fun getOrderedDayOfWeekLabels(locale: FormatLocale): LinkedHashMap { - val dayLabels = getDayOfWeekLabels(locale) + val dayLabels = locale.getDayOfWeekLabels() val orderedDays = getOrderedDaysOfWeek(locale) return linkedMapOf().apply { orderedDays.forEach { day -> @@ -59,55 +47,3 @@ internal fun getOrderedDayOfWeekLabels(locale: FormatLocale): LinkedHashMap "M" - DayOfWeek.TUESDAY -> "T" - DayOfWeek.WEDNESDAY -> "W" - DayOfWeek.THURSDAY -> "T" - DayOfWeek.FRIDAY -> "F" - DayOfWeek.SATURDAY -> "S" - DayOfWeek.SUNDAY -> "S" - else -> this.name - } -} - -/** - * Returns a map of day of week labels in the default locale. - * - * @param locale the locale to get the labels for - * @return a map of day of week labels - */ -private fun getDefaultDayOfWeekLabels(locale: FormatLocale): Map = - DayOfWeek.entries.associateWith { dayOfWeek -> dayOfWeek.displayName() } - -/** - * Returns a map of day of week labels in Simplified Chinese locale. - * - * @return a map of day of week labels - */ -private fun getSimplifiedChineseDayOfWeekLabels(): Map = mapOf( - DayOfWeek.MONDAY to "\u4e00", - DayOfWeek.TUESDAY to "\u4e8c", - DayOfWeek.WEDNESDAY to "\u4e09", - DayOfWeek.THURSDAY to "\u56db", - DayOfWeek.FRIDAY to "\u4e94", - DayOfWeek.SATURDAY to "\u516d", - DayOfWeek.SUNDAY to "\u65e5", -) - -/** - * Returns a map of day of week labels in Japanese locale. - * - * @return a map of day of week labels - */ -private fun getJapaneseDayOfWeekLabels(): Map = mapOf( - DayOfWeek.MONDAY to "\u6708", - DayOfWeek.TUESDAY to "\u706b", - DayOfWeek.WEDNESDAY to "\u6c34", - DayOfWeek.THURSDAY to "\u6728", - DayOfWeek.FRIDAY to "\u91d1", - DayOfWeek.SATURDAY to "\u571f", - DayOfWeek.SUNDAY to "\u65e5", -) \ No newline at end of file diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt index c3c890ee..006c9679 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt @@ -28,25 +28,6 @@ class LocalDateRange( } -// ToDo("wait for kotlin datetime with locale parser") -internal fun LocalDate.monthShort(): String { - return when (this.month) { - Month.JANUARY -> "Jan" - Month.FEBRUARY -> "Feb" - Month.MARCH -> "Mar" - Month.APRIL -> "Apr" - Month.MAY -> "May" - Month.JUNE -> "Jun" - Month.JULY -> "Jul" - Month.AUGUST -> "Aug" - Month.SEPTEMBER -> "Sep" - Month.OCTOBER -> "Oct" - Month.NOVEMBER -> "Nov" - Month.DECEMBER -> "Dec" - else -> month.name - } -} - internal fun LocalDate.withYear(value: Int): LocalDate = LocalDate( year = value, month = this.month, diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt index f76bcd6f..2d6905a1 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/CalendarTopComponent.kt @@ -57,7 +57,6 @@ import com.maxkeppeker.sheets.core.utils.testTags import com.maxkeppeler.sheets.calendar.models.CalendarConfig import com.maxkeppeler.sheets.calendar.models.CalendarDisplayMode import com.maxkeppeler.sheets.calendar.models.CalendarStyle -import com.maxkeppeler.sheets.calendar.utils.monthShort import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext @@ -183,7 +182,7 @@ internal fun CalendarTopComponent( Text( modifier = selectableItemModifier .testTags(TestTags.CALENDAR_MONTH_TITLE, cameraDate.month.number), - text = cameraDate.monthShort(), + text = config.locale.getMonthShort(cameraDate), style = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Center ) @@ -370,7 +369,7 @@ internal fun CalendarTopLandscapeComponent( ) { Text( modifier = selectableItemModifier.weight(1f), - text = cameraDate.monthShort(), + text = config.locale.getMonthShort(cameraDate), style = MaterialTheme.typography.titleSmall.copy(fontWeight = FontWeight.Bold), textAlign = TextAlign.Start ) diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt index bcc9403a..6c059f3c 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthItemComponent.kt @@ -30,8 +30,8 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.maxkeppeler.sheets.calendar.models.FormatLocale import com.maxkeppeler.sheets.calendar.utils.Constants -import com.maxkeppeler.sheets.calendar.utils.monthShort import com.maxkeppeler.sheets.calendar.utils.now import com.maxkeppeler.sheets.calendar.utils.withMonth import kotlinx.datetime.LocalDate @@ -47,6 +47,7 @@ import kotlinx.datetime.format */ @Composable internal fun MonthItemComponent( + locale: FormatLocale, month: Month, thisMonth: Boolean = false, disabled: Boolean = false, @@ -91,7 +92,7 @@ internal fun MonthItemComponent( .alpha(textAlpha) .padding(horizontal = 12.dp) .padding(vertical = 8.dp), - text = LocalDate.now().withMonth(month).monthShort(), + text = locale.getMonthShort(LocalDate.now().withMonth(month)), style = textStyle, textAlign = TextAlign.Center, maxLines = 1, diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt index 68f148c3..7512ae72 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/views/MonthSelectionView.kt @@ -18,6 +18,7 @@ package com.maxkeppeler.sheets.calendar.views import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.foundation.lazy.grid.items import com.maxkeppeler.sheets.calendar.models.CalendarMonthData +import com.maxkeppeler.sheets.calendar.models.FormatLocale import kotlinx.datetime.Month /** @@ -26,6 +27,7 @@ import kotlinx.datetime.Month * @param onMonthClick The listener that is invoked when a month is selected. */ internal fun LazyGridScope.setupMonthSelectionView( + locale: FormatLocale, monthsData: CalendarMonthData, onMonthClick: (Month) -> Unit, ) { @@ -34,6 +36,7 @@ internal fun LazyGridScope.setupMonthSelectionView( val disabled = monthsData.disabled.contains(month) val thisMonth = monthsData.thisMonth == month MonthItemComponent( + locale = locale, month = month, selected = selected, disabled = disabled, diff --git a/calendar/src/jvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.jvm.kt b/calendar/src/jvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.jvm.kt index 53c13dd2..ce0fd607 100644 --- a/calendar/src/jvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.jvm.kt +++ b/calendar/src/jvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.jvm.kt @@ -1,15 +1,83 @@ package com.maxkeppeler.sheets.calendar.models -import java.util.* +import kotlinx.datetime.DayOfWeek +import kotlinx.datetime.LocalDate +import kotlinx.datetime.toJavaLocalDate +import java.time.format.DateTimeFormatter +import java.time.format.TextStyle +import java.time.temporal.WeekFields +import java.util.Locale -private fun FormatLocale.Companion.fromLocale(locale: Locale = Locale.getDefault()): FormatLocale { - return when { - Locale.SIMPLIFIED_CHINESE.let { locale.language == it.language && locale.country == it.country } -> FormatLocale.Chinese - Locale.JAPANESE.let { locale.language == it.language } -> FormatLocale.Japanese - else -> FormatLocale.Default +actual sealed class FormatLocale(private val locale: Locale) { + + actual val firstDayOfWeek: DayOfWeek + get() = WeekFields.of(locale).firstDayOfWeek + + actual open fun getDayOfWeekLabels(): Map { + return when (this) { + is CHINESE -> getSimplifiedChineseDayOfWeekLabels() + is JAPANESE -> getJapaneseDayOfWeekLabels() + else -> { + DayOfWeek.entries.associateWith { dayOfWeek -> + dayOfWeek.getDisplayName(TextStyle.NARROW, locale) + } + } + } + } + + actual open fun getMonthShort(date: LocalDate): String { + return date.toJavaLocalDate().format(DateTimeFormatter.ofPattern("MMM")) + } + + internal fun getSimplifiedChineseDayOfWeekLabels(): Map = mapOf( + DayOfWeek.MONDAY to "\u4e00", + DayOfWeek.TUESDAY to "\u4e8c", + DayOfWeek.WEDNESDAY to "\u4e09", + DayOfWeek.THURSDAY to "\u56db", + DayOfWeek.FRIDAY to "\u4e94", + DayOfWeek.SATURDAY to "\u516d", + DayOfWeek.SUNDAY to "\u65e5", + ) + + internal fun getJapaneseDayOfWeekLabels(): Map = mapOf( + DayOfWeek.MONDAY to "\u6708", + DayOfWeek.TUESDAY to "\u706b", + DayOfWeek.WEDNESDAY to "\u6c34", + DayOfWeek.THURSDAY to "\u6728", + DayOfWeek.FRIDAY to "\u91d1", + DayOfWeek.SATURDAY to "\u571f", + DayOfWeek.SUNDAY to "\u65e5", + ) + + actual data class CHINESE(private val locale: Locale) : FormatLocale(locale) { + override fun getDayOfWeekLabels(): Map { + return getSimplifiedChineseDayOfWeekLabels() + } } -} -actual fun FormatLocale.Companion.getDefault(): FormatLocale { - return FormatLocale.fromLocale() + actual data class JAPANESE(private val locale: Locale) : FormatLocale(locale) { + override fun getDayOfWeekLabels(): Map { + return getJapaneseDayOfWeekLabels() + } + } + + actual data class Default(private val locale: Locale) : FormatLocale(locale) + + actual companion object { + actual fun getDefault(): FormatLocale { + val defaultLocale = Locale.getDefault() + + return when { + Locale.SIMPLIFIED_CHINESE.let { + defaultLocale.language == it.language + } -> CHINESE(defaultLocale) + + Locale.JAPANESE.let { + defaultLocale.language == it.language + } -> JAPANESE(defaultLocale) + + else -> Default(defaultLocale) + } + } + } } \ No newline at end of file diff --git a/calendar/src/nonJvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.nonJvm.kt b/calendar/src/nonJvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.nonJvm.kt index eb32cb18..80d4e3b9 100644 --- a/calendar/src/nonJvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.nonJvm.kt +++ b/calendar/src/nonJvmMain/kotlin/com/maxkeppeler/sheets/calendar/models/FormatLocale.nonJvm.kt @@ -1,5 +1,79 @@ package com.maxkeppeler.sheets.calendar.models -actual fun FormatLocale.Companion.getDefault(): FormatLocale { - return FormatLocale.Default +import kotlinx.datetime.DayOfWeek +import kotlinx.datetime.LocalDate +import kotlinx.datetime.Month + +actual sealed class FormatLocale { + + actual val firstDayOfWeek: DayOfWeek + get() = DayOfWeek.MONDAY + + actual fun getDayOfWeekLabels(): Map { + return when (this) { + is CHINESE -> getSimplifiedChineseDayOfWeekLabels() + is JAPANESE -> getJapaneseDayOfWeekLabels() + else -> DayOfWeek.entries.associateWith { dayOfWeek -> dayOfWeek.displayName() } + } + } + + // ToDo("wait for kotlin datetime with locale parser") + actual fun getMonthShort(date: LocalDate): String { + return when (date.month) { + Month.JANUARY -> "Jan" + Month.FEBRUARY -> "Feb" + Month.MARCH -> "Mar" + Month.APRIL -> "Apr" + Month.MAY -> "May" + Month.JUNE -> "Jun" + Month.JULY -> "Jul" + Month.AUGUST -> "Aug" + Month.SEPTEMBER -> "Sep" + Month.OCTOBER -> "Oct" + Month.NOVEMBER -> "Nov" + Month.DECEMBER -> "Dec" + else -> date.month.name + } + } + + internal fun getSimplifiedChineseDayOfWeekLabels(): Map = mapOf( + DayOfWeek.MONDAY to "\u4e00", + DayOfWeek.TUESDAY to "\u4e8c", + DayOfWeek.WEDNESDAY to "\u4e09", + DayOfWeek.THURSDAY to "\u56db", + DayOfWeek.FRIDAY to "\u4e94", + DayOfWeek.SATURDAY to "\u516d", + DayOfWeek.SUNDAY to "\u65e5", + ) + + internal fun getJapaneseDayOfWeekLabels(): Map = mapOf( + DayOfWeek.MONDAY to "\u6708", + DayOfWeek.TUESDAY to "\u706b", + DayOfWeek.WEDNESDAY to "\u6c34", + DayOfWeek.THURSDAY to "\u6728", + DayOfWeek.FRIDAY to "\u91d1", + DayOfWeek.SATURDAY to "\u571f", + DayOfWeek.SUNDAY to "\u65e5", + ) + + private fun DayOfWeek.displayName(): String { + return when (this) { + DayOfWeek.MONDAY -> "M" + DayOfWeek.TUESDAY -> "T" + DayOfWeek.WEDNESDAY -> "W" + DayOfWeek.THURSDAY -> "T" + DayOfWeek.FRIDAY -> "F" + DayOfWeek.SATURDAY -> "S" + DayOfWeek.SUNDAY -> "S" + else -> this.name + } + } + + actual data object CHINESE : FormatLocale() + actual data object JAPANESE : FormatLocale() + actual data object Default : FormatLocale() + + actual companion object { + actual fun getDefault(): FormatLocale = Default + } } \ No newline at end of file From 24de0419cc3e5f0f9e2fba1624e4e6e436621d17 Mon Sep 17 00:00:00 2001 From: DatLag Date: Tue, 14 May 2024 13:16:50 +0200 Subject: [PATCH 53/58] added missing localization --- .../com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt index 006c9679..3c57ba52 100644 --- a/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt +++ b/calendar/src/commonMain/kotlin/com/maxkeppeler/sheets/calendar/utils/ExtendDateTime.kt @@ -326,7 +326,7 @@ internal fun calcCalendarData( ): CalendarData { var weekCameraDate = cameraDate - val firstDayOfWeek = DayOfWeek.MONDAY + val firstDayOfWeek = config.locale.firstDayOfWeek val dayOfWeek = cameraDate.dayOfWeek val diff = (dayOfWeek.isoDayNumber - firstDayOfWeek.isoDayNumber + 7) % 7 From 27692e64a2f7ead3dd8f275f1520da113d3c22a4 Mon Sep 17 00:00:00 2001 From: DatLag Date: Tue, 14 May 2024 16:41:59 +0200 Subject: [PATCH 54/58] added body for option --- .../maxkeppeler/sheets/option/OptionDialog.kt | 2 + .../maxkeppeler/sheets/option/OptionPopup.kt | 2 + .../maxkeppeler/sheets/option/OptionView.kt | 11 +++++ .../sheets/option/models/OptionBody.kt | 28 +++++++++++++ .../sheets/option/views/BodyComponent.kt | 14 +++++++ .../option/views/BodyDefaultComponent.kt | 40 +++++++++++++++++++ 6 files changed, 97 insertions(+) create mode 100644 option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionBody.kt create mode 100644 option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/BodyComponent.kt create mode 100644 option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/BodyDefaultComponent.kt diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt index 9edbfa16..03960531 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.window.DialogProperties import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.models.base.UseCaseState import com.maxkeppeker.sheets.core.views.base.DialogBase +import com.maxkeppeler.sheets.option.models.OptionBody import com.maxkeppeler.sheets.option.models.OptionConfig import com.maxkeppeler.sheets.option.models.OptionSelection @@ -41,6 +42,7 @@ fun OptionDialog( selection: OptionSelection, config: OptionConfig = OptionConfig(), header: Header? = null, + body: OptionBody? = null, properties: DialogProperties = DialogProperties(), ) { diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt index bf4dcddf..75cc3165 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt @@ -25,6 +25,7 @@ import androidx.compose.ui.window.PopupProperties import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.models.base.UseCaseState import com.maxkeppeker.sheets.core.views.base.PopupBase +import com.maxkeppeler.sheets.option.models.OptionBody import com.maxkeppeler.sheets.option.models.OptionConfig import com.maxkeppeler.sheets.option.models.OptionSelection @@ -45,6 +46,7 @@ fun OptionPopup( selection: OptionSelection, config: OptionConfig = OptionConfig(), header: Header? = null, + body: OptionBody? = null, alignment: Alignment = Alignment.TopStart, offset: IntOffset = IntOffset(0, 0), properties: PopupProperties = PopupProperties(), diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionView.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionView.kt index 2e9b2763..c309ffd6 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionView.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionView.kt @@ -17,6 +17,8 @@ package com.maxkeppeler.sheets.option import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope @@ -30,8 +32,10 @@ import com.maxkeppeker.sheets.core.utils.BaseModifiers.dynamicContentWrapOrMaxHe import com.maxkeppeker.sheets.core.views.ButtonsComponent import com.maxkeppeker.sheets.core.views.base.FrameBase import com.maxkeppeler.sheets.option.models.Option +import com.maxkeppeler.sheets.option.models.OptionBody import com.maxkeppeler.sheets.option.models.OptionConfig import com.maxkeppeler.sheets.option.models.OptionSelection +import com.maxkeppeler.sheets.option.views.OptionBodyComponent import com.maxkeppeler.sheets.option.views.OptionBoundsComponent import com.maxkeppeler.sheets.option.views.OptionComponent @@ -49,6 +53,7 @@ fun OptionView( selection: OptionSelection, config: OptionConfig = OptionConfig(), header: Header? = null, + body: OptionBody? = null ) { val coroutine = rememberCoroutineScope() @@ -73,6 +78,12 @@ fun OptionView( // Override content padding, spacing is within the scrollable container for display mode GRID_HORIZONTAL horizontalContentPadding = PaddingValues(horizontal = 0.dp), layout = { + body?.let { + OptionBodyComponent( + body = it + ) + Spacer(modifier = Modifier.height(24.dp)) + } OptionBoundsComponent( selection = selection, selectedOptions = optionState.selectedOptions diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionBody.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionBody.kt new file mode 100644 index 00000000..142eaad8 --- /dev/null +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/models/OptionBody.kt @@ -0,0 +1,28 @@ +package com.maxkeppeler.sheets.option.models + +import androidx.compose.runtime.Composable + +/** + * Defined implementations of a body for the rating dialog. + */ +abstract class OptionBody { + + /** + * Standard implementation of a body. + * @param bodyText Text that will set as the title + * @param preBody Content that is added before the body text. + * @param postBody Content that is added after the body text. + */ + data class Default( + val bodyText: String, + val preBody: @Composable () -> Unit = {}, + val postBody: @Composable () -> Unit = {} + ) : OptionBody() + + /** + * Custom implementation of a body. + */ + data class Custom( + val body: @Composable () -> Unit + ) : OptionBody() +} \ No newline at end of file diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/BodyComponent.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/BodyComponent.kt new file mode 100644 index 00000000..6bb1eace --- /dev/null +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/BodyComponent.kt @@ -0,0 +1,14 @@ +package com.maxkeppeler.sheets.option.views + +import androidx.compose.runtime.Composable +import com.maxkeppeler.sheets.option.models.OptionBody + +@Composable +fun OptionBodyComponent( + body: OptionBody +) { + when (body) { + is OptionBody.Custom -> body.body.invoke() + is OptionBody.Default -> DefaultBodyComponent(body) + } +} \ No newline at end of file diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/BodyDefaultComponent.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/BodyDefaultComponent.kt new file mode 100644 index 00000000..697117b6 --- /dev/null +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/views/BodyDefaultComponent.kt @@ -0,0 +1,40 @@ +package com.maxkeppeler.sheets.option.views + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.maxkeppeker.sheets.core.utils.TestTags +import com.maxkeppeler.sheets.option.models.OptionBody +import com.maxkeppeler.sheets.option.models.OptionConfig + +/** + * The default body component for the rating dialog. + * @param config The configuration for the rating view. + * @param body The data of the default body. + */ +@Composable +internal fun DefaultBodyComponent( + body: OptionBody.Default, +) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp) + ) { + body.preBody() + Text( + modifier = Modifier.fillMaxWidth(), + textAlign = TextAlign.Center, + text = body.bodyText, + style = MaterialTheme.typography.bodyMedium + ) + body.postBody() + } +} \ No newline at end of file From ed2ba8c66f062d7d87f9d80f05400a76f1ffe906 Mon Sep 17 00:00:00 2001 From: DatLag Date: Tue, 14 May 2024 17:07:32 +0200 Subject: [PATCH 55/58] added missing body dependency injection --- .../kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt | 1 + .../kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt | 1 + 2 files changed, 2 insertions(+) diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt index 03960531..d251f5a2 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionDialog.kt @@ -55,6 +55,7 @@ fun OptionDialog( selection = selection, config = config, header = header, + body = body ) } } \ No newline at end of file diff --git a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt index 75cc3165..4e52eac5 100644 --- a/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt +++ b/option/src/commonMain/kotlin/com/maxkeppeler/sheets/option/OptionPopup.kt @@ -63,6 +63,7 @@ fun OptionPopup( selection = selection, config = config, header = header, + body = body ) } } From d2848f504394348c8f7b64c5c4dac22b29652312 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 17 May 2024 11:12:51 +0200 Subject: [PATCH 56/58] updated compose --- gradle/libs.versions.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2626cf7f..b995caed 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,7 +2,7 @@ activity-compose = "1.8.2" android = "8.2.2" androidx-core-ktx = "1.12.0" -compose = "1.6.10-beta03" +compose = "1.6.10-rc03" compose-compiler = "1.5.11" androidx-test-core = "1.5.0" datetime = "0.6.0-RC.2" @@ -11,7 +11,7 @@ emoji = "0.18.0" espresso-core = "3.5.1" junit = "1.1.5" junit-version = "4.13.2" -kotlin = "2.0.0-RC2" +kotlin = "2.0.0-RC3" lifecycle-runtime-ktx = "2.7.0" navigation-compose = "2.7.7" publish = "0.28.0" From 01f3361e1faa713c2bc88928a29ee6241aa07647 Mon Sep 17 00:00:00 2001 From: DatLag Date: Wed, 22 May 2024 19:54:34 +0200 Subject: [PATCH 57/58] updated dependencies --- build.gradle.kts | 5 ++++- gradle/libs.versions.toml | 9 ++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 922e51ec..e346c019 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -45,6 +46,8 @@ allprojects { } tasks.withType().configureEach { - kotlinOptions.jvmTarget = "11" + compilerOptions { + jvmTarget.set(JvmTarget.JVM_11) + } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b995caed..60ac3aee 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,8 @@ [versions] -activity-compose = "1.8.2" +activity-compose = "1.9.0" android = "8.2.2" -androidx-core-ktx = "1.12.0" -compose = "1.6.10-rc03" -compose-compiler = "1.5.11" +androidx-core-ktx = "1.13.1" +compose = "1.6.10" androidx-test-core = "1.5.0" datetime = "0.6.0-RC.2" desugar = "2.0.4" @@ -11,7 +10,7 @@ emoji = "0.18.0" espresso-core = "3.5.1" junit = "1.1.5" junit-version = "4.13.2" -kotlin = "2.0.0-RC3" +kotlin = "2.0.0" lifecycle-runtime-ktx = "2.7.0" navigation-compose = "2.7.7" publish = "0.28.0" From 3518cc7d0e861ae6b2f921205c36aa05e7eb16b9 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 31 May 2024 12:52:52 +0200 Subject: [PATCH 58/58] fix crash on android --- core/build.gradle.kts | 4 + .../utils/AndroidWindowSizeFix.android.kt | 24 +++ .../sheets/core/utils/AndroidWindowSizeFix.kt | 6 + .../sheets/core/views/base/FrameBase.kt | 157 +++++++++--------- .../core/utils/AndroidWindowSizeFix.jvm.kt | 8 + .../core/utils/AndroidWindowSizeFix.nonJvm.kt | 8 + gradle/libs.versions.toml | 3 +- 7 files changed, 132 insertions(+), 78 deletions(-) create mode 100644 core/src/androidMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.android.kt create mode 100644 core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.kt create mode 100644 core/src/jvmMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.jvm.kt create mode 100644 core/src/nonJvmMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.nonJvm.kt diff --git a/core/build.gradle.kts b/core/build.gradle.kts index c24c0d37..204a81ad 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -77,6 +77,10 @@ kotlin { implementation(libs.serialization) } + androidMain.orNull?.dependencies { + implementation(libs.androidx.window) + } + val nonMacosMain by creating { dependsOn(commonMain.get()) diff --git a/core/src/androidMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.android.kt b/core/src/androidMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.android.kt new file mode 100644 index 00000000..58a429b5 --- /dev/null +++ b/core/src/androidMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.android.kt @@ -0,0 +1,24 @@ +package com.maxkeppeker.sheets.core.utils + +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.platform.LocalContext + +@Composable +actual fun AndroidWindowSizeFix(content: @Composable () -> Unit) { + // Fix for androidx.window crash prior 1.3.0 + CompositionLocalProvider( + LocalContext provides (LocalContext.current.findActivity() ?: LocalContext.current) + ) { + content() + } +} + +internal tailrec fun Context.findActivity(): Activity? = when (this) { + is Activity -> this + is ContextWrapper -> baseContext.findActivity() + else -> null +} \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.kt new file mode 100644 index 00000000..63011b25 --- /dev/null +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.kt @@ -0,0 +1,6 @@ +package com.maxkeppeker.sheets.core.utils + +import androidx.compose.runtime.Composable + +@Composable +expect fun AndroidWindowSizeFix(content: @Composable () -> Unit) \ No newline at end of file diff --git a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt index c8276ffa..913a23b7 100644 --- a/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt +++ b/core/src/commonMain/kotlin/com/maxkeppeker/sheets/core/views/base/FrameBase.kt @@ -28,6 +28,7 @@ import androidx.compose.ui.unit.dp import com.maxkeppeker.sheets.core.models.base.BaseConfigs import com.maxkeppeker.sheets.core.models.base.Header import com.maxkeppeker.sheets.core.models.base.LibOrientation +import com.maxkeppeker.sheets.core.utils.AndroidWindowSizeFix import com.maxkeppeker.sheets.core.utils.BaseValues import com.maxkeppeker.sheets.core.utils.TestTags import com.maxkeppeker.sheets.core.utils.isLandscape @@ -57,95 +58,97 @@ fun FrameBase( buttonsVisible: Boolean = true, buttons: @Composable (ColumnScope.(LibOrientation) -> Unit)? = null, ) { - val layoutDirection = LocalLayoutDirection.current - val isDeviceLandscape = isLandscape() - val deviceOrientation = if (config?.orientation != LibOrientation.PORTRAIT && isDeviceLandscape) { - LibOrientation.LANDSCAPE - } else { - LibOrientation.PORTRAIT - } - val layoutType = when (config?.orientation) { - null -> { - when { - // Only if auto orientation is currently landscape, content for landscape exists - // and the device screen is not larger than a typical phone. - isDeviceLandscape && layoutLandscape != null -> LibOrientation.LANDSCAPE - else -> LibOrientation.PORTRAIT + AndroidWindowSizeFix { + val layoutDirection = LocalLayoutDirection.current + val isDeviceLandscape = isLandscape() + val deviceOrientation = if (config?.orientation != LibOrientation.PORTRAIT && isDeviceLandscape) { + LibOrientation.LANDSCAPE + } else { + LibOrientation.PORTRAIT + } + val layoutType = when (config?.orientation) { + null -> { + when { + // Only if auto orientation is currently landscape, content for landscape exists + // and the device screen is not larger than a typical phone. + isDeviceLandscape && layoutLandscape != null -> LibOrientation.LANDSCAPE + else -> LibOrientation.PORTRAIT + } } + LibOrientation.LANDSCAPE -> if (layoutLandscape != null) LibOrientation.LANDSCAPE else LibOrientation.PORTRAIT + else -> config.orientation } - LibOrientation.LANDSCAPE -> if (layoutLandscape != null) LibOrientation.LANDSCAPE else LibOrientation.PORTRAIT - else -> config.orientation - } - Column( - modifier = when (deviceOrientation) { - LibOrientation.PORTRAIT -> Modifier.wrapContentSize() - LibOrientation.LANDSCAPE -> Modifier - .wrapContentWidth() - }, - horizontalAlignment = Alignment.Start - ) { + Column( + modifier = when (deviceOrientation) { + LibOrientation.PORTRAIT -> Modifier.wrapContentSize() + LibOrientation.LANDSCAPE -> Modifier + .wrapContentWidth() + }, + horizontalAlignment = Alignment.Start + ) { - header?.takeUnless { deviceOrientation == LibOrientation.LANDSCAPE }?.let { - // Display header - Column(modifier = Modifier.testTag(TestTags.FRAME_BASE_HEADER)) { - HeaderComponent( - header = header, - contentHorizontalPadding = PaddingValues( - start = horizontalContentPadding.calculateStartPadding(layoutDirection), - end = horizontalContentPadding.calculateEndPadding(layoutDirection), + header?.takeUnless { deviceOrientation == LibOrientation.LANDSCAPE }?.let { + // Display header + Column(modifier = Modifier.testTag(TestTags.FRAME_BASE_HEADER)) { + HeaderComponent( + header = header, + contentHorizontalPadding = PaddingValues( + start = horizontalContentPadding.calculateStartPadding(layoutDirection), + end = horizontalContentPadding.calculateEndPadding(layoutDirection), + ) ) + } + } ?: run { + // If no header is defined, add extra spacing to the content top padding + Spacer( + modifier = Modifier + .testTag(TestTags.FRAME_BASE_NO_HEADER) + .height(8.dp) ) } - } ?: run { - // If no header is defined, add extra spacing to the content top padding - Spacer( - modifier = Modifier - .testTag(TestTags.FRAME_BASE_NO_HEADER) - .height(8.dp) - ) - } - val contentModifier = Modifier - .testTag(TestTags.FRAME_BASE_CONTENT) - .padding( - PaddingValues( - start = horizontalContentPadding.calculateStartPadding( - layoutDirection - ), - end = horizontalContentPadding.calculateEndPadding(layoutDirection), - // Enforce default top spacing - top = 16.dp, - ) - ) - when (layoutType) { - LibOrientation.PORTRAIT -> { - Column( - modifier = contentModifier, - horizontalAlignment = layoutHorizontalAlignment, - content = { layout(deviceOrientation) } + val contentModifier = Modifier + .testTag(TestTags.FRAME_BASE_CONTENT) + .padding( + PaddingValues( + start = horizontalContentPadding.calculateStartPadding( + layoutDirection + ), + end = horizontalContentPadding.calculateEndPadding(layoutDirection), + // Enforce default top spacing + top = 16.dp, + ) ) + when (layoutType) { + LibOrientation.PORTRAIT -> { + Column( + modifier = contentModifier, + horizontalAlignment = layoutHorizontalAlignment, + content = { layout(deviceOrientation) } + ) + } + LibOrientation.LANDSCAPE -> { + Row( + modifier = contentModifier, + verticalAlignment = layoutLandscapeVerticalAlignment, + content = layoutLandscape!! + ) + } + else -> Unit } - LibOrientation.LANDSCAPE -> { - Row( - modifier = contentModifier, - verticalAlignment = layoutLandscapeVerticalAlignment, - content = layoutLandscape!! + + buttons?.let { buttons -> + if (buttonsVisible) { + Column(modifier = Modifier.testTag(TestTags.FRAME_BASE_BUTTONS)) { + buttons.invoke(this, deviceOrientation) + } + } else Spacer( + modifier = Modifier + .testTag(TestTags.FRAME_BASE_NO_BUTTONS) + .height(24.dp) ) } - else -> Unit - } - - buttons?.let { buttons -> - if (buttonsVisible) { - Column(modifier = Modifier.testTag(TestTags.FRAME_BASE_BUTTONS)) { - buttons.invoke(this, deviceOrientation) - } - } else Spacer( - modifier = Modifier - .testTag(TestTags.FRAME_BASE_NO_BUTTONS) - .height(24.dp) - ) } } } \ No newline at end of file diff --git a/core/src/jvmMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.jvm.kt b/core/src/jvmMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.jvm.kt new file mode 100644 index 00000000..d541a1c6 --- /dev/null +++ b/core/src/jvmMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.jvm.kt @@ -0,0 +1,8 @@ +package com.maxkeppeker.sheets.core.utils + +import androidx.compose.runtime.Composable + +@Composable +actual fun AndroidWindowSizeFix(content: @Composable () -> Unit) { + content() +} \ No newline at end of file diff --git a/core/src/nonJvmMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.nonJvm.kt b/core/src/nonJvmMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.nonJvm.kt new file mode 100644 index 00000000..d541a1c6 --- /dev/null +++ b/core/src/nonJvmMain/kotlin/com/maxkeppeker/sheets/core/utils/AndroidWindowSizeFix.nonJvm.kt @@ -0,0 +1,8 @@ +package com.maxkeppeker.sheets.core.utils + +import androidx.compose.runtime.Composable + +@Composable +actual fun AndroidWindowSizeFix(content: @Composable () -> Unit) { + content() +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 60ac3aee..82e11f87 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,7 +6,7 @@ compose = "1.6.10" androidx-test-core = "1.5.0" datetime = "0.6.0-RC.2" desugar = "2.0.4" -emoji = "0.18.0" +emoji = "0.20.0" espresso-core = "3.5.1" junit = "1.1.5" junit-version = "4.13.2" @@ -31,6 +31,7 @@ androidx-runner = { module = "androidx.test:runner", version.ref = "runner" } androidx-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "ui-test-junit4" } androidx-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } androidx-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } +androidx-window = { module = "androidx.window:window", version.require = "1.3.0" } datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "datetime" } desugar = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" } emoji-facebook = { group = "com.vanniktech", name = "emoji-facebook", version.ref = "emoji" }