<?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: Volker Schukai</title>
    <description>The latest articles on DEV Community by Volker Schukai (@volker_schukai).</description>
    <link>https://dev.to/volker_schukai</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%2F118512%2F0a88ab63-d227-4b47-a0ac-f373d2580756.jpg</url>
      <title>DEV Community: Volker Schukai</title>
      <link>https://dev.to/volker_schukai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/volker_schukai"/>
    <language>en</language>
    <item>
      <title>Monster Select now supports paginated dropdowns – fully reactive, fully open source</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Wed, 24 Sep 2025 13:30:55 +0000</pubDate>
      <link>https://dev.to/schukai/monster-select-now-supports-paginated-dropdowns-fully-reactive-fully-open-source-330</link>
      <guid>https://dev.to/schukai/monster-select-now-supports-paginated-dropdowns-fully-reactive-fully-open-source-330</guid>
      <description>&lt;p&gt;&lt;strong&gt;We added pagination to our select component – and yes, it’s fully open source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes it’s the small things that make a big difference.&lt;/p&gt;

&lt;p&gt;Our latest update to the &lt;code&gt;monster-select&lt;/code&gt; component adds something developers (and users) have been asking for: &lt;strong&gt;pagination.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No more infinite scrolling. No awkward workarounds. Just clean, native paging – fully integrated.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔧 What’s new?
&lt;/h3&gt;

&lt;p&gt;We’ve added a &lt;strong&gt;pagestepper&lt;/strong&gt; UI to the dropdown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paginated view of options&lt;/li&gt;
&lt;li&gt;Configurable number of items per page&lt;/li&gt;
&lt;li&gt;Fully reactive (updates with filters and async data)&lt;/li&gt;
&lt;li&gt;Works with keyboard navigation&lt;/li&gt;
&lt;li&gt;Handles edge cases gracefully (like filtering and empty pages)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s what it looks like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa32m7jezpbq1ic639gbo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa32m7jezpbq1ic639gbo.png" alt="Pagestepper Screenshot" width="521" height="356"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🧪 Example: Remote Filter + Pagination
&lt;/h3&gt;

&lt;p&gt;Here’s how to configure the select for a real-world use case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;monster-select&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-filter-mode=&lt;/span&gt;&lt;span class="s"&gt;"remote"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-filter-position=&lt;/span&gt;&lt;span class="s"&gt;"popper"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-url=&lt;/span&gt;&lt;span class="s"&gt;"/api/items?filter={filter}&amp;amp;page={page}"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-mapping-labeltemplate=&lt;/span&gt;&lt;span class="s"&gt;"${name}"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-mapping-selector=&lt;/span&gt;&lt;span class="s"&gt;"data.*"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-filter-defaultValue=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-mapping-valuetemplate=&lt;/span&gt;&lt;span class="s"&gt;"${id}"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-features-showremoteinfo=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-remoteinfo-url=&lt;/span&gt;&lt;span class="s"&gt;"/api/items?count=1"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-mapping-currentpage=&lt;/span&gt;&lt;span class="s"&gt;"meta.pagination.currentPage"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-mapping-objectsperpage=&lt;/span&gt;&lt;span class="s"&gt;"meta.pagination.perPage"&lt;/span&gt;
  &lt;span class="na"&gt;data-monster-option-mapping-total=&lt;/span&gt;&lt;span class="s"&gt;"meta.pagination.total"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&amp;lt;/monster-select&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example assumes your backend API returns something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Item 4"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Item 5"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Item 6"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"meta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"pagination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"currentPage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"perPage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Want filtering?&lt;/strong&gt; It’s already baked in. Just hook up &lt;code&gt;filter={filter}&lt;/code&gt; and the component handles debounce, remote updates, and reactivity for you.&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 Why we built it
&lt;/h3&gt;

