<?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: Reevo Design</title>
    <description>The latest articles on DEV Community by Reevo Design (@reevo_design).</description>
    <link>https://dev.to/reevo_design</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%2F2887903%2Fa8382808-0f40-4b2f-beff-640e1bbf1862.png</url>
      <title>DEV Community: Reevo Design</title>
      <link>https://dev.to/reevo_design</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reevo_design"/>
    <language>en</language>
    <item>
      <title>Check out our latest post about RvSheet</title>
      <dc:creator>Reevo Design</dc:creator>
      <pubDate>Sat, 22 Feb 2025 12:26:30 +0000</pubDate>
      <link>https://dev.to/reevo_design/-4pgi</link>
      <guid>https://dev.to/reevo_design/-4pgi</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/reevo_design" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F2887903%2Fa8382808-0f40-4b2f-beff-640e1bbf1862.png" alt="reevo_design"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/reevo_design/how-we-redesigned-modal-windows-for-browsers-30gh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How we redesigned modal windows for browsers&lt;/h2&gt;
      &lt;h3&gt;Reevo Design ・ Feb 22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#npm&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#vue&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ux&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>npm</category>
      <category>vue</category>
      <category>ux</category>
    </item>
    <item>
      <title>How we redesigned modal windows for browsers</title>
      <dc:creator>Reevo Design</dc:creator>
      <pubDate>Sat, 22 Feb 2025 12:23:24 +0000</pubDate>
      <link>https://dev.to/reevo_design/how-we-redesigned-modal-windows-for-browsers-30gh</link>
      <guid>https://dev.to/reevo_design/how-we-redesigned-modal-windows-for-browsers-30gh</guid>
      <description>&lt;p&gt;In the process of developing a mobile cross-platform app or PWA, we urgently needed touch-friendly modal windows for UI building. We started searching for ready-made solutions compatible with Vue.js. Our key search criteria were: sheet-modal, high customization, no dependencies on specific UI kits, and of course, touch-friendliness.&lt;/p&gt;

&lt;p&gt;We found just two solutions that fit the sheet-modal description: Ionic Sheet Modal and Framework7 Sheet Modal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Sheet Modal?
&lt;/h2&gt;

&lt;p&gt;A Sheet Modal is a modal window that opens from the bottom of the screen and can resize based on user actions. For example, it can be expanded or collapsed by dragging a special indicator. This approach is especially popular in mobile interfaces because it is intuitive and convenient for touch devices.&lt;/p&gt;

&lt;p&gt;“A resizable sheet expands when people scroll its contents or drag the grabber, which is a small horizontal indicator that can appear at the top edge of a sheet. Sheets resize according to their detents, which are particular heights at which a sheet naturally rests...” — Apple Developer portal.&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%2F6rt0qk20yt8g6sz6o2vn.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%2F6rt0qk20yt8g6sz6o2vn.png" alt="IOS Sheet Modal" width="800" height="713"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Issues with Ready-Made Solutions
&lt;/h2&gt;

&lt;p&gt;Upon integrating other sheet modals, we encountered several drawbacks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: Both solutions offered basic functionality that didn’t meet all our needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bugs&lt;/strong&gt;: Numerous errors, especially across different devices and browsers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jerky Animations&lt;/strong&gt;: Opening and closing animations were unstable and not always smooth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI Kit Dependency&lt;/strong&gt;: Both solutions were tightly tied to their UI libraries, limiting flexibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These challenges led us to consider creating our own solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing RvSheet
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/GRQKIohjiY8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Touch-Friendly&lt;/strong&gt;: Specially developed for mobile and touchscreen devices, RvSheet ensures smooth and convenient interaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smooth Animation&lt;/strong&gt;: Powered by WAAPI, it offers one of the most efficient and smooth animations available today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Framework-Agnostic&lt;/strong&gt;: Created with pure JavaScript, RvSheet seamlessly integrates with any framework of your choice, from React to Svelte, Vue, or even vanilla JS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highly Customizable&lt;/strong&gt;: It provides everything needed to satisfy your customization needs through props.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full Control&lt;/strong&gt;: Offers complete flexibility with layout and styles, allowing for fully customized user interfaces.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual Keyboard Support&lt;/strong&gt;: Automatically adjusts and repositions the sheet when a virtual keyboard is opened on mobile devices, ensuring seamless user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lightweight and Efficient&lt;/strong&gt;: At just 20 KB, RvSheet delivers high performance without sacrificing functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero Dependencies&lt;/strong&gt;: RvSheet has no dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  We Value Accessibility
&lt;/h2&gt;

