<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="227848" data-post-id="227848">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="odix67" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/odix67/120/19855_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  odix67
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>as <a class="mention" href="/u/msaraiva" rel="nofollow">@msaraiva</a> already mentioned in post <a href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/162" rel="nofollow">162</a> you have to use the master branch of surface in combination with LV 0.16.x and replace the &lt;%= %&gt; with curly brackets {}</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="227848" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/184">Post #183</a>
	                </div>
	            </div>
              <div id="likers-container-227848" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="227848"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #183"></div>
  </section>
</div>
    <div class="postbit" id="227886" data-post-id="227886">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="cmo" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cmo/120/19618_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  cmo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>There is a <code>LiveFileInput</code> too.</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://hex.pm/login?return=%2Foauth%2Fauthorize%3Fclient_id%3De67fc305-0d4c-4ef7-b0cd-3e5cd2352879%26code_challenge%3DA05evuEFkJn7Xr-C3hNvIzDimSiZsFilif-OF0W3jbI%26code_challenge_method%3DS256%26redirect_uri%3Dhttps%253A%252F%252Fsurface.hexorgs.pm%252Foauth%252Fcallback%26response_type%3Dcode%26scope%3Ddocs%253Asurface%26state%3D6hn7G2amyjo2qKaRAIqBxQ">
  <header class="source">
      <img src="https://hex.pm/images/hex-full-a8183c4f9adac71516516d107d402b18.svg?vsn=d" class="site-icon" alt="" width="136" height="120">

      <a href="https://hex.pm/login?return=%2Foauth%2Fauthorize%3Fclient_id%3De67fc305-0d4c-4ef7-b0cd-3e5cd2352879%26code_challenge%3DA05evuEFkJn7Xr-C3hNvIzDimSiZsFilif-OF0W3jbI%26code_challenge_method%3DS256%26redirect_uri%3Dhttps%253A%252F%252Fsurface.hexorgs.pm%252Foauth%252Fcallback%26response_type%3Dcode%26scope%3Ddocs%253Asurface%26state%3D6hn7G2amyjo2qKaRAIqBxQ" target="_blank" rel="noopener nofollow">Hex</a>
  </header>

  <article class="onebox-body">
    <img width="160" height="160" src="https://hex.pm/images/favicon-160-3770bc59f1f8ba7656b4db5a1eacd8e3.png?vsn=d" class="thumbnail onebox-avatar" alt="">

<h3><a href="https://hex.pm/login?return=%2Foauth%2Fauthorize%3Fclient_id%3De67fc305-0d4c-4ef7-b0cd-3e5cd2352879%26code_challenge%3DA05evuEFkJn7Xr-C3hNvIzDimSiZsFilif-OF0W3jbI%26code_challenge_method%3DS256%26redirect_uri%3Dhttps%253A%252F%252Fsurface.hexorgs.pm%252Foauth%252Fcallback%26response_type%3Dcode%26scope%3Ddocs%253Asurface%26state%3D6hn7G2amyjo2qKaRAIqBxQ" target="_blank" rel="noopener nofollow">Log in</a></h3>

  <p>A package manager for the Erlang ecosystem</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>
 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="227886" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/185">Post #184</a>
	                </div>
	            </div>
              <div id="likers-container-227886" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="227886"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #184"></div>
  </section>
</div>
    <div class="postbit" id="227901" data-post-id="227901">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="maz" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/maz/120/6075_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  maz
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Awesome, thanks. I’ll check it out.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="227901" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/186">Post #185</a>
	                </div>
	            </div>
              <div id="likers-container-227901" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="227901"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #185"></div>
  </section>
</div>
    <div class="postbit" id="228396" data-post-id="228396">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="daveboo" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  daveboo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Is Surface going to render alpine.js useless in Phoenix?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228396" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/187">Post #186</a>
	                </div>
	            </div>
              <div id="likers-container-228396" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228396"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #186"></div>
  </section>
</div>
    <div class="postbit" id="228405" data-post-id="228405">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="mikl" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mikl/120/16309_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  mikl
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>Is Surface going to render alpine.js useless in Phoenix?</p>
</blockquote>
<p>Not at all. Surface is still just for server-side rendering. If you want to do anything in your app that does not require a round-trip to the server to have your LiveView re-rendered, you need JavaScript, and most likely something like Alpine.js.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228405" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/188">Post #187</a>
	                </div>
	            </div>
              <div id="likers-container-228405" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228405"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #187"></div>
  </section>
</div>
    <div class="postbit" id="228432" data-post-id="228432">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="joerichsen" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/joerichsen/120/3267_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  joerichsen
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>It looks like <a class="mention" href="/u/chrismccord" rel="nofollow">@chrismccord</a> has something nice coming soon that will make the need for something like Alpine go away in some/most cases.</p>
<p>Check out this PR <a href="https://github.com/phoenixframework/phoenix_live_view/pull/1663" class="inline-onebox" rel="noopener nofollow ugc">Add JS commands by chrismccord · Pull Request #1663 · phoenixframework/phoenix_live_view · GitHub</a></p>
<p>It looks pretty awesome <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228432" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/189">Post #188</a>
	                </div>
	            </div>
              <div id="likers-container-228432" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228432"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #188"></div>
  </section>