&lt;p&gt;Select components can get complicated. Especially when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're dealing with large datasets&lt;/li&gt;
&lt;li&gt;Filters need to be remote&lt;/li&gt;
&lt;li&gt;You want full keyboard and accessibility support&lt;/li&gt;
&lt;li&gt;Pagination and state should sync with backend logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We needed a modular, scalable solution that plays well in modern web apps. So we built it into &lt;strong&gt;MonsterJS&lt;/strong&gt; – and open-sourced the whole thing.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔗 Explore more
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git:&lt;/strong&gt; &lt;a href="https://gitlab.schukai.com/oss/libraries/javascript/monsterjs-org" rel="noopener noreferrer"&gt;gitlab.schukai.com/.../monsterjs-org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs &amp;amp; Live Demos:&lt;/strong&gt; &lt;a href="https://monsterjs.org/" rel="noopener noreferrer"&gt;monsterjs.org&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;monster-select&lt;/code&gt; is just one part of the puzzle. The lib also includes reactive state management, routing, declarative rendering and more.&lt;/p&gt;

&lt;p&gt;We’re building MonsterJS for developers who want structure without the overhead – and components that &lt;em&gt;just work&lt;/em&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ TL;DR
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monster Select now supports full pagination&lt;/li&gt;
&lt;li&gt;Works with async data and remote filtering&lt;/li&gt;
&lt;li&gt;Open Source at &lt;a href="https://monsterjs.org" rel="noopener noreferrer"&gt;monsterjs.org&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Try it out. Fork it. Break it. Or build on top of it.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>ux</category>
    </item>
    <item>
      <title>Node, Python and the Daily Dev Apocalypse: Why I Escaped to Go</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Sun, 24 Aug 2025 17:27:10 +0000</pubDate>
      <link>https://dev.to/volker_schukai/node-python-and-the-daily-dev-apocalypse-why-i-escaped-to-go-am7</link>
      <guid>https://dev.to/volker_schukai/node-python-and-the-daily-dev-apocalypse-why-i-escaped-to-go-am7</guid>
      <description>&lt;p&gt;In a world where political systems collapse, alliances wobble, and everything seems to be on fire, one would at least hope the developer tools might offer a shred of stability.&lt;/p&gt;

&lt;p&gt;They don’t.&lt;/p&gt;

&lt;p&gt;I’ve worked with many ecosystems in my developer life. The one that has devoured the most of my sanity? Node. The idea is decent, no complaints there – but the sheer amount of time I’ve sacrificed just to get a dev stack breathing borders on ritual self-harm.&lt;/p&gt;

&lt;p&gt;Dependencies that loathe each other, transitive nightmares, versions that refuse to coexist – the chaos is biblical. Running npm install feels less like software engineering and more like rolling dice in front of an indifferent god of dependencies. Sometimes it works. Most of the time: head → desk.&lt;/p&gt;

&lt;p&gt;And then there’s Python. Honestly, it’s worse. Setting up environments isn’t development, it’s a horror show. Each setup feels like a new boss battle in a game nobody wanted to play. Pipenv, virtualenv, Poetry – all cheerful names, all equal pain.&lt;/p&gt;

&lt;p&gt;These days I mostly write Go. And frankly, I’m not going back. No virtualenvs, no Gradle, no cathedral of node_modules. Just go build, and it runs.&lt;/p&gt;

&lt;p&gt;Sure, Go has its quirks – private repos that act like they’ve never met you, or go mod tidy deciding to improvise like a drunken jazz band. But that’s all manageable. Nothing requiring daily therapy.&lt;/p&gt;

&lt;p&gt;I like Go. The language. The ecosystem. The peace.&lt;/p&gt;