&lt;p&gt;At Reevo Design, we develop components compatible with any web library. RvSheet is no exception: it is fully controlled by the developer, from styles to behavior, making it suitable for projects of any scale and complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  WAAPI
&lt;/h2&gt;

&lt;p&gt;As researchers, we try to follow modern standards, so we chose WAAPI for browser animations—a powerful native animation tool that eliminates the need to use CSS directly. A key feature is that animations are processed in a separate thread via GPU resources, ensuring smooth animations even under heavy webpage load.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overcoming the Virtual Keyboard Challenge
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges was adapting modal windows for virtual keyboards on mobile devices. Many might have faced the issue where the virtual keyboard covers the input when trying to enter text. Additionally, Safari can unpredictable scroll and zoom, disrupting the user experience. We made extensive research and implemented clever solutions to work around this. RvSheet automatically adjusts its height to position the input field right above the keyboard when necessary.&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%2F81u893orx65ap6d1faex.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%2F81u893orx65ap6d1faex.png" alt="Reevo Sheet modal keyboard avoidance" width="800" height="1623"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/shorts/AI4gcqzxYz8" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Configuration Flexibility
&lt;/h2&gt;

&lt;p&gt;RvSheet offers multiple modal types and numerous settings. You can choose the right option for any scenario. More details are available in the &lt;a href="https://reevo.design/docs/sheet/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration
&lt;/h2&gt;

&lt;p&gt;RvSheet is straightforward to connect and integrate with any JS library.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Initialization:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DOMContentLoaded&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="o"&gt;=&amp;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;mymodal&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="s2"&gt;#my-modal&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;sheet&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;RvSheet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mymodal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;canClose&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fit-content&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="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  HTML Structure:
&lt;/h3&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;id=&lt;/span&gt;&lt;span class="s"&gt;"my-modal"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"rv-sheet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"rv-sheet__header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 100%; background: #888; height: 25px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;header&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"rv-sheet__content"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size: 28px;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Lorem ipsum dolor sit amet, consectetur adipisicing elit...
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Notes:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;rv-sheet&lt;/code&gt;: Main container class for the sheet.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rv-sheet__header&lt;/code&gt;: Container for the header section.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rv-sheet__content&lt;/code&gt;: Container for the content of the sheet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Playground
&lt;/h2&gt;

&lt;p&gt;We’ve prepared a &lt;a href="https://reevo.design/modules/sheet" rel="noopener noreferrer"&gt;playground&lt;/a&gt; to help you get familiar with the product.&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%2Fw1404v0qrmlciqnuyjtw.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%2Fw1404v0qrmlciqnuyjtw.png" alt="Reevo Sheet Playground" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/q1Yd9WdHqoY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  RECORD UX-2189
&lt;/h2&gt;

&lt;p&gt;During the first Reevo Earth-Mars expedition, a modular ship component called RvSheet was developed. This component became essential for ensuring intergalactic mobility and adaptability of the ship’s internal modules. During its design phase, engineers faced the challenge of creating something that could instantly isolate data or tasks from the general information space while remaining fully integrated with the ship’s core systems.&lt;/p&gt;

&lt;p&gt;RvSheet creates isolated work zones shielded from overloads and ambient noise. Whether it’s a strategic captain’s session or an engineering trajectory adjustment, RvSheet ensured that every task found its protected space.&lt;/p&gt;

&lt;p&gt;Github: &lt;a href="https://github.com/reevo-design/rv-sheet" rel="noopener noreferrer"&gt;https://github.com/reevo-design/rv-sheet&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://reevo.design/docs/sheet" rel="noopener noreferrer"&gt;https://reevo.design/docs/sheet&lt;/a&gt;&lt;br&gt;
Playground: &lt;a href="https://reevo.design/modules/sheet" rel="noopener noreferrer"&gt;https://reevo.design/modules/sheet&lt;/a&gt;&lt;br&gt;
X/Twitter: &lt;a href="https://x.com/reevo_design" rel="noopener noreferrer"&gt;https://x.com/reevo_design&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>npm</category>
      <category>vue</category>
      <category>ux</category>
    </item>
  </channel>
</rss>
