From d0485ed2f5286fa58bcac6427dddb68a25efe3dd Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov <654232+AlexeyTsvetkov@users.noreply.github.com> Date: Thu, 31 Dec 2020 21:38:01 +0300 Subject: [PATCH] Add widget gallery example (#242) --- examples/widgetsgallery/.gitignore | 10 + examples/widgetsgallery/README.md | 25 +++ .../widgetsgallery/android/build.gradle.kts | 25 +++ .../android/src/main/AndroidManifest.xml | 23 +++ .../compose/demo/widgets/MainActivity.kt | 15 ++ .../drawable-v24/ic_launcher_background.xml | 170 ++++++++++++++++ .../drawable-v24/ic_launcher_foreground.xml | 30 +++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3593 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5339 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2636 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3388 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4926 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7472 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7909 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 11873 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10652 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 16570 bytes .../src/main/res/values-night/themes.xml | 16 ++ .../android/src/main/res/values/colors.xml | 11 ++ .../android/src/main/res/values/strings.xml | 3 + .../android/src/main/res/values/themes.xml | 26 +++ examples/widgetsgallery/build.gradle.kts | 24 +++ .../widgetsgallery/common/build.gradle.kts | 60 ++++++ .../src/androidMain/AndroidManifest.xml | 2 + .../compose/demo/widgets/platform/Mouse.kt | 12 ++ .../demo/widgets/platform/Resources.kt | 27 +++ .../demo/widgets/platform/Scrollbar.kt | 21 ++ .../compose/demo/widgets/platform/System.kt | 8 + .../demo/widgets/data/DemoDataProvider.kt | 14 ++ .../compose/demo/widgets/data/model/Item.kt | 9 + .../compose/demo/widgets/data/model/Tweet.kt | 15 ++ .../compose/demo/widgets/platform/Mouse.kt | 12 ++ .../compose/demo/widgets/platform/Res.kt | 21 ++ .../demo/widgets/platform/Resources.kt | 12 ++ .../demo/widgets/platform/Scrollbar.kt | 21 ++ .../compose/demo/widgets/platform/System.kt | 3 + .../compose/demo/widgets/theme/Color.kt | 23 +++ .../compose/demo/widgets/theme/Shape.kt | 11 ++ .../compose/demo/widgets/theme/Theme.kt | 136 +++++++++++++ .../compose/demo/widgets/theme/Type.kt | 43 ++++ .../compose/demo/widgets/ui/MainView.kt | 154 +++++++++++++++ .../compose/demo/widgets/ui/WidgetView.kt | 31 +++ .../compose/demo/widgets/ui/WidgetsType.kt | 30 +++ .../demo/widgets/ui/screens/AppBars.kt | 160 +++++++++++++++ .../demo/widgets/ui/screens/Buttons.kt | 109 +++++++++++ .../compose/demo/widgets/ui/screens/Chips.kt | 131 +++++++++++++ .../demo/widgets/ui/screens/Loaders.kt | 41 ++++ .../demo/widgets/ui/screens/SnackBars.kt | 38 ++++ .../demo/widgets/ui/screens/TextInputs.kt | 87 +++++++++ .../compose/demo/widgets/ui/screens/Texts.kt | 97 ++++++++++ .../demo/widgets/ui/screens/Toggles.kt | 83 ++++++++ .../demo/widgets/ui/screens/UICards.kt | 100 ++++++++++ .../demo/widgets/ui/utils/LayoutModifiers.kt | 11 ++ .../demo/widgets/ui/utils/ResizablePanel.kt | 80 ++++++++ .../compose/demo/widgets/ui/utils/Text.kt | 23 +++ .../widgets/ui/utils/VerticalSplittable.kt | 90 +++++++++ .../resources/drawable-nodpi/food6.jpg | Bin 0 -> 78395 bytes .../resources/drawable-nodpi/p1.jpeg | Bin 0 -> 7182 bytes .../resources/drawable-nodpi/p2.jpeg | Bin 0 -> 5033 bytes .../resources/drawable-nodpi/p3.jpeg | Bin 0 -> 5714 bytes .../resources/drawable-nodpi/p6.jpeg | Bin 0 -> 5886 bytes .../resources/drawable/ic_instagram.xml | 15 ++ .../commonMain/resources/drawable/ic_send.xml | 9 + .../resources/drawable/ic_twitter.xml | 9 + .../compose/demo/widgets/platform/Mouse.kt | 33 ++++ .../demo/widgets/platform/Resources.kt | 14 ++ .../demo/widgets/platform/Scrollbar.kt | 30 +++ .../compose/demo/widgets/platform/System.kt | 4 + .../widgetsgallery/desktop/build.gradle.kts | 39 ++++ .../jetbrains/compose/demo/widgets/main.kt | 30 +++ examples/widgetsgallery/gradle.properties | 21 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58910 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + examples/widgetsgallery/gradlew | 183 ++++++++++++++++++ examples/widgetsgallery/gradlew.bat | 100 ++++++++++ examples/widgetsgallery/settings.gradle.kts | 1 + .../third_party/ComposeCookBook_LICENSE.txt | 21 ++ 79 files changed, 2617 insertions(+) create mode 100644 examples/widgetsgallery/.gitignore create mode 100644 examples/widgetsgallery/README.md create mode 100644 examples/widgetsgallery/android/build.gradle.kts create mode 100644 examples/widgetsgallery/android/src/main/AndroidManifest.xml create mode 100644 examples/widgetsgallery/android/src/main/java/org/jetbrains/compose/demo/widgets/MainActivity.kt create mode 100644 examples/widgetsgallery/android/src/main/res/drawable-v24/ic_launcher_background.xml create mode 100644 examples/widgetsgallery/android/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 examples/widgetsgallery/android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 examples/widgetsgallery/android/src/main/res/values-night/themes.xml create mode 100644 examples/widgetsgallery/android/src/main/res/values/colors.xml create mode 100644 examples/widgetsgallery/android/src/main/res/values/strings.xml create mode 100644 examples/widgetsgallery/android/src/main/res/values/themes.xml create mode 100644 examples/widgetsgallery/build.gradle.kts create mode 100644 examples/widgetsgallery/common/build.gradle.kts create mode 100644 examples/widgetsgallery/common/src/androidMain/AndroidManifest.xml create mode 100644 examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt create mode 100644 examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt create mode 100644 examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt create mode 100644 examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/DemoDataProvider.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/model/Item.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/model/Tweet.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Res.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Color.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Shape.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Theme.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Type.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/MainView.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/WidgetView.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/WidgetsType.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/AppBars.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Buttons.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Chips.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Loaders.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/SnackBars.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/TextInputs.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Texts.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Toggles.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/UICards.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/LayoutModifiers.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/ResizablePanel.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/Text.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/VerticalSplittable.kt create mode 100644 examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/food6.jpg create mode 100644 examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p1.jpeg create mode 100644 examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p2.jpeg create mode 100644 examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p3.jpeg create mode 100644 examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p6.jpeg create mode 100644 examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_instagram.xml create mode 100644 examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_send.xml create mode 100644 examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_twitter.xml create mode 100644 examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt create mode 100644 examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt create mode 100644 examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt create mode 100644 examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt create mode 100644 examples/widgetsgallery/desktop/build.gradle.kts create mode 100644 examples/widgetsgallery/desktop/src/jvmMain/kotlin/org/jetbrains/compose/demo/widgets/main.kt create mode 100644 examples/widgetsgallery/gradle.properties create mode 100644 examples/widgetsgallery/gradle/wrapper/gradle-wrapper.jar create mode 100644 examples/widgetsgallery/gradle/wrapper/gradle-wrapper.properties create mode 100755 examples/widgetsgallery/gradlew create mode 100644 examples/widgetsgallery/gradlew.bat create mode 100644 examples/widgetsgallery/settings.gradle.kts create mode 100644 examples/widgetsgallery/third_party/ComposeCookBook_LICENSE.txt diff --git a/examples/widgetsgallery/.gitignore b/examples/widgetsgallery/.gitignore new file mode 100644 index 0000000000..88816f6122 --- /dev/null +++ b/examples/widgetsgallery/.gitignore @@ -0,0 +1,10 @@ +*.iml +.gradle +/local.properties +/.idea/ +/.run +.DS_Store +build/ +/captures +.externalNativeBuild +.cxx \ No newline at end of file diff --git a/examples/widgetsgallery/README.md b/examples/widgetsgallery/README.md new file mode 100644 index 0000000000..985bfb2854 --- /dev/null +++ b/examples/widgetsgallery/README.md @@ -0,0 +1,25 @@ +# Widget gallery + +This example is derived from +[ComposeCookBook](https://github.com/Gurupreet/ComposeCookBook) project +by Gurupreet Singh ([@Gurupreet](https://github.com/Gurupreet)) +published under [MIT license](third_party/ComposeCookBook_LICENSE.txt). + +An example of Compose application for Desktop and Android platforms, +demonstrating how to use various Material widgets. + +### Running desktop application +``` +./gradlew :desktop:run +``` + +### Building native desktop distribution +``` +./gradlew :desktop:package +# outputs are written to desktop/build/compose/binaries +``` + +### Installing Android application on device/emulator +``` +./gradlew installDebug +``` diff --git a/examples/widgetsgallery/android/build.gradle.kts b/examples/widgetsgallery/android/build.gradle.kts new file mode 100644 index 0000000000..20040c60e6 --- /dev/null +++ b/examples/widgetsgallery/android/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + id("com.android.application") + kotlin("android") + id("org.jetbrains.compose") +} + +android { + compileSdkVersion(30) + + defaultConfig { + minSdkVersion(26) + targetSdkVersion(30) + versionCode = 1 + versionName = "1.0" + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation(project(":common")) +} \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/AndroidManifest.xml b/examples/widgetsgallery/android/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..bbfbcf26cc --- /dev/null +++ b/examples/widgetsgallery/android/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/java/org/jetbrains/compose/demo/widgets/MainActivity.kt b/examples/widgetsgallery/android/src/main/java/org/jetbrains/compose/demo/widgets/MainActivity.kt new file mode 100644 index 0000000000..e2e221a68e --- /dev/null +++ b/examples/widgetsgallery/android/src/main/java/org/jetbrains/compose/demo/widgets/MainActivity.kt @@ -0,0 +1,15 @@ +package org.jetbrains.compose.demo.widgets + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.compose.ui.platform.setContent +import org.jetbrains.compose.demo.widgets.ui.MainView + +class MainActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + MainView() + } + } +} \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/res/drawable-v24/ic_launcher_background.xml b/examples/widgetsgallery/android/src/main/res/drawable-v24/ic_launcher_background.xml new file mode 100644 index 0000000000..07d5da9cbf --- /dev/null +++ b/examples/widgetsgallery/android/src/main/res/drawable-v24/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/widgetsgallery/android/src/main/res/drawable-v24/ic_launcher_foreground.xml b/examples/widgetsgallery/android/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000000..2b068d1146 --- /dev/null +++ b/examples/widgetsgallery/android/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/widgetsgallery/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000..eca70cfe52 --- /dev/null +++ b/examples/widgetsgallery/android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/widgetsgallery/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000..eca70cfe52 --- /dev/null +++ b/examples/widgetsgallery/android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/widgetsgallery/android/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a571e60098c92c2baca8a5df62f2929cbff01b52 GIT binary patch literal 3593 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 P00000NkvXXu0mjfP=x?Y literal 0 HcmV?d00001 diff --git a/examples/widgetsgallery/android/src/main/res/mipmap-hdpi/ic_launcher_round.png b/examples/widgetsgallery/android/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..61da551c5594a1f9d26193983d2cd69189014603 GIT binary patch literal 5339 zcmV<16eR13P)Id|UZ0P}EI-1@)I=X~DGdw1?T_xsK{_uTvL8wG`@xdHSL zi(gOK!kzzrvteWHAo2y%6u%c~FYnJ<{N`T=3@w2g$1Fm|W?3HbvT3QGvT;S=yZYsV z;Ux5#j?uZ!)cIU&lDjT_%=}{Tn4nc%?;kSe8vq_&%eGAXoY=)gfJHN3HRxZ>B(Z_MschsoM6AUCjPu&A03`pU`P@H& z-Hldo)2LhkOv(g+79zsWLK6F$uY^-8!$ow=uuO2jh2SxRvH;PPs;xr%>aSRNI!<*k zq54?efxFGi!}O%x@0qhGX;;FAnHp6DCoZk~0VY&zmNZ7(K!PJ_APP1drc`bP>0_;h z&Qm$bcWJm(}i`WLgp2 zB!Saf;inDgfjrc$$+TEt@mPcR1IsBF%ve$XBbby0fpkyuOahYhptv_F4TPl^cFuY% z?j|wKCAHsATwcEiKD!!=-Rcj*rL{kREWvXSay1%O)$IkoG9;U>9D$AX2iq+}=c!zK zW#~F|y=6S-m(=bSuBh7sp;w||;ji02=~j1>n56y%KZ-d`CU}*Vr4Kbx#$l%nQktf zay7|dPxqqVP#g?4KFBTpC4g94a7d(I?Axdoz50FWHg^b+VQIjj*168V!-BZvwln~A zbKH-RtH}*WGN*#QmN8LoJ=px$01}Vc?i>8J3A9hHnIyNX`EfxD=_YXVIKs{VT3Ndn zW>tOBQlZBH$fP_7=2U+P&b2>w91zzwom{tMxdOJt%p6O<(sru*9vm-yM{=LrGg*A; zdzO^ZUi!GSIH4T8kpm@-mto`OgS_RuFCT{W^#^#*lhAo8$9JBR$l9jsaNtH3yDncj z9=-2VI~SII2{y5Q#*d6e5)(5m5qxJ>5ez6o)AC@Dmht5wuo5#@bKJK+ClNCgSImHK z-n$L4f1hQ)kyUO%%{MT;DuTBj5;{-iWSt||N^Q6Z*Y7p3>zTDvk2$AzYh73y(Ykaq z-S$a`7~Y)6@=WksXsXwxd#=vLpuN{KnDUhFcejffqj+47gj>yxu;Skx*L=&ijF8^lE3`V9ohnj~S&~kFu#to{@S-dohp8hv1H|3H&ftNS7f~Utf0s z-0Ba3@0BRndhI0axt07RCPdAk(OH`c?f>Mvkw)i#6?2gwcRS#Z7G zd>2F_5wA3$3sv9!1Cnl?gV3unFu8II%&++xD(_x{jN2uw{;mRg;AZ(A*EBq*^_OPS zqW3b$^)#DVy#pT1?REno`cCElZvG#G)QHy99*{=~0lSF3y@HHeTsgFs+5^r|WbX5XGTV4F1VJhg!y=hf7Reuqp}5 zpjo-u)jNf=s&|4cp{$jH>RjCOm6?Yz;^2*JxF>3UtZ*dKh{2k!N7v=kX)dSt9Dcop zb81lcyzm@k@zO&sTre7HI`lsiOGC;R*6af7$}J)ahO)%EGMpu4HrV~jI&WLG9e&21 zsJmTC9+#u*QYRowFVdIvCjDi%>vNHH^;Vcw_<5!BNaa2c12vZv4G*(@+qhJ4jaHo2}dFnxWlf-cFM)5Co`@Hf~jXV|1r?XR4QTQ0IB`3a47oVt z|6g6V5B_<=meX43`m1qB(K;T<3&^(kvxbr0HY3{r`e4_B5m;#>1JsFb9^)44eq||r zPuL7M8yn#EKX0t_p#Y8CWhr{I@fJ*t_J%S09bnu6C)j^6u}gryx)1{z z$5(=Sv@^^~4S~O!WMB72Qv<9l`<`YFI~IeALT?Y=U_MF;khm8cvUXB`qZ0oP2Wc83 z#osChA)h-mVaA)Z1=J9Z_Mv4EQKU`0Hs=d~uWLHHTj8F9fi!(vsQuh;Y9yGaXi_p3%9HylQ<{^u|E!Jpr zY4t0U3I+e|NG9!Y>09{qPVF-dsPK9j%*YIZDH(y_R=OYc-^rUv&#w9c?Be_n6N?s8 z9^Am}C9TAD-W?gNlC}N*&tK0ppev0xU{3z$pqt_X^K-X=L7_MAVAb%vKN#(G4ki|| z2CFZAwC7VR2B_UZ-$Otf>JRYdBF~DDeyfUhfnJI$1Eib25%kY`Kj__9fTqtCfnZSN z3+h2LXA+B+vx;J0>)HR4aYLq;ZoMM!gxQvBC!T3I5(z4a1ie%O6wUzYWD+DFsT?SP zO_=Fqx?LS;{=o=h(dLy0j@WC~g~8Fxg5;QT4XloWxSBkOtLCIeEb%q@kX~C136}~W z{!;!!sV!(Bsr5yWTz3}Y>+pMBAtcndmE_Askap!)NVt3&60XRQ-_JnO?`I+V+IdLC z&xu#1<7WJTkCaZW%6ugjd1<_`8UKkBlY z0Le3HPfsN^POO44|8)?{0Y@fde{uqwC=bv&v>e7pE@q z8(`eg?mj^_Z1R%;MZ&a)J+NoLmJOajThV#;*a*1Wppyfh8O(*koU0dg@3+iTmx-3%pq!1D#A~P}?85fI(%ICB387Z+3225a;)w{qpIRI>qdBW1z zFqn4S2W*aeflag*Oo{OpORNt}IpG6SPx^vWVi?R%2m#ypO<Q@c_!eeohr+BJl-$n%^@rJc zVJrtCu`dV*&tLa~{pqb>e+K0&?Y9Z-i?)H~Pa86@&HYs@Enk**Wmz8;Un@HUbREg- z1@g`)8lLw9tyAk@>Tz$-j&g3}R?-3alM`NG7VFx^t)v68d7=kcC;PQ=D@iaWF-&oT zIoY3qPO3`_w|WqasawzTfQ4rwKtIO=-3r|-&;7n`p(ki!T?3by%%?VMEYXl}}eR0u~8-*>a7egC@(77 z0ebnKpj+S})JAty@v{!0HV(4Wd!;iAU3(}SjHJgO!_=c!#v7LSv(=#;ee_JLNvT1y zx^k;{AC~8|mjp6EsR6ujDCRIgc?gIH4#gY;w46o7Xh8+u&ARAjs=MYV(Zd|>5l<)I zq!ydq8;WngK2|GjL#6ng2SIa3pUo2_YEbJuhcaZ!bJ|M+3DA@@K^wP{&U1`1Ji$Jn z0J+J8Lovr7-wPaycQhMdw>~yi0A+MG*48?Xw#eSAWmkVP<>noS@arM=%bUAyX2#;LLWhoZSwe7Dd3P#rU~6 zqIuD8I~kmb8|JQ~HVif#{YH1fk!(F*8$FmR9;Ul?nv-6Z`z>y~#uj9EWSuk(aOv(_ zC;72FM|Kh@4$2eKFze0?lxaBoWI4n7 zst!_O^F5Dg>)A*91N!HK_XgOEvq9IWqHJ6I-g`jDUdcqLQ*%Qw&++2TkjbScru)Lw ztRP-E6myJoykY(s9EfsBAmuqag`OgEwJ`@5SG{TRkuB*wP^|l7e+#rlT(7;8E-aa$zBqnCzNuow4YP46D)HB_>({al(7k>W(V`ap_pTmi-6FrbZPj2 z88Rh-TKHSlukBAMzM`m2y7tw3yq41@CcU9CjNT?5i1N{h&C`OkQeFP0?wq|hUnXc? zTqECW;WlOAY<92p@IexgCuZV676I|WAuBP?^S(d-?6zjTLNCzCaRc>Z&VQ?TTWv<& z=w;r4oUTv&Ut@YGXbkApYlt!}dK{r-q%vvrUWXX!HRzc*`{#wqP@y5u%w&sYz~Yxm zWac@OGI5lj6Cx81rX3=h&oL?Rg#|_1(N)*MhhNNzRZ<^HFYu1&rQEAO>G(9@NN+Fp z`CuUV_F$TGd)LWu(YS+4(mpNPE;7FuBzC=uKoNVag0Q4#2BgKdwz1Fjw1=bRbtuz;rX1c3LE7MhE zk>xL(o*OD8C}=S>MarOPAw;#K&R0K-m=)Q7nkG$G(2|v5z2ENr&a+@OeA^33Ix2lR zwf~Hn)lLp7ENta?tmUvR#BG(^XESLpd z4eagIqL$Z>+GQU%++~u_tHb-5aTYVIm$GtyB^4z~{+^5f5_*9Ky1hSQ7WFPIKcaxy z=iRrAK6D)Kq!YFv%y|FGsF^4IbEc;RmRV)`Uzwa6c*D9N_!fy(j^M_GIFBpi53en= z*uO5v;_H=B8h$gwROT5uQ5~GMP@RLxYL!Q_LG|Pfr5(4%amYp?ni6?hSP#J z>irZI7001yQKOYK-kbQA?r=*I`b@|0oFR%gg(T*i>$J5J1p#4~U6HrAJQS4rYPAy^-!I;eb$Kms1miPp znxu9z(fBqhs4PKV3X42eMfL^am?*ly8X6;V=hyFCxI1@I!=f1d!=3rfz31$AzVkch zp7VX*?j1Mo)#oMtMB>2sS>>u9y+{y;Q4?1|^+Uo-lgUx>5e@WdRZozbvM0%m8E+E& zjRkKC_X0v6qoZ;DkLX5cPgn9y9K?woG4pg)e7W~$bKAG=@-t=M@-yXF2!W6TfI}+35(&+V>#9m}{q7V15swrfqgQl1VStksa9&pOgHMKd~-Qm-SCZ z?FUZ`Kxmd(TGg-o^jTfLhHOaM(jG_+>6}EL#`zf3T%@UpzZWCQyq%NjGwgI>rUEX| zm}93Sne<{E*^&M5Imr+C<9#y@UWRncZce-7vTxrjO={uAC4C?NeF@U!V|2oB?0Q~j2J#&otpvOoP5rT|)SY+M_K^CyIeK-7B zjf!=V=Iu~0vSJ;{q!;VRj_ileNq)#5-4h2NV-^Bh)V)r5OaDA#0B)bInH**;>{;Bg zn;dcx?eBrGsACsab$$pz7O=MSV=QdnVW)fN`UhCnvByqFGU>%SvLpN9bCMtONB6`b zvV)CnE$*G+NC5N%Ue+FPdKJK{0KSI+q^yaogge_O~^OwkSt)o zr543qrFOb^JO7R4*Wb6(kxY6)j$+t-rwpH1svnt?{E$C>9ODpmeJ2*R?r^+`ef2p# zlrfnhgOeLFL7*j%&-RckV14I*Q1i7O^Vt$9=;oPWE-_fv=$bgLLmaw&*vbgESe-U?cKQ`Rhht-`Q@p}56 zi0!jf@^&vp4}`GVK7X$j`L|BtbZ-+nzU@L!e;>Xb=m*DfxIgd!-Thzl`eQv>6y83K zYWCE~?u7>sWggs&4EMj{$vO%ePj+NKrUB4StS}VxP>qI}w{fB7A`l|^9rj-kWJ0*P z7$4oKVA<^(6?p+L-Pr9lOM&}fOMOO2E^!4Aj>2KV> z3x9pi^ACWQ!M$wB6qD+--bTRD7_2y#%Lnsa0rd5MgB4YU2rg6NX5U@A?{-};fmdtV zvo`T}_W*5J=KHtpOM+#!z4uGp>a#dhLSOx_8y)vMp}hv zV{)|CM+=&F?WH|fqAf&(vH0m$p^-{x`|Z-_LS8_={s`t&svx_V1ZivP*!RHBo26*H ztsjB`x-K&sy9|T4Loh;j*No=7CN$nP+R$P#LuYA6lf^WMZWEfj&A8HY9ZfxE8@3sa zA-F0P(y9b_)Fs06TI$#aAZbxz`mt4T`sD9Cd_LO*=L7%1w9i&z+Cg?b^e*JbHpBDy z1~zUroKLKQ^XF?JJ+&FLOXJ{DvK})^H(utKf2o;qYp>99fOoC!*nX zf{{A04z8cChwG{Jke5co?`#6xN;ks&>?WSPrzRR96{(n69u1E#V&HK;7M@jc2&v70 zye1i*wd^TeOys1EO87QsjP37%NPRH^PA6c&aU}wd#lr7+Ec{Qz!T)4DB1%*UEm0z{ zG!cPkk`Qz*8R42VM3t)%tWmP8s}RhHhn!Ex-)ah>s7{BXCIcZCG7)-Fjpf>6L^R|g ztRV;U8nd~1O}SX8%^mw6^^z+p1ePSQ%&)@qBMe7Z^JU|GG8&STth7$9h0E!6eA#%N ziH2`k0%n}s2-mVreA!Uu6|CN=Y}_kj;9eEWmyMz>gKy%Q7ugf5PvAVXNs!eh_Bv%Q z9Q)H~WLpv3OE%ibQ_Xvyis5TsAWtTDC$|6)+J+R z9qR*aBIj`_8FCiDAD>46d|zBi!;G^VZ4K*vIu_EBEp`nnD`RD*Ng5kG1;*Ip5>ppd2QR+CX|Xu zO*%p~sR-1hAh2ACpo*;sugpMHbq?mRnx|zlxHcUjLk+878CPht5OOISA&uEsp=0yu z3J|KxL-^%9F8pdfA})=hi31GT-B0`9sQ1+jp5*MZczBkvENfyQDUX3qMKXff4l6w$ z&u>y*)rqXGlMzv$!x}c3)qDzHHu44~BAWBz*TjB1H>X0TQ*qvx)8OAgfA0QeGDaV-zCDn$*;%0^z10RJkbUBl8kA6B2mmkl*6)jX9=XmbuDuYzYY>jRyV zlU&{k?*>)x)WXG6pBRAf(!go^;@|jQQ{VM7KHCe9fL1ll}^JDk+PzN|`LJh_}kmCs^m#WLmwd60NdohMFX+tTx#?Uz=t1 zsZ;gJ>y=jdh2(D61FMh!!sRV0pYe{qseFy$w-dZ3`%GNms+bt+%wy8fRSd^;PKt>^ zgLoroiVYLzIw>a2bymE=u7rs^MD`1u6%(YBeTfTka`;^_4V)4=j#Q|q*LzL~C5KRdRgR$D<-wqU{rxAoiE9G_nq^fd;fFZx%V+( zz=Qq)42*!CPde(h*x_ei!)?Zrdj~wOKN-lL5ERP>b$3m0PBz57LG|+FTE*)q_#JiK zjwLqG)?)=8V9NSeQ2m;@f%Vy&XVh;zHr>3z5M)~YQ;>O0BNg%;b$AWO;8?upkq3fH z-%f>}Hx3ClXV2mrRuu}2swN`9H>e=Ylmj8AZ2FxmsKaaQZ@dTZMH{oOWj@oLkB9eX z0v>JC0@V^EYM!+CrOb zPS6#8Soy(COrAc)$=#sP5`k%CHc0@CdtFKk&!AvfKq00z5M*549vCaA!)xsU<2~eF zw1KwT^eI~O(Vg!H22W;ag}YJN$~vEB&S}Nj>kPEN0dQ9UZM9DV`Y@!dc;FzoH~Jbf zHsP#O2RP$|0yt|AEdXMR(u&w-^}e-foBwbS+-k7ohcCCyzPJS<>o+iw=Jm|<`VD}x z@Y3fn_u?nO{$^#~#m^w>;-_8osKaZW^=JcavA@v=`ud<@3oNSt_jUqd;O`59lRQ4g z^p9sZY=%(N8b)YJXMBz6z{^ZhIs=-nAdgDqYkfi)}sxy#nquN^!Y*k zX7D*@T^rba+ewpl>#@T}~!e z6KGF##@dBCZWrY9Y1E{wVP$yS0U!p7rB)7;G@>QlQi+Wy_{x^SVdk}U)9Tj&kyiY~ z3Nf?cW3cMlCHcy3*m1KGBI?)M=&{<&ZTO_ic+}xFu8ve2*m+Y6(#yNLj7Oj7o5d2| zunwktpP_g9dg-%WR)LKu;C%Y50COe~Vf;y(fHIeqGZGZAzgby&=_}CRy$Xwe_|is? z6=eni)_FYY@ETVqy1WAn#KzJ~Uv?RfKG8S(8!`Fm)4@xV7-hQ(oYFM;yrPihKD(4X zQ)n$@UdspdFXzCIL#6&wD9Drrnx;Bx18wz~1Nx2!D1N$DON!WBpxD_5gwILEoBTRu zQ+uD%X8<|m`H)RPNC}-h46DfR9FSbz3IDlK2KyRyP}yXl*Y`A5!xz^}=(Q;%2ppSn z?Eq9X>8XuglbG8(8I|CEM%LuEYw?)&hZ|d#{7x&P1fW}Jl0{OdSC@EY7hJo4>kk9(ENBaDa($pr^v%^Fw$S=) zn0hMRG%P;w`St+Dte<&1AeqX!a_|U+21kp%s_eCMhQ@_*7pGKw57~atX z<<1)sXvnzPR{)rBST?ziZ{2Nzs;lSWPV?PeaWtZ-2V?7J&a* zRpZ<1-yPK+fc>^PZ}umE)T?>W%(U1zU9I~T#%+tDpUtf;eS*g^YtHTl$Gj!5=G>kx z*Ho8svF7&~z*}k4#&qPsmJf#c*Jk|GTL8Ys3|cNb1KLrmhADXx`q|Qt0C3E9lNzR~ zQy{lN)8+cP+ZVy}gdBYIX*~uYJf-~kjl|Fq?Ews1$a_A#ZcVRAthl-ter@SWllv{r zaQ#kWzh<91)7S6bg8SW+-=^l@Kz!ya2tA$AV-knfq?%rw`pyg7e(tG=vss#+%IJFy zn;`GjiHDxJJ;|<18VJ!SVb0kN^gO9^84amWXbI-Q+(vGYk5=}1PZSC=X2Iz@7av&w zH8+jmU783%<#KR6nMiWN_CY2%82dHBY)7$MTZw^!f|w;30PVjy?F0sZv(VW5>mv)` z#@*W>)FhJtQoyN91g@u&+FBfJCC;aS>sRwuB4(RbVqDe?2hwNU?yi{=k|Yi&m4VOR z81S}Ac%Brd9FTxdo(Oyo#DQ;qJopwQKzN}X!Vb$ocvuX6hb7>5gh){$gsaK+w3t+o zVriQkONM}wWC$-?1@Bjoc3C5bKms_hf=Fcw@XN#yRG|PTjR>5|V^8cg+X;-3!2B z&jR4@i-yU0AHn$ji-;_S@duW``1~cnKNJg|hvUHU&@y6YIZQZAGAz2Og{Ah45AaZaeOfHOp zfFp#{MN;4&5dptQM1k|w@!(HZA*_t>x?b%<)zVce=*$jPeTgotF4)_))Lg;=8`0tAYk9{%Vxt~a0 zEO_O|!qkIO2stDL??dt6T^J8OhZDf3NKER!oX|)KzUo8}s*^x?ObWshDFLs7cgr)t zPa^|=lC%gsK&ybT>NJ>LlLLV|6$Bk$)f#*v6?_Wg4MRu0G`!o5y)~jgkKOj67|&ub zVS3us^Ull3vM18nN7^{#E(C{tizsb8^2zcS#8BEe7A&QdLGd^e2i`{$C~YPl{fJQJ zBT5@VNdowlB~#ismBqGEh6ukh5vCkhfm2ny#aSn|OsWvUsO<1$#Mtfm5GSIS3FmZu z9jk;HvcZEaxx?NL@Z<9qgGWIu@DIk=fJe@I6p;YbVjJ+tc|oZd{K@Qd!6WAd+9U|k ztpew&gcg@-G1%uWI6<)egYLw3Mm*WusoYZ|5`#ls&Pea$@d^o`wWl2!=EOt-0)bN@ z3F~n%mL@D0JSMEiQ9>!T#0ESjtVfvy0tj`u;7P)Qpo#=go!UxfA0`}Id4JeKegtB3 z+%nIuKSzs0$9^_PMtu{p~z>_4uPqCy+ zwZWtfAf=NF-dP(D9>=9j=*cvTQ@IF6uAZKbnEE_g?AYnkC3?jpZ_)LX$SE zDi!#IGJ+~82&$zNe85Q+6RFDphfkw+AQpQG=u#o1 zCXMhuy%ig|$ePs<@=e?Ug5jTtrAOZP@q*(iA|sr>U9{cp`(&WU8oj*W;MJypP%9@1 z8&7G&O<1oI3HX*Jb*VO3+XJhW;G~VSV8SBjkv0xn=ito0ffxib!Jt3%mWEAgBEv_2 zJTu+(gyf#}HIOCDnB77Guyi>aHDrNrmCOpfBVoNr#q!liyHp#msw7KbwE}@#u-Z&4 zj=ncCb6N)ad?4^PbQ&|}Psqd9=JVfmEL^U`)d(m24=}H`w5>?Tn@4&wr_ZE`$W2%; zGW){vWD0yzxro&DIL5gmzQtRYYzeMWp$;5&FVMX_+j%DCJn{LvY13O`kC8=S5O@+W zdi2^EDS@TQdf~ZLu&xLdo7b$ha>nVnn3+(rl9^B%!}wH48NbS8W+DOZM1mu9X{$CQ z`MvW+`jN^|1+o1W`k=o4AOD76t-(mCm+byN*ug$yhIrzEWhFeFjI;%An`T}yWasFSq8TBU(BUsr`Els9~96gNDMC0z9>h&OoeUa6h1 zHEPG(itwbDg!X~t-ceQ?Pg9$+$MZiE7|gR)AeeZg?f&+h<4~93{1<%2`l8@>)ZsPj zm=~@0*gf)p_ULX!5X6|BvOih#gk2r{|A)U=){M0000mR-|nJ ziD!nlM5WpyKdG{c3k2M;jXYyyVo*^yGIoo3`~=S|F7P^2q1SWS$X&WX;`m|lvakY#7qwtaxT_5#?fq+k)xD_wHQ zyOv!iWuFs&s&k8$>66s&pN$6(OHEJH8Iv+e1ce=IQ2k}QWOKrE(R&G&rrwRul5JO? z9Uk8YLMp2>9IqF#Te_G{OqvQMdu+CapwA4T<&Q@QcIv*Lg9wCU@r|C(t0{!0uNy}p2{-c$-u10k!W;Vg~%I&@z+#7Zi7r~hD8!> zpn1}&ANh%cY`4tCA32CA8i#xOs?h4F_7zdAHMab<*W)CuwR|(~gd5`m3bQqKX^YNG z+~{>s$Jk%6cClss$H84jVN#H-lJD2DGwI}SA zu}tz|ZwBc|Pw=EGw^kh`Vk_xMX|KfNCGdbgab3{y-S*BeH0I5?Fmdh355OcbEk&^| zvJH}xPR|SFnmgsUkXAZ4wj<1U04=0TZjaXuYB~;x?~Ljrb98Ioa7$W@Q2QHJmAU3m zqlJ2~r0VR++WqVw;&dIr@dIHqjUh+ASQh@B(NS@~cD1|dsV_-;UPjE8^RNw3E?oOx zSawJ0BrAl>2pdY6WexcT5X1q?^`Am81jG3nOs~fmQ$LhX9bynlAH4$-4lBA9QiYq@ z87)AMgAz(4!fMjm9M<0w0a6v{tIV^NELObpXP3`b)U*@x89Tb^oO+db`gC@e(i|b` ze67ZZ)BB~r(*Qpqoo`Z}T1l_aj#u&OY)!Dzm}f9df7x`HDRr$b;S`>(2aRx?w^7$t zp_L2SLwiLhm-FJ$ZHb+HJ7c0JKl0+sH@!SL|IheR2Of?`TP?pRa8i{~W;*EZeiU;! z5qg1lRW#x}?|K&Fq6|x^H3Q09CRZ14A}?5rOE%fsHgbZ;pRpI;nrtX##M(YnKkkk3 z+~&?#V1fxYR?-#{_;rMDS7${>_1W~iW^pf+R{8V$q~hG zUj~ld*aJ{`0%9kHw*9lEZDL0H32F{V&21_p^|9KQOZ%(tH&iu#-3N2M1Oqu=%QMi) z3a!@quYHxs5mE$*16Q&)2UBmDU*nJw+cVC%T6}3p3y>DMkb|)L)lti?c%_LG1@z1Y z`O0Nc)Qe2`t(A=Nx@S-67lfIMT>Z~C1iCb;(6G!=-@6n{h*4Lbzb@xt6wbJ=GtlqPq%4|UJ~huHD1cmeY)$p=}87X%EjT<#QNXdk!a+04QLozV|jq@$tbmh zpao9vHJHhQpjvywl(1?PE{BS zfR{NBD8e6C^$``kE!T9P9nZe@25vZLg&y^Ao*qb^nTes4#=LOmYXkDsiTF=zn}0jrbE{YJ2QDvE0x2)7y(Ha}6$KtxlNp z;n(;S{ex!!X?=Ij-kdhogzEktXGnH|JzUO_edSyAXRv4nLYTwEfl#KVS+7%bqIYCP z&ur^~ZSZtANr8eUyQne{v(gw++&~%2)9p(*3iM+2oFo6$4_%fmG}($R8Zaq{=*v4` zV!nyJ@5vIXQ1m?j1P)8`sLf>nrc_UlatmZ=)H+st(SRps zxN#&CRCYp(79mnAy*pBRv1>hmJjf?BH^u0slOl&xgTlsm$Om)hVJd^1pw4p?10fzlXzO(| zbC^>xs!xnAKfHePWTo%hPXFv8`7IYqX4gT` zQp(=7i+KlBm-}5**KPuCw9u!rR)J;9#3s|m!}eO2EEDB?Pkw-lW*+C<{DR2Le5qD; zzW@8)0)O3mN~otlX@tuhMxW;eIGuX+$rh3RWDgY7H8H4MMK0V0;bN9|!@w63^l3&5 z&0)q+q@6rD=7qQk$KedGU)PVDaA-g0fo}fn9X~WTc}y8_Lj%CE2dVh@8NOLV10^oF zQI_gsGrQl%rRNcT`SgZzAFOvvC4dF?AeqWY?4l@*#U3O*MGdG^xOm5JV%3;SOATnC z?9tAd{*w^|RtEk`S%@DO?b=lWR>)||^HL+is%@`JzWz^pKeH;4-@qzLS8dlpcx49nHQ47}Z2YEuTDZEA(kW3fYY_p}B6cIFk zMbt8vgs1oug8 zCnR@us&d9lEL~oxDKzSww@MWCZXwy07+^2K-AXe{GvG?+83e%j7Yl=f%Wb4B)huao zbP=@84F{aNVYG1Qhajw~Y1qVPFM1Qkkb`Yy&!y;yTE(C{18v*gn>iwt74810m`a_j zaeX94mEQ@K&M}<#Z@w(hKC*E2WHWD)aW;8Ua;S+nTxrjgc~uYuVX9eNx@n2>nQ}l) z;B1~Sl1qH^^=wCgv3{;zvR7E`t1eGiP7&c2d+p1;-4J!)xm3Fy$-)_obcQRPY%u7? z7XZstD$nFs>PYE%Mk7Z{QrB2riY@bl%aA*O>%{wOH%T-++P~>LC$UivlwLe&{{}*+ zkbH2ug77!!3m_rRpBFHht_jt>Us4q($OqsvHD3?|8t7vwAtJ;_*cvb{S`NuWeEIon zjsj(8M}cyEYQ>V-6XE1Hk4Wp-sts3$%7Mpv9*9VOz!5|H}i>_1X} zG`$FAG#B1$-wY#f-mxdT>FlkZLKBH?LVAFB!E}EpL75H{6wBvM^fdB%R?-j~0d|zFTA*n!Sbq@R7I$sS)Sf>=TgS> z7DkZ`m`^wC_Q@rUNntv|0Ijbf9@edvA$M)+#jMo`0r?s#41#UZ0l`5jQ8RIPkWYkL zLuSnjlMf=nsvrXsbLOTQ^D;=vJ4mu6B%p$6II+3u_iquF#Dv=&_{Ne5M{*;lK;68G zCcB|s+9?b}BBHf%?-TpXD^VR_P2J5myX1qdO&uW~Rc4(W7+B=mt#w&%j7)yuSIH`t zvogKN-ARwD5bj&d;OK|`hx40`q@@8|QhsDpp0fOFB|4a zU1aM=Yf<2ymK zU)xMo{8RuIn0NEhLK+-->qo3hthYqL6fpI~8=Tz!8VDrj z@vG(yaO``ZSJL~M*f_nb>_GJJSMJoZ*88oEkhy(K3iaPYXuH$dX>EnPP{xi--@Dwg z8bG_SeeY6%=g@5Mxo0Doc1WM#-}0nC;rzZU_NEIRnJ6u}J@fBxdZ$f@l{?MD&mg$S z$EPCM$0zZwcWT`FU8Ej^5NG;)p+aG`xn!?$Ve)&}j!{ORq1@*_ZMk}L0Xz(ns0%wv z9I$7!d>;Njr6K{E7`|9mr3TLh#}wtivvU+hRX$+hNoyYhzm|q6NXEYB#;z=!b~YVO zWr0qjXwDrkt-=^PD4HVWGMq`hmTMQky0!3gBy|fkG9WF~kSkw-QzO(sS=AbRuW`op ziGH!+lMV1j#rCixt9)sG6m~TjhW8@qc&IPD{BVWND zE}dlIZ@O6{V18XdiKR=l<6aTB2BC&kpPu^4(Q%5cZf_ImMCN6)=Q;MHw2-oy@2Dq? zBq7jYByn6Ri}-6uueQEcae}Jfz;iW9-@@@%gT6?;;VkD{|RNoav#$0VNE zk286ieB7O8wkeB~4|tO=-Xbmsf3}F4F>ZOgHfk8otsKVsWsAHTSaa8kixa6o-Ri^V z0)MR_rp^PW%$7L2Smf5N&hU;cW4ZGprO>fj*|YxR`_GR&s^#MgsOp7EmAx&@#MrCd zyIaPnnh;UNM5d{7{h@D7*U-~T?d!MX93o|1b~=jXSLmU?qT;fW${(B>2Xkjm*GkNF z&(^d3J)=9>N78NIp1Mp3lsdWVqBKFPu2q<(dE3}t|E*)2wDb9~gCECHE8@~_#Vp&a zzNrs!hW)H{u=fDT_Q!n=TZu}6ReD;sxxz$>nGv(gZ_n! z;P!3tj(sx=w_Y;NUw>m_{`wMv#{|y_Ub1-3epZZSuq+;f$KpBgTzJmvqStkVy|*s` zM7`DU*~KB<%nCwg%`Dow)2uKggWyjBFe?a#HD!ljS;;<_ksr(p*2VkiF?cKmbFM4& z+~gW~t?C^C>-4Ya@sh;rW(KqwmFF{kRIbk7OSAYiGH)Iyv5bNP|Oc%MLy< zDcH#LMkFZP`;8>w)lnA#s)G}RUX#6^Nq!Juov?0LN3Ooo=BM}OB}u$qk$-#rTyG!J zz^B;bZA%Yeqp7)&MS6V+P+bhH1J-3#$pLOeJjJ?Vou#$qz3BDm>Tz#J<@(Mhjmi_7 z8q(lZr3ZwQ^MZI2T3-Tiz`9_a=p2(RHcfeYc|LQ*E-<#K!H)(uQpJDA=KFRbjX2B^ z&zTu)AojKfCjgEB92Km2qTgZNNgJ>&+}zM$13Jk`OFz$h66yIRv;j;b%OxA!kOh!{ z1{j|kP)<-m0P^5adYGmR6qVz!tav}nFAU{f9?Rk} ze9L29uueS6V%y4%^VWky!J*^{34#uP%Shnt-=fStZCuKJPTch<3hYY{mD`mb1U}gD z;1amsISPEsZ@hON{O+FOT^`HgF?`EoU9e7k%VS$ZA4Y;>{(+=v#|7=)>72lM05p@C z>l=nWe@*F6%}wTW_isUE?vmQiY5L0f4cw@DRj`za4Q*f%)GmDJtIs&F-fRK z#NPcxd%r}G^+5pcb1ym{XeK%xC0sR@;7vKbU-!1>EH1YrnO^uHfJADW@S}T!n4&P7 zc}f`t+=Mbb%~5q!j!zDo6REPy_d$TF%cs;7rMc#P5jv-1ohN1X;6}Qco?h(4E396b z4+2#CKG#R6ds{#z6a%OdN=cDO+ zSNB6MEo%}RaJJt#Gr--XAP7wIH;5+ZZ2)PQo*xVzWyfefMOK;W*m*w^p1gSu_uu>h zmc{>5SRT!TdC?x;=f|>)nNxh;7v+D^x?r97o*&zaZN|3CDnob^8UMBp3@$qO)o3md zu(=HNBi60;vb}Ce^L*-Rf^16;LfF%5AQFk-*C#1pnB(`(O^{J;AVfd=jn?7JlPk1N zN;5&(m7HlLIAnIWozOv&TVA$b`?}jSX@0-5CgFueyP^26hw$jlpESk$t_46d^+Na; zt;52?UCQ%KC5*W6*q3Cp?s=7P%Tt+DPc!2v}}i**qIC%@o(7vVLT3(}tFgF&|M zI}>0c>HRsc?$T>x9k4FS7C;;wXL`bj2-{x>r%e<`$LtW96eZ|N6fBkHdMe8e9h>71 z*IyJ9BFd>3qMz*}Q-B4em(D8KN+&tDJ4a#donv&-1wASc@;`otn{v(aL*ToDoiYV5 zB=y`)yqpwu`(ic6}Qm@e#8oiZY&!zPc7LgOB-9MjYT=b_D(` ze+ii{%jnV|euhHe_X~@5!KQm*kor6iN?$*M-(Nq0r{yoG>3B(iBqH!V;xRF2cV0h+ zlD{57+_Nky>Vm>hFwR{szV>&8JE4q}!E55Rl^%%6FhhpF+RjIA)sIx$CNIVNX>6Lg zaT}lBuM7e3_{e9s=wygJb86lu8Y3X-&j?BQd0l{lCH|QMn~9LPf_3_7I{iHSkLzLr z>q`J`6zKit2@}Fy|A*Yl_J+6_die0BGjcblzAFJZn~m-u`s1&Juj@>@Ea18E8h9-9e6FgCSLoU z2tdrxSLy4X4%s$$2y)D=AxjltOtQzj$4T$B*UK9XSQo5Qy$HZe z#G>h$n?UQtDj(_dK&5~B(d^q>_Slylf<;B&3l|etP7%=cLwC@kcn|O?zp~^9$ar4Z zAjp>#0b>!Y8=p2{Td~d9c0T177w-|;7X1h&7u*jLj+?#}4@iW_%}jsWbP;ceBR;nf z{cc6TU1;d;;a(g?WtSH3g{v=$K-fTtmju=c>xOky)DCPbwi(;bha)oK3$2Uxf^nqB zWx{dGx6=~Ln?{`s)mu-<^uLP1jJ*6$ZA_49{uYRNmP!3~Q3DhJfpx<=PRrk{G!w+- zg^*LjSm&E<)w_3~dx#`GAujvb%Xey*3E2Vp$`%0A3>W^mMqR*$NSu#p8Y-d!qre1ZX_q2lFqDa{`|zQvh`D?!A8c-U)zpmgSn(T7Xo+Q#HYqVQ+at zVgYu~8)Tdt_)J*>U=HTWivop>Eq!($Hm4t@$a_+MaY6ReQrLX+I0WB13HM(l_h{dwhwH(AFj~dEdJvjn4WQmK?fF57#_2Q z`!Aj-o%}n`AA#;!TNrj~8O4IQAo%^oWBKlB`D+L%IS=|-$`e4%)mRI;mMTF1t#j0s zWrA?I4l|RAh>0(|0YeX(GXfkWIJ6j|ORp(ifUuHOG5NzzF9WS}t04J)ro!XOUOa@U z8S6kV(@QBPsJFxT5i$kn=lAs&6SCJSWfI2BCLdxl?&W~qFDu04BW^y-SGoXc53u0{a z!>e(x%iqAyS&{JdSr0Hhw-!RK{t7~&@?(W^a?V|u=V0b#KZ;)pV(5w(pJQ)7Ee4Y~ zFVISIq9dW!ZfLAaQKzZH)R60{`5-0`Ym7mH(Jj9^2V%HdRg+W$5?=JjT_}Eb4_=km zV>+6gyX5(O3SkWb!oNr-alXDEMn>9#R*DN4Wck!gfLtFMh#5pW-fY#gQ&+lqw@ONy zT?Zy;JMG5$@VcfVa53e5b2}9w>0u_AL<_(q#uH4h1cL9KlQm977+r9|R73~LwV+BW z0vZ_#3~@-bo}Ll7w=T&z`_e=3_|5ZwoB)qr{Q;Iq!7wv!9n6U*0%ZOIO9`n8IV#*O zPR30*<#3pA+=g;peQ};$Bxp&7i3d$bGk1yCI34X&_A_0d{ig}={LL${z4kpZLw2AQ zWe*la48wGRcw$zNj;=7hy%9$2HOCFREu}8Vupc(p_}O~SOm?NHrVBEdKRNg)u0duy z>z*wY!v4ZblzgqIHBBdM zwONuJo3l>5!2VA}#JvpAk9Gp>%asCX#H_)c&@x8?wSNZ>e}818zFaQg}6 zSRiAIqS^}MkIA3*Qxd#FYqKlDBsU1MpOwMA=a1#$(Tk@v-9X>JkcB5=Jbd{FJb3xE z^0Sxn@sO0oNt1hjUm9Lj;=!w@@c7lUDxXP1_Mc^76u%a6<&bHj*TJnsQthpiRE^nw6PFLEI6UO0mlQNdslxe-hwyukDlL8LcKuZ}1m z2A6%nGIk5t#P5I^(Y`Pvh9K6j3e4jC8N?&j!Gfes;F`9V)_rDDH6#bXtmHtLmBK(L z#sRcr7y%68T*Ty4#5;mchMQOfZex~qnk$U(pSv8n?I~E$T=v#PCOBx(<15YndN&2d ze9TaFFG%mUCk#Kol1VK{q!$o_e=?_-dE5hZk1U75KU=`yBMgT8VhKZzT2KvUgQrwzLXK* zj3Y1dho4&k#uwdSIvFi|$VZHhbcTg-8+nmW1&AdAq;0DdK!SYC86mV$glw;JG(Q6m zE^|HZmU?bLUEJ5Nt?DAh0-M@6_mMgk#SEWlv~vreo9-J>gbkxvCUivl?D zB3~@PC2wBjkGy0HqoZ6{0Th!@C)_wG0whQXkmLlK$xan`%c@q2GpM;wwnk3n+JA9k zjxj?mKklsBM=QRwJ(1X8j(7@Uc4nPq1mHtHnw_uDdBB9TPQ1uRvtt}y zRRDS9W3R6+fIRZ)WEA2V^&$s{?i(7)@x~~$ozM=Z z;F2S?^&HUbjE-V3CB_SuC2oV!(JnA1+7-sc5X2(fh}-E7W8&RmEF!^!!YEMyb{XHp zjSDAkC}7=!&-p&oMY~RxonOa?0<;nxVG+%|>ZhXYamS*PHZK z7VU?5(Sb1Y)LIJruwa;f#usLt7QpN?o(#@nY~PZh-l53~)tkK|Eq3EKAx3 zUTFtlVd5rONIas2$(vwN@@80+vIQ2UZh^&!v|w1A9t`H`Az+!l4FYcc0?RUXfiwG+IuR%c^6*fQvoh{fLW9eFY*y+b`~XW=0!dgAVER^3G&hAYot1h(C;U0 zdeG6J&uHYZr(w_LwYgcoQAgdr_-Oa;gAXkZ!W)m3ai=_v1oXM}j<4cHJ{5ojXcNO+ zc#)42?&L@mz?T>KIN^?oaf3xko8^-);qB-o5&?+$F-Uf=LO%9>;<$)Ll5>9UXSyA^ z>)5wrn;Q52N|#6-=YkH+y0jml5$BL8EiS0d?r59BA7EUJJ0V>$`Dk`9DxMhT%8PvL z^;Ce%e!R%XUXKDSPTHcd=X0KpZlVh;y-EZ~@eq@b&`xm{YNfis-~)?uns!qiMi*cB z`2IXb!6$0|rq(*wJ%D>uSzYfBn3T1i5uM5FmvUz(s^v(cz>XpV^FEjhuDRRBK!N-e39pNTqvQTt@3N`1sOeXo_%+ zQyF*2pgE!M99i{WEmBK^gMY%mT9;b zjc)nocBlX`{=9QLW8*x)90ibLb|k$W-DFp=zP^hHu$Cb|)wP_OoYY(%V4+ zmfhF|W70e*`6I$@q0ic>n~@uqqk4IsbR(7S-CL-%YK8k+`VBg;_%PmpY?L1;vMWBQ zln1xsNI(**dpnrdF($zk-`tK#G!YYXgTKTXNCprXN1WS2!lezd|XGF3$3y z3mzKhZ5V{vfEkHuO(Hx%;k$yT|(53 zW`PSTv5pj&)zpc1qPZQb^zAgjq9A@gdO8$j!o?m>k;*_n&Anp9?L9)ncsEer_Dv+= zVi4to;ileyVWSB*AE-2KI%MH_{{-AYY+rUrXj^iiLKzS5wk`e1yO+%PI0@y zHg-EKh~5ATV_1-2Zc*GuF&4*fVvw*I)}-tP_tbr0PJDawWCj*wlC>aq9$}e=`JAm3 zR_WWoHe)x2SaRkivJ0uehhS#Uv zmu`xPd(~R4YbWxzXVaEVhc7tmpE&-8FEvLvCn)3b_2aVq!61?JxQnY{Zlpg#E+b+dpCZAPrj#+O zxjZA3rWP=|r64}OL24xo)7HXhV)I952t?TP&GtE_G;PsT136&1_^3Wjk2DduNx2un z&>@E{!nui=J|98Oh9$la?Zb_*nsIArVr>$MZu#bRro?)|?Dzo1xgB=W#gww;mF+TZ zKDwHmw}Upn|JJ!^c5s_{FNsO_o&UlTUa(oKUY+q5hVWPD2KWE|yCYa}=1D8elVt1q z)I=0vZu&-=Uf`SCnG)v>vl9Y%CDw4l#eBXcF+H-#M?atOc2>a`>*<7xj~wXDw!PWk zL4Fkx*dd4`VPL<&85>5%*uO!y5+i1M$9**+YWmp9Mftnn>(q5H;u62y4iz9VkQe!g z@yVW*0!Sv-Fugz`Tnw^?o?QN>kIN)a>m6*1yT@$Q41QeS6jBUEAT4p}uU>yOW;!?(a@uBXKlvKd6a9)b_!xXpWF1 zMG@}Q1Rt24v|eFWle77_jA%tX9@^`1EjP_oguNc)kiHwtPPP8D6Rv7~N!!*=rCmcK zUs42g!&Tsa_RU*LR3;B?}i*Mv|C9egC4Y&#VmXSs(v%woR?rHa6&=G{iup zIZjZxvx5BJzeR_(TK$4%Y$Z|bUG$Xbk9ihste|s*0*^`RL;Ki~AS=S1nur2ykZX1{ zlPE;k-$|o^63;vqnf~}Py(dA67}B1ah$8{FhD&obze*wk zq-=Pbd?Y^6u|g}+QAh-&8B8=gxGiPYNx|=5_)Xi_erR`NcB1{9t$Uk>YI69Rq~@$nZ3wOip{H@Y{ z;f@&z)w~@PU@j3rBW_KFMuMYgWFi6S?V8EXBF??U+&wOy4ESN;tpNhl;QtQlIgvFt zeQ8}uo!MUBXVGqSsH}S|| zVNv|OXinjFAzcXKei@s93YFz4(oS_2YR1?Li2y>FfuyvJgF8&U^Nw#WBv-b1yw3S(|sz3a&KUCj+Rlw0Ba(5@%-me4e*6A}iu z>(g~~|5cOhbat2@81t)b`ozl~52mL1il$u;gjIR_U`fFqn31;y%nE|RtT3c1@`GX8 zjX=B!0!)&;V1CL*uuKjHCnBoYIAN>3_xNCMt0FtoAUYcu{Hw(%z{SmvHscc zCz~jplQtQ;VXJdTML3ihL_6OzjB$C0!2d@@tSQqvx;%H}K8p<9T^3O~n-(1I?>;T4 z&q9Nh9kqH*!E>^t51_rBT(d=o4&B=@K7Gr71M#xv2zpNf+FYFUSkFm~=GPgr1`*D+7~fG#ZOVVf_5BKg|Kn%P|J!~PmSM{dVQu;V_FQUsZaT3t_PsTG z?I!;;Q&Sru8nZU{V`>IeRomkY&FFihd0|McUYzm9)ri?Ia+mU z)m24Rr9Eq6K4!1g_}@-EA3>VYn;MWf5@pk!2Ho0pM0Lj3z9plHfjXEJ1dIC;b1Kq#ey`7v5d~0000C!9-gs*@?wOFPDc3TLC+gIi8qrnqX(Sd!oRW)p(~-x30?lARJ?Ie zR-~XRO(~nA?IgVzeK1Ygxg`!aO{r-yC+AyW{rAHHk8ShUnZcU#g#8mIo$W3M{s*}^ z=bv(XwxxGmoc{C^3U>ZK#X3PRA^qyry1C>jdBt9@OkwCzC$a>*cO_gWD!5YXVQys? zI;UY@ob~MPT=lDw@7Uw}YQ6O%iIp*p!{%67`^{hxo~ZA8yN?;)ZW;|AhIvE|E`a1Z zKTiz>+1`e0bjso#Eu1ajEzmIjHOQus(kGyr6F4_5wm1lk(Jr!B3oPgqC;hb~SFv34 zy-=z)%+LTC8hrROE{#1*XLA0E+X$O|DEO;j&5F*GmVP5$_>c|UU0D@A58g|;X5oM= zJzUbNxV^wFBH=ME2;kQlEBXE2oo#A)Y&z|Ija(vV8flM=ov0!LzF&N7t^5A{+<6P| zQoXTqiBPS&RVAUos2Nz>u#Y!TjjwV<8++8o$bDq&QTyZ|HZ#Cg!nNm7^`OLGwIc?T zRQJ|Yq{)Mm#V*2aBjtz(vOQAf^;T4z5|u>Z#a49nyK$FUWC;%?l6ijDGwS=EeQz<= zrm9--J;{s==`OucG%%x*ZT-Y+sDGGBnc_v8vXn-i@^|QJBMcco>^E>W;P-nsv`G+I zFdfz>Q%w|`bNN8Yf+x)zs_;e!B1{yOJW(TCF+rhkUphfJ@$4RZyv9EQEy+=0_uV>p z9}KG`%AkCrw2fUak=&P=fc1Y1<%z4Zfo;<`96Z88(nM%sqxx>Rtv-hWBy!oeq<%F~ zOC%svNnCO4lpPpBtCY@YDi2&Ferii*G3&YT;Hs3ZbZ~D}yl-ev*~a@tPia8XK)`Zx zW^{{hR;I!b?>4e5Re?BoQx9=6d7(y+ldAu!@IK4L;sW`uq zwNscE)>GiKl%$5t+lNm}+kT+FCdb2Ww$x+34^^r8yumV z>roP@WU3<8D6G)n;Kk&3b5e7Y-$qF1;TCZNgmzHq1@0CUZ*Y8pD0NXGd!vxu@AlI8xtZnrgnWhhZ5 zTDFta*4)w?&i@8*A8m|49VNW@VrHXSt^5_gl%gYKy7*V!!;27bhysXH>082Je#9jV zJ@=HC1v1AndyqYl!KJmTIWV;ve9}}IP_g%;zne+d$uc?fe_Dx8Y-41QL2p~0|A2ErBww&fQ3AeZ^T1nD}Z4=!mce zgNy#;t9=_*t3p4MqJufCku6m&on%$g$yn%d_N@~k;ten9>LI@RJMsj`yiQ=_cjItO z+ZLqk$LzNv24#4KYLm2$&9CXV%dbxlLYQyPiX<0U&NoT=Y8|v%^RWY0Btd^uz)qoW zF&ky#57t$hp09+pS%zo(sm|Zli0-sX6GZ!zbzB`fKW_MXkJy`>>hC}yE=n8f?1W#& z3SDLl`^v4X;Pjt;3+2k6Cj)V1IAMp;{|MFG;L5s|KN@&;x)k~{jk_b~?9hzp`YbOC{LS7Vs5Rv2R?m>`;w?%qde zzp`L7da=^QtO5WG_0P|r3`ieJeJ3Aiy<{nZg! z=NK9B*5H+O*Xvdan#wozFErRnh#*0YdOEZW&Y4DGUp}5cJm2Mb0q)-d){@L8HoSO@ z2Uv@vIPobmeesj%-xA^Hm%#pgI-|pAB4MsTK5xyF+CGdz&*bvoo*0M7@q1RtS_NhT zk^bZrb%EsnG7kL330TX3&W=?1`%_nlai5Rv9-5!JpnS(A#3pK%0T<82Y)2(j`2w10 znO?rDb|68<7ih03&(V4IU%^L9Hi@hJH}{=7m~_vWFx32CAXVuAR@eCZyE=qX9_~n)lDL?v>M;W1nYBXJczcSNV z3F~Hau#CQDYkAm+!I^S3r)y^_S%Qp33mDtvhx194XY;N5z%7I&g?yQ5!gDiY*O8A@ z6CS>6b1d3(5qCWd3{nEv+!1j;{i_g|xq3%e8ITR4K}I7sMst+5ZxbN=n2l3MJewk3 zD1AyNyBr!$Sx6lR>XMgNV#V-Fd`gMGDE|j;IEmUy1 z#^{jyzAo0^M#Dui#BVmKkzOgUHR=KkEN)5rEAl9FRNMy@_7ZU?F*R#WZvbXg&M%6D zXNHbjuikAnHe95e0vAm~%5@-P+^jP|X&pAQFuIVMR7|@Fo!moA<&RmIYH&yE3uXbdpqZI9vPB3eOyF|lRM%O>fKm> z*>ZzvZeQQnv&+;xB9-w)1PW4Bd{Mm}IJEJN6bT`-Rm{o$jh(26Z4(f~mPc`lmvO7&BOpcT35tZOTlP*ovz$L;hDACH@1>@A9))0+o#mPax3^ zL?gNz+4`_~lxpaMdbosmicZQb|{n(lcOgvtEYi**g_G!n z=}U-47^lVIh^3XXqtp0O$>mJmP=ip9e)Ly2!C;yXA8d%SQzp%sJx%X^k;alrr}TDw z<>4JL*2cgOr*?uMD(f5I(OMnz{gZ6ee$+8Du5&449OAVq3MY`BW9$G~4B;UapbmrB z_ZiME85r7u)at#4o@$}jaex) z~*)Y*U8 z*Bt4y&Mxeaiu?h~7E&CjGp8LBNwp+^C^_)ib@TfiCxNIqtQ~&E@uJzux48}o$ zg$R?7T|Gb*tCkw7R&ji;9I-zVRdbG?G1BF~rSOdE!_1I7KMCYrC4wsl@pP+Cem<2# z0}!8uM`GdzDy@bGjJ#&h!cl$b#*$inTnNLZyKCg*%>;dphY!p$LI+OFapHq!+#X}X zX`9?~7MMnt>|wkndTc|?D_D#$EZ!;tD1rbMjgD_z!-ZNS^;9g zo7xdxH(ba{RL&L9yHGL@I~xhQlDb3l*UEsguDC30mc78V{{1cS8F7qBM&4tPp#leW z$tcO*%=ensU<%OtPapcDeUdZdcgVQV0S~-l;&qZ#Migm=IOI-o(cle`ri!#pP!d=@ z`5SaqH79bAe0`br$Q?$d;^|@MtjfILco3PRVhQ6P#V+Rv?me~BLgz;Y2>ao2d*72qP37;UG)OlJ}~eeY*_rK-2{^ZH=H;=6_HeIx>wn z#Y_Rip}_JPRO4y7XC62Gk*%nu-m&9gOJ{Nurw!pnStxcnh^3L0C5}{GNRyo%7^R|% z&qfD&k;M(D8li3+Uj~J>$M*8EF{sZCSR3Gy6W0i*;U}0F+EIKN8|VbKhc z$+a;bE4r-vz08jNMTTa+`~iBaN2q6#*bTeSIT3FjhlOB1N9z? z^fHXdE#7dxYCHjKdX_01reoJ?5aHz|iWdgXBzQSLW}|-_vnEs**X(Skl+J}N%eV*# zrX}+jM>g8BFX}a=lj2RQx+^BI@r@AxGR(;flsJc-HIsa!Zyw7tXB1`p1W1{vibrU+ zB+B)`NI3`Hc0;G|iX9#8K1Go8!}me9$!3`2v2$p(%;{%SV>(7GDaZN$TBr}6AvWZ4 zN3AI^7;MAqw7yiZcl3?`*H_?Ze)sSNK1$D-8T_*3yQ?1AD3>RMpX#g%osO|8p>Ifo|4_^`qe_OELV z3IExR<)d_Zsfz)VRhDNi!envk=vcy^v`;ttpek-2afJQiP{5`p9GLhf`B z@%=J)H;}666wIdtv7^o5(?fkSNqiMcK&Jb5sRJ6}@>&1-Crf8^vE2#w~6|Ytaf_n`HXkbswj3vliS84d0q)oss z2eFfNC#8T6=+wg13wcrIg%x3S%CzzNCQDBNKoJ!C<_QeNibjwhV-je>-u+xEhTvcD zvJkRL=12l|T?lRdPAxhL@X-^Mf7Q;#nI=Y29@Wg>iHN&|w?TP03LN#5u+bIbG)QyR zp(gz@#98r{4FITzQnHhb&m0EoOmJ@ln)$U)(sq5X2}{%qNjX!aLm-q+ZY7BIlR#}| z^L!_k)C7!8LZGk`N;q$D413@t3()R~I$a8`7gkk}N>H5}dJfTGC9N;tsP4!N$=7*H zd}{fZOh`QaIIz4du$dAW4Ik+bVV&L@;Y8_Y$Aa|9aW1np!wW#P!Ft~l>BJZ-U@(AYuVIUx+m#MV*+;xq7+JTb>$B)87HeZ7ibX#63ZcUhTJ zB0QhcK$OqexC>%IOR3F!-{rVeV zd+aELPDM{jOieRsk%1G@^S@)J&2&TyD&L>iS1vvvd>?78*@QO{FAMKucA#i03jro> zhz~3q3o7MG*h9z6Gx z)f>8>ch+bKRty~=2g!`y2?OP4lSJzH!T3gqBVRm1!uTern0;~;16h(n*eR*0U`hDN z9M`>dze)MHiLlv9p+wYdM*ZAs32d*SvaB}F+_oy;3}0w$$-t1OY2i-uz{~%2L4*Es z(6=)QouA(azO|O4*aj3S=&tkcoy~->-eiFdzI#~8D}Bg?8Po2mnUL?`eXp{LQUUyg zvd$C-JW0@rL=->aQ%VQWjwW$%qbNI>CZ3#|8K*(y4t1i}*^S``@V#9rM`{ z@=ZBd3omRJvstHuAMkn)*eK>BWCkRkL~5qLBxL=GwDk_;MN^8SjxR=%BY$S?Hy)2= zTbuG}zsq}9ZHHIOLj|=(kNW8vW*zFbeP)ORs=V34?vP`KNBAe~A1j@Y9 zw;aNf@~)%ck${>FDsV5c2dtU3mo=`oImKvnTbLm7E96%_A=aM83z zkrg!o1-bax{ihv-&HB@$gy+?aL@Doz|GVdWJ1LCq+<|og(khqmIgw5qF*0N#l8vPR zkJ^G5m{DA(pZ{qG9t}W^gULRco8TvDVJ-p5`BPzU=Q)3bm}^u3R7Q5_@>X&7M(`DY z>8Vp9kLSSin}mS)sT~`D1q)!SBQ6V1iINAn&Xy{Q!Y>)`?CY?Wut-l$pNi5VG|N`R zK{jS!x`WM!f&#jtqbftf$D@F15d)QW!1W6Qx6BKzI7mMgiJMCUY(94Id4x7Jl(&swh(AaSA+LR~QI8WBYIxWi4hm6fsHa?`y8 za4f2gVcbf)@a5vZgiqouGV4N&BHsW`DmmFZ{9YpN31;ur&9+$%$p8iybB|^keS>vs zenC_1&-{2&F?d1uO`&jHf!RBT<39-kMP+eV38NH7<=gsk=nL9(?j(F3yETJK*Q&3D z!xmy?MDSd)g5kSD01(A9joJ8Wfuvs??b@g&46~?@qSN-}aTdQrQx`Ic*vb%>V1==b z1pjMtRLg4CZtNlb9?`JO7Z~00&No6){{yuP8;_*hoh4HacQI(Hto=d;ghd-n{=5l3 z1JzECD#bYWNEMaKv3b%Kp(8|AnF(T7g_I87j&>evPfI@wzHKe&I+3A5W)l-nb#_)3 zU4E+B{QK9Y{nOii{L{8!{Lj!d+lpsqL8A(Vx#BpwUN*i;$%1Ga_X-It)sY=CoJCDR z@`Ut?g@=bP!;^k8EaDkDrgn$O@6OSDVVy1*3Oxo>I!(9o?mN7~OCy7JI)X|w<9r>I z2}_`<2A`5&0pg7f90B`<{>d0^MSz@FAPl)W;sh$9{?w<+%A82pSanxP7xr}E1j%mP zo?oYZ{c#?A(#oW+?o~6(HLRN_OcIzvUfHg&Z_fT%?HiV1yF!E=9;RkReBu#`>@wpf z|0+iSn&89*$%^5q_e;qug(L6?~GdpmMu=UXpMdRjo4Wc8T*ne!hn z5n5}ZQSxi;-Eo;;l=xg`w^p~~Oy5}=n21j#j;~n9$fsTMyc>q&S|(0FGJ}B~lYGh_r`f^4wAju? z-J$XhXzj5dcaz@8y;_SNsTZZZ-ae%Q12C;T-WN{^SDs?jSASycL=R1~ukYme0s6=C zd8Zj=UvSHxdXOq)y??|piPYGfz6h3;b|EJLv@|h{{2Bn=)MuP(@$65E<-^&c4{;R> zSrz?8a((cn_5P31Z?&R-7yB`uwSz2&f5XCWR-TOPMWDpz_=g!x!rffb@g}%A9UTnT zthE_uSYp1UtzNANHTHN_Vjh-0_P?%M_1P1x?K*2N4Y+B3y(&%9+vexEbI5fqa_x;Z zF|sf?vW!Fc4!f^w7mR+hudFrd$TMm)wVjjmAxD_Ef$lOa2@q}^Xb*PHWQ-1cfr5R2 zMF>|QRhU;TD17R1($0t?+f`K~>B{=7EiT0*jhFzTCeR5z-A}#FKsKV&hL{;QbrnzS zl~C%hc(plBiJ_dQD|>QQ-IYZ{$C0qjqIQqJp|{QVYz<63SHoXL@!CHT&n&*@@&Bw- zb2y~*NQR#2@FpOnHnEeRbI?5%%y}{Pm!flPzpH|cGd-Y0;mKuf0Ex;`#=7`eHWzTL zVyL~Enqq_XtF#+0Q{Y0n@IhtW@}JT-=7*Kd=I51J=I6BUEbD`Fg?>dpSJPa?U(hYj z_j)z;WQT>xXEE8`=rE}+gvfh7+3Qm`6>-u@(xdFi2?cg8g>COJqW? zLR2qm?>{u8ggv`aKDiU!(i=z)@E@}t@W;>VYIuBiSF;gIduO6PQJV7b2dx(EiO0Z` zmzN8FR*s^67A)C^1c$g@>>SzMb3Jre(#ulO=#+md1ljw{Y5c>B>8Gt#stjFHXjCZs z=@+Z$?!AhGnTkv3X*%r2M)CXn?$^WH?w-T@v>}hHFuA+CcxH-<#J=ucnW9kntGF|& zz4u1ZG9j`hiK;&FVQK*x5fpnpX$g0FCE-89ZOVfAZnI9a;=H9Cq*8XF7s9^^-$ik;$F2}chtKl9d(jnWt8uNUOrJ|^*P%md4`9A>rM&7dk literal 0 HcmV?d00001 diff --git a/examples/widgetsgallery/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/widgetsgallery/android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b216f2d313cc673d8b8c4da591c174ebed52795c GIT binary patch literal 11873 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 literal 0 HcmV?d00001 diff --git a/examples/widgetsgallery/android/src/main/res/values-night/themes.xml b/examples/widgetsgallery/android/src/main/res/values-night/themes.xml new file mode 100644 index 0000000000..710bfabb30 --- /dev/null +++ b/examples/widgetsgallery/android/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/res/values/colors.xml b/examples/widgetsgallery/android/src/main/res/values/colors.xml new file mode 100644 index 0000000000..6040e1f218 --- /dev/null +++ b/examples/widgetsgallery/android/src/main/res/values/colors.xml @@ -0,0 +1,11 @@ + + + #ffa5d6a7 + #ff4caf50 + #ff388e3c + #FF03DAC5 + #ff80deea + #FF833AB4 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/res/values/strings.xml b/examples/widgetsgallery/android/src/main/res/values/strings.xml new file mode 100644 index 0000000000..49dfce059f --- /dev/null +++ b/examples/widgetsgallery/android/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + ComposeWidgets + \ No newline at end of file diff --git a/examples/widgetsgallery/android/src/main/res/values/themes.xml b/examples/widgetsgallery/android/src/main/res/values/themes.xml new file mode 100644 index 0000000000..50dcf6d3d9 --- /dev/null +++ b/examples/widgetsgallery/android/src/main/res/values/themes.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/widgetsgallery/build.gradle.kts b/examples/widgetsgallery/build.gradle.kts new file mode 100644 index 0000000000..946ae9688d --- /dev/null +++ b/examples/widgetsgallery/build.gradle.kts @@ -0,0 +1,24 @@ +buildscript { + repositories { + // TODO: remove after new build is published + mavenLocal() + google() + jcenter() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + } + + dependencies { + // __LATEST_COMPOSE_RELEASE_VERSION__ + classpath("org.jetbrains.compose:compose-gradle-plugin:0.3.0-build135") + classpath("com.android.tools.build:gradle:4.0.1") + classpath(kotlin("gradle-plugin", version = "1.4.21")) + } +} + +allprojects { + repositories { + google() + jcenter() + maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") + } +} diff --git a/examples/widgetsgallery/common/build.gradle.kts b/examples/widgetsgallery/common/build.gradle.kts new file mode 100644 index 0000000000..f14bbb300b --- /dev/null +++ b/examples/widgetsgallery/common/build.gradle.kts @@ -0,0 +1,60 @@ +import org.jetbrains.compose.compose + +plugins { + id("com.android.library") + kotlin("multiplatform") + id("org.jetbrains.compose") +} + +kotlin { + android() + jvm("desktop") + + sourceSets { + named("commonMain") { + dependencies { + api(compose.runtime) + api(compose.foundation) + api(compose.material) + api(compose.materialIconsExtended) + } + } + named("androidMain") { + kotlin.srcDirs("src/jvmMain/kotlin") + dependencies { + api("androidx.appcompat:appcompat:1.1.0") + api("androidx.core:core-ktx:1.3.1") + } + } + named("desktopMain") { + kotlin.srcDirs("src/jvmMain/kotlin") + resources.srcDirs("src/commonMain/resources") + dependencies { + api(compose.desktop.common) + } + } + } +} + +android { + compileSdkVersion(30) + + defaultConfig { + minSdkVersion(21) + targetSdkVersion(30) + versionCode = 1 + versionName = "1.0" + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + sourceSets { + named("main") { + manifest.srcFile("src/androidMain/AndroidManifest.xml") + res.srcDirs("src/androidMain/res", "src/commonMain/resources") + } + } +} diff --git a/examples/widgetsgallery/common/src/androidMain/AndroidManifest.xml b/examples/widgetsgallery/common/src/androidMain/AndroidManifest.xml new file mode 100644 index 0000000000..35be3787c7 --- /dev/null +++ b/examples/widgetsgallery/common/src/androidMain/AndroidManifest.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt b/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt new file mode 100644 index 0000000000..30eed99b90 --- /dev/null +++ b/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt @@ -0,0 +1,12 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset + +actual fun Modifier.pointerMoveFilter( + onEnter: () -> Boolean, + onExit: () -> Boolean, + onMove: (Offset) -> Boolean +): Modifier = this + +actual fun Modifier.cursorForHorizontalResize() = this \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt b/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt new file mode 100644 index 0000000000..16967b720e --- /dev/null +++ b/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt @@ -0,0 +1,27 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.vector.ImageVector +import org.jetbrains.compose.demo.widgets.R + +@Composable +actual fun imageResource(res: String): ImageBitmap { + val id = drawableId(res) + return androidx.compose.ui.res.imageResource(id) +} + +@Composable +actual fun vectorResource(res: String): ImageVector { + val id = drawableId(res) + return androidx.compose.ui.res.vectorResource(id) +} + +// TODO: improve resource loading +private fun drawableId(res: String): Int { + val imageName = res.substringAfterLast("/").substringBeforeLast(".") + val drawableClass = R.drawable::class.java + val field = drawableClass.getDeclaredField(imageName) + val idValue = field.get(drawableClass) as Integer + return idValue.toInt() +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt b/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt new file mode 100644 index 0000000000..7ec4cd59c7 --- /dev/null +++ b/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt @@ -0,0 +1,21 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.Dp + +@Composable +actual fun VerticalScrollbar( + modifier: Modifier, + scrollState: ScrollState +) = Unit + +@Composable +actual fun VerticalScrollbar( + modifier: Modifier, + scrollState: LazyListState, + itemCount: Int, + averageItemSize: Dp +) = Unit \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt b/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt new file mode 100644 index 0000000000..be73331ce2 --- /dev/null +++ b/examples/widgetsgallery/common/src/androidMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt @@ -0,0 +1,8 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.runtime.Composable +import androidx.compose.foundation.isSystemInDarkTheme as androidSystemIsInDarkTheme + +@Composable +actual fun isSystemInDarkTheme(): Boolean = + androidSystemIsInDarkTheme() \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/DemoDataProvider.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/DemoDataProvider.kt new file mode 100644 index 0000000000..74369433cc --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/DemoDataProvider.kt @@ -0,0 +1,14 @@ +package org.jetbrains.compose.demo.widgets.data + +import org.jetbrains.compose.demo.widgets.data.model.Item +import org.jetbrains.compose.demo.widgets.data.model.Tweet +import org.jetbrains.compose.demo.widgets.platform.Res + +object DemoDataProvider { + val item = Item( + 1, + "Awesome List Item", + "Very awesome list item has very awesome subtitle. This is bit long", + Res.drawable.food6 + ) +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/model/Item.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/model/Item.kt new file mode 100644 index 0000000000..bb879b4ac4 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/model/Item.kt @@ -0,0 +1,9 @@ +package org.jetbrains.compose.demo.widgets.data.model + +data class Item( + val id: Int, + val title: String, + val subtitle: String, + val imageId: String, + val source: String = "demo source" +) \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/model/Tweet.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/model/Tweet.kt new file mode 100644 index 0000000000..dd9df15318 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/data/model/Tweet.kt @@ -0,0 +1,15 @@ +package org.jetbrains.compose.demo.widgets.data.model + +data class Tweet( + val id: Int, + val text: String, + val author: String, + val handle: String, + val time: String, + val authorImageId: String, + val likesCount: Int, + val commentsCount: Int, + val retweetCount: Int, + val source: String, + val tweetImageId: String? = null +) \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt new file mode 100644 index 0000000000..1d20d024a2 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt @@ -0,0 +1,12 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset + +expect fun Modifier.pointerMoveFilter( + onEnter: () -> Boolean = { true }, + onExit: () -> Boolean = { true }, + onMove: (Offset) -> Boolean = { true } +): Modifier + +expect fun Modifier.cursorForHorizontalResize(): Modifier \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Res.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Res.kt new file mode 100644 index 0000000000..404e83a410 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Res.kt @@ -0,0 +1,21 @@ +package org.jetbrains.compose.demo.widgets.platform + +object Res { + object drawable { + val food6 = "drawable-nodpi/food6.jpg" + val p1 = "drawable-nodpi/p1.jpeg" + val p2 = "drawable-nodpi/p2.jpeg" + val p3 = "drawable-nodpi/p3.jpeg" + val p6 = "drawable-nodpi/p6.jpeg" + + val ic_instagram = "drawable/ic_instagram.xml" + val ic_send = "drawable/ic_send.xml" + val ic_twitter = "drawable/ic_twitter.xml" + } + + object string { + val spotify_nav_home = "Home" + val spotify_nav_search = "Search" + val spotify_nav_library = "Your Library" + } +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt new file mode 100644 index 0000000000..f9ecf511b0 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt @@ -0,0 +1,12 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.vector.ImageVector + +@Composable +expect fun imageResource(res: String): ImageBitmap + +@Composable +expect fun vectorResource(res: String): ImageVector + diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt new file mode 100644 index 0000000000..d7adfa7349 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt @@ -0,0 +1,21 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.Dp + +@Composable +expect fun VerticalScrollbar( + modifier: Modifier, + scrollState: ScrollState +) + +@Composable +expect fun VerticalScrollbar( + modifier: Modifier, + scrollState: LazyListState, + itemCount: Int, + averageItemSize: Dp +) \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt new file mode 100644 index 0000000000..3050d9f245 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt @@ -0,0 +1,3 @@ +package org.jetbrains.compose.demo.widgets.platform + +expect fun isSystemInDarkTheme(): Boolean \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Color.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Color.kt new file mode 100644 index 0000000000..af32b07b1d --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Color.kt @@ -0,0 +1,23 @@ +package org.jetbrains.compose.demo.widgets.theme + +import androidx.compose.ui.graphics.Color + +val green200 = Color(0xffa5d6a7) +val green500 = Color(0xff4caf50) +val green700 = Color(0xff388e3c) + +val blue500 = Color(0xFF3F51B5) +val blue200 = Color(0xFF9FA8DA) +val blue700 = Color(0xFF303F9F) + +val purple200 = Color(0xFFB39DDB) +val purple = Color(0xFF833AB4) +val purple700 = Color(0xFF512DA8) + +val orange200 = Color(0xFFff7961) +val orange500 = Color(0xFFf44336) +val orange700 = Color(0xFFba000d) + + +val teal200 = Color(0xff80deea) +val twitterColor = Color(0xFF1DA1F2) diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Shape.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Shape.kt new file mode 100644 index 0000000000..764221a766 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Shape.kt @@ -0,0 +1,11 @@ +package org.jetbrains.compose.demo.widgets.theme + +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Shapes +import androidx.compose.ui.unit.dp + +val shapes = Shapes( + small = RoundedCornerShape(4.dp), + medium = RoundedCornerShape(4.dp), + large = RoundedCornerShape(0.dp) +) \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Theme.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Theme.kt new file mode 100644 index 0000000000..64ec9f8344 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Theme.kt @@ -0,0 +1,136 @@ +package org.jetbrains.compose.demo.widgets.theme + +import androidx.compose.material.MaterialTheme +import androidx.compose.material.darkColors +import androidx.compose.material.lightColors +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import org.jetbrains.compose.demo.widgets.platform.isSystemInDarkTheme +import org.jetbrains.compose.demo.widgets.theme.ColorPallet.* + +// dark palettes +private val DarkGreenColorPalette = darkColors( + primary = green200, + primaryVariant = green700, + secondary = teal200, + background = Color.Black, + surface = Color.Black, + onPrimary = Color.Black, + onSecondary = Color.White, + onBackground = Color.White, + onSurface = Color.White, + error = Color.Red, +) + +private val DarkPurpleColorPalette = darkColors( + primary = purple200, + primaryVariant = purple700, + secondary = teal200, + background = Color.Black, + surface = Color.Black, + onPrimary = Color.Black, + onSecondary = Color.White, + onBackground = Color.White, + onSurface = Color.White, + error = Color.Red, +) + +private val DarkBlueColorPalette = darkColors( + primary = blue200, + primaryVariant = blue700, + secondary = teal200, + background = Color.Black, + surface = Color.Black, + onPrimary = Color.Black, + onSecondary = Color.White, + onBackground = Color.White, + onSurface = Color.White, + error = Color.Red, +) + +private val DarkOrangeColorPalette = darkColors( + primary = orange200, + primaryVariant = orange700, + secondary = teal200, + background = Color.Black, + surface = Color.Black, + onPrimary = Color.Black, + onSecondary = Color.White, + onBackground = Color.White, + onSurface = Color.White, + error = Color.Red, +) + +// Light pallets +private val LightGreenColorPalette = lightColors( + primary = green500, + primaryVariant = green700, + secondary = teal200, + background = Color.White, + surface = Color.White, + onPrimary = Color.White, + onSecondary = Color.Black, + onBackground = Color.Black, + onSurface = Color.Black +) + +private val LightPurpleColorPalette = lightColors( + primary = purple, + primaryVariant = purple700, + secondary = teal200, + background = Color.White, + surface = Color.White, + onPrimary = Color.White, + onSecondary = Color.Black, + onBackground = Color.Black, + onSurface = Color.Black +) + +private val LightBlueColorPalette = lightColors( + primary = blue500, + primaryVariant = blue700, + secondary = teal200, + background = Color.White, + surface = Color.White, + onPrimary = Color.White, + onSecondary = Color.Black, + onBackground = Color.Black, + onSurface = Color.Black +) + +private val LightOrangeColorPalette = lightColors( + primary = orange500, + primaryVariant = orange700, + secondary = teal200, + background = Color.White, + surface = Color.White, + onPrimary = Color.White, + onSecondary = Color.Black, + onBackground = Color.Black, + onSurface = Color.Black +) + +enum class ColorPallet { + PURPLE, GREEN, ORANGE, BLUE +} + +@Composable +fun WidgetGalleryTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + colorPallet: ColorPallet = GREEN, + content: @Composable() () -> Unit, +) { + val colors = when (colorPallet) { + GREEN -> if (darkTheme) DarkGreenColorPalette else LightGreenColorPalette + PURPLE -> if (darkTheme) DarkPurpleColorPalette else LightPurpleColorPalette + ORANGE -> if (darkTheme) DarkOrangeColorPalette else LightOrangeColorPalette + BLUE -> if (darkTheme) DarkBlueColorPalette else LightBlueColorPalette + } + + MaterialTheme( + colors = colors, + typography = typography, + shapes = shapes, + content = content + ) +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Type.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Type.kt new file mode 100644 index 0000000000..bda3b064fa --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/theme/Type.kt @@ -0,0 +1,43 @@ +package org.jetbrains.compose.demo.widgets.theme + +import androidx.compose.material.Typography +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +val typography = Typography( + body1 = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp + ), + body2 = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 14.sp + ), + button = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.W500, + fontSize = 14.sp + ), + caption = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 12.sp, + ), + subtitle1 = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + color = Color.Gray + ), + subtitle2 = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 14.sp, + color = Color.Gray + ), +) \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/MainView.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/MainView.kt new file mode 100644 index 0000000000..e2f96b33e6 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/MainView.kt @@ -0,0 +1,154 @@ +package org.jetbrains.compose.demo.widgets.ui + +import androidx.compose.animation.animate +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.SpringSpec +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.LazyColumnFor +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.runtime.savedinstancestate.savedInstanceState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.platform.AmbientDensity +import androidx.compose.ui.selection.DisableSelection +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.* +import org.jetbrains.compose.demo.widgets.platform.VerticalScrollbar +import org.jetbrains.compose.demo.widgets.platform.pointerMoveFilter +import org.jetbrains.compose.demo.widgets.theme.WidgetGalleryTheme +import org.jetbrains.compose.demo.widgets.ui.utils.PanelState +import org.jetbrains.compose.demo.widgets.ui.utils.ResizablePanel +import org.jetbrains.compose.demo.widgets.ui.utils.VerticalSplittable +import org.jetbrains.compose.demo.widgets.ui.utils.withoutWidthConstraints +import kotlin.ranges.coerceAtLeast + +@Composable +fun MainView() { + DisableSelection { + WidgetGalleryTheme() { + WidgetsPanel() + } + } +} + +@Composable +fun WidgetsPanel() { + val widgetsTypeState = savedInstanceState { WidgetsType.sortedValues.first() } + val panelState = remember { PanelState() } + + val animatedSize = if (panelState.splitter.isResizing) { + if (panelState.isExpanded) panelState.expandedSize else panelState.collapsedSize + } else { + animate( + if (panelState.isExpanded) panelState.expandedSize else panelState.collapsedSize, + SpringSpec(stiffness = Spring.StiffnessLow) + ) + } + + VerticalSplittable( + Modifier.fillMaxSize(), + panelState.splitter, + onResize = { + panelState.expandedSize = + (panelState.expandedSize + it).coerceAtLeast(panelState.expandedSizeMin) + } + ) { + ResizablePanel( + Modifier.width(animatedSize).fillMaxHeight(), + title = "Widgets", + state = panelState + ) { + WidgetsListView(widgetsTypeState) + } + + Box { + Column { + WidgetsView( + widgetsTypeState, + modifier = Modifier.weight(1f) + ) + } + } + } +} + +@Composable +private fun WidgetsListView(widgetsTypeState: MutableState) { + Box { + with(AmbientDensity.current) { + val scrollState = rememberLazyListState() + + val fontSize = 14.sp + val lineHeight = fontSize.toDp() * 1.5f + + val items = WidgetsType.sortedValues + LazyColumnFor( + items, + modifier = Modifier.fillMaxSize().withoutWidthConstraints(), + state = scrollState, + itemContent = { WidgetsListItemViewImpl(it, widgetsTypeState, fontSize, lineHeight) } + ) + + VerticalScrollbar( + Modifier.align(Alignment.CenterEnd), + scrollState, + items.size, + lineHeight + ) + } + } + +} + +@Composable +private fun WidgetsListItemViewImpl( + widgetsType: WidgetsType, + widgetsTypeState: MutableState, + fontSize: TextUnit, + height: Dp +) { + val isCurrent = widgetsTypeState.value == widgetsType + + Row( + modifier = Modifier + .wrapContentHeight() + .clickable { widgetsTypeState.value = widgetsType } + .height(height) + .padding(start = 16.dp) + ) { + var inFocus by remember { mutableStateOf(false) } + val textColor = AmbientContentColor.current.let { + when { + isCurrent -> it + inFocus -> it.copy(alpha = 0.6f) + else -> it.copy(alpha = 0.4f) + } + } + + Text( + text = widgetsType.readableName, + color = textColor, + modifier = Modifier + .align(Alignment.CenterVertically) + .clipToBounds() + .pointerMoveFilter( + onEnter = { + inFocus = true + true + }, + onExit = { + inFocus = false + true + } + ), + softWrap = true, + fontSize = fontSize, + overflow = TextOverflow.Ellipsis, + maxLines = 1 + ) + } +} diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/WidgetView.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/WidgetView.kt new file mode 100644 index 0000000000..45de67c6cf --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/WidgetView.kt @@ -0,0 +1,31 @@ +package org.jetbrains.compose.demo.widgets.ui + +import androidx.compose.foundation.ScrollableColumn +import androidx.compose.foundation.layout.Column +import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState +import androidx.compose.ui.Modifier +import org.jetbrains.compose.demo.widgets.ui.screens.* + +@Composable +fun WidgetsView( + widgetsTypeState: MutableState, + modifier: Modifier +) { + ScrollableColumn(modifier = modifier) { + Column { + @Suppress("UNUSED_VARIABLE") + val exhaustive = when (widgetsTypeState.value) { + WidgetsType.APP_BARS -> AppBars() + WidgetsType.BUTTONS -> Buttons() + WidgetsType.CHIPS -> Chips() + WidgetsType.LOADERS -> Loaders() + WidgetsType.SNACK_BARS -> SnackBars() + WidgetsType.TEXT_VIEWS -> TextViews() + WidgetsType.TEXT_INPUTS -> TextInputs() + WidgetsType.TOGGLES -> Toggles() + WidgetsType.UI_CARDS -> UICards() + } + } + } +} diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/WidgetsType.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/WidgetsType.kt new file mode 100644 index 0000000000..d2c32e396d --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/WidgetsType.kt @@ -0,0 +1,30 @@ +package org.jetbrains.compose.demo.widgets.ui + +enum class WidgetsType(private val customTitle: String? = null) { + APP_BARS, + BUTTONS, + CHIPS, + LOADERS, + SNACK_BARS, + TEXT_VIEWS, + TEXT_INPUTS, + TOGGLES, + UI_CARDS("UI Cards"); + + val readableName: String by lazy { + name.split("_") + .map { it.toLowerCase() } + .mapIndexed { i, it -> + if (i == 0) it.capitalize() else it + }.joinToString(" ") + } + + val title: String + get() = customTitle ?: readableName + + companion object { + val sortedValues: List by lazy { + values().sortedBy { it.name } + } + } +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/AppBars.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/AppBars.kt new file mode 100644 index 0000000000..a979c7e327 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/AppBars.kt @@ -0,0 +1,160 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.filled.MoreHoriz +import androidx.compose.material.icons.filled.StarBorder +import androidx.compose.material.icons.outlined.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.platform.Res +import org.jetbrains.compose.demo.widgets.platform.imageResource +import org.jetbrains.compose.demo.widgets.platform.vectorResource +import org.jetbrains.compose.demo.widgets.theme.twitterColor +import org.jetbrains.compose.demo.widgets.theme.typography +import org.jetbrains.compose.demo.widgets.ui.utils.SubtitleText +import org.jetbrains.compose.demo.widgets.ui.utils.TitleText + +@Composable +fun AppBars() { + TopAppBarsDemo() + BottomAppBarDemo() + NavigationBarDemo() +} + +@Composable +private fun TopAppBarsDemo() { + SubtitleText(subtitle = "Top App bar") + + TopAppBar( + title = { Text(text = "Home") }, + elevation = 8.dp, + navigationIcon = { + IconButton(onClick = {}) { + Icon(Icons.Default.ArrowBack) + } + } + ) + + Spacer(modifier = Modifier.height(8.dp)) + + TopAppBar( + title = { Text(text = "Instagram") }, + backgroundColor = MaterialTheme.colors.surface, + contentColor = MaterialTheme.colors.onSurface, + elevation = 8.dp, + navigationIcon = { + IconButton(onClick = {}) { + Icon(vectorResource(Res.drawable.ic_instagram)) + } + }, + actions = { + IconButton(onClick = {}) { + Icon(vectorResource(Res.drawable.ic_send)) + } + } + ) + + Spacer(modifier = Modifier.height(8.dp)) + + TopAppBar( + title = { + Icon( + vectorResource(Res.drawable.ic_twitter), + tint = twitterColor, + modifier = Modifier.fillMaxWidth() + ) + }, + backgroundColor = MaterialTheme.colors.surface, + contentColor = MaterialTheme.colors.onSurface, + elevation = 8.dp, + navigationIcon = { + Image( + imageResource(Res.drawable.p6), + modifier = Modifier.padding(vertical = 4.dp, horizontal = 8.dp) + .preferredSize(32.dp).clip(CircleShape) + ) + }, + actions = { + Icon( + Icons.Default.StarBorder, + modifier = Modifier.padding(horizontal = 8.dp) + ) + } + ) + Spacer(modifier = Modifier.height(8.dp)) +} + +@Composable +private fun BottomAppBarDemo() { + Spacer(modifier = Modifier.height(16.dp)) + SubtitleText("Bottom app bars: Note bottom app bar support FAB cutouts when used with scafolds see demoUI crypto app") + + BottomAppBar( + cutoutShape = CircleShape + ) { + IconButton(onClick = {}) { + Icon(Icons.Default.MoreHoriz) + } + TitleText(title = "Bottom App Bar") + } +} + +@Composable +private fun NavigationBarDemo() { + Spacer(modifier = Modifier.height(16.dp)) + SubtitleText(subtitle = "Bottom Navigation Bars") + val navItemState = remember { mutableStateOf(NavType.HOME) } + BottomNavigation(backgroundColor = MaterialTheme.colors.surface) { + BottomNavigationItem( + icon = { Icon(Icons.Outlined.Home) }, + selected = navItemState.value == NavType.HOME, + onClick = { navItemState.value = NavType.HOME }, + label = { Text(text = Res.string.spotify_nav_home) }, + ) + BottomNavigationItem( + icon = { Icon(Icons.Outlined.Search) }, + selected = navItemState.value == NavType.SEARCH, + onClick = { navItemState.value = NavType.SEARCH }, + label = { Text(text = Res.string.spotify_nav_search) } + ) + BottomNavigationItem( + icon = { Icon(Icons.Outlined.LibraryMusic) }, + selected = navItemState.value == NavType.LIBRARY, + onClick = { navItemState.value = NavType.LIBRARY }, + label = { Text(text = Res.string.spotify_nav_library) } + ) + } + + Spacer(modifier = Modifier.height(16.dp)) + + BottomNavigation { + BottomNavigationItem( + icon = { Icon(Icons.Outlined.ReadMore) }, + selected = navItemState.value == NavType.HOME, + onClick = { navItemState.value = NavType.HOME }, + ) + BottomNavigationItem( + icon = { Icon(Icons.Outlined.Search) }, + selected = navItemState.value == NavType.SEARCH, + onClick = { navItemState.value = NavType.SEARCH }, + ) + BottomNavigationItem( + icon = { Icon(Icons.Outlined.CleanHands) }, + selected = navItemState.value == NavType.LIBRARY, + onClick = { navItemState.value = NavType.LIBRARY }, + ) + } +} + +private enum class NavType { + HOME, SEARCH, LIBRARY +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Buttons.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Buttons.kt new file mode 100644 index 0000000000..3c59a82108 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Buttons.kt @@ -0,0 +1,109 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.FavoriteBorder +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.graphics.HorizontalGradient +import androidx.compose.ui.graphics.VerticalGradient +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.theme.purple +import org.jetbrains.compose.demo.widgets.theme.purple200 +import org.jetbrains.compose.demo.widgets.theme.typography + +@Composable +fun Buttons() { + Column { + Button(onClick = {}, modifier = Modifier.padding(8.dp)) { + Text(text = "Main Button") + } + TextButton(onClick = {}, modifier = Modifier.padding(8.dp)) { + Text(text = "Text Button") + } + TextButton(onClick = {}, modifier = Modifier.padding(8.dp), enabled = false) { + Text(text = "Text Disabled") + } + Button(onClick = {}, modifier = Modifier.padding(8.dp), enabled = false) { + Text(text = "Disabled") + } + Button( + onClick = {}, + modifier = Modifier.padding(8.dp), + elevation = ButtonConstants.defaultElevation() + ) { + Text(text = "Flat") + } + Button( + onClick = {}, + modifier = Modifier.padding(8.dp), + shape = RoundedCornerShape(12.dp) + ) { + Text(text = "Rounded") + } + OutlinedButton(onClick = {}, modifier = Modifier.padding(8.dp)) { + Text(text = "Outline") + } + Button(onClick = {}, modifier = Modifier.padding(8.dp)) { + Row { + Icon(Icons.Default.FavoriteBorder, modifier = Modifier.padding(end = 4.dp)) + Text(text = "Icon Button") + } + } + Button(onClick = {}, modifier = Modifier.padding(8.dp)) { + Text(text = "Icon Button") + Icon(Icons.Default.FavoriteBorder, modifier = Modifier.padding(start = 4.dp)) + } + //custom background buttons + val outlineButtonColor = ButtonConstants.defaultOutlinedButtonColors( + contentColor = purple200, + ) + val mainButtonColor = ButtonConstants.defaultButtonColors( + backgroundColor = purple, + contentColor = MaterialTheme.colors.surface + ) + OutlinedButton( + colors = outlineButtonColor, + onClick = {}, + modifier = Modifier.padding(8.dp) + ) { + Text(text = "Outline colors") + } + Button(colors = mainButtonColor, onClick = {}, modifier = Modifier.padding(8.dp)) { + Text(text = "Custom colors") + } + + val horizontalGradient = HorizontalGradient( + colors = listOf(MaterialTheme.colors.primary, MaterialTheme.colors.primaryVariant), + 0f, + 250f + ) + val verticalGradient = VerticalGradient( + colors = listOf(MaterialTheme.colors.primary, MaterialTheme.colors.primaryVariant), + startY = 0f, + endY = 100f + ) + Text( + text = "Horizontal gradient", + style = typography.body2.copy(color = Color.White), + modifier = Modifier.padding(12.dp).clickable(onClick = {}) + .clip(RoundedCornerShape(4.dp)) + .background(brush = horizontalGradient).padding(12.dp) + ) + Text( + text = "Vertical gradient", + style = typography.body1.copy(color = Color.White), + modifier = Modifier.padding(12.dp).clickable(onClick = {}) + .clip(RoundedCornerShape(4.dp)) + .background(brush = verticalGradient).padding(12.dp) + ) + } +} diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Chips.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Chips.kt new file mode 100644 index 0000000000..98166ab23e --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Chips.kt @@ -0,0 +1,131 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Surface +import androidx.compose.material.Text +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.text.style.TextAlign +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.platform.Res +import org.jetbrains.compose.demo.widgets.theme.typography +import org.jetbrains.compose.demo.widgets.ui.utils.SubtitleText +import org.jetbrains.compose.demo.widgets.platform.imageResource + +@Composable +fun Chips() { + // There is no in-built chips but you can make yours like below + SubtitleText(subtitle = "Custom chips with surface") + Column(modifier = Modifier.padding(8.dp)) { + YoutubeChip(selected = true, text = "Chip", modifier = Modifier.padding(horizontal = 8.dp)) + Spacer(modifier = Modifier.padding(8.dp)) + YoutubeChip( + selected = false, + text = "Inactive", + modifier = Modifier.padding(horizontal = 8.dp) + ) + Spacer(modifier = Modifier.padding(8.dp)) + CustomImageChip(text = "custom", imageId = Res.drawable.p2, selected = true) + Spacer(modifier = Modifier.padding(8.dp)) + CustomImageChip(text = "custom2", imageId = Res.drawable.p6, selected = false) + } + SubtitleText(subtitle = "Buttons with circle clipping.") + Column(modifier = Modifier.padding(8.dp)) { + Button( + onClick = {}, + modifier = Modifier.padding(8.dp).clip(CircleShape) + ) { + Text(text = "Chip button") + } + Button( + onClick = {}, + enabled = false, + modifier = Modifier.padding(8.dp).clip(CircleShape) + ) { + Text(text = "Disabled chip") + } + } +} + + +//Inspired from jetcaster sample. I hope compose can add simple Chip UI element that can +// support images or icons with multiple states. +@Composable +private fun CustomImageChip( + text: String, + imageId: String, + selected: Boolean, + modifier: Modifier = Modifier +) { + Surface( + color = when { + selected -> MaterialTheme.colors.primary + else -> Color.Transparent + }, + contentColor = when { + selected -> MaterialTheme.colors.onPrimary + else -> Color.LightGray + }, + shape = RoundedCornerShape(16.dp), + border = BorderStroke( + width = 1.dp, + color = when { + selected -> MaterialTheme.colors.primary + else -> Color.LightGray + } + ), + modifier = modifier + ) { + Row(modifier = Modifier) { + Image( + imageResource(imageId), + modifier = Modifier.padding(8.dp).preferredSize(20.dp).clip(CircleShape) + ) + Text( + text = text, + style = MaterialTheme.typography.body2, + modifier = Modifier.padding(end = 8.dp, top = 8.dp, bottom = 8.dp) + ) + } + } +} + +@Composable +private fun YoutubeChip(selected: Boolean, text: String, modifier: Modifier = Modifier) { + Surface( + color = when { + selected -> MaterialTheme.colors.onSurface + else -> Color.Transparent + }, + contentColor = when { + selected -> MaterialTheme.colors.onPrimary + else -> Color.LightGray + }, + shape = CircleShape, + border = BorderStroke( + width = 1.dp, + color = when { + selected -> MaterialTheme.colors.primary + else -> Color.LightGray + } + ), + modifier = modifier + ) { + Text( + text = text, + textAlign = TextAlign.Center, + style = MaterialTheme.typography.body2, + modifier = Modifier.padding(8.dp) + ) + + } +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Loaders.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Loaders.kt new file mode 100644 index 0000000000..df19865d62 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Loaders.kt @@ -0,0 +1,41 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.CircularProgressIndicator +import androidx.compose.material.LinearProgressIndicator +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun Loaders() { + AlignedColumn { + CircularProgressIndicator() + } + + AlignedColumn { + CircularProgressIndicator(strokeWidth = 8.dp) + } + + AlignedColumn { + LinearProgressIndicator() + } + + AlignedColumn { + LinearProgressIndicator() + Text(text = "Loading with text...", modifier = Modifier.padding(8.dp)) + } +} +@Composable +private fun AlignedColumn(content: @Composable () -> Unit) { + Column( + modifier = Modifier.fillMaxWidth().padding(16.dp) + ) { + content() + } +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/SnackBars.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/SnackBars.kt new file mode 100644 index 0000000000..78946984a7 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/SnackBars.kt @@ -0,0 +1,38 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Snackbar +import androidx.compose.material.Text +import androidx.compose.material.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.theme.typography + +@Composable +fun SnackBars() { + Snackbar(modifier = Modifier.padding(4.dp)) { + Text(text = "This is a basic snackbar") + } + Snackbar( + modifier = Modifier.padding(4.dp), + action = { + TextButton(onClick = {}) { + Text(text = "Remove") + } + } + ) { + Text(text = "This is a basic Snackbar with action item") + } + Snackbar( + modifier = Modifier.padding(4.dp), + actionOnNewLine = true, + action = { + TextButton(onClick = {}) { + Text(text = "Remove") + } + } + ) { + Text(text = "Snackbar with action item below text") + } +} diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/TextInputs.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/TextInputs.kt new file mode 100644 index 0000000000..6995a64257 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/TextInputs.kt @@ -0,0 +1,87 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.Icon +import androidx.compose.material.OutlinedTextField +import androidx.compose.material.Text +import androidx.compose.material.TextField +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Edit +import androidx.compose.material.icons.filled.Email +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.TextFieldValue +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.theme.typography + +@Composable +fun TextInputs() { + var text by remember { mutableStateOf(TextFieldValue("")) } + + // TODO Explore CoreTextField +// CoreTextField( +// value = text, +// onValueChange = { newValue -> text = newValue }, +// modifier = Modifier.padding(8.dp).preferredSize(0.dp), +// cursorColor = Color.Magenta +// ) + TextField( + value = text, + onValueChange = { newValue -> text = newValue }, + modifier = Modifier.padding(8.dp).fillMaxWidth(), + label = { Text("label") }, + placeholder = { Text("placeholder") } + ) + + OutlinedTextField( + value = text, + modifier = Modifier.padding(8.dp).fillMaxWidth(), + label = { Text(text = "Password") }, + placeholder = { Text(text = "12334444") }, + visualTransformation = PasswordVisualTransformation(), + onValueChange = { + text = it + }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password) + ) + + OutlinedTextField( + value = text, + leadingIcon = { Icon(Icons.Default.Email) }, + modifier = Modifier.padding(8.dp).fillMaxWidth(), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text), + label = { Text(text = "Email address") }, + placeholder = { Text(text = "Your email") }, + onValueChange = { + text = it + } + ) + OutlinedTextField( + value = text, + leadingIcon = { Icon(Icons.Default.Email) }, + trailingIcon = { Icon(Icons.Default.Edit) }, + modifier = Modifier.padding(8.dp).fillMaxWidth(), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text), + label = { Text(text = "Email address") }, + placeholder = { Text(text = "Your email") }, + onValueChange = { + text = it + } + ) + + var numberText by remember { mutableStateOf(TextFieldValue("")) } + OutlinedTextField(value = numberText, + modifier = Modifier.padding(8.dp).fillMaxWidth(), + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + label = { Text(text = "Phone number") }, + placeholder = { Text(text = "88888888") }, + onValueChange = { + numberText = it + } + ) +} diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Texts.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Texts.kt new file mode 100644 index 0000000000..c14f8f9545 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Texts.kt @@ -0,0 +1,97 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.theme.typography +import org.jetbrains.compose.demo.widgets.ui.utils.SubtitleText + +@Composable +fun TextViews() { + Column { + val textModifier = Modifier.padding(horizontal = 8.dp) + + SubtitleText(subtitle = "Font weights") + Text(text = "Plain", modifier = textModifier) + Text( + text = "Medium Bold", + style = typography.body1.copy(fontWeight = FontWeight.Medium), + modifier = textModifier + ) + Text( + text = "Bold", + style = typography.body1.copy(fontWeight = FontWeight.Bold), + modifier = textModifier + ) + Text( + text = "Extra Bold", + style = typography.body1.copy(fontWeight = FontWeight.Bold), + modifier = textModifier + ) + + SubtitleText(subtitle = "Text decorations") + Text(text = "Default", modifier = textModifier) + Text( + text = "Underline", + textDecoration = TextDecoration.Underline, + modifier = textModifier + ) + Text( + text = "LineThrough", + textDecoration = TextDecoration.LineThrough, + modifier = textModifier + ) + Text( + text = "UnderlineLineThrough", + textDecoration = TextDecoration.combine( + listOf( + TextDecoration.Underline, + TextDecoration.LineThrough + ) + ), + modifier = textModifier + ) + + SubtitleText(subtitle = "Overflow") + Text( + text = "Ellipsis: This text is supposed to ellipsis with max 1 line allowed for this", + overflow = TextOverflow.Ellipsis, + modifier = textModifier, + maxLines = 1 + ) + Text( + text = "Clip: This text is supposed to clip with max 1 line allowed for this", + overflow = TextOverflow.Clip, + modifier = textModifier, + maxLines = 1 + ) + } + + /* TODO: https://github.com/JetBrains/compose-jb/issues/106 + SubtitleText(subtitle = "font family dynamic") + Row { + Text(text = "Default", modifier = textModifier) + Text( + text = "Cursive", + style = typography.body1.copy(fontFamily = FontFamily.Cursive), + modifier = textModifier + ) + Text( + text = "SansSerif", + style = typography.body1.copy(fontFamily = FontFamily.SansSerif), + modifier = textModifier + ) + Text( + text = "Monospace", + style = typography.body1.copy(fontFamily = FontFamily.Monospace), + modifier = textModifier + ) + } */ +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Toggles.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Toggles.kt new file mode 100644 index 0000000000..3fe981de23 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/Toggles.kt @@ -0,0 +1,83 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.theme.typography + +@Composable +fun Toggles() { + Column { + var checked by remember { mutableStateOf(true) } + Checkbox( + checked = checked, + modifier = Modifier.padding(8.dp), + onCheckedChange = { checked = !checked } + ) + + var switched by remember { mutableStateOf(true) } + Switch( + checked = switched, + colors = SwitchConstants.defaultColors(checkedThumbColor = MaterialTheme.colors.primary), + modifier = Modifier.padding(8.dp), + onCheckedChange = { switched = it } + ) + + AlignedColumn { + var selected by remember { mutableStateOf("Kotlin") } + + Row { + RadioButton(selected = selected == "Kotlin", onClick = { selected = "Kotlin" }) + Text( + text = "Kotlin", + modifier = Modifier.clickable(onClick = { selected = "Kotlin" }).padding(start = 4.dp) + ) + } + //Spacer(modifier = Modifier.size(4.dp)) + Row { + RadioButton(selected = selected == "Java", onClick = { selected = "Java" }) + Text( + text = "Java", + modifier = Modifier.clickable(onClick = { selected = "Java" }).padding(start = 4.dp) + ) + } + //Spacer(modifier = Modifier.size(4.dp)) + Row { + RadioButton(selected = selected == "Swift", onClick = { selected = "Swift" }) + Text( + text = "Swift", + modifier = Modifier.clickable(onClick = { selected = "Swift" }).padding(start = 4.dp) + ) + } + } + + var sliderState by remember { mutableStateOf(0f) } + Slider(value = sliderState, modifier = Modifier.fillMaxWidth().padding(8.dp), + onValueChange = { newValue -> + sliderState = newValue + } + ) + + var sliderState2 by remember { mutableStateOf(20f) } + Slider(value = sliderState2, modifier = Modifier.fillMaxWidth().padding(8.dp), + valueRange = 0f..100f, + steps = 5, + thumbColor = MaterialTheme.colors.secondary, + onValueChange = { newValue -> + sliderState2 = newValue + } + ) + } +} + +@Composable +private fun AlignedColumn(content: @Composable () -> Unit) { + Column( + modifier = Modifier.fillMaxWidth().padding(16.dp) + ) { + content() + } +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/UICards.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/UICards.kt new file mode 100644 index 0000000000..bf11733fff --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/screens/UICards.kt @@ -0,0 +1,100 @@ +package org.jetbrains.compose.demo.widgets.ui.screens + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ShoppingCart +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.data.DemoDataProvider +import org.jetbrains.compose.demo.widgets.platform.Res +import org.jetbrains.compose.demo.widgets.platform.imageResource +import org.jetbrains.compose.demo.widgets.theme.typography + +@Composable +fun UICards() { + val item = remember { DemoDataProvider.item } + + Text( + text = "Inbuilt box as container for any Clipping/Alignment controls", + style = typography.subtitle1, + modifier = Modifier.padding(8.dp) + ) + Card( + modifier = Modifier.padding(8.dp).fillMaxWidth(), + backgroundColor = MaterialTheme.colors.primary, + shape = RoundedCornerShape(topLeft = 16.dp, bottomRight = 16.dp) + ) { + Column { + Text( + text = item.title, + modifier = Modifier.padding(8.dp), + color = MaterialTheme.colors.onPrimary + ) + Text( + text = item.subtitle, + modifier = Modifier.padding(8.dp), + color = MaterialTheme.colors.onPrimary + ) + } + } + Divider() + + Text(text = "Inbuilt Card", style = typography.subtitle1, modifier = Modifier.padding(8.dp)) + Card( + modifier = Modifier.padding(16.dp).fillMaxWidth(), + shape = RoundedCornerShape(4.dp), + elevation = 4.dp + ) { + Row { + Image( + imageResource(Res.drawable.p3), + modifier = Modifier.preferredSize(60.dp) + ) + Text(text = item.title, modifier = Modifier.padding(16.dp)) + } + } + Divider() + + Text( + text = "In-built ListItems", + style = typography.subtitle1, + modifier = Modifier.padding(8.dp) + ) + ListItem(text = { Text(item.title) }, secondaryText = { Text(item.subtitle) }) + Divider(modifier = Modifier.padding(4.dp)) + ListItem( + text = { Text(item.title) }, + secondaryText = { Text(item.subtitle) }, + singleLineSecondaryText = false + ) + Divider(modifier = Modifier.padding(4.dp)) + ListItem(text = { Text(item.title) }, secondaryText = { Text(item.subtitle) }, icon = { + Image( + imageResource(Res.drawable.p3) + ) + }) + Divider(modifier = Modifier.padding(4.dp)) + //I am not sure why this is not going multiline for secondaryText... + ListItem( + text = { Text(item.title) }, + secondaryText = { Text(item.subtitle) }, + icon = { Image(imageResource(Res.drawable.p1)) }, + overlineText = { Text("Overline text") }, + singleLineSecondaryText = false + ) + Divider() + ListItem( + text = { Text(item.title) }, + secondaryText = { Text(item.subtitle) }, + icon = { Image(imageResource(Res.drawable.p2)) }, + trailing = { Icon(Icons.Default.ShoppingCart) }, + singleLineSecondaryText = false + ) + Divider() + +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/LayoutModifiers.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/LayoutModifiers.kt new file mode 100644 index 0000000000..228604e27d --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/LayoutModifiers.kt @@ -0,0 +1,11 @@ +package org.jetbrains.compose.demo.widgets.ui.utils + +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.layout + +fun Modifier.withoutWidthConstraints() = layout { measurable, constraints -> + val placeable = measurable.measure(constraints.copy(maxWidth = Int.MAX_VALUE)) + layout(constraints.maxWidth, placeable.height) { + placeable.place(0, 0) + } +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/ResizablePanel.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/ResizablePanel.kt new file mode 100644 index 0000000000..42818d8e38 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/ResizablePanel.kt @@ -0,0 +1,80 @@ +package org.jetbrains.compose.demo.widgets.ui.utils + +import androidx.compose.animation.animate +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.SpringSpec +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.material.AmbientContentColor +import androidx.compose.material.Icon +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material.icons.filled.ArrowForward +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +class PanelState { + val collapsedSize = 24.dp + var expandedSize by mutableStateOf(110.dp) + val expandedSizeMin = 90.dp + var isExpanded by mutableStateOf(true) + val splitter = SplitterState() +} + +@Composable +fun ResizablePanel( + modifier: Modifier, + state: PanelState, + title: String, + content: @Composable () -> Unit, +) { + val alpha = animate(if (state.isExpanded) 1f else 0f, SpringSpec(stiffness = Spring.StiffnessLow),) + + Box(modifier) { + Column { + Row(Modifier + .height(32.dp) + .padding(6.dp) + .clickable { state.isExpanded = !state.isExpanded } + ) { + Text( + text = if (state.isExpanded) title else "", + modifier = Modifier.fillMaxWidth().clipToBounds(), + fontSize = 14.sp + ) + + Icon( + if (state.isExpanded) Icons.Default.ArrowBack else Icons.Default.ArrowForward, + tint = AmbientContentColor.current, + modifier = Modifier + .size(24.dp) + .padding(end = 8.dp) + .padding(bottom = 4.dp) + ) + } + + if (state.isExpanded) { + Box( + Modifier + .fillMaxWidth() + .height(1.dp) + .background(Color.Gray) + ) + + Column(Modifier.fillMaxSize().padding(top = 4.dp).graphicsLayer(alpha = alpha)) { + content() + } + } + } + } +} diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/Text.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/Text.kt new file mode 100644 index 0000000000..81254ab169 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/Text.kt @@ -0,0 +1,23 @@ +package org.jetbrains.compose.demo.widgets.ui.utils + +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import org.jetbrains.compose.demo.widgets.theme.typography + +@Composable +fun SubtitleText(subtitle: String, modifier: Modifier = Modifier) { + Text(text = subtitle, style = typography.subtitle2, modifier = modifier.padding(8.dp)) +} + +@Composable +fun TitleText(title: String, modifier: Modifier = Modifier) { + Text( + text = title, + style = typography.h6.copy(fontSize = 14.sp), + modifier = Modifier.padding(8.dp) + ) +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/VerticalSplittable.kt b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/VerticalSplittable.kt new file mode 100644 index 0000000000..90a97e4ec7 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/kotlin/org/jetbrains/compose/demo/widgets/ui/utils/VerticalSplittable.kt @@ -0,0 +1,90 @@ +package org.jetbrains.compose.demo.widgets.ui.utils + +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.draggable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.gesture.scrollorientationlocking.Orientation +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.Layout +import androidx.compose.ui.unit.Constraints +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import org.jetbrains.compose.demo.widgets.platform.cursorForHorizontalResize + +class SplitterState { + var isResizing by mutableStateOf(false) + var isResizeEnabled by mutableStateOf(true) +} + +@Composable +fun VerticalSplittable( + modifier: Modifier, + splitterState: SplitterState, + onResize: (delta: Dp) -> Unit, + children: @Composable () -> Unit +) = Layout({ + children() + VerticalSplitter(splitterState, onResize) +}, modifier, measureBlock = { measurables, constraints -> + require(measurables.size == 3) + + val firstPlaceable = measurables[0].measure(constraints.copy(minWidth = 0)) + val secondWidth = constraints.maxWidth - firstPlaceable.width + val secondPlaceable = measurables[1].measure( + Constraints( + minWidth = secondWidth, + maxWidth = secondWidth, + minHeight = constraints.maxHeight, + maxHeight = constraints.maxHeight + ) + ) + val splitterPlaceable = measurables[2].measure(constraints) + layout(constraints.maxWidth, constraints.maxHeight) { + firstPlaceable.place(0, 0) + secondPlaceable.place(firstPlaceable.width, 0) + splitterPlaceable.place(firstPlaceable.width, 0) + } +}) + + + +@Composable +fun VerticalSplitter( + splitterState: SplitterState, + onResize: (delta: Dp) -> Unit, + color: Color = Color.DarkGray +) = Box { + Box( + Modifier + .width(8.dp) + .fillMaxHeight() + .run { + if (splitterState.isResizeEnabled) { + this.draggable( + Orientation.Horizontal, + startDragImmediately = true, + onDragStarted = { splitterState.isResizing = true }, + onDragStopped = { splitterState.isResizing = false } + ) { + onResize(it.toDp()) + }.cursorForHorizontalResize() + } else { + this + } + } + ) + + Box( + Modifier + .width(1.dp) + .fillMaxHeight() + .background(color) + ) +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/food6.jpg b/examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/food6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fdf68f5e197a34f73c3195a8c1fecee872a8ece GIT binary patch literal 78395 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

s^KwlusIFDSMZBqVgqF)=ldmUa1{)W$L%f9 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 SY9q*UT&mHEcFUOIiT~Nsyr{qc literal 0 HcmV?d00001 diff --git a/examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p1.jpeg b/examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..51e7bf4c7ca6a1dfd8ac82b7a41e71f662a4a251 GIT binary patch literal 7182 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 literal 0 HcmV?d00001 diff --git a/examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p2.jpeg b/examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6ac860ec0ca0c5d3b05f3d3a3f6b150926ac8a5f GIT binary patch literal 5033 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 literal 0 HcmV?d00001 diff --git a/examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p3.jpeg b/examples/widgetsgallery/common/src/commonMain/resources/drawable-nodpi/p3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..24e4a48089265045eebb557df87c0aff200ad52f GIT binary patch literal 5714 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 literal 0 HcmV?d00001 diff --git a/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_instagram.xml b/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_instagram.xml new file mode 100644 index 0000000000..abd196bb92 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_instagram.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_send.xml b/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_send.xml new file mode 100644 index 0000000000..6ec2e846e1 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_send.xml @@ -0,0 +1,9 @@ + + + diff --git a/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_twitter.xml b/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_twitter.xml new file mode 100644 index 0000000000..ed54306c20 --- /dev/null +++ b/examples/widgetsgallery/common/src/commonMain/resources/drawable/ic_twitter.xml @@ -0,0 +1,9 @@ + + + diff --git a/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt b/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt new file mode 100644 index 0000000000..21f9b94dbd --- /dev/null +++ b/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Mouse.kt @@ -0,0 +1,33 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.desktop.AppWindowAmbient +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.pointer.pointerMoveFilter +import java.awt.Cursor + +actual fun Modifier.pointerMoveFilter( + onEnter: () -> Boolean, + onExit: () -> Boolean, + onMove: (Offset) -> Boolean +): Modifier = this.pointerMoveFilter(onEnter = onEnter, onExit = onExit, onMove = onMove) + +actual fun Modifier.cursorForHorizontalResize(): Modifier = composed { + var isHover by remember { mutableStateOf(false) } + + if (isHover) { + AppWindowAmbient.current!!.window.cursor = Cursor(Cursor.E_RESIZE_CURSOR) + } else { + AppWindowAmbient.current!!.window.cursor = Cursor.getDefaultCursor() + } + + pointerMoveFilter( + onEnter = { isHover = true; true }, + onExit = { isHover = false; true } + ) +} \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt b/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt new file mode 100644 index 0000000000..7f1c30a862 --- /dev/null +++ b/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Resources.kt @@ -0,0 +1,14 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.vectorXmlResource +import androidx.compose.ui.res.imageResource as bitmapImage + +@Composable +actual fun imageResource(res: String) = + bitmapImage(res) + +@Composable +actual fun vectorResource(res: String): ImageVector = + vectorXmlResource(res) \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt b/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt new file mode 100644 index 0000000000..6801a2ead9 --- /dev/null +++ b/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/Scrollbar.kt @@ -0,0 +1,30 @@ +package org.jetbrains.compose.demo.widgets.platform + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.rememberScrollbarAdapter +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.Dp + +@Composable +actual fun VerticalScrollbar( + modifier: Modifier, + scrollState: ScrollState +) = androidx.compose.foundation.VerticalScrollbar( + rememberScrollbarAdapter(scrollState), + modifier +) + +@OptIn(ExperimentalFoundationApi::class) +@Composable +actual fun VerticalScrollbar( + modifier: Modifier, + scrollState: LazyListState, + itemCount: Int, + averageItemSize: Dp +) = androidx.compose.foundation.VerticalScrollbar( + rememberScrollbarAdapter(scrollState, itemCount, averageItemSize), + modifier +) \ No newline at end of file diff --git a/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt b/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt new file mode 100644 index 0000000000..1e8abcd7af --- /dev/null +++ b/examples/widgetsgallery/common/src/desktopMain/kotlin/org/jetbrains/compose/demo/widgets/platform/System.kt @@ -0,0 +1,4 @@ +package org.jetbrains.compose.demo.widgets.platform + +// TODO: https://github.com/JetBrains/compose-jb/issues/169 +actual fun isSystemInDarkTheme(): Boolean = false \ No newline at end of file diff --git a/examples/widgetsgallery/desktop/build.gradle.kts b/examples/widgetsgallery/desktop/build.gradle.kts new file mode 100644 index 0000000000..0f2b000565 --- /dev/null +++ b/examples/widgetsgallery/desktop/build.gradle.kts @@ -0,0 +1,39 @@ +import org.jetbrains.compose.compose +import org.jetbrains.compose.desktop.application.dsl.TargetFormat + +plugins { + kotlin("multiplatform") // kotlin("jvm") doesn't work well in IDEA/AndroidStudio (https://github.com/JetBrains/compose-jb/issues/22) + id("org.jetbrains.compose") +} + +kotlin { + jvm { + withJava() + } + + sourceSets { + named("jvmMain") { + dependencies { + implementation(compose.desktop.currentOs) + implementation(project(":common")) + } + } + } +} + +compose.desktop { + application { + mainClass = "org.jetbrains.compose.demo.widgets.MainKt" + + nativeDistributions { + targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) + packageName = "ComposeWidgetsGallery" + + windows { + menu = true + // see https://wixtoolset.org/documentation/manual/v3/howtos/general/generate_guids.html + upgradeUuid = "a61b72be-1b0c-4de5-9607-791c17687428" + } + } + } +} diff --git a/examples/widgetsgallery/desktop/src/jvmMain/kotlin/org/jetbrains/compose/demo/widgets/main.kt b/examples/widgetsgallery/desktop/src/jvmMain/kotlin/org/jetbrains/compose/demo/widgets/main.kt new file mode 100644 index 0000000000..9c382b78be --- /dev/null +++ b/examples/widgetsgallery/desktop/src/jvmMain/kotlin/org/jetbrains/compose/demo/widgets/main.kt @@ -0,0 +1,30 @@ +package org.jetbrains.compose.demo.widgets + +import androidx.compose.desktop.Window +import androidx.compose.foundation.layout.ExperimentalLayout +import androidx.compose.ui.unit.IntSize +import org.jetbrains.compose.demo.widgets.ui.MainView +import java.awt.Dimension +import java.awt.Toolkit +import javax.swing.SwingUtilities.invokeLater + +@OptIn(ExperimentalLayout::class) +fun main() { + invokeLater { + Window( + title = "Widgets Gallery", + size = getPreferredWindowSize(600, 800), + ) { + MainView() + } + } +} + +private fun getPreferredWindowSize(desiredWidth: Int, desiredHeight: Int): IntSize { + val screenSize: Dimension = Toolkit.getDefaultToolkit().screenSize + val preferredWidth: Int = (screenSize.width * 0.8f).toInt() + val preferredHeight: Int = (screenSize.height * 0.8f).toInt() + val width: Int = if (desiredWidth < preferredWidth) desiredWidth else preferredWidth + val height: Int = if (desiredHeight < preferredHeight) desiredHeight else preferredHeight + return IntSize(width, height) +} diff --git a/examples/widgetsgallery/gradle.properties b/examples/widgetsgallery/gradle.properties new file mode 100644 index 0000000000..4d15d015f8 --- /dev/null +++ b/examples/widgetsgallery/gradle.properties @@ -0,0 +1,21 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m +# 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 +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official \ No newline at end of file diff --git a/examples/widgetsgallery/gradle/wrapper/gradle-wrapper.jar b/examples/widgetsgallery/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..62d4c053550b91381bbd28b1afc82d634bf73a8a GIT binary patch literal 58910 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 literal 0 HcmV?d00001 diff --git a/examples/widgetsgallery/gradle/wrapper/gradle-wrapper.properties b/examples/widgetsgallery/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..ac33e9944a --- /dev/null +++ b/examples/widgetsgallery/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/examples/widgetsgallery/gradlew b/examples/widgetsgallery/gradlew new file mode 100755 index 0000000000..2fe81a7d95 --- /dev/null +++ b/examples/widgetsgallery/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# 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 +# +# https://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. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/examples/widgetsgallery/gradlew.bat b/examples/widgetsgallery/gradlew.bat new file mode 100644 index 0000000000..9618d8d960 --- /dev/null +++ b/examples/widgetsgallery/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/examples/widgetsgallery/settings.gradle.kts b/examples/widgetsgallery/settings.gradle.kts new file mode 100644 index 0000000000..9a0d554e9b --- /dev/null +++ b/examples/widgetsgallery/settings.gradle.kts @@ -0,0 +1 @@ +include(":common", ":android", ":desktop") diff --git a/examples/widgetsgallery/third_party/ComposeCookBook_LICENSE.txt b/examples/widgetsgallery/third_party/ComposeCookBook_LICENSE.txt new file mode 100644 index 0000000000..928f38ee9d --- /dev/null +++ b/examples/widgetsgallery/third_party/ComposeCookBook_LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Gurupreet Singh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file