</description>
      <category>go</category>
      <category>node</category>
      <category>python</category>
    </item>
    <item>
      <title>MonsterJS v4 has landed – and it’s hungry.</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Sun, 11 May 2025 09:58:18 +0000</pubDate>
      <link>https://dev.to/schukai/monsterjs-v4-has-landed-and-its-hungry-2aej</link>
      <guid>https://dev.to/schukai/monsterjs-v4-has-landed-and-its-hungry-2aej</guid>
      <description>&lt;p&gt;We’ve released version 4 of our JavaScript component library, and yes, it’s packed with features that’ll make your inner frontend dev do a little dance (even if it’s in Vim).&lt;/p&gt;

&lt;p&gt;What’s new in the Monster’s lair?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧮 &lt;strong&gt;Datatables&lt;/strong&gt; – Show off your data like it deserves, with sorting, paging, and built-in flexibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyl34a1y1gteri1ic3k5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyl34a1y1gteri1ic3k5.png" alt="datatable example" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔍 &lt;strong&gt;Select with remote filtering&lt;/strong&gt; – Hook it to your API, and let users type, search, and select without any awkward full-list dropdowns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp80t3vps80vrxo3wp2di.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp80t3vps80vrxo3wp2di.png" alt="Select / dropdown" width="558" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📅 &lt;strong&gt;Monthly calendar&lt;/strong&gt; – Clean, snappy, and ready to display all your timelines and events.&lt;/li&gt;
&lt;li&gt;🧱 &lt;strong&gt;Drag-and-drop grid&lt;/strong&gt; – For the moments when you want users to rearrange reality.&lt;/li&gt;
&lt;li&gt;✨ &lt;strong&gt;…and much more&lt;/strong&gt; – Yes, we mean it. This release refines performance, improves accessibility, and adds polish all over the place.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Give the Monster a chance. It doesn’t bite (unless your code has no semicolons).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i @schukai/monster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docs, demos, and more goodies live at: &lt;a href="https://monsterjs.org" rel="noopener noreferrer"&gt;https://monsterjs.org&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Shadow DOM Perfected: Experience the Power of Monster 3.100!</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Sun, 12 Jan 2025 19:48:54 +0000</pubDate>
      <link>https://dev.to/schukai/shadow-dom-perfected-experience-the-power-of-monster-3100-18ii</link>
      <guid>https://dev.to/schukai/shadow-dom-perfected-experience-the-power-of-monster-3100-18ii</guid>
      <description>&lt;p&gt;The Shadow DOM is, in our opinion, one of the most exciting new features in modern HTML engines. This concept enables a much better encapsulation and protection of implementation details than ever before, resulting in cleaner and more maintainable code.&lt;/p&gt;

&lt;p&gt;What is your opinion of the &lt;a href="https://dev.to/schukai/understanding-shadow-dom-and-shadow-roots-in-javascript-a-simple-guide-for-beginners-4479"&gt;shadowroot&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Our JavaScript library is built on this principle and offers a comprehensive range of components—everything from sliders and tabs to select controls and data tables. The use of Shadow DOM ensures that our components are not only modular but also highly resilient against styling or scripting conflicts, making them ideal for large-scale applications.&lt;/p&gt;

&lt;p&gt;Beyond Shadow DOM, we leverage cutting-edge JavaScript, CSS, and HTML features to create a seamless developer experience. For example, our components take full advantage of JavaScript &lt;strong&gt;Proxy&lt;/strong&gt; objects to enable fine-grained control over state management, making debugging and data tracking more intuitive. CSS custom properties and container queries allow us to deliver responsive and highly customizable designs out of the box, while modern HTML APIs like the &lt;code&gt;IntersectionObserver&lt;/code&gt; ensure performance stays top-notch, even with complex UI elements.&lt;/p&gt;

&lt;p&gt;With the release of &lt;strong&gt;Monster&lt;/strong&gt; version 3.100, we’ve once again raised the bar with notable improvements:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvya49tm266zy1v5p4nm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvya49tm266zy1v5p4nm.png" alt="the slider control" width="689" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The slider component now supports displaying multiple slides simultaneously, a much-requested feature that enhances usability and visual appeal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5xupg5fe5zgv03c88ktr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5xupg5fe5zgv03c88ktr.png" alt="the select control" width="785" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The select control has been optimized to handle dynamic loading of values and options more efficiently, offering smoother performance in highly dynamic environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These updates, combined with our use of the latest web technologies, underscore our commitment to delivering flexible, robust, and feature-rich tools for modern web development. &lt;/p&gt;

