Vico temperature anomalies

Preview unavailable

Your component is published, but its preview could not be generated.

…
W1lbWJlckF4aXNHdWlkZWxpbmVDb21wb25lbnQKaW1wb3J0IGNvbS5wYXRyeWthbmRwYXRyaWNrLnZpY28uY29tcG9zZS5jYXJ0ZXNpYW4ubWFya2VyLkNhcnRlc2lhbk1hcmtlcgppbXBvcnQgY29tLnBhdHJ5a2FuZHBhdHJpY2sudmljby5jb21wb3NlLmNhcnRlc2lhbi5tYXJrZXIucmVtZW1iZXJEZWZhdWx0Q2FydGVzaWFuTWFya2VyCmltcG9ydCBjb20ucGF0cnlrYW5kcGF0cmljay52aWNvLmNvbXBvc2UuY29tbW9uLkluc2V0cwppbXBvcnQgY29tLnBhdHJ5a2FuZHBhdHJpY2sudmljby5jb21wb3NlLmNvbW1vbi5MYXllcmVkQ29tcG9uZW50CmltcG9ydCBjb20ucGF0cnlrYW5kcGF0cmljay52aWNvLmNvbXBvc2UuY29tbW9uLk1hcmtlckNvcm5lckJhc2VkU2hhcGUKaW1wb3J0IGNvbS5wYXRyeWthbmRwYXRyaWNrLnZpY28uY29tcG9zZS5jb21tb24uY29tcG9uZW50LlNoYXBlQ29tcG9uZW50CmltcG9ydCBjb20ucGF0cnlrYW5kcGF0cmljay52aWNvLmNvbXBvc2UuY29tbW9uLmNvbXBvbmVudC5UZXh0Q29tcG9uZW50CmltcG9ydCBjb20ucGF0cnlrYW5kcGF0cmljay52aWNvLmNvbXBvc2UuY29tbW9uLmNvbXBvbmVudC5yZW1lbWJlclNoYXBlQ29tcG9uZW50CmltcG9ydCBjb20ucGF0cnlrYW5kcGF0cmljay52aWNvLmNvbXBvc2UuY29tbW9uLmNvbXBvbmVudC5yZW1lbWJlclRleHRDb21wb25lbnQKCi8qCiAqIENvcHlyaWdodCAyMDI2IGJ5IFBhdHJ5ayBHb3dvcm93c2tpIGFuZCBQYXRyaWNrIE1pY2hhbGlrLgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KCgoKcHJpdmF0ZSBjb25zdCB2YWwgUkFOR0VfUFJPVklERVJfQkFTRSA9IDAuMQoKcHJpdmF0ZSB2YWwgUmFuZ2VQcm92aWRlciA9CiAgb2JqZWN0IDogQ2FydGVzaWFuTGF5ZXJSYW5nZVByb3ZpZGVyIHsKICAgIG92ZXJyaWRlIGZ1biBnZXRNaW5ZKG1pblk6IERvdWJsZSwgbWF4WTogRG91YmxlLCBleHRyYVN0b3JlOiBFeHRyYVN0b3JlKSA9CiAgICAgIC1SQU5HRV9QUk9WSURFUl9CQVNFICogY2VpbChtYXgoYWJzKG1pblkpLCBtYXhZKSAvIFJBTkdFX1BST1ZJREVSX0JBU0UpCgogICAgb3ZlcnJpZGUgZnVuIGdldE1heFkobWluWTogRG91YmxlLCBtYXhZOiBEb3VibGUsIGV4dHJhU3RvcmU6IEV4dHJhU3RvcmUpID0KICAgICAgLWdldE1pblkobWluWSwgbWF4WSwgZXh0cmFTdG9yZSkKICB9Cgpwcml2YXRlIHZhbCBTdGFydEF4aXNWYWx1ZUZvcm1hdHRlciA9IENhcnRlc2lhblZhbHVlRm9ybWF0dGVyLmRlY2ltYWwoc3VmZml4ID0gIiDCsEMiKQoKcHJpdmF0ZSB2YWwgTWFya2VyVmFsdWVGb3JtYXR0ZXIgPSBEZWZhdWx0Q2FydGVzaWFuTWFya2VyLlZhbHVlRm9ybWF0dGVyLmRlZmF1bHQoc3VmZml4ID0gIiDCsEMiKQoKcHJpdmF0ZSBmdW4gZ2V0Q29sdW1uUHJvdmlkZXIocG9zaXRpdmU6IExpbmVDb21wb25lbnQsIG5lZ2F0aXZlOiBMaW5lQ29tcG9uZW50KSA9CiAgb2JqZWN0IDogQ29sdW1uQ2FydGVzaWFuTGF5ZXIuQ29sdW1uUHJvdmlkZXIgewogICAgb3ZlcnJpZGUgZnVuIGdldENvbHVtbihlbnRyeTogQ29sdW1uQ2FydGVzaWFuTGF5ZXJNb2RlbC5FbnRyeSwgZXh0cmFTdG9yZTogRXh0cmFTdG9yZSkgPQogICAgICBpZiAoZW50cnkueSA+PSAwKSBwb3NpdGl2ZSBlbHNlIG5lZ2F0aXZlCgogICAgb3ZlcnJpZGUgZnVuIGdldFdpZGVzdFNlcmllc0NvbHVtbihzZXJpZXNLZXk6IEFueSwgc2VyaWVzSW5kZXg6IEludCwgZXh0cmFTdG9yZTogRXh0cmFTdG9yZSkgPQogICAgICBwb3NpdGl2ZQogIH0KCkBDb21wb3NhYmxlCnByaXZhdGUgZnVuIENvbXBvc2VUZW1wZXJhdHVyZUFub21hbGllcygKICBtb2RlbFByb2R1Y2VyOiBDYXJ0ZXNpYW5DaGFydE1vZGVsUHJvZHVjZXIsCiAgbW9kaWZpZXI6IE1vZGlmaWVyID0gTW9kaWZpZXIsCikgewogIHZhbCBwb3NpdGl2ZUNvbHVtbiA9CiAgICByZW1lbWJlckxpbmVDb21wb25lbnQoCiAgICAgIGZpbGwgPSBGaWxsKENvbG9yKDB4ZmYwYWMyODUpKSwKICAgICAgdGhpY2tuZXNzID0gOC5kcCwKICAgICAgc2hhcGUgPSBSb3VuZGVkQ29ybmVyU2hhcGUodG9wU3RhcnRQZXJjZW50ID0gNDAsIHRvcEVuZFBlcmNlbnQgPSA0MCksCiAgICApCiAgdmFsIG5lZ2F0aXZlQ29sdW1uID0KICAgIHJlbWVtYmVyTGluZUNvbXBvbmVudCgKICAgICAgZmlsbCA9IEZpbGwoQ29sb3IoMHhmZmU4MzA0ZikpLAogICAgICB0aGlja25lc3MgPSA4LmRwLAogICAgICBzaGFwZSA9IFJvdW5kZWRDb3JuZXJTaGFwZShib3R0b21TdGFydFBlcmNlbnQgPSA0MCwgYm90dG9tRW5kUGVyY2VudCA9IDQwKSwKICAgICkKICBDYXJ0ZXNpYW5DaGFydEhvc3QoCiAgICBjaGFydCA9CiAgICAgIHJlbWVtYmVyQ2FydGVzaWFuQ2hhcnQoCiAgICAgICAgcmVtZW1iZXJDb2x1bW5DYXJ0ZXNpYW5MYXllcigKICAgICAgICAgIGNvbHVtblByb3ZpZGVyID0KICAgICAgICAgICAgcmVtZW1iZXIocG9zaXRpdmVDb2x1bW4sIG5lZ2F0aXZlQ29sdW1uKSB7CiAgICAgICAgICAgICAgZ2V0Q29sdW1uUHJvdmlkZXIocG9zaXRpdmVDb2x1bW4sIG5lZ2F0aXZlQ29sdW1uKQogICAgICAgICAgICB9LAogICAgICAgICAgY29sdW1uQ29sbGVjdGlvblNwYWNpbmcgPSA0LmRwLAogICAgICAgICAgcmFuZ2VQcm92aWRlciA9IFJhbmdlUHJvdmlkZXIsCiAgICAgICAgKSwKICAgICAgICBzdGFydEF4aXMgPSBWZXJ0aWNhbEF4aXMucmVtZW1iZXJTdGFydCh2YWx1ZUZvcm1hdHRlciA9IFN0YXJ0QXhpc1ZhbHVlRm9ybWF0dGVyKSwKICAgICAgICBib3R0b21BeGlzID0gSG9yaXpvbnRhbEF4aXMucmVtZW1iZXJCb3R0b20obGFiZWxSb3RhdGlvbkRlZ3JlZXMgPSA0NWYpLAogICAgICAgIG1hcmtlciA9IHJlbWVtYmVyTWFya2VyKE1hcmtlclZhbHVlRm9ybWF0dGVyKSwKICAgICAgKSwKICAgIG1vZGVsUHJvZHVjZXIgPSBtb2RlbFByb2R1Y2VyLAogICAgbW9kaWZpZXIgPSBtb2RpZmllciwKICAgIHNjcm9sbFN0YXRlID0gcmVtZW1iZXJWaWNvU2Nyb2xsU3RhdGUoaW5pdGlhbFNjcm9sbCA9IFNjcm9sbC5BYnNvbHV0ZS5FbmQpLAogICkKfQoKQENvbXBvc2FibGUKZnVuIENvbXBvc2VUZW1wZXJhdHVyZUFub21hbGllcyhtb2RpZmllcjogTW9kaWZpZXIgPSBNb2RpZmllcikgewogIHZhbCBtb2RlbFByb2R1Y2VyID0gcmVtZW1iZXIgeyBDYXJ0ZXNpYW5DaGFydE1vZGVsUHJvZHVjZXIoKSB9CiAgTGF1bmNoZWRFZmZlY3QoVW5pdCkgewogICAgbW9kZWxQcm9kdWNlci5ydW5UcmFuc2FjdGlvbiB7CiAgICAgIC8vIExlYXJuIG1vcmU6IGh0dHBzOi8vcGF0cnlrYW5kcGF0cmljay5jb20vM2FxeTRvLgogICAgICBjb2x1bW5Nb2RlbCB7IHNlcmllcyh4LCB5KSB9CiAgICB9CiAgfQogIENvbXBvc2VUZW1wZXJhdHVyZUFub21hbGllcyhtb2RlbFByb2R1Y2VyLCBtb2RpZmllcikKfQoKLyoKICogQ29weXJpZ2h0IDIwMjYgYnkgUGF0cnlrIEdvd29yb3dza2kgYW5kIFBhdHJpY2sgTWljaGFsaWsuCiAqCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgogKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwoKCgppbnRlcm5hbCB2YWwgTG9jYWxNYXJrZXJzRW5hYmxlZCA9IHN0YXRpY0NvbXBvc2l0aW9uTG9jYWxPZiB7IHRydWUgfQoKQENvbXBvc2FibGUKaW50ZXJuYWwgZnVuIHJlbWVtYmVyTWFya2VyKAogIHZhbHVlRm9ybWF0dGVyOiBEZWZhdWx0Q2FydGVzaWFuTWFya2VyLlZhbHVlRm9ybWF0dGVyID0KICAgIERlZmF1bHRDYXJ0ZXNpYW5NYXJrZXIuVmFsdWVGb3JtYXR0ZXIuZGVmYXVsdCgpLAogIHNob3dJbmRpY2F0b3I6IEJvb2xlYW4gPSB0cnVlLAopOiBDYXJ0ZXNpYW5NYXJrZXI/IHsKICBpZiAoIUxvY2FsTWFya2Vyc0VuYWJsZWQuY3VycmVudCkgcmV0dXJuIG51bGwKICB2YWwgbGFiZWxCYWNrZ3JvdW5kU2hhcGUgPSBNYXJrZXJDb3JuZXJCYXNlZFNoYXBlKENpcmNsZVNoYXBlKQogIHZhbCBsYWJlbEJhY2tncm91bmQgPQogICAgcmVtZW1iZXJTaGFwZUNvbXBvbmVudCgKICAgICAgZmlsbCA9IEZpbGwoTWF0ZXJpYWxUaGVtZS5jb2xvclNjaGVtZS5iYWNrZ3JvdW5kKSwKICAgICAgc2hhcGUgPSBsYWJlbEJhY2tncm91bmRTaGFwZSwKICAgICAgc3Ryb2tlRmlsbCA9IEZpbGwoTWF0ZXJpYWxUaGVtZS5jb2xvclNjaGVtZS5vdXRsaW5lKSwKICAgICAgc3Ryb2tlVGhpY2tuZXNzID0gMS5kcCwKICAgICkKICB2YWwgbGFiZWwgPQogICAgcmVtZW1iZXJUZXh0Q29tcG9uZW50KAogICAgICBzdHlsZSA9CiAgICAgICAgVGV4dFN0eWxlKAogICAgICAgICAgY29sb3IgPSBNYXRlcmlhbFRoZW1lLmNvbG9yU2NoZW1lLm9uU3VyZmFjZSwKICAgICAgICAgIHRleHRBbGlnbiA9IFRleHRBbGlnbi5DZW50ZXIsCiAgICAgICAgICBmb250U2l6ZSA9IDEyLnNwLAogICAgICAgICksCiAgICAgIHBhZGRpbmcgPSBJbnNldHMoOC5kcCwgNC5kcCksCiAgICAgIGJhY2tncm91bmQgPSBsYWJlbEJhY2tncm91bmQsCiAgICAgIG1pbldpZHRoID0gVGV4dENvbXBvbmVudC5NaW5XaWR0aC5maXhlZCg0MC5kcCksCiAgICApCiAgdmFsIGluZGljYXRvckZyb250Q29tcG9uZW50ID0KICAgIHJlbWVtYmVyU2hhcGVDb21wb25lbnQoRmlsbChNYXRlcmlhbFRoZW1lLmNvbG9yU2NoZW1lLnN1cmZhY2UpLCBDaXJjbGVTaGFwZSkKICB2YWwgZ3VpZGVsaW5lID0gcmVtZW1iZXJBeGlzR3VpZGVsaW5lQ29tcG9uZW50KCkKICByZXR1cm4gcmVtZW1iZXJEZWZhdWx0Q2FydGVzaWFuTWFya2VyKAogICAgbGFiZWwgPSBsYWJlbCwKICAgIHZhbHVlRm9ybWF0dGVyID0gdmFsdWVGb3JtYXR0ZXIsCiAgICBpbmRpY2F0b3IgPQogICAgICBpZiAoc2hvd0luZGljYXRvcikgewogICAgICAgIHsgY29sb3IgLT4KICAgICAgICAgIExheWVyZWRDb21wb25lbnQoCiAgICAgICAgICAgIGJhY2sgPSBTaGFwZUNvbXBvbmVudChGaWxsKGNvbG9yLmNvcHkoYWxwaGEgPSAwLjE1ZikpLCBDaXJjbGVTaGFwZSksCiAgICAgICAgICAgIGZyb250ID0KICAgICAgICAgICAgICBMYXllcmVkQ29tcG9uZW50KAogICAgICAgICAgICAgICAgYmFjayA9IFNoYXBlQ29tcG9uZW50KGZpbGwgPSBGaWxsKGNvbG9yKSwgc2hhcGUgPSBDaXJjbGVTaGFwZSksCiAgICAgICAgICAgICAgICBmcm9udCA9IGluZGljYXRvckZyb250Q29tcG9uZW50LAogICAgICAgICAgICAgICAgcGFkZGluZyA9IEluc2V0cyg1LmRwKSwKICAgICAgICAgICAgICApLAogICAgICAgICAgICBwYWRkaW5nID0gSW5zZXRzKDEwLmRwKSwKICAgICAgICAgICkKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbnVsbAogICAgICB9LAogICAgaW5kaWNhdG9yU2l6ZSA9IDM2LmRwLAogICAgZ3VpZGVsaW5lID0gZ3VpZGVsaW5lLAogICkKfQoKQFByZXZpZXcobmFtZSA9ICJWaWNvIHRlbXBlcmF0dXJlIGFub21hbGllcyIpCkBDb21wb3NhYmxlCmZ1biBDb21tdW5pdHlDb21wb3NlVGVtcGVyYXR1cmVBbm9tYWxpZXNQcmV2aWV3KCkgewogICAgQ29tcG9zZVRlbXBlcmF0dXJlQW5vbWFsaWVzKCkKfQ==
2026-09-11T05:54:25.4234416Z   DEPENDENCIES_BASE64: Y29tLnBhdHJ5a2FuZHBhdHJpY2sudmljbzpjb21wb3NlOjMuMy4xCm9yZy5qZXRicmFpbnMuY29tcG9zZS5ydW50aW1lOnJ1bnRpbWU6MS4xMi4wCm9yZy5qZXRicmFpbnMuY29tcG9zZS5mb3VuZGF0aW9uOmZvdW5kYXRpb246MS4xMi4wCm9yZy5qZXRicmFpbnMuY29tcG9zZS51aTp1aToxLjEyLjAKb3JnLmpldGJyYWlucy5jb21wb3NlLm1hdGVyaWFsMzptYXRlcmlhbDM6MS45LjA=
2026-09-11T05:54:25.4236522Z ##[endgroup]
2026-09-11T05:54:25.5201471Z {"entryPoint":"CommunityComposeTemperatureAnomaliesPreview","title":"Vico temperature anomalies"}
2026-09-11T05:54:25.5354819Z ##[group]Run ./gradlew -p preview-builder :create-preview:wasmJsBrowserDevelopmentExecutableDistribution --console=plain --warning-mode=none -Pkotlin.js.yarn.lock.mismatch.report=warning
2026-09-11T05:54:25.5356667Z ./gradlew -p preview-builder :create-preview:wasmJsBrowserDevelopmentExecutableDistribution --console=plain --warning-mode=none -Pkotlin.js.yarn.lock.mismatch.report=warning
2026-09-11T05:54:25.5400305Z shell: /usr/bin/bash -e {0}
2026-09-11T05:54:25.5400661Z env:
2026-09-11T05:54:25.5400976Z   APP_TMP_DIR: /tmp/composables-preview
2026-09-11T05:54:25.5401396Z   GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx4g
2026-09-11T05:54:25.5401788Z   R2_BUCKET: composables-static
2026-09-11T05:54:25.5402150Z   R2_PREFIX: community/review-previews
2026-09-11T05:54:25.5402643Z   JAVA_HOME: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.12-1/x64
2026-09-11T05:54:25.5403232Z   JAVA_HOME_21_X64: /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.12-1/x64
2026-09-11T05:54:25.5403796Z   GRADLE_ACTION_ID: gradle/actions/setup-gradle
2026-09-11T05:54:25.5404192Z   GRADLE_USER_HOME: /home/runner/.gradle
2026-09-11T05:54:25.5404574Z   GRADLE_BUILD_ACTION_SETUP_COMPLETED: true
2026-09-11T05:54:25.5404968Z   GRADLE_BUILD_ACTION_CACHE_RESTORED: true
2026-09-11T05:54:25.5405506Z   DEVELOCITY_INJECTION_INIT_SCRIPT_NAME: gradle-actions.inject-develocity.init.gradle
2026-09-11T05:54:25.5406586Z   DEVELOCITY_INJECTION_CUSTOM_VALUE: gradle-actions
2026-09-11T05:54:25.5406997Z   GITHUB_DEPENDENCY_GRAPH_ENABLED: false
2026-09-11T05:54:25.5407355Z ##[endgroup]
2026-09-11T05:54:26.6257579Z Starting a Gradle Daemon (subsequent builds will be faster)
2026-09-11T05:54:39.7219854Z > Task :kotlinWasmKotlinNpmCachesSetup
2026-09-11T05:54:43.5378378Z > Task :kotlinWasmNodeJsSetup
2026-09-11T05:54:43.6373105Z > Task :kotlinWasmRestoreYarnLock
2026-09-11T05:54:43.6387449Z > Task :kotlinWasmYarnSetup
2026-09-11T05:54:44.8191595Z > Task :preview-host:wasmJsPackageJson
2026-09-11T05:54:45.3187461Z > Task :create-preview:wasmJsPackageJson
2026-09-11T05:54:45.3227455Z > Task :create-preview:wasmJsTestPackageJson
2026-09-11T05:54:45.3239374Z > Task :preview-host:wasmJsTestPackageJson
2026-09-11T05:54:45.3240497Z > Task :create-preview:wasmJsPublicPackageJson
2026-09-11T05:54:45.3297026Z > Task :create-preview:wasmJsTestPublicPackageJson
2026-09-11T05:54:45.3309183Z > Task :preview-host:wasmJsPublicPackageJson
2026-09-11T05:54:45.3337878Z > Task :preview-host:wasmJsTestPublicPackageJson
2026-09-11T05:54:45.3356668Z > Task :kotlinWasmPackageJsonUmbrella
2026-09-11T05:54:45.3374780Z > Task :wasmRootPackageJson
2026-09-11T05:54:46.1182312Z 
2026-09-11T05:54:46.1205019Z (node:2293) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.
2026-09-11T05:54:46.1207147Z > Task :kotlinWasmNpmInstall
2026-09-11T05:54:46.1208514Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-09-11T05:54:46.1209088Z 
2026-09-11T05:54:46.1209622Z warning Ignored scripts due to flag.
2026-09-11T05:54:46.1210303Z > Task :kotlinWasmStoreYarnLock
2026-09-11T05:54:46.1211499Z Lock file was changed. Run the `kotlinWasmUpgradeYarnLock` task to actualize lock file
2026-09-11T05:54:48.1181843Z 
2026-09-11T05:54:48.1183196Z > Task :kotlinWasmToolingSetup
2026-09-11T05:54:48.1187488Z (node:2308) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.
2026-09-11T05:54:48.1195974Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-09-11T05:55:07.6184466Z warning "webpack-dev-server > webpack-dev-middleware > [email protected]" has unmet peer dependency "tslib@2".
2026-09-11T05:55:11.0194350Z warning Ignored scripts due to flag.
2026-09-11T05:55:12.9214335Z 
2026-09-11T05:55:12.9258418Z > Task :create-preview:kmpPartiallyResolvedDependenciesChecker
2026-09-11T05:55:12.9260162Z > Task :create-preview:checkKotlinGradlePluginConfigurationErrors SKIPPED
2026-09-11T05:55:13.0206326Z > Task :create-preview:checkWasmJsMainComposeLibrariesCompatibility
2026-09-11T05:55:13.0227726Z > Task :create-preview:convertXmlValueResourcesForCommonMain NO-SOURCE
2026-09-11T05:55:13.0267374Z > Task :create-preview:copyNonXmlValueResourcesForCommonMain NO-SOURCE
2026-09-11T05:55:13.0296110Z > Task :create-preview:prepareComposeResourcesTaskForCommonMain NO-SOURCE
2026-09-11T05:55:13.0327216Z > Task :create-preview:generateResourceAccessorsForCommonMain SKIPPED
2026-09-11T05:55:13.0343374Z > Task :create-preview:convertXmlValueResourcesForWasmJsMain NO-SOURCE
2026-09-11T05:55:13.0344672Z > Task :create-preview:copyNonXmlValueResourcesForWasmJsMain NO-SOURCE
2026-09-11T05:55:13.0388008Z > Task :create-preview:prepareComposeResourcesTaskForWasmJsMain NO-SOURCE
2026-09-11T05:55:13.0438194Z > Task :create-preview:generateResourceAccessorsForWasmJsMain SKIPPED
2026-09-11T05:55:13.0442004Z > Task :create-preview:convertXmlValueResourcesForWebMain NO-SOURCE
2026-09-11T05:55:13.0486939Z > Task :create-preview:copyNonXmlValueResourcesForWebMain NO-SOURCE
2026-09-11T05:55:13.0507062Z > Task :create-preview:prepareComposeResourcesTaskForWebMain NO-SOURCE
2026-09-11T05:55:13.0527130Z > Task :create-preview:generateResourceAccessorsForWebMain SKIPPED
2026-09-11T05:55:13.0563495Z > Task :create-preview:generateActualResourceCollectorsForWasmJsMain SKIPPED
2026-09-11T05:55:13.0580228Z > Task :create-preview:generateComposeResClass SKIPPED
2026-09-11T05:55:13.0594921Z > Task :create-preview:generateExpectResourceCollectorsForCommonMain SKIPPED
2026-09-11T05:55:13.0597922Z > Task :preview-host:kmpPartiallyResolvedDependenciesChecker
2026-09-11T05:55:13.0599324Z > Task :preview-host:checkKotlinGradlePluginConfigurationErrors SKIPPED
2026-09-11T05:55:13.1211330Z > Task :preview-host:checkWasmJsMainComposeLibrariesCompatibility
2026-09-11T05:55:13.1227600Z > Task :preview-host:convertXmlValueResourcesForCommonMain NO-SOURCE
2026-09-11T05:55:13.1247082Z > Task :preview-host:copyNonXmlValueResourcesForCommonMain NO-SOURCE
2026-09-11T05:55:13.1266824Z > Task :preview-host:prepareComposeResourcesTaskForCommonMain NO-SOURCE
2026-09-11T05:55:13.1286652Z > Task :preview-host:generateResourceAccessorsForCommonMain SKIPPED
2026-09-11T05:55:13.1288960Z > Task :preview-host:convertXmlValueResourcesForWasmJsMain NO-SOURCE
2026-09-11T05:55:13.1306771Z > Task :preview-host:copyNonXmlValueResourcesForWasmJsMain NO-SOURCE
2026-09-11T05:55:13.1326743Z > Task :preview-host:prepareComposeResourcesTaskForWasmJsMain NO-SOURCE
2026-09-11T05:55:13.1346674Z > Task :preview-host:generateResourceAccessorsForWasmJsMain SKIPPED
2026-09-11T05:55:13.1366542Z > Task :preview-host:convertXmlValueResourcesForWebMain NO-SOURCE
2026-09-11T05:55:13.1367700Z > Task :preview-host:copyNonXmlValueResourcesForWebMain NO-SOURCE
2026-09-11T05:55:13.1383318Z > Task :preview-host:prepareComposeResourcesTaskForWebMain NO-SOURCE
2026-09-11T05:55:13.1388116Z > Task :preview-host:generateResourceAccessorsForWebMain SKIPPED
2026-09-11T05:55:13.1403282Z > Task :preview-host:generateActualResourceCollectorsForWasmJsMain SKIPPED
2026-09-11T05:55:13.1404347Z > Task :preview-host:generateComposeResClass SKIPPED
2026-09-11T05:55:13.1405346Z > Task :preview-host:generateExpectResourceCollectorsForCommonMain SKIPPED
2026-09-11T05:55:13.8197693Z > Task :preview-host:assembleWasmJsMainResources
2026-09-11T05:55:13.8212223Z > Task :preview-host:wasmJsCopyHierarchicalMultiplatformResources
2026-09-11T05:55:13.8213782Z > Task :preview-host:wasmJsZipMultiplatformResourcesForPublication
2026-09-11T05:55:13.9223445Z > Task :create-preview:wasmJsResolveResourcesFromDependencies
2026-09-11T05:55:13.9279591Z > Task :create-preview:assembleWasmJsMainResources
2026-09-11T05:55:13.9320486Z > Task :create-preview:wasmJsResolveSelfResourcesCopyHierarchicalMultiplatformResources
2026-09-11T05:55:13.9335638Z > Task :create-preview:wasmJsAggregateResources
2026-09-11T05:55:13.9382660Z > Task :create-preview:wasmJsProcessResources
2026-09-11T05:55:14.2182629Z > Task :create-preview:unpackSkikoWasmRuntime
2026-09-11T05:55:14.3221623Z > Task :create-preview:processSkikoRuntimeForKWasm
2026-09-11T05:55:19.9209923Z > Task :preview-host:compileKotlinWasmJs
2026-09-11T05:55:21.8200574Z 
2026-09-11T05:55:21.8237899Z e: file:///tmp/composables-preview/create-preview/SubmittedPreview.kt:134:28 Unresolved reference 'x'.
2026-09-11T05:55:21.8239271Z > Task :create-preview:compileKotlinWasmJs FAILED
2026-09-11T05:55:21.8317680Z e: file:///tmp/composables-preview/create-preview/SubmittedPreview.kt:134:31 Unresolved reference 'y'.
2026-09-11T05:55:21.9183535Z gradle/actions: Writing build results to /home/runner/work/_temp/.gradle-actions/build-results/__run_3-1789106071344.json
2026-09-11T05:55:21.9184815Z 
2026-09-11T05:55:21.9206940Z FAILURE: Build failed with an exception.
2026-09-11T05:55:21.9207677Z 32 actionable tasks: 32 executed
2026-09-11T05:55:21.9226269Z 
2026-09-11T05:55:21.9226910Z * What went wrong:
2026-09-11T05:55:21.9248250Z Execution failed for task ':create-preview:compileKotlinWasmJs'.
2026-09-11T05:55:21.9267339Z > A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
2026-09-11T05:55:21.9286587Z    > Compilation error. See log for more details
2026-09-11T05:55:21.9306209Z 
2026-09-11T05:55:21.9306781Z * Try:
2026-09-11T05:55:21.9322079Z > Run with --stacktrace option to get the stack trace.
2026-09-11T05:55:21.9346864Z > Run with --info or --debug option to get more log output.
2026-09-11T05:55:21.9348342Z > Run with --scan to get full insights from a Build Scan (powered by Develocity).
2026-09-11T05:55:21.9355425Z > Get more help at https://help.gradle.org.
2026-09-11T05:55:21.9373579Z 
2026-09-11T05:55:21.9401731Z BUILD FAILED in 56s
2026-09-11T05:55:22.4657312Z ##[error]Process completed with exit code 1.
2026-09-11T05:55:22.4843891Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-09-11T05:55:22.4845206Z Post job cleanup.
2026-09-11T05:55:22.7778786Z In post-action step
2026-09-11T05:55:22.7792313Z ##[group]Stopping Gradle daemons
2026-09-11T05:55:22.7794079Z Stopping Gradle daemons for /home/runner/.gradle/wrapper/dists/gradle-9.4.1-bin/arn2x92ynaizyzdaamcbpbhtj/gradle-9.4.1
2026-09-11T05:55:22.7812055Z [command]/home/runner/.gradle/wrapper/dists/gradle-9.4.1-bin/arn2x92ynaizyzdaamcbpbhtj/gradle-9.4.1/bin/gradle --stop
2026-09-11T05:55:23.8420240Z Stopping Daemon(s)
2026-09-11T05:55:23.8447407Z 1 Daemon stopped
2026-09-11T05:55:23.8637943Z ##[endgroup]
2026-09-11T05:55:23.8687349Z Not performing cache-cleanup due to build failure
2026-09-11T05:55:23.8711568Z ##[group]Caching Gradle state
2026-09-11T05:55:23.8758200Z Cache hit occurred on the cache key gradle-home-v1|Linux-X64|build[cab32b19fda66fe0c63fec65878a8d0b]-17bf0f266a66032a57468093cebf42e3f42fd077, not saving cache.
2026-09-11T05:55:23.8768165Z ##[endgroup]
2026-09-11T05:55:23.8808913Z Generating Job Summary
2026-09-11T05:55:23.8846884Z Completed post-action step
2026-09-11T05:55:23.9226602Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-09-11T05:55:23.9228858Z Post job cleanup.
2026-09-11T05:55:24.0744317Z (node:2421) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
2026-09-11T05:55:24.0746449Z (Use `node --trace-deprecation ...` to show where the warning was created)
2026-09-11T05:55:24.1022830Z Node 20 is being deprecated. This workflow is running with Node 24 by default. If you need to temporarily use Node 20, you can set the ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true environment variable. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
2026-09-11T05:55:24.1025038Z Post job cleanup.
2026-09-11T05:55:24.2150990Z [command]/usr/bin/git version
2026-09-11T05:55:24.2267128Z git version 2.55.0
2026-09-11T05:55:24.2426863Z Temporarily overriding HOME='/home/runner/work/_temp/c37d9ff8-3d3f-4cf8-a399-2d345e845991' before making global git config changes
2026-09-11T05:55:24.2433054Z Adding repository directory to the temporary git global config as a safe directory
2026-09-11T05:55:24.2470087Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/composables.com/composables.com
2026-09-11T05:55:24.2627057Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2026-09-11T05:55:24.2759647Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2026-09-11T05:55:24.3237413Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2026-09-11T05:55:24.3278710Z http.https://github.com/.extraheader
2026-09-11T05:55:24.3298858Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2026-09-11T05:55:24.3366870Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2026-09-11T05:55:24.3824166Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2026-09-11T05:55:24.3897440Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2026-09-11T05:55:24.4451547Z Cleaning up orphan processes
2026-09-11T05:55:24.4769721Z Terminate orphan process: pid (2329) (java)
2026-09-11T05:55:24.4784564Z ##[warning]Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-java@v4, actions/setup-node@v4, gradle/actions/setup-gradle@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
CommunityComposeTemperatureAnomaliesPreview.kt
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost
import com.patrykandpatrick.vico.compose.cartesian.Scroll
import com.patrykandpatrick.vico.compose.cartesian.axis.HorizontalAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.VerticalAxis
import com.patrykandpatrick.vico.compose.cartesian.data.CartesianChartModelProducer
import com.patrykandpatrick.vico.compose.cartesian.data.CartesianLayerRangeProvider
import com.patrykandpatrick.vico.compose.cartesian.data.CartesianValueFormatter
import com.patrykandpatrick.vico.compose.cartesian.data.ColumnCartesianLayerModel
import com.patrykandpatrick.vico.compose.cartesian.data.columnModel
import com.patrykandpatrick.vico.compose.cartesian.layer.ColumnCartesianLayer
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberColumnCartesianLayer
import com.patrykandpatrick.vico.compose.cartesian.marker.DefaultCartesianMarker
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
import com.patrykandpatrick.vico.compose.cartesian.rememberVicoScrollState
import com.patrykandpatrick.vico.compose.common.Fill
import com.patrykandpatrick.vico.compose.common.component.LineComponent
import com.patrykandpatrick.vico.compose.common.component.rememberLineComponent
import com.patrykandpatrick.vico.compose.common.data.ExtraStore
import kotlin.math.abs
import kotlin.math.ceil
import kotlin.math.max
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.sp
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberAxisGuidelineComponent
import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarker
import com.patrykandpatrick.vico.compose.cartesian.marker.rememberDefaultCartesianMarker
import com.patrykandpatrick.vico.compose.common.Insets
import com.patrykandpatrick.vico.compose.common.LayeredComponent
import com.patrykandpatrick.vico.compose.common.MarkerCornerBasedShape
import com.patrykandpatrick.vico.compose.common.component.ShapeComponent
import com.patrykandpatrick.vico.compose.common.component.TextComponent
import com.patrykandpatrick.vico.compose.common.component.rememberShapeComponent
import com.patrykandpatrick.vico.compose.common.component.rememberTextComponent

/*
 * Copyright 2026 by Patryk Goworowski and Patrick Michalik.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */



private const val RANGE_PROVIDER_BASE = 0.1

private val RangeProvider =
  object : CartesianLayerRangeProvider {
    override fun getMinY(minY: Double, maxY: Double, extraStore: ExtraStore) =
      -RANGE_PROVIDER_BASE * ceil(max(abs(minY), maxY) / RANGE_PROVIDER_BASE)

    override fun getMaxY(minY: Double, maxY: Double, extraStore: ExtraStore) =
      -getMinY(minY, maxY, extraStore)
  }

private val StartAxisValueFormatter = CartesianValueFormatter.decimal(suffix = " °C")

private val MarkerValueFormatter = DefaultCartesianMarker.ValueFormatter.default(suffix = " °C")

private fun getColumnProvider(positive: LineComponent, negative: LineComponent) =
  object : ColumnCartesianLayer.ColumnProvider {
    override fun getColumn(entry: ColumnCartesianLayerModel.Entry, extraStore: ExtraStore) =
      if (entry.y >= 0) positive else negative

    override fun getWidestSeriesColumn(seriesKey: Any, seriesIndex: Int, extraStore: ExtraStore) =
      positive
  }

@Composable
private fun ComposeTemperatureAnomalies(
  modelProducer: CartesianChartModelProducer,
  modifier: Modifier = Modifier,
) {
  val positiveColumn =
    rememberLineComponent(
      fill = Fill(Color(0xff0ac285)),
      thickness = 8.dp,
      shape = RoundedCornerShape(topStartPercent = 40, topEndPercent = 40),
    )
  val negativeColumn =
    rememberLineComponent(
      fill = Fill(Color(0xffe8304f)),
      thickness = 8.dp,
      shape = RoundedCornerShape(bottomStartPercent = 40, bottomEndPercent = 40),
    )
  CartesianChartHost(
    chart =
      rememberCartesianChart(
        rememberColumnCartesianLayer(
          columnProvider =
            remember(positiveColumn, negativeColumn) {
              getColumnProvider(positiveColumn, negativeColumn)
            },
          columnCollectionSpacing = 4.dp,
          rangeProvider = RangeProvider,
        ),
        startAxis = VerticalAxis.rememberStart(valueFormatter = StartAxisValueFormatter),
        bottomAxis = HorizontalAxis.rememberBottom(labelRotationDegrees = 45f),
        marker = rememberMarker(MarkerValueFormatter),
      ),
    modelProducer = modelProducer,
    modifier = modifier,
    scrollState = rememberVicoScrollState(initialScroll = Scroll.Absolute.End),
  )
}

@Composable
fun ComposeTemperatureAnomalies(modifier: Modifier = Modifier) {
  val modelProducer = remember { CartesianChartModelProducer() }
  LaunchedEffect(Unit) {
    modelProducer.runTransaction {
      // Learn more: https://patrykandpatrick.com/3aqy4o.
      columnModel { series(x, y) }
    }
  }
  ComposeTemperatureAnomalies(modelProducer, modifier)
}

/*
 * Copyright 2026 by Patryk Goworowski and Patrick Michalik.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */



internal val LocalMarkersEnabled = staticCompositionLocalOf { true }

@Composable
internal fun rememberMarker(
  valueFormatter: DefaultCartesianMarker.ValueFormatter =
    DefaultCartesianMarker.ValueFormatter.default(),
  showIndicator: Boolean = true,
): CartesianMarker? {
  if (!LocalMarkersEnabled.current) return null
  val labelBackgroundShape = MarkerCornerBasedShape(CircleShape)
  val labelBackground =
    rememberShapeComponent(
      fill = Fill(MaterialTheme.colorScheme.background),
      shape = labelBackgroundShape,
      strokeFill = Fill(MaterialTheme.colorScheme.outline),
      strokeThickness = 1.dp,
    )
  val label =
    rememberTextComponent(
      style =
        TextStyle(
          color = MaterialTheme.colorScheme.onSurface,
          textAlign = TextAlign.Center,
          fontSize = 12.sp,
        ),
      padding = Insets(8.dp, 4.dp),
      background = labelBackground,
      minWidth = TextComponent.MinWidth.fixed(40.dp),
    )
  val indicatorFrontComponent =
    rememberShapeComponent(Fill(MaterialTheme.colorScheme.surface), CircleShape)
  val guideline = rememberAxisGuidelineComponent()
  return rememberDefaultCartesianMarker(
    label = label,
    valueFormatter = valueFormatter,
    indicator =
      if (showIndicator) {
        { color ->
          LayeredComponent(
            back = ShapeComponent(Fill(color.copy(alpha = 0.15f)), CircleShape),
            front =
              LayeredComponent(
                back = ShapeComponent(fill = Fill(color), shape = CircleShape),
                front = indicatorFrontComponent,
                padding = Insets(5.dp),
              ),
            padding = Insets(10.dp),
          )
        }
      } else {
        null
      },
    indicatorSize = 36.dp,
    guideline = guideline,
  )
}

@Preview(name = "Vico temperature anomalies")
@Composable
fun CommunityComposeTemperatureAnomaliesPreview() {
    ComposeTemperatureAnomalies()
}
build.gradle.kts
dependencies {
    implementation("com.patrykandpatrick.vico:compose:3.3.1")
    implementation("org.jetbrains.compose.runtime:runtime:1.12.0")
    implementation("org.jetbrains.compose.foundation:foundation:1.12.0")
    implementation("org.jetbrains.compose.ui:ui:1.12.0")
    implementation("org.jetbrains.compose.material3:material3:1.9.0")
}

MIT License

MIT License

Copyright (c) 2026 Patryk & Patrick

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.