</div>
    <div class="postbit" id="228442" data-post-id="228442">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="stefanchrobot" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/stefanchrobot/120/7657_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  stefanchrobot
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a href="https://twitter.com/josevalim/status/1447534433561677830" class="onebox" target="_blank" rel="noopener nofollow ugc">https://twitter.com/josevalim/status/1447534433561677830</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228442" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/190">Post #189</a>
	                </div>
	            </div>
              <div id="likers-container-228442" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228442"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #189"></div>
  </section>
</div>
    <div class="postbit" id="228495" data-post-id="228495">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="daveboo" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  daveboo
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Sorry, this reply was aimed at  <a class="mention" href="/u/joerichsen" rel="nofollow">@joerichsen</a>’s comments <img src="https://forum.elixirforum.com/images/emoji/apple/upside_down_face.png?v=15" title=":upside_down_face:" class="emoji" alt=":upside_down_face:" loading="lazy" width="20" height="20"></p>
<p>Yes, shades of Alpine and maybe Svelte? in there.</p>
<p>Looks great!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228495" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/191">Post #190</a>
	                </div>
	            </div>
              <div id="likers-container-228495" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228495"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #190"></div>
  </section>
</div>
    <div class="postbit" id="228841" data-post-id="228841">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="wdiechmann" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/wdiechmann/120/5725_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  wdiechmann
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>There are probably many in this thread who figured it out already - I’m hoping for one of you to give me that push across the finishing line here <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
<p>Please consider this very simplified “UI”<br>
</p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/5/a/5a5dc85d56a99b340a77f70422c854a051011a74.png" data-download-href="https://forum.elixirforum.com/uploads/default/5a5dc85d56a99b340a77f70422c854a051011a74" title="example desktop" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/3X/5/a/5a5dc85d56a99b340a77f70422c854a051011a74_2_345x215.png" alt="example desktop" data-base62-sha1="cTpTQEggHFMabqsBOqoqOwSJECE" width="345" height="215" srcset="https://forum.elixirforum.com/uploads/default/optimized/3X/5/a/5a5dc85d56a99b340a77f70422c854a051011a74_2_345x215.png, https://forum.elixirforum.com/uploads/default/optimized/3X/5/a/5a5dc85d56a99b340a77f70422c854a051011a74_2_517x322.png 1.5x, https://forum.elixirforum.com/uploads/default/optimized/3X/5/a/5a5dc85d56a99b340a77f70422c854a051011a74_2_690x430.png 2x" data-dominant-color="D0CB4C"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">example desktop</span><span class="informations">1440×900 1.8 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><br>
that will serve to illustrate my predicament - and my question(s)<p></p>
<ul>
<li>the blue could be a “profile” avatar with a dropdown menu - one item being ‘list your sales today’</li>
<li>the red could be a “sales” button</li>
<li>the green could be a overview of sales - best sales_order in nbr of items, max profit, most items in stock, etc</li>
<li>the yellow could be a list of sales</li>
</ul>
<p>With Rails (and js - or recently Hotwire) I would have the layout in basically any place, or nicely divided into partials whichever suits my use-case, and I can afford the user to tap the blue and in a controller method generate data (and rendering transitions) for the red, the green, the blue, and the yellow - and on my next tap of the blue, now possibly another controller method/action could do all the magic on the colors, with partial renderings coming from a number of sources, and now suddenly</p>
<ul>
<li>the blue could be the avatar still - but the dropdown menu now with a different dropdown (for some reason)</li>
<li>the red - a list stocks button now translated into French</li>
<li>the green - an action bar available to the yellow</li>
<li>the yellow - a ‘dynamic document’ where 2-3 workers are trying so solve what number of items should be ordered for stock from a huge number of possible SKU’s (a lot like <a class="mention" href="/u/josevalim" rel="nofollow">@josevalim</a> wonderful livebook - only for trend-analysis on past <code>stock_transactions</code></li>
</ul>
<p>With the PETALS [ Phoenix | Elixir | Tailwind | Alpine | LiveView | Surface ] stack I am really fighting to get a grip on the “moving parts” - and perhaps more importantly, the proper place to organize sources.</p>
<p>With LiveView I understand that I can <code>live_render</code> something very much akin to rails partials - which is okay, but adding Surface “to the mix” <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20"> 'cause I really like the <em>componentization/modularizing idea</em>  I seem to have to build a huge <code>.sface</code></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">&lt;Main {... messages: @flash, title: @title, info: @info, buttons: @buttons }&gt;
    &lt;Login :if={@auth == :logged_out || @live_action == :set_password}
	   {... prompt: @password_prompt, submit: "pw_submit" }/&gt;
    &lt;Search :if={@auth == :logged_in &amp;&amp; @live_action == :search}
	    {... default_query: @default_query, submit: "search",
	    pick_example: "pick_search_example" } /&gt;
    &lt;Write :if={@live_action == :write}
	   {... change: "write_change", auto_recover: "write_recover",
	   subject: @subject, recipients: @recipients,
	   addr_options: @addr_options, text: @write_text } /&gt;
    &lt;Config :if={@auth == :logged_in &amp;&amp; @live_action == :config}
	    {... change: "config_change", my_addr: @my_addr, my_addrs: @my_addrs,
	    my_lists: @my_lists, days: @archive_days, maildir: @archive_maildir,
	    orbit_api_key: @orbit_api_key, orbit_workspace: @orbit_workspace} /&gt;
    &lt;div :if={@auth == :logged_in} hidden={@live_action != :find}&gt;
	&lt;Find {... mails: @list_mails, tree: @list_tree, tz_offset: @tz_offset } /&gt;
    &lt;/div&gt;
    &lt;div :if={@auth == :logged_in} hidden={@live_action != :view}&gt;
	&lt;View {... meta: @mail_meta, content: @mail_content,
	      attachments: @mail_attachment_metas, tz_offset: @tz_offset } /&gt;
    &lt;/div&gt;
&lt;/Main&gt;
</code></pre>
<p>and an even bigger <code>.ex</code></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">...
def mount(_params, _session, socket) do
    if connected?(socket), do: PubSub.subscribe(Liv.PubSub, "messages")
    {:ok, socket}
  end

  # for the initial mount before login
  def handle_params(_params, _url, %Socket{assigns: %{live_action: :login}} = socket) do
    user = System.get_env("USER")

    {
      :noreply,
      socket
      |&gt; clear_flash()
      |&gt; push_event("set_value", %{key: "token", value: ""})
      |&gt; assign(
        auth: :logged_out,
        saved_path: Routes.mail_path(socket, :find, @default_query),
        page_title: "Login as #{user}",
        password_hash: Application.get_env(:liv, :password_hash),
        password_prompt: "Enter your password: ",
        info: "Login as #{user}",
        buttons: []
      )
    }
  end

  # write must be outside auth protection for form recovery
  def handle_params(
        %{"to" =&gt; to},
        _url,
        %Socket{assigns: %{live_action: :write, mail_opened: false}} = socket
      ) do
    {recipients, subject, text} = MailClient.parse_mailto(to)

    {
      :noreply,
      socket
      |&gt; assign(
        page_title: "Write",
        info: "",
        recipients: recipients,
        subject: subject,
        write_text: MailClient.quoted_text(nil, text),
        write_attachments: [],
        incoming_attachments: [],
        current_attachment: nil,
        write_chunk_outstanding: false,
        buttons: [
          {:button, "\u{1F4EC}", "send", false},
          {:attach, "\u{1F4CE}", "write_attach", false},
          {:button, "\u{1F5D1}", "drop_attachments", false},
          {:button, "\u{2716}", "close_write", false}
        ]
      )
    }
  end

  def handle_params(_params, url, %Socket{assigns: %{auth: nil}} = socket) do
...
</code></pre>
<p>that somehow - it seems to me - totally defeat the component/module idea in the first place?</p>
<p>Sorry <a class="mention" href="/u/derek-zhou" rel="nofollow">@derek-zhou</a> for c/p-ing <a href="https://github.com/derek-zhou/liv" rel="noopener nofollow ugc">your source</a> which BTW I find totally cool and a very good idea which I’d really like to extend with a few other ideas (once I get my head around this Surface stuff).</p>
<p>So - yeah - there you have it - all my “none-knowledge” <img src="https://forum.elixirforum.com/images/emoji/apple/woozy_face.png?v=15" title=":woozy_face:" class="emoji" alt=":woozy_face:" loading="lazy" width="20" height="20"> I’m totally aware that I most definitely have misunderstood this Surface thing; just can’t put my finger on it!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228841" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/192">Post #191</a>
	                </div>
	            </div>
              <div id="likers-container-228841" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228841"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #191"></div>
  </section>
</div>
    <div class="postbit" id="228846" data-post-id="228846">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="derek-zhou" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/derek-zhou/120/19943_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  derek-zhou
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>As you can see, my code organization is pretty simple. I have only one Liveview, no stateful components, etc. I would not call 60 LOC in a template or 1200 LOC in an .ex source huge, not by a long shot. Even if I have a hundred data assigns, 50 <code>handle_params</code> clauses and 10,000 LOC in the liveview file still nothing will break. Heck, 30 years ago people already have source file longer than 10,000 lines on DOS.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="228846" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/surface-a-component-based-library-for-phoenix-liveview/27671/193">Post #192</a>
	                </div>
	            </div>
              <div id="likers-container-228846" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="228846"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #192"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/27671/load_more?page=20">Load more posts (24 remaining)</a>
</div></template></turbo-stream>