&lt;p&gt;And the best thing is that it's all open source.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Introducing the New Version of Monster Components: Power Up Your Development Workflow</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Fri, 15 Nov 2024 14:31:15 +0000</pubDate>
      <link>https://dev.to/schukai/introducing-the-new-version-of-monster-components-power-up-your-development-workflow-4b3k</link>
      <guid>https://dev.to/schukai/introducing-the-new-version-of-monster-components-power-up-your-development-workflow-4b3k</guid>
      <description>&lt;p&gt;We’re excited to announce the latest version of our &lt;strong&gt;Monster&lt;/strong&gt; component library, packed with enhancements designed to make your developer life easier. Whether you’re building complex applications or refining a simple interface, Monster.js offers tools to save time and improve results.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Highlights from the New Release
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Datatable: Structured Data Visualization Made Easy&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Our &lt;strong&gt;Datatable&lt;/strong&gt; component is a game-changer for handling structured data. With its intuitive API and seamless integration, you can quickly transform raw data into interactive and visually appealing tables. Explore its features &lt;a href="https://monsterjs.org/components.datatable.datatable.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wtrakyhbnynxseol3sp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wtrakyhbnynxseol3sp.png" alt="datatable screenshot" width="800" height="318"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;And &lt;strong&gt;battery included&lt;/strong&gt; is the dark mode, so you don’t have to worry about it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pkxqsuobn41n20sojf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pkxqsuobn41n20sojf6.png" alt="datatable with dark mode" width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And of course, there’s built-in support for small screens as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzl6w0n0eeu40kqp2bwt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzl6w0n0eeu40kqp2bwt9.png" alt="built-in support for small screens" width="734" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Monster?
&lt;/h3&gt;

&lt;p&gt;On &lt;strong&gt;&lt;a href="https://monsterjs.org" rel="noopener noreferrer"&gt;monsterjs.org&lt;/a&gt;&lt;/strong&gt;, you’ll find a rich collection of components and features tailored for developers. From layout tools to advanced UI controls, Monster.js is built to simplify your workflow while giving you the flexibility to create.  &lt;/p&gt;

&lt;p&gt;Start exploring today and take your projects to the next level!  &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>dom</category>
    </item>
    <item>
      <title>Custom Function Integration in Element Updater with MonsterJS</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Fri, 01 Mar 2024 11:49:45 +0000</pubDate>
      <link>https://dev.to/schukai/custom-function-integration-in-element-updater-with-monsterjs-3blp</link>
      <guid>https://dev.to/schukai/custom-function-integration-in-element-updater-with-monsterjs-3blp</guid>
      <description>&lt;p&gt;MonsterJS introduces a flexible way to enhance the functionality of Element Updaters by allowing the attachment of custom functions. This feature provides developers with the ability to extend the standard behavior of Element Updaters, tailoring them to specific needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementing &lt;code&gt;updaterPipeCallbacks&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;To integrate custom functions with Element Updaters, a control must implement the &lt;code&gt;updaterPipeCallbacks&lt;/code&gt; method. This method should return an object containing key-value pairs, where the key is a unique name for the callback, and the value is the function itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Implementation
&lt;/h3&gt;

&lt;p&gt;Here's an example of how you can define a custom function within a control using &lt;code&gt;onUpdaterPipeCallbacks&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;updaterPipeCallbacks&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my-callback-doing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;value&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;In this example, the &lt;code&gt;my-callback-doing&lt;/code&gt; function checks the type of the input value and modifies it based on its type:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the value is a string, it appends an exclamation mark.&lt;/li&gt;
&lt;li&gt;If the value is a number, it increments the value by one.&lt;/li&gt;
&lt;li&gt;For other types, it returns the value unmodified.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using Custom Functions in Templates
&lt;/h2&gt;

&lt;p&gt;Once you've defined your custom functions, you can invoke them in your control's template using the &lt;code&gt;call&lt;/code&gt; command within the data binding expression.&lt;/p&gt;

&lt;h3&gt;
  
  
  Template Integration Example
&lt;/h3&gt;

&lt;p&gt;Here's how you can incorporate the &lt;code&gt;my-callback-doing&lt;/code&gt; function into a control's template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-monster-replace=&lt;/span&gt;&lt;span class="s"&gt;"path:options | index:label | call:my-callback-doing"&lt;/span&gt; &lt;span class="na"&gt;part=&lt;/span&gt;&lt;span class="s"&gt;"option-label"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this template snippet, the &lt;code&gt;data-monster-replace&lt;/code&gt; attribute is used to dynamically update the content of the &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;. The &lt;code&gt;call:my-callback-doing&lt;/code&gt; part specifies that the &lt;code&gt;my-callback-doing&lt;/code&gt; function should be applied to the value obtained from &lt;code&gt;path:options | index:label&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By leveraging the &lt;code&gt;updaterPipeCallbacks&lt;/code&gt; method, developers can create more dynamic and flexible web components with MonsterJS. Custom functions provide a powerful way to enhance the interactivity and responsiveness of your web applications, ensuring that you can cater to a wide array of use cases and scenarios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://monsterjs.org/"&gt;https://monsterjs.org/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Unleashing the Power of Dynamic Web Content with Monster Templating</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Sun, 25 Feb 2024 16:36:35 +0000</pubDate>
      <link>https://dev.to/schukai/unleashing-the-power-of-dynamic-web-content-with-monster-templating-22oa</link>
      <guid>https://dev.to/schukai/unleashing-the-power-of-dynamic-web-content-with-monster-templating-22oa</guid>
      <description>&lt;p&gt;In the ever-evolving landscape of web development, creating dynamic and interactive web applications is more crucial than ever. Enter Monster Templating, a modern and powerful DOM-based templating system that seamlessly integrates your data with the document object model (DOM). This guide delves into the heart of Monster Templating, unveiling how it can transform your HTML into a dynamic, data-driven powerhouse with minimal coding effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Embarking on the Monster Templating Journey
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The First Steps: Importing the Updater Class
&lt;/h3&gt;

&lt;p&gt;Our adventure begins with the integration of the Updater class from Monster's CDN, a simple yet pivotal step towards unlocking dynamic content creation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Updater&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://cdn.skypack.dev/@schukai/monster@latest/source/dom/updater.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setting the Stage: Preparing Your HTML Document
&lt;/h3&gt;

&lt;p&gt;Monster Templating thrives on flexibility, allowing you to inject data-binding attributes directly into your HTML or dynamically through JavaScript. This dual approach caters to diverse development styles and project requirements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;body&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;headline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-monster-replace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path:headline&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, embed directly in your HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;data-monster-replace=&lt;/span&gt;&lt;span class="s"&gt;"path:headline"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bringing Data to Life: Setting Up Data Binding
&lt;/h3&gt;

&lt;p&gt;With Monster, your data becomes the soul of your application, dynamically updating your HTML in real-time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;headline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Go!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;updater&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Updater&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;updater&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getSubject&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// For real-time updates&lt;/span&gt;
&lt;span class="nx"&gt;updater&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Demonstrating the magic of dynamic updates, we see how effortlessly the content evolves:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;headline&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Exploring the Enchanted Forest of Templating Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Magic Wand: Content Replacement
&lt;/h3&gt;

&lt;p&gt;Monster's &lt;code&gt;data-monster-replace&lt;/code&gt; attribute stands as your magic wand, enabling you to replace content effortlessly, adding a sprinkle of transformational magic when needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-monster-replace=&lt;/span&gt;&lt;span class="s"&gt;"static:HELLO | tolower"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Alchemist's Lab: Attribute Manipulation
&lt;/h3&gt;

&lt;p&gt;Transform and concoct new attributes with the &lt;code&gt;data-monster-attributes&lt;/code&gt; attribute, an alchemist's lab where new properties are forged:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-monster-attributes=&lt;/span&gt;&lt;span class="s"&gt;"id static:myid, class static:myclass"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;hello&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Vanishing Acts: Element Removal
&lt;/h3&gt;

&lt;p&gt;With &lt;code&gt;data-monster-remove&lt;/code&gt;, elements disappear from the DOM, a reminder of the impermanence of content in the dynamic web era:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;data-monster-remove&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Conjurer's Trick: Dynamic Element Insertion
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;data-monster-insert&lt;/code&gt; reveals the conjurer's trick, materializing elements from thin air (or data), showcasing the templating system's strongest feature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ol&lt;/span&gt; &lt;span class="na"&gt;data-monster-insert=&lt;/span&gt;&lt;span class="s"&gt;"myid path:a"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/ol&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Two-Way Mirror: Data Binding for Input Elements
&lt;/h3&gt;

&lt;p&gt;Monster introduces a two-way mirror with &lt;code&gt;data-monster-bind&lt;/code&gt;, where input fields and data models reflect and influence each other:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;data-monster-bind=&lt;/span&gt;&lt;span class="s"&gt;"path:a.b"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Grand Library of Data Types
&lt;/h2&gt;

&lt;p&gt;As we delve deeper into the enchanted forest, we uncover a grand library of data types, each with its own unique charm and function. From casting numeric spells with &lt;code&gt;number&lt;/code&gt; to weaving complex structures with &lt;code&gt;object&lt;/code&gt;, Monster Templating accommodates a diverse array of data types, ensuring your web applications are as dynamic and versatile as the world they inhabit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Epilogue
&lt;/h2&gt;

&lt;p&gt;Monster Templating doesn't reinvent web development, but it is a lightweight alternative. The real adventure lies in applying these principles to your projects to transform static HTML into living, breathing web applications that respond and evolve with your users' interactions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://monsterjs.org/"&gt;https://monsterjs.org/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>New version of Monster 3.55.0 released!</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Wed, 29 Nov 2023 15:51:32 +0000</pubDate>
      <link>https://dev.to/volker_schukai/new-version-of-monster-3550-released-6on</link>
      <guid>https://dev.to/volker_schukai/new-version-of-monster-3550-released-6on</guid>
      <description>&lt;p&gt;We're excited to announce the release of version 3.55.0 of our JavaScript HTML5 framework! This update introduces a host of improvements and new features aimed at enhancing the development experience and streamlining your workflow.&lt;/p&gt;

&lt;p&gt;Key Updates:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ContextHelp Fixed:&lt;/strong&gt; We've resolved issues in the ContextHelp feature, ensuring smoother and more intuitive assistance within the framework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New Control Element:&lt;/strong&gt; ContextError: This new addition allows for more robust error handling and improved user feedback mechanisms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default-Value by Translation:&lt;/strong&gt; Simplifying localization, the &lt;/p&gt; now seamlessly integrates translated default values.

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jekt9dtuc0iknydmzf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jekt9dtuc0iknydmzf6.png" alt="Schema Datatable"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unique Configuration Key Generation:&lt;/strong&gt; The generateUniqueConfigKey method has been refined. It no longer relies on hash values for keys, leading to more efficient configuration management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved Collapse Functionality:&lt;/strong&gt; The collapse functionality now calculates heights using clientHeight instead of scrollHeight, enhancing performance and accuracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persistent Data Table Sorting:&lt;/strong&gt; Enhancing user experience, the last sorting state in data tables is now saved, making data interaction more consistent and intuitive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpl963rvj6g5wfhiwxc3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpl963rvj6g5wfhiwxc3.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These updates represent our ongoing commitment to providing a robust and user-friendly development framework. We encourage you to explore these new features and improvements. Your feedback is invaluable to us, as it helps us to continuously refine and enhance Monster.&lt;/p&gt;

&lt;p&gt;Feel free to share your thoughts and experiences with version 3.55.0.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://monsterjs.org/" rel="noopener noreferrer"&gt;https://monsterjs.org/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/schukai/the-awakening-of-the-monster-53jk"&gt;https://dev.to/schukai/the-awakening-of-the-monster-53jk&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>html</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The awakening of the monster</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Sun, 05 Nov 2023 15:52:35 +0000</pubDate>
      <link>https://dev.to/schukai/the-awakening-of-the-monster-53jk</link>
      <guid>https://dev.to/schukai/the-awakening-of-the-monster-53jk</guid>
      <description>&lt;p&gt;We are pleased to announce the latest development in our JavaScript project: the release of the latest Monster library (3.52). &lt;/p&gt;

&lt;p&gt;This release marks an important milestone in the development of our web initiative by combining our previously separate components into a single, robust package.&lt;/p&gt;

&lt;h3&gt;
  
  
  A look at the past
&lt;/h3&gt;

&lt;p&gt;In the past, you had to manage multiple dependencies within the &lt;code&gt;@schukai&lt;/code&gt; ecosystem, such as &lt;code&gt;@schukai/component-form&lt;/code&gt; and other individual packages. &lt;/p&gt;

&lt;p&gt;While these modules served their purpose, they also introduced complexity when it came to version control, dependency management, and overall project coherence.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's new in @schukai/monster?
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;@schukai/monster&lt;/code&gt; library simplifies the development workflow by bringing all the high quality components you rely on under one roof. &lt;/p&gt;

&lt;p&gt;What you can expect:&lt;/p&gt;

&lt;p&gt;Unified code base: A single NPM package is managed, resulting in smoother updates and integrations.&lt;/p&gt;

&lt;p&gt;Streamlined development: With everything in one place, you'll spend less time juggling packages and more time building great applications.&lt;/p&gt;

&lt;p&gt;Improved performance: We've optimized internal dependencies and ensured that the unified library meets or exceeds each package's performance benchmarks.&lt;/p&gt;

&lt;p&gt;Seamless integration: The transition to &lt;code&gt;@schukai/monster&lt;/code&gt;  has been made as seamless as possible, requiring minimal changes to existing projects.&lt;/p&gt;

&lt;p&gt;To make the transition easier for you, we have created a comprehensive migration guide. Here are the main steps to get you started:&lt;/p&gt;

&lt;p&gt;Refactor your import directives to reference @schukai/monster.&lt;/p&gt;

&lt;p&gt;Follow the detailed instructions for any specific components that require additional migration steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking to the future
&lt;/h3&gt;

&lt;p&gt;The release of &lt;code&gt;@schukai/monster&lt;/code&gt; is more than just an update - it's a commitment to the future of development in our ecosystem. We will continue to support the library with regular updates, new features and improvements based on your feedback.&lt;/p&gt;

&lt;p&gt;We invite you to use the power and simplicity of &lt;code&gt;@schukai/monster&lt;/code&gt; in your next project. Stay tuned for more updates, and happy coding!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://monsterjs.org/"&gt;monsterjs.org/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webcomponents</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>html</category>
    </item>
    <item>
      <title>The Digital Services Act package</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Mon, 04 Sep 2023 20:22:17 +0000</pubDate>
      <link>https://dev.to/volker_schukai/the-digital-services-act-package-58eb</link>
      <guid>https://dev.to/volker_schukai/the-digital-services-act-package-58eb</guid>
      <description>&lt;p&gt;The EU passes a new law that will affect developers not only in the EU, but worldwide. &lt;/p&gt;

