├── .github └── workflows │ ├── build-mkdocs.yml │ └── maven-publish.yml ├── .gitignore ├── .run ├── apiCheck.run.xml ├── apiDump.run.xml ├── demo.android.run.xml └── demo.desktop.run.xml ├── LICENSE ├── README.md ├── build.gradle.kts ├── demo ├── android │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── java │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── demo │ │ │ ├── App.kt │ │ │ ├── ComposablesUtil.kt │ │ │ ├── Extensions.kt │ │ │ ├── MainActivity.kt │ │ │ ├── classes │ │ │ ├── AppItem.kt │ │ │ └── DemoStyle.kt │ │ │ ├── demos │ │ │ ├── BillingDemos.kt │ │ │ ├── ColorDemos.kt │ │ │ ├── CustomDemos.kt │ │ │ ├── DateTimeDemos.kt │ │ │ ├── InfoDemos.kt │ │ │ ├── InputDemos.kt │ │ │ ├── ListDemos.kt │ │ │ ├── NumberDemos.kt │ │ │ ├── ProgressDemos.kt │ │ │ └── SingleDialogWithListDemos.kt │ │ │ └── views │ │ │ ├── SegmentedControl.kt │ │ │ ├── Spinner.kt │ │ │ └── Transition.kt │ │ └── res │ │ ├── drawable │ │ ├── ic_launcher_background.xml │ │ └── ic_launcher_foreground.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.webp │ │ └── ic_launcher_round.webp │ │ └── values │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── themes.xml └── desktop │ ├── build.gradle.kts │ └── src │ └── jvmMain │ └── kotlin │ └── com │ └── michaelflisar │ └── composedialogs │ └── demo │ └── Main.kt ├── documentation ├── _data │ ├── other-projects.yml │ └── project.yml ├── _includes │ ├── demo.md │ ├── dependencies.md │ ├── description.md │ ├── gradle.md │ ├── header.md │ ├── me.md │ ├── modules.md │ ├── other-libraries.md │ ├── parts │ │ ├── gradle-multi.md │ │ ├── gradle-single.md │ │ ├── platforms-android-only.md │ │ └── platforms-multiplatform.md │ ├── platforms.md │ ├── region-features.md │ └── screenshots.md ├── docs │ ├── advanced │ │ ├── buttons.md │ │ ├── custom-dialog.md │ │ ├── events.md │ │ └── styles.md │ ├── assets │ │ └── logo.png │ ├── dependencies.md │ ├── index.md │ ├── me.md │ ├── migration │ │ └── v2.md │ ├── modules │ │ ├── core.md │ │ ├── dialog-billing.md │ │ ├── dialog-color.md │ │ ├── dialog-date.md │ │ ├── dialog-info.md │ │ ├── dialog-input.md │ │ ├── dialog-list.md │ │ ├── dialog-menu.md │ │ ├── dialog-number.md │ │ ├── dialog-progress.md │ │ └── dialog-time.md │ ├── other-libraries.md │ ├── screenshots │ │ ├── color │ │ │ ├── demo_color1.jpg │ │ │ ├── demo_color2.jpg │ │ │ ├── demo_color3.jpg │ │ │ └── demo_color4.jpg │ │ ├── date │ │ │ ├── demo_calendar1.jpg │ │ │ ├── demo_calendar2.jpg │ │ │ └── demo_calendar3.jpg │ │ ├── info │ │ │ ├── demo_info1.jpg │ │ │ ├── demo_info2.jpg │ │ │ ├── demo_info3.jpg │ │ │ └── demo_info4.jpg │ │ ├── input │ │ │ ├── demo_input1.jpg │ │ │ └── demo_input2.jpg │ │ ├── list │ │ │ ├── demo_list1.jpg │ │ │ ├── demo_list2.jpg │ │ │ ├── demo_list3.jpg │ │ │ ├── demo_list4.jpg │ │ │ ├── demo_list5.jpg │ │ │ ├── demo_list6.jpg │ │ │ └── demo_list7.jpg │ │ ├── menu │ │ │ └── demo_menu1.jpg │ │ ├── number │ │ │ ├── demo_number1.jpg │ │ │ ├── demo_number2.jpg │ │ │ └── demo_number3.jpg │ │ ├── overview.jpg │ │ ├── progress │ │ │ ├── demo_progress1.jpg │ │ │ └── demo_progress2.jpg │ │ └── time │ │ │ ├── demo_time1.jpg │ │ │ └── demo_time2.jpg │ ├── setup.md │ └── usage.md └── mkdocs.yml ├── gradle.properties ├── gradle ├── androidx.versions.toml ├── app.versions.toml ├── deps.versions.toml ├── kotlinx.versions.toml ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── library ├── core │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── core.api │ │ └── jvm │ │ │ └── core.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── core │ │ │ ├── DialogUtil.kt │ │ │ └── Platform.android.kt │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── core │ │ │ ├── ComposeDialogStyle.kt │ │ │ ├── Dialog.kt │ │ │ ├── DialogState.kt │ │ │ ├── Platform.kt │ │ │ ├── copied │ │ │ └── AlertDialogFlowRow.kt │ │ │ ├── internal │ │ │ ├── ComposeDialogButtons.kt │ │ │ ├── ComposeDialogContent.kt │ │ │ ├── ComposeDialogTitle.kt │ │ │ ├── ComposeDialogTitleToolbar.kt │ │ │ └── sub │ │ │ │ ├── ComposeDialogButton.kt │ │ │ │ ├── ComposeDialogImageButton.kt │ │ │ │ ├── TitleIcon.kt │ │ │ │ └── TitleTitle.kt │ │ │ └── style │ │ │ ├── BottomSheetStyle.kt │ │ │ ├── DialogStyle.kt │ │ │ └── FullscreenDialogStyle.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── core │ │ │ ├── DialogDefaultsExtensions.kt │ │ │ ├── DialogStyleDesktopOtions.kt │ │ │ ├── Platform.jvm.kt │ │ │ └── style │ │ │ └── DialogStyleDesktop.kt │ │ └── nativeMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── core │ │ └── Platform.native.kt └── modules │ ├── billing │ ├── .gitignore │ ├── api │ │ └── billing.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── billing │ │ │ └── DialogBilling.kt │ │ └── res │ │ ├── values-de │ │ └── strings.xml │ │ └── values │ │ └── strings.xml │ ├── color │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── color.api │ │ └── jvm │ │ │ └── color.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── commonMain │ │ ├── composeResources │ │ │ ├── values-de │ │ │ │ └── strings.xml │ │ │ └── values │ │ │ │ └── strings.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── color │ │ │ ├── DialogColor.kt │ │ │ ├── DialogColorUtil.kt │ │ │ ├── classes │ │ │ ├── Color.kt │ │ │ ├── ColorDefinitions.kt │ │ │ ├── ColorStateSaver.kt │ │ │ ├── ColorStateSaverNullable.kt │ │ │ ├── GroupedColor.kt │ │ │ └── IColor.kt │ │ │ └── composables │ │ │ ├── ColorGrid.kt │ │ │ ├── ColorSlider.kt │ │ │ ├── Content.kt │ │ │ └── TitleForPages.kt │ │ └── jvmMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── color │ │ └── DialogDefaultsExtension.kt │ ├── date │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── date.api │ │ └── jvm │ │ │ └── date.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── date │ │ │ └── Platform.android.kt │ │ ├── commonMain │ │ ├── composeResources │ │ │ ├── values-de │ │ │ │ └── strings.xml │ │ │ └── values │ │ │ │ └── strings.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── date │ │ │ ├── DialogDate.kt │ │ │ ├── Platform.kt │ │ │ ├── classes │ │ │ ├── CalendarPageData.kt │ │ │ └── DateViewState.kt │ │ │ ├── composables │ │ │ ├── CalendarHeader.kt │ │ │ ├── CalendarMonth.kt │ │ │ ├── CalendarSelectList.kt │ │ │ ├── CalendarSelectionHeader.kt │ │ │ └── CalendarTodayButton.kt │ │ │ └── utils │ │ │ └── DateUtil.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── date │ │ │ ├── DialogDefaultsExtension.kt │ │ │ └── Platform.jvm.kt │ │ └── nativeMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── date │ │ └── Platform.native.kt │ ├── info │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── info.api │ │ └── jvm │ │ │ └── info.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── info │ │ │ └── DialogInfo.kt │ │ └── jvmMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── info │ │ └── DialogDefaultsExtension.kt │ ├── input │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── input.api │ │ └── jvm │ │ │ └── input.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── input │ │ │ └── Platform.android.kt │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── input │ │ │ ├── DialogInput.kt │ │ │ ├── DialogInputNumber.kt │ │ │ ├── DialogInputValidator.kt │ │ │ ├── Platform.kt │ │ │ └── composables │ │ │ └── DialogInputTextField.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── input │ │ │ ├── DialogDefaultsExtension.kt │ │ │ └── Platform.jvm.kt │ │ └── nativeMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── input │ │ └── Platform.native.kt │ ├── list │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── list.api │ │ └── jvm │ │ │ └── list.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── list │ │ │ ├── DialogList.kt │ │ │ ├── DialogListUtil.kt │ │ │ └── composables │ │ │ ├── DialogListContent.kt │ │ │ ├── DialogListItem.kt │ │ │ └── DialogListTrailingContent.kt │ │ └── jvmMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── list │ │ └── DialogDefaultsExtension.kt │ ├── menu │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── menu.api │ │ └── jvm │ │ │ └── menu.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── menu │ │ │ ├── DialogMenu.kt │ │ │ └── MenuItem.kt │ │ └── jvmMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── menu │ │ └── DialogDefaultsExtension.kt │ ├── number │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── number.api │ │ └── jvm │ │ │ └── number.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── number │ │ │ └── Platform.android.kt │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── number │ │ │ ├── DialogNumberPicker.kt │ │ │ ├── Platform.kt │ │ │ ├── composables │ │ │ └── PickerIcon.kt │ │ │ └── utils │ │ │ └── NumberUtil.kt │ │ ├── jvmMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── number │ │ │ ├── DialogDefaultsExtension.kt │ │ │ └── Platform.jvm.kt │ │ └── nativeMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── number │ │ └── Platform.native.kt │ ├── progress │ ├── .gitignore │ ├── api │ │ ├── android │ │ │ └── progress.api │ │ └── jvm │ │ │ └── progress.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com │ │ │ └── michaelflisar │ │ │ └── composedialogs │ │ │ └── dialogs │ │ │ └── progress │ │ │ └── DialogProgress.kt │ │ └── jvmMain │ │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── progress │ │ └── DialogDefaultsExtension.kt │ └── time │ ├── .gitignore │ ├── api │ ├── android │ │ └── time.api │ └── jvm │ │ └── time.api │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ ├── androidMain │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── time │ │ └── Platform.android.kt │ ├── commonMain │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── time │ │ ├── DialogTime.kt │ │ ├── Platform.kt │ │ └── utils │ │ └── TimeUtil.kt │ ├── jvmMain │ └── kotlin │ │ └── com │ │ └── michaelflisar │ │ └── composedialogs │ │ └── dialogs │ │ └── time │ │ ├── DialogDefaultsExtension.kt │ │ └── Platform.jvm.kt │ └── nativeMain │ └── kotlin │ └── com │ └── michaelflisar │ └── composedialogs │ └── dialogs │ └── time │ └── Platform.native.kt ├── readmes ├── dialog-billing.md ├── dialog-color.md ├── dialog-custom.md ├── dialog-date.md ├── dialog-info.md ├── dialog-input.md ├── dialog-list.md ├── dialog-number.md ├── dialog-progress.md └── dialog-time.md └── settings.gradle.kts /.github/workflows/build-mkdocs.yml: -------------------------------------------------------------------------------- 1 | name: build-mkdocs 2 | on: 3 | push: 4 | branches: 5 | - main 6 | permissions: 7 | contents: write 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: actions/setup-python@v5 14 | with: 15 | python-version: 3.x 16 | - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV 17 | - uses: actions/cache@v4 18 | with: 19 | key: mkdocs-material-${{ env.cache_id }} 20 | path: .cache 21 | restore-keys: | 22 | mkdocs-material- 23 | - run: pip install \ 24 | mkdocs-material \ 25 | mkdocs-minify-plugin \ 26 | "mkdocs-material[imaging]" \ 27 | mkdocs-macros-plugin \ 28 | mkdocs-glightbox \ 29 | mkdocs-badges 30 | - name: Deploy 31 | run: mkdocs gh-deploy --force 32 | working-directory: documentation 33 | -------------------------------------------------------------------------------- /.github/workflows/maven-publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | on: 3 | release: 4 | types: [published] 5 | 6 | env: 7 | TAG: ${{ github.event.release.tag_name }} 8 | 9 | jobs: 10 | publish: 11 | name: Publish 12 | runs-on: macos-latest 13 | 14 | steps: 15 | 16 | - name: Checkout repository 17 | uses: actions/checkout@v2 18 | 19 | - name: Set up JDK 17 20 | uses: actions/setup-java@v2 21 | with: 22 | java-version: '17' 23 | distribution: 'adopt' 24 | 25 | - name: Grant Permission to Execute Gradle 26 | run: chmod +x gradlew 27 | 28 | - name: Build with Gradle 29 | uses: gradle/gradle-build-action@v2 30 | with: 31 | arguments: build 32 | 33 | - name: Publish Library 34 | run: | 35 | echo "TAG: $TAG" 36 | echo "Publishing library 🚀" 37 | echo "" 38 | ./gradlew publish --no-daemon --no-parallel 39 | echo "Published✅" 40 | 41 | # echo "Releasing repository... 🚀" 42 | # ./gradlew closeAndReleaseRepository 43 | # echo "Released✅" 44 | env: 45 | ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_KEY }} 46 | ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_PASSWORD }} 47 | ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }} 48 | ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.aar 4 | *.ap_ 5 | *.aab 6 | 7 | # Files for the ART/Dalvik VM 8 | *.dex 9 | 10 | # Java class files 11 | *.class 12 | 13 | # Generated files 14 | bin/ 15 | gen/ 16 | out/ 17 | # Uncomment the following line in case you need and you don't have the release build type files in your app 18 | # release/ 19 | 20 | # Gradle files 21 | .gradle/ 22 | build/ 23 | 24 | # Local configuration file (sdk path, etc) 25 | local.properties 26 | 27 | # Proguard folder generated by Eclipse 28 | proguard/ 29 | 30 | # Log Files 31 | *.log 32 | 33 | # Android Studio Navigation editor temp files 34 | .navigation/ 35 | 36 | # Android Studio captures folder 37 | captures/ 38 | 39 | # IntelliJ 40 | *.iml 41 | .idea/workspace.xml 42 | .idea/tasks.xml 43 | .idea/gradle.xml 44 | .idea/assetWizardSettings.xml 45 | .idea/dictionaries 46 | .idea/libraries 47 | # Android Studio 3 in .gitignore file. 48 | .idea/caches 49 | .idea/modules.xml 50 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 51 | .idea/navEditor.xml 52 | 53 | # Keystore files 54 | # Uncomment the following lines if you do not want to check your keystore files in. 55 | #*.jks 56 | #*.keystore 57 | 58 | # External native build folder generated in Android Studio 2.2 and later 59 | .externalNativeBuild 60 | .cxx/ 61 | 62 | # Google Services (e.g. APIs or Firebase) 63 | # google-services.json 64 | 65 | # Freeline 66 | freeline.py 67 | freeline/ 68 | freeline_project_description.json 69 | 70 | # fastlane 71 | fastlane/report.xml 72 | fastlane/Preview.html 73 | fastlane/screenshots 74 | fastlane/test_output 75 | fastlane/readme.md 76 | 77 | # Version control 78 | vcs.xml 79 | 80 | # lint 81 | lint/intermediates/ 82 | lint/generated/ 83 | lint/outputs/ 84 | lint/tmp/ 85 | # lint/reports/ 86 | /.kotlin 87 | /.idea 88 | -------------------------------------------------------------------------------- /.run/apiCheck.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 16 | 18 | true 19 | true 20 | false 21 | false 22 | 23 | 24 | -------------------------------------------------------------------------------- /.run/apiDump.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 16 | 18 | true 19 | true 20 | false 21 | false 22 | 23 | 24 | -------------------------------------------------------------------------------- /.run/demo.desktop.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 16 | 18 | true 19 | true 20 | false 21 | false 22 | 23 | 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [Documentation](https://mflisar.github.io/ComposeDialogs/) -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | plugins { 4 | // this is necessary to avoid the plugins to be loaded multiple times 5 | // in each subproject's classloader 6 | alias(libs.plugins.android.application) apply false 7 | alias(libs.plugins.android.library) apply false 8 | alias(libs.plugins.kotlin.compose) apply false 9 | alias(libs.plugins.compose) apply false 10 | alias(libs.plugins.kotlin.multiplatform) apply false 11 | alias(libs.plugins.kotlin.android) apply false 12 | alias(libs.plugins.kotlin.parcelize) apply false 13 | alias(libs.plugins.gradle.maven.publish.plugin) apply false 14 | alias(libs.plugins.dokka) apply false 15 | alias(libs.plugins.binary.compatibility.validator) apply false 16 | } 17 | 18 | allprojects { 19 | 20 | // this task fails in github action - so I disable it... 21 | tasks.matching { task -> 22 | task.name.contains("javaDocReleaseGeneration", ignoreCase = true) 23 | }.configureEach { 24 | enabled = false 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /demo/android/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /demo/android/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("com.android.application") 3 | id("kotlin-android") 4 | id("kotlin-parcelize") 5 | alias(libs.plugins.kotlin.compose) 6 | } 7 | 8 | android { 9 | 10 | namespace = "com.michaelflisar.composedialogs.demo" 11 | 12 | compileSdk = app.versions.compileSdk.get().toInt() 13 | 14 | buildFeatures { 15 | compose = true 16 | } 17 | 18 | defaultConfig { 19 | minSdk = app.versions.minSdk.get().toInt() 20 | targetSdk = app.versions.targetSdk.get().toInt() 21 | versionCode = 1 22 | versionName = "1.0" 23 | } 24 | 25 | buildTypes { 26 | release { 27 | isMinifyEnabled = false 28 | proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") 29 | } 30 | } 31 | 32 | // eventually use local custom signing 33 | val debugKeyStore = providers.gradleProperty("debugKeyStore").orNull 34 | if (debugKeyStore != null) { 35 | signingConfigs { 36 | getByName("debug") { 37 | keyAlias = "androiddebugkey" 38 | keyPassword = "android" 39 | storeFile = File(debugKeyStore) 40 | storePassword = "android" 41 | } 42 | } 43 | } 44 | 45 | compileOptions { 46 | sourceCompatibility = JavaVersion.VERSION_17 47 | targetCompatibility = JavaVersion.VERSION_17 48 | isCoreLibraryDesugaringEnabled = true 49 | } 50 | 51 | kotlinOptions { 52 | jvmTarget = JavaVersion.VERSION_17.toString() 53 | } 54 | } 55 | 56 | dependencies { 57 | 58 | // ------------------------ 59 | // AndroidX 60 | // ------------------------ 61 | 62 | implementation(androidx.core) 63 | implementation(androidx.lifecycle) 64 | 65 | // Compose 66 | implementation(libs.compose.material3) 67 | implementation(libs.compose.material.icons.core) 68 | implementation(libs.compose.material.icons.extended) 69 | 70 | implementation(androidx.activity.compose) 71 | 72 | // accompanist 73 | implementation(deps.drawablepainter) 74 | 75 | // ------------------------ 76 | // Libraries 77 | // ------------------------ 78 | 79 | implementation(project(":composedialogs:core")) 80 | implementation(project(":composedialogs:modules:info")) 81 | implementation(project(":composedialogs:modules:input")) 82 | implementation(project(":composedialogs:modules:number")) 83 | implementation(project(":composedialogs:modules:time")) 84 | implementation(project(":composedialogs:modules:date")) 85 | implementation(project(":composedialogs:modules:progress")) 86 | implementation(project(":composedialogs:modules:color")) 87 | implementation(project(":composedialogs:modules:list")) 88 | implementation(project(":composedialogs:modules:billing")) 89 | implementation(project(":composedialogs:modules:menu")) 90 | 91 | // ------------------------ 92 | // Desugar 93 | // ------------------------ 94 | 95 | coreLibraryDesugaring(deps.desugar) 96 | 97 | // ------------------------ 98 | // Others 99 | // ------------------------ 100 | 101 | // a minimal library that provides some useful composables that I use inside demo activities 102 | implementation(deps.toolbox.core) 103 | implementation(deps.toolbox.ui) 104 | implementation(deps.toolbox.android.demo.app) 105 | } -------------------------------------------------------------------------------- /demo/android/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/consumer-rules.pro -------------------------------------------------------------------------------- /demo/android/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle.kts. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /demo/android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 7 | 8 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /demo/android/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/App.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo 2 | 3 | import com.michaelflisar.toolbox.androiddemoapp.DemoApp 4 | 5 | class App : DemoApp() -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/ComposablesUtil.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo 2 | 3 | import androidx.compose.foundation.clickable 4 | import androidx.compose.foundation.layout.* 5 | import androidx.compose.material3.ElevatedCard 6 | import androidx.compose.material3.Icon 7 | import androidx.compose.material3.MaterialTheme 8 | import androidx.compose.material3.Text 9 | import androidx.compose.runtime.Composable 10 | import androidx.compose.ui.Alignment 11 | import androidx.compose.ui.Modifier 12 | import androidx.compose.ui.graphics.vector.ImageVector 13 | import androidx.compose.ui.unit.dp 14 | import com.michaelflisar.composedialogs.core.DialogStateNoData 15 | 16 | @Composable 17 | fun DemoDialogRegion(title: String) { 18 | Text( 19 | modifier = Modifier.padding(all = 4.dp), 20 | text = title, 21 | style = MaterialTheme.typography.titleMedium, 22 | color = MaterialTheme.colorScheme.primary 23 | ) 24 | } 25 | 26 | @Composable 27 | fun DemoDialogRow(content: @Composable RowScope.() -> Unit) { 28 | Row( 29 | horizontalArrangement = Arrangement.spacedBy(8.dp) 30 | ) { 31 | content() 32 | } 33 | } 34 | 35 | @Composable 36 | fun RowScope.DemoDialogButton( 37 | state: DialogStateNoData, 38 | icon: ImageVector, 39 | label: String, 40 | description: String 41 | ) { 42 | ElevatedCard( 43 | modifier = Modifier.weight(1f) 44 | ) { 45 | Row(modifier = Modifier 46 | .fillMaxWidth() 47 | .clickable { state.show() } 48 | .padding(all = 16.dp), 49 | verticalAlignment = Alignment.CenterVertically 50 | ) { 51 | Icon( 52 | imageVector = icon, 53 | contentDescription = "" 54 | ) 55 | Column( 56 | modifier = Modifier 57 | .weight(1f) 58 | .padding(start = 16.dp) 59 | ) { 60 | Text(text = label, style = MaterialTheme.typography.titleSmall) 61 | Text(text = description, style = MaterialTheme.typography.bodySmall) 62 | } 63 | } 64 | 65 | } 66 | } -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/Extensions.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo 2 | 3 | import android.content.Context 4 | import android.widget.Toast 5 | 6 | // good enough for this demo app... 7 | private var lastToast: Toast? = null 8 | 9 | fun Context.showToast(text: String) { 10 | lastToast?.cancel() 11 | lastToast = Toast.makeText(this, text, Toast.LENGTH_SHORT) 12 | lastToast?.show() 13 | } -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/classes/AppItem.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo.classes 2 | 3 | import android.content.Context 4 | import android.content.pm.ResolveInfo 5 | import android.graphics.drawable.Drawable 6 | import android.os.Parcelable 7 | import kotlinx.parcelize.Parcelize 8 | 9 | @Parcelize 10 | data class AppItem( 11 | val id: Int, 12 | val resolveInfo: ResolveInfo, 13 | val label: String, 14 | //val icon: Drawable 15 | ) : Parcelable { 16 | fun icon(context: Context) =resolveInfo.loadIcon(context.packageManager) 17 | } -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/classes/DemoStyle.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo.classes 2 | 3 | enum class DemoStyle { 4 | Dialog, 5 | BottomSheet 6 | } -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/demos/BillingDemos.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo.demos 2 | 3 | import androidx.compose.foundation.layout.RowScope 4 | import androidx.compose.material.icons.Icons 5 | import androidx.compose.material.icons.filled.Fastfood 6 | import androidx.compose.material.icons.filled.Info 7 | import androidx.compose.material.icons.filled.Shop 8 | import androidx.compose.material3.Icon 9 | import androidx.compose.material3.Text 10 | import androidx.compose.runtime.Composable 11 | import androidx.compose.ui.platform.LocalContext 12 | import com.michaelflisar.composedialogs.core.ComposeDialogStyle 13 | import com.michaelflisar.composedialogs.core.rememberDialogState 14 | import com.michaelflisar.composedialogs.demo.DemoDialogButton 15 | import com.michaelflisar.composedialogs.demo.DemoDialogRegion 16 | import com.michaelflisar.composedialogs.demo.DemoDialogRow 17 | import com.michaelflisar.composedialogs.demo.showToast 18 | import com.michaelflisar.composedialogs.dialogs.billing.DialogBilling 19 | import com.michaelflisar.kotbilling.classes.Product 20 | import com.michaelflisar.kotbilling.classes.ProductType 21 | 22 | @Composable 23 | fun BillingDemos(style: ComposeDialogStyle, icon: (@Composable () -> Unit)?) { 24 | DemoDialogRegion("Billing Dialogs") 25 | DemoDialogRow { 26 | DemoDialogBilling(style, icon) 27 | } 28 | } 29 | 30 | @Composable 31 | private fun RowScope.DemoDialogBilling(style: ComposeDialogStyle, icon: (@Composable () -> Unit)?) { 32 | val context = LocalContext.current 33 | val state = rememberDialogState() 34 | if (state.visible) { 35 | DialogBilling( 36 | state = state, 37 | title = { Text("Dialog") }, 38 | products = listOf( 39 | DialogBilling.BillingProduct( 40 | Product( 41 | "pro-version", 42 | ProductType.InApp, 43 | false 44 | ), 45 | icon = { 46 | Icon(Icons.Default.Shop, null) 47 | } 48 | ), 49 | DialogBilling.BillingProduct( 50 | Product( 51 | "consumable1", 52 | ProductType.InApp, 53 | true 54 | ), 55 | icon = { 56 | Icon(Icons.Default.Fastfood, null) 57 | } 58 | ) 59 | ), 60 | icon = icon, 61 | style = style, 62 | onEvent = { event -> 63 | context.showToast("Event $event") 64 | } 65 | ) 66 | } 67 | DemoDialogButton( 68 | state, 69 | Icons.Default.Info, 70 | "Simple Billing Dialog", 71 | "Shows a list with prices (and purchase state if already owned) of items to buy (this will only return a non empty result in a real app with products!)" 72 | ) 73 | } -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/demos/SingleDialogWithListDemos.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo.demos 2 | 3 | import androidx.compose.foundation.background 4 | import androidx.compose.foundation.clickable 5 | import androidx.compose.foundation.layout.Arrangement 6 | import androidx.compose.foundation.layout.ColumnScope 7 | import androidx.compose.foundation.layout.fillMaxWidth 8 | import androidx.compose.foundation.layout.padding 9 | import androidx.compose.foundation.lazy.LazyColumn 10 | import androidx.compose.material3.MaterialTheme 11 | import androidx.compose.material3.Text 12 | import androidx.compose.material3.minimumInteractiveComponentSize 13 | import androidx.compose.runtime.Composable 14 | import androidx.compose.ui.Modifier 15 | import androidx.compose.ui.draw.clip 16 | import androidx.compose.ui.platform.LocalContext 17 | import androidx.compose.ui.unit.dp 18 | import com.michaelflisar.composedialogs.core.DialogStateWithData 19 | import com.michaelflisar.composedialogs.core.ComposeDialogStyle 20 | import com.michaelflisar.composedialogs.core.rememberDialogState 21 | import com.michaelflisar.composedialogs.demo.DemoDialogRegion 22 | import com.michaelflisar.composedialogs.demo.showToast 23 | import com.michaelflisar.composedialogs.dialogs.info.DialogInfo 24 | 25 | @Composable 26 | fun ColumnScope.SingleDialogWithListDemos(style: ComposeDialogStyle, icon: (@Composable () -> Unit)?) { 27 | DemoDialogRegion("Clicking any item in the list below will open its dialog") 28 | 29 | val items = 1..100 30 | val showDialog = rememberDialogState(data = null) 31 | ListDialog(showDialog, style, icon) 32 | 33 | LazyColumn( 34 | modifier = Modifier.weight(1f), 35 | verticalArrangement = Arrangement.spacedBy(8.dp) 36 | ) { 37 | items.forEach { 38 | item(key = it) { 39 | Text( 40 | text = "Item #$it", 41 | modifier = Modifier 42 | .fillMaxWidth() 43 | .clip(MaterialTheme.shapes.small) 44 | .background(MaterialTheme.colorScheme.primary) 45 | .clickable { 46 | showDialog.show(it) 47 | } 48 | .minimumInteractiveComponentSize() 49 | .padding(8.dp), 50 | color = MaterialTheme.colorScheme.onPrimary 51 | ) 52 | } 53 | } 54 | } 55 | } 56 | 57 | @Composable 58 | private fun ListDialog( 59 | stateWithData: DialogStateWithData, 60 | style: ComposeDialogStyle, 61 | icon: (@Composable () -> Unit)? 62 | ) { 63 | if (stateWithData.visible) { 64 | val context = LocalContext.current 65 | val data = stateWithData.requireData() 66 | DialogInfo( 67 | state = stateWithData, 68 | title = { Text("Item Info") }, 69 | info = "This is the dialog for Item #$data", 70 | icon = icon, 71 | style = style, 72 | onEvent = { event -> 73 | context.showToast("Event $event") 74 | } 75 | ) 76 | } 77 | } -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/views/Spinner.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo.views 2 | 3 | import androidx.compose.foundation.ExperimentalFoundationApi 4 | import androidx.compose.foundation.focusable 5 | import androidx.compose.material.icons.Icons 6 | import androidx.compose.material.icons.filled.ArrowDropDown 7 | import androidx.compose.material3.* 8 | import androidx.compose.runtime.* 9 | import androidx.compose.ui.Modifier 10 | import androidx.compose.ui.draw.rotate 11 | 12 | @Composable 13 | fun Spinner( 14 | modifier: Modifier = Modifier, 15 | label: String = "", 16 | items: List, 17 | selected: String, 18 | enabled: Boolean = true, 19 | onItemSelected: (index: Int, item: String) -> Unit = { _, _ -> } 20 | ) { 21 | Spinner( 22 | modifier, 23 | label, 24 | items, 25 | selected, 26 | { item -> item }, 27 | enabled, 28 | onItemSelected 29 | ) 30 | } 31 | 32 | @OptIn(ExperimentalMaterial3Api::class) 33 | @Composable 34 | fun Spinner( 35 | modifier: Modifier = Modifier, 36 | label: String = "", 37 | items: List, 38 | selected: T, 39 | itemToString: @Composable (T) -> String, 40 | enabled: Boolean = true, 41 | onItemSelected: (index: Int, item: T) -> Unit = { _, _ -> } 42 | ) { 43 | var selected by remember { mutableStateOf(selected) } 44 | var expanded by remember { mutableStateOf(false) } 45 | 46 | ExposedDropdownMenuBox( 47 | modifier = modifier, 48 | expanded = expanded, 49 | onExpandedChange = { 50 | expanded = !expanded 51 | } 52 | ) { 53 | OutlinedTextField( 54 | modifier = modifier 55 | .focusable(false) 56 | .menuAnchor(MenuAnchorType.PrimaryNotEditable), 57 | readOnly = true, 58 | enabled = enabled, 59 | value = itemToString(selected), 60 | onValueChange = { }, 61 | label = { Text(text = label) }, 62 | trailingIcon = { 63 | ExposedDropdownMenuDefaults.TrailingIcon(expanded) 64 | }, 65 | colors = ExposedDropdownMenuDefaults.outlinedTextFieldColors() 66 | ) 67 | ExposedDropdownMenu( 68 | expanded = expanded, 69 | onDismissRequest = { 70 | expanded = false 71 | }, 72 | modifier = modifier 73 | ) { 74 | items.forEachIndexed { index, item -> 75 | DropdownMenuItem( 76 | onClick = { 77 | if (item != selected) { 78 | selected = item 79 | onItemSelected.invoke(index, item) 80 | } 81 | expanded = false 82 | }, 83 | text = { 84 | Text(text = itemToString(item)) 85 | } 86 | ) 87 | } 88 | } 89 | } 90 | } -------------------------------------------------------------------------------- /demo/android/src/main/java/com/michaelflisar/composedialogs/demo/views/Transition.kt: -------------------------------------------------------------------------------- 1 | package com.michaelflisar.composedialogs.demo.views 2 | 3 | import androidx.compose.animation.animateColor 4 | import androidx.compose.animation.core.* 5 | import androidx.compose.runtime.Composable 6 | import androidx.compose.runtime.State 7 | import androidx.compose.ui.graphics.Color 8 | import androidx.compose.ui.unit.Dp 9 | 10 | @Composable 11 | fun Transition.animateFloatTween( 12 | label: String, 13 | targetValueByState: @Composable (state: S) -> Float 14 | ): State { 15 | return animateFloat( 16 | transitionSpec = { 17 | tween() 18 | }, 19 | label = label, 20 | targetValueByState = targetValueByState 21 | ) 22 | } 23 | 24 | @Composable 25 | fun Transition.animateIntTween( 26 | label: String, 27 | targetValueByState: @Composable (state: S) -> Int 28 | ): State { 29 | return animateInt( 30 | transitionSpec = { 31 | tween() 32 | }, 33 | label = label, 34 | targetValueByState = targetValueByState 35 | ) 36 | } 37 | 38 | @Composable 39 | fun Transition.animateColorTween( 40 | label: String, 41 | targetValueByState: @Composable (state: S) -> Color 42 | ): State { 43 | return animateColor( 44 | transitionSpec = { 45 | tween() 46 | }, 47 | label = label, 48 | targetValueByState = targetValueByState 49 | ) 50 | } 51 | 52 | @Composable 53 | fun Transition.animateDpTween( 54 | label: String, 55 | targetValueByState: @Composable (state: S) -> Dp 56 | ): State { 57 | return animateDp( 58 | transitionSpec = { 59 | tween() 60 | }, 61 | label = label, 62 | targetValueByState = targetValueByState 63 | ) 64 | } -------------------------------------------------------------------------------- /demo/android/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 11 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MFlisar/ComposeDialogs/72dcdfaaf3c4f59f5e96fed23ef9681a8e772c01/demo/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /demo/android/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3DDC84 4 | -------------------------------------------------------------------------------- /demo/android/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ComposeDialogs 3 | 4 | -------------------------------------------------------------------------------- /demo/android/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |