<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicholas Eddy</title>
    <description>The latest articles on DEV Community by Nicholas Eddy (@pusolito).</description>
    <link>https://dev.to/pusolito</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F566615%2F4204954f-6ca5-4322-9ea8-dc37be5f9962.png</url>
      <title>DEV Community: Nicholas Eddy</title>
      <link>https://dev.to/pusolito</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pusolito"/>
    <language>en</language>
    <item>
      <title>Dribbble inspired Doodle</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Wed, 26 Mar 2025 07:33:01 +0000</pubDate>
      <link>https://dev.to/pusolito/dribbble-inspired-doodle-2dk7</link>
      <guid>https://dev.to/pusolito/dribbble-inspired-doodle-2dk7</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/b5QWYi8GOK0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Saw this cool design on dribbble and decided to &lt;a href="https://nacular.github.io/doodle-tutorials/docs/animatingform" rel="noopener noreferrer"&gt;build it&lt;/a&gt; using &lt;a href="https://github.com/nacular/doodle" rel="noopener noreferrer"&gt;Doodle&lt;/a&gt; (&lt;a href="https://nacular.github.io/doodle" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>design</category>
      <category>tutorial</category>
      <category>github</category>
    </item>
    <item>
      <title>Doodle Weather Clone</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Thu, 13 Mar 2025 15:03:13 +0000</pubDate>
      <link>https://dev.to/pusolito/doodle-weather-clone-26d5</link>
      <guid>https://dev.to/pusolito/doodle-weather-clone-26d5</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/RO3zq33qM7Y"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Built this simple Mac Weather clone using Doodle's frosted glass paint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nacular.github.io/doodle/docs/introduction" rel="noopener noreferrer"&gt;Doodle&lt;/a&gt; helps you create beautiful, modern apps entirely in &lt;a href="http://kotlinlang.org/" rel="noopener noreferrer"&gt;Kotlin&lt;/a&gt;. Its render model is intuitive yet powerful, making it easy to achieve &lt;a href="https://nacular.github.io/doodle-tutorials/docs/introduction" rel="noopener noreferrer"&gt;complex UIs&lt;/a&gt; with pixel level precision and layouts. This simplicity and power applies to everything from user input to drag and drop. Doodle lets you build and animate anything.&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Fri, 07 Feb 2025 17:06:10 +0000</pubDate>
      <link>https://dev.to/pusolito/-568o</link>
      <guid>https://dev.to/pusolito/-568o</guid>
      <description></description>
    </item>
    <item>
      <title>Better Animations... in Latest Doodle</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Sat, 29 Jun 2024 15:24:32 +0000</pubDate>
      <link>https://dev.to/pusolito/better-animations-in-latest-doodle-3763</link>
      <guid>https://dev.to/pusolito/better-animations-in-latest-doodle-3763</guid>
      <description>&lt;p&gt;Animations in &lt;a href="https://github.com/nacular/doodle/releases/tag/v0.10.2"&gt;Doodle 0.10.2&lt;/a&gt; can be chained within an animation block using the &lt;code&gt;then&lt;/code&gt; method. This makes it easier to have sequential animations and avoids the need to explicitly track secondary animations for cancellation, since these are tied to their "parent" animation.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;val animation = animate {
    0f to 1f using (tweenFloat(easing, duration)) {                   // (1)
        // ...
    } then {
        0f to 1f using (after(delay, tweenFloat(easing, duration))) { // (2)

        } then {                                                      // (3)
            // ...
        }
    } then {                                                          // (4)
        // ...
    }
}

animation.completed += { /* ... */ }  // applies to entire chain
animation.pause ()                    // applies to entire chain
animation.cancel()                    // applies to entire chain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This release also includes lots of other great features including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desktop Accessibility Support - Accessibility features now work on Desktop&lt;/li&gt;
&lt;li&gt;SpinButtons now support basic Accessibility&lt;/li&gt;
&lt;li&gt;Improved Sliders - Sliders can now represent values of any Comparable type T between two start and end values.&lt;/li&gt;
&lt;li&gt;Non-linear Sliders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the &lt;a href="http://nacular.github.io/doodle"&gt;docs&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nacular.github.io/doodle"&gt;Doodle&lt;/a&gt; helps you create beautiful, modern apps entirely in &lt;a href="http://kotlinlang.org/"&gt;Kotlin&lt;/a&gt;. Its render model is intuitive yet powerful, making it easy to achieve &lt;a href="https://nacular.github.io/doodle-tutorials/docs/introduction"&gt;complex UIs&lt;/a&gt; with pixel level precision and layouts. This simplicity and power applies to everything from user input to drag and drop. Doodle lets you build and animate anything.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Measured now supports your favorite Kotlin platform</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Wed, 19 Jun 2024 20:27:17 +0000</pubDate>
      <link>https://dev.to/pusolito/measured-now-supports-your-favorite-kotlin-platform-1e1b</link>
      <guid>https://dev.to/pusolito/measured-now-supports-your-favorite-kotlin-platform-1e1b</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/nacular/measured"&gt;Measured&lt;/a&gt; now supports tons of Kotlin targets like iOS and all Apple platforms, Android Native, Linux, etc. So you can work with units of measure seamlessly no matter where you app runs.&lt;/p&gt;

&lt;p&gt;Measured makes units of measure simple by providing intuitive, strongly-typed (i.e. compile-time enforced) units that combine using normal mathematical operations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;val velocity     = 5 * meters / seconds
val acceleration = 9 * meters / (seconds * seconds)
val time         = 1 * minutes

//  d            = vt + ½at²
val distance     = velocity * time + 1.0 / 2 * acceleration * time * time

println(distance                ) // 16500 m
println(distance `as` kilometers) // 16.5 km
println(distance `as` miles     ) // 10.25262467191601 mi

println(5 * miles / hours `as` meters / seconds) // 2.2352 m/s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>programming</category>
      <category>kotlin</category>
      <category>opensource</category>
      <category>multiplatform</category>
    </item>
    <item>
      <title>Doodle 0.10.0 can host React, supports WebAssembly and much more</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Tue, 20 Feb 2024 16:28:56 +0000</pubDate>
      <link>https://dev.to/pusolito/doodle-0100-can-host-react-supports-webassembly-and-much-more-3pmi</link>
      <guid>https://dev.to/pusolito/doodle-0100-can-host-react-supports-webassembly-and-much-more-3pmi</guid>
      <description>&lt;p&gt;Doodle &lt;a href="https://github.com/nacular/doodle/releases/tag/v0.10.0"&gt;0.10.0&lt;/a&gt; has been released. This is a major update that brings some key improvements including the following.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nacular.github.io/doodle/docs/whatsnew#hosting-arbitrary-html-elements"&gt;Hosting React and other web components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WebAssembly Support&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nacular.github.io/doodle/docs/whatsnew#multi-window-apps"&gt;More powerful Desktop apps&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Multi-window Support&lt;/li&gt;
&lt;li&gt;Native Window Menus&lt;/li&gt;
&lt;li&gt;Native Window Context Menus&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nacular.github.io/doodle/docs/whatsnew#key-event-filters-and-bubbling"&gt;More powerful key-event pipeline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://nacular.github.io/doodle"&gt;Doodle&lt;/a&gt; helps you create beautiful, modern apps entirely in &lt;a href="http://kotlinlang.org"&gt;Kotlin&lt;/a&gt;. Its render model is intuitive yet powerful, making it easy to achieve &lt;a href="https://nacular.github.io/doodle-tutorials/docs/introduction"&gt;complex UIs&lt;/a&gt; with pixel level precision and layouts. This simplicity and power applies to everything from user input to drag and drop. Doodle lets you build and animate anything.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>kotlin</category>
    </item>
    <item>
      <title>Advanced Carousel In Doodle</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Tue, 12 Sep 2023 05:49:04 +0000</pubDate>
      <link>https://dev.to/pusolito/advanced-carousel-in-doodle-ebm</link>
      <guid>https://dev.to/pusolito/advanced-carousel-in-doodle-ebm</guid>
      <description>&lt;p&gt;&lt;a href="https://nacular.github.io/doodle-tutorials/docs/timedcards"&gt;Tutorial&lt;/a&gt; showing how to make this app using Doodle's powerful &lt;a href="https://nacular.github.io/doodle/docs/ui_components/overview#carousel"&gt;Carousel APIs&lt;/a&gt;. This app is multi-platform, which means it runs in the browser and as a desktop application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/nacular/doodle"&gt;Doodle&lt;/a&gt; is a pure Kotlin UI framework for the Web (and Desktop), that lets you create rich applications without relying on Javascript, HTML or CSS.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Powerful, yet simple Carousels in Doodle</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Fri, 08 Sep 2023 14:51:40 +0000</pubDate>
      <link>https://dev.to/pusolito/powerful-yet-simple-carousels-in-doodle-10ad</link>
      <guid>https://dev.to/pusolito/powerful-yet-simple-carousels-in-doodle-10ad</guid>
      <description>&lt;p&gt;You can build almost any experience you can imagine using the new &lt;a href="https://nacular.github.io/doodle/docs/ui_components/overview#carousel"&gt;Carousels&lt;/a&gt; in &lt;strong&gt;Doodle &lt;a href="https://github.com/nacular/doodle/releases/tag/v0.9.3"&gt;0.9.3&lt;/a&gt;&lt;/strong&gt;. That's because their API is unrestricted and not opinionated about what a Carousel should look like. There are several built-in examples of various &lt;code&gt;Presenters&lt;/code&gt;; but so much more is possible.&lt;/p&gt;

&lt;p&gt;Here's how you might show a list of &lt;code&gt;Image&lt;/code&gt;s using the &lt;code&gt;LinearPresenter&lt;/code&gt;, which shows all images in a line with the selected item positioned/sized based on the given constraints.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;carousel&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Carousel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nc"&gt;SimpleListModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;listOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;image2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;image3&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
    &lt;span class="nf"&gt;itemVisualizer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;
        &lt;span class="k"&gt;when&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="nc"&gt;DynamicImage&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;previous&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;also&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;            &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;DynamicImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;wrapAtEnds&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
    &lt;span class="n"&gt;acceptsThemes&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;
    &lt;span class="n"&gt;behavior&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;CarouselBehavior&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

      &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;presenter&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LinearPresenter&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;spacing&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;aspectRatio&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readOnly&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readOnly&lt;/span&gt;

          &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;  &lt;span class="n"&gt;eq&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;
          &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;center&lt;/span&gt; &lt;span class="n"&gt;eq&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;center&lt;/span&gt;
          &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="n"&gt;eq&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;aspectRatio&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;transitioner&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dampedTransitioner&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;animationScheduler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt;
          &lt;span class="nf"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0f&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mf"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;tweenFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;easeInOutCubic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;duration&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/nacular/doodle"&gt;&lt;strong&gt;Doodle&lt;/strong&gt;&lt;/a&gt; is a pure Kotlin UI framework for the Web (and Desktop), that lets you create rich applications without relying on Javascript, HTML or CSS. Check out the &lt;a href="https://nacular.github.io/doodle"&gt;documentation&lt;/a&gt; and &lt;a href="https://nacular.github.io/doodle-tutorials"&gt;tutorials&lt;/a&gt; to learn more.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>kotlin</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Complex Menus Made Easy with Doodle 0.9.2</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Fri, 26 May 2023 19:33:32 +0000</pubDate>
      <link>https://dev.to/pusolito/complex-menus-made-easy-with-doodle-092-4afm</link>
      <guid>https://dev.to/pusolito/complex-menus-made-easy-with-doodle-092-4afm</guid>
      <description>&lt;h2&gt;
  
  
  Version &lt;a href="https://github.com/nacular/doodle/releases/tag/v0.9.2"&gt;0.9.2&lt;/a&gt; brings menus, more text-field customization, and more...
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nacular.github.io/doodle/docs/ui_components/overview#menu"&gt;Menus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;More TextField Customization using &lt;a href="https://nacular.github.io/doodle-api/controls/io.nacular.doodle.controls.text/-text-field/purpose.html"&gt;&lt;code&gt;purpose&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;More flexible scroll management (Web)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/nacular/doodle"&gt;&lt;strong&gt;Doodle&lt;/strong&gt;&lt;/a&gt; is a pure Kotlin UI framework for the Web (and Desktop), that lets you create rich applications without relying on Javascript, HTML or CSS. Check out the &lt;a href="https://nacular.github.io/doodle"&gt;documentation&lt;/a&gt; and &lt;a href="https://nacular.github.io/doodle-tutorials"&gt;tutorials&lt;/a&gt; to learn more.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>kotlin</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Popups and Modals with Doodle</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Fri, 07 Apr 2023 14:33:54 +0000</pubDate>
      <link>https://dev.to/pusolito/popups-and-modals-with-doodle-2epk</link>
      <guid>https://dev.to/pusolito/popups-and-modals-with-doodle-2epk</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/niqwovYBXio"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Doodle &lt;a href="https://github.com/nacular/doodle/releases/tag/v0.9.1"&gt;0.9.1&lt;/a&gt; brings popups, modals, enhanced text rendering and more...
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;First-class support for &lt;a href="https://nacular.github.io/doodle/docs/modals"&gt;Popups&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Flexible &lt;a href="https://nacular.github.io/doodle/docs/modals#modals"&gt;Modals&lt;/a&gt; built using the new &lt;code&gt;PopupManager&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;More Powerful &lt;a href="https://nacular.github.io/doodle/docs/ui_components/overview#label"&gt;Text Rendering&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New &lt;a href="https://nacular.github.io/doodle/docs/ui_components/overview#lazyphoto"&gt;LazyPhoto&lt;/a&gt; Widget&lt;/li&gt;
&lt;li&gt;New &lt;a href="https://nacular.github.io/doodle-api/"&gt;API Docs&lt;/a&gt; Site&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/nacular/doodle"&gt;&lt;strong&gt;Doodle&lt;/strong&gt;&lt;/a&gt; is a pure Kotlin UI framework for the Web (and Desktop), that lets you create rich applications without relying on Javascript, HTML or CSS. Check out the &lt;a href="https://nacular.github.io/doodle"&gt;documentation&lt;/a&gt; and &lt;a href="https://nacular.github.io/doodle-tutorials"&gt;tutorials&lt;/a&gt; to learn more.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Animations with Doodle 0.9.0</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Fri, 13 Jan 2023 15:34:42 +0000</pubDate>
      <link>https://dev.to/pusolito/animations-with-doodle-090-1586</link>
      <guid>https://dev.to/pusolito/animations-with-doodle-090-1586</guid>
      <description>&lt;h2&gt;
  
  
  Version &lt;a href="https://github.com/nacular/doodle/releases/tag/v0.9.0" rel="noopener noreferrer"&gt;0.9.0&lt;/a&gt; brings more powerful and easy to use animations and more...
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nacular.github.io/doodle/docs/animations" rel="noopener noreferrer"&gt;Revamped Animation APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nacular.github.io/doodle/docs/layout/constraints" rel="noopener noreferrer"&gt;New Constraint Layout Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Improved &lt;a href="https://nacular.github.io/doodle/docs/ui_components/overview#table" rel="noopener noreferrer"&gt;Tables&lt;/a&gt; and &lt;a href="https://nacular.github.io/doodle/docs/ui_components/overview#treetable" rel="noopener noreferrer"&gt;TreeTables&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nacular.github.io/doodle/docs/ui_components/overview#fileselector" rel="noopener noreferrer"&gt;New FileSelector Control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nacular.github.io/doodle/docs/ui_components/form_controls" rel="noopener noreferrer"&gt;Form Controls&lt;/a&gt;(slider, rangeSlider, circularSlider, circularRangeSlider, file and files)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/nacular/doodle" rel="noopener noreferrer"&gt;&lt;strong&gt;Doodle&lt;/strong&gt;&lt;/a&gt; is a pure Kotlin UI framework for the Web (and Desktop), that lets you create rich applications without relying on Javascript, HTML or CSS. Check out the &lt;a href="https://nacular.github.io/doodle" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; and &lt;a href="https://nacular.github.io/doodle-tutorials" rel="noopener noreferrer"&gt;tutorials&lt;/a&gt; to learn more.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>productivity</category>
      <category>npm</category>
      <category>linting</category>
    </item>
    <item>
      <title>Measured - Intuitive, Type-safe Units</title>
      <dc:creator>Nicholas Eddy</dc:creator>
      <pubDate>Sun, 04 Dec 2022 21:28:08 +0000</pubDate>
      <link>https://dev.to/pusolito/measured-intuitive-type-safe-units-40bf</link>
      <guid>https://dev.to/pusolito/measured-intuitive-type-safe-units-40bf</guid>
      <description>&lt;p&gt;&lt;a href="https://nacular.github.io/measured/" rel="noopener noreferrer"&gt;Measured&lt;/a&gt; is a multi-platform, Kotlin library that makes units a lot simpler and intuitive to work with. It uses the compiler to enforce correctness and lets you combine units into more complex ones using math operators. It is also extensible, making it easy to define your own units.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;velocity&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;meters&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;acceleration&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;meters&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;time&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;minutes&lt;/span&gt;

&lt;span class="c1"&gt;//  d = vt + ½at²&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;distance&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;velocity&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;acceleration&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt;                &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 16500 m&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt; &lt;span class="n"&gt;`as`&lt;/span&gt; &lt;span class="n"&gt;kilometers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 16.5 km&lt;/span&gt;
&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;distance&lt;/span&gt; &lt;span class="n"&gt;`as`&lt;/span&gt; &lt;span class="n"&gt;miles&lt;/span&gt;     &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 10.25262467191601 mi&lt;/span&gt;

&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;miles&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;hours&lt;/span&gt; &lt;span class="n"&gt;`as`&lt;/span&gt; &lt;span class="n"&gt;meters&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 2.2352 m/s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Give it a try. And leave a star or any other feedback.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>jquery</category>
    </item>
  </channel>
</rss>