&lt;p&gt;The law provides for many mechanisms that are primarily intended to protect the rights of consumers. But I also see a lot of potential for abuse in this law.&lt;/p&gt;

&lt;p&gt;I know that developers don't have that much to do with laws, but if you offer certain services or are responsible for implementing them, you also have to deal with that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://digital-strategy.ec.europa.eu/en/policies/digital-services-act-package"&gt;https://digital-strategy.ec.europa.eu/en/policies/digital-services-act-package&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you heard about the set and what do you think?&lt;/p&gt;

</description>
      <category>law</category>
    </item>
    <item>
      <title>Nothing gives you a reality check faster.</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Mon, 14 Aug 2023 15:47:46 +0000</pubDate>
      <link>https://dev.to/volker_schukai/nothing-will-bring-you-back-down-to-earth-4gb4</link>
      <guid>https://dev.to/volker_schukai/nothing-will-bring-you-back-down-to-earth-4gb4</guid>
      <description>&lt;p&gt;Do you know the feeling when you have been programming for half an eternity on a mega cool feature and you are totally excited because it has become so good? Then you show it to your partner/friend and the only answer is "ok". &lt;/p&gt;

&lt;p&gt;Nothing will bring you back down to earth.&lt;/p&gt;

&lt;p&gt;Have you experienced this too?&lt;/p&gt;

&lt;p&gt;Share your experiences in the comments.&lt;/p&gt;

&lt;p&gt;PS: Don't let it get you down, here on dev.to you can get some praise! just write about your new project! 😁&lt;/p&gt;

</description>
      <category>developer</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>YAConfigLib - Dynamic Configurations in Go: Introducing Postprocessing Hooks</title>
      <dc:creator>Volker Schukai</dc:creator>
      <pubDate>Mon, 14 Aug 2023 15:40:14 +0000</pubDate>
      <link>https://dev.to/schukai/yaconfiglib-dynamic-configurations-in-go-introducing-postprocessing-hooks-mg8</link>
      <guid>https://dev.to/schukai/yaconfiglib-dynamic-configurations-in-go-introducing-postprocessing-hooks-mg8</guid>
      <description>&lt;p&gt;Hey Gophers! 🚀&lt;/p&gt;

&lt;p&gt;Do you struggle with configuration files in different formats like JSON, YAML or TOML in your Go applications? If yes, then you appreciate the value of a robust configuration management library. &lt;/p&gt;

&lt;p&gt;Today we released a brand new feature in our configuration library.&lt;/p&gt;

&lt;p&gt;We present: Postprocessing Hooks! 🌟&lt;/p&gt;

&lt;p&gt;Imagine, you can not only read configurations in different formats, but now you can also define hooks that are triggered directly when a configuration change is made. Previously, you could also solve this via ChangeHooks, but these ran in their own Go routine.&lt;/p&gt;

&lt;p&gt;The decisive advantage for tasks such as&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Changing paths based on new configurations.&lt;/li&gt;
&lt;li&gt;Building new structures after loading configurations.&lt;/li&gt;
&lt;li&gt;Integrating real-time responses to dynamic configurations into your application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why should you try the new feature of our configuration library?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flexibility: read and manage configurations in YAML, TOML and JSON.&lt;/li&gt;
&lt;li&gt;Reactivity: Real-time actions based on dynamic configuration changes.&lt;/li&gt;
&lt;li&gt;Powerful: Efficient handling without the overhead of additional routines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are convinced that after your first experience with Postprocessing Hooks, you will wonder how you ever got along without it!&lt;/p&gt;

&lt;p&gt;Try it out, share your feedback and let's improve dynamic configurations in Go together!&lt;/p&gt;

&lt;p&gt;Stay tuned for more exciting updates. Have a great time programming! 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gitlab.schukai.com/oss/libraries/go/application/configuration"&gt;https://gitlab.schukai.com/oss/libraries/go/application/configuration&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>config</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
