@zeix/ui-element
Version:
UIElement - minimal reactive framework based on Web Components
309 lines (305 loc) • 55.4 kB
HTML
<tab-group>
<div role="tablist">
<button type="button" role="tab" id="trigger_calc-table.html" aria-controls="panel_calc-table.html" aria-selected="false" tabindex="-1">HTML</button>
<button type="button" role="tab" id="trigger_calc-table.css" aria-controls="panel_calc-table.css" aria-selected="false" tabindex="-1">CSS</button>
<button type="button" role="tab" id="trigger_calc-table.ts" aria-controls="panel_calc-table.ts" aria-selected="true" tabindex="0">TypeScript</button>
</div>
<div role="tabpanel" id="panel_calc-table.html" aria-labelledby="trigger_calc-table.html" hidden>
<code-block language="html" copy-success="Copied!" copy-error="Error trying to copy to clipboard!">
<p class="meta">
<span class="file">calc-table.html</span>
<span class="language">html</span>
</p>
<pre class="shiki monokai" style="background-color:#272822;color:#F8F8F2" tabindex="0"><code><span class="line"><span style="color:#F8F8F2"><</span><span style="color:#F92672">calc-table</span><span style="color:#A6E22E"> rows</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"3"</span><span style="color:#A6E22E"> columns</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"3"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">div</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"rows"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">p</span><span style="color:#F8F8F2">>Number of rows:</</span><span style="color:#F92672">p</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">spin-button</span><span style="color:#A6E22E"> value</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"3"</span><span style="color:#A6E22E"> zero-label</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"Add Row"</span><span style="color:#A6E22E"> increment-label</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"Increment"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">button</span><span style="color:#A6E22E"> type</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"button"</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"decrement"</span><span style="color:#A6E22E"> aria-label</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"Decrement"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> −</span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">button</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">p</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"value"</span><span style="color:#F8F8F2">>3</</span><span style="color:#F92672">p</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">button</span><span style="color:#A6E22E"> type</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"button"</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"increment"</span><span style="color:#A6E22E"> aria-label</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"Increment"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> +</span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">button</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">spin-button</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">div</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">div</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"columns"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">p</span><span style="color:#F8F8F2">>Number of columns:</</span><span style="color:#F92672">p</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">spin-button</span></span>
<span class="line"><span style="color:#A6E22E"> value</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"3"</span></span>
<span class="line"><span style="color:#A6E22E"> zero-label</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"Add Column"</span></span>
<span class="line"><span style="color:#A6E22E"> increment-label</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"Increment"</span></span>
<span class="line"><span style="color:#F8F8F2"> ></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">button</span><span style="color:#A6E22E"> type</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"button"</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"decrement"</span><span style="color:#A6E22E"> aria-label</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"Decrement"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> −</span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">button</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">p</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"value"</span><span style="color:#F8F8F2">>3</</span><span style="color:#F92672">p</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">button</span><span style="color:#A6E22E"> type</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"button"</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"increment"</span><span style="color:#A6E22E"> aria-label</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"Increment"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> +</span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">button</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">spin-button</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">div</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">table</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">thead</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">tr</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">th</span><span style="color:#A6E22E"> scope</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"col"</span><span style="color:#F8F8F2">>Row</</span><span style="color:#F92672">th</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">tr</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">thead</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">tbody</span><span style="color:#F8F8F2">></</span><span style="color:#F92672">tbody</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">tfoot</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">tr</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">th</span><span style="color:#A6E22E"> scope</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"row"</span><span style="color:#F8F8F2">>Sum</</span><span style="color:#F92672">th</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">tr</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">tfoot</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">table</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">template</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"calc-table-row"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">tr</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">th</span><span style="color:#A6E22E"> scope</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"row"</span><span style="color:#F8F8F2">><</span><span style="color:#F92672">slot</span><span style="color:#F8F8F2">></</span><span style="color:#F92672">slot</span><span style="color:#F8F8F2">></</span><span style="color:#F92672">th</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">tr</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">template</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">template</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"calc-table-colhead"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">th</span><span style="color:#A6E22E"> scope</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"col"</span><span style="color:#F8F8F2">><</span><span style="color:#F92672">slot</span><span style="color:#F8F8F2">></</span><span style="color:#F92672">slot</span><span style="color:#F8F8F2">></</span><span style="color:#F92672">th</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">template</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">template</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"calc-table-cell"</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">td</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">label</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">span</span><span style="color:#A6E22E"> class</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"visually-hidden"</span><span style="color:#F8F8F2">><</span><span style="color:#F92672">slot</span><span style="color:#F8F8F2">></</span><span style="color:#F92672">slot</span><span style="color:#F8F8F2">></</span><span style="color:#F92672">span</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> <</span><span style="color:#F92672">input</span><span style="color:#A6E22E"> type</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"number"</span><span style="color:#A6E22E"> min</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"0"</span><span style="color:#A6E22E"> max</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"100"</span><span style="color:#A6E22E"> step</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">"1"</span><span style="color:#A6E22E"> value</span><span style="color:#F8F8F2">=</span><span style="color:#E6DB74">""</span><span style="color:#F8F8F2"> /></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">label</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">td</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"> </</span><span style="color:#F92672">template</span><span style="color:#F8F8F2">></span></span>
<span class="line"><span style="color:#F8F8F2"></</span><span style="color:#F92672">calc-table</span><span style="color:#F8F8F2">></span></span>
<span class="line"></span></code></pre>
<input-button class="copy">
<button type="button" class="secondary small">
<span class="label">Copy</span>
</button>
</input-button>
</code-block>
</div>
<div role="tabpanel" id="panel_calc-table.css" aria-labelledby="trigger_calc-table.css" hidden>
<code-block language="css" copy-success="Copied!" copy-error="Error trying to copy to clipboard!">
<p class="meta">
<span class="file">calc-table.css</span>
<span class="language">css</span>
</p>
<pre class="shiki monokai" style="background-color:#272822;color:#F8F8F2" tabindex="0"><code><span class="line"><span style="color:#F92672">calc-table</span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> display</span><span style="color:#F8F8F2">: </span><span style="color:#66D9EF">inline-block</span><span style="color:#F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F8F8F2"> .</span><span style="color:#66D9EF;font-style:italic">rows</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> .</span><span style="color:#66D9EF;font-style:italic">columns</span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> display</span><span style="color:#F8F8F2">: </span><span style="color:#66D9EF">flex</span><span style="color:#F8F8F2">;</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> gap</span><span style="color:#F8F8F2">: </span><span style="color:#66D9EF">var</span><span style="color:#F8F8F2">(--space-m);</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> justify-content</span><span style="color:#F8F8F2">: </span><span style="color:#66D9EF">space-between</span><span style="color:#F8F8F2">;</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> margin-block-end</span><span style="color:#F8F8F2">: </span><span style="color:#66D9EF">var</span><span style="color:#F8F8F2">(--space-m);</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F8F8F2"> & p {</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> margin</span><span style="color:#F8F8F2">: </span><span style="color:#AE81FF">0</span><span style="color:#F8F8F2">;</span></span>
<span class="line"><span style="color:#F8F8F2"> }</span></span>
<span class="line"><span style="color:#F8F8F2"> }</span></span>
<span class="line"><span style="color:#F8F8F2">}</span></span>
<span class="line"></span></code></pre>
<input-button class="copy">
<button type="button" class="secondary small">
<span class="label">Copy</span>
</button>
</input-button>
</code-block>
</div>
<div role="tabpanel" id="panel_calc-table.ts" aria-labelledby="trigger_calc-table.ts">
<code-block language="ts" copy-success="Copied!" copy-error="Error trying to copy to clipboard!">
<p class="meta">
<span class="file">calc-table.ts</span>
<span class="language">ts</span>
</p>
<pre class="shiki monokai" style="background-color:#272822;color:#F8F8F2" tabindex="0"><code><span class="line"><span style="color:#F92672">import</span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F92672"> type</span><span style="color:#F8F8F2"> Component,</span></span>
<span class="line"><span style="color:#F92672"> type</span><span style="color:#F8F8F2"> State,</span></span>
<span class="line"><span style="color:#F8F8F2"> all,</span></span>
<span class="line"><span style="color:#F8F8F2"> asInteger,</span></span>
<span class="line"><span style="color:#F8F8F2"> component,</span></span>
<span class="line"><span style="color:#F8F8F2"> first,</span></span>
<span class="line"><span style="color:#F8F8F2"> insertOrRemoveElement,</span></span>
<span class="line"><span style="color:#F8F8F2"> on,</span></span>
<span class="line"><span style="color:#F8F8F2"> setProperty,</span></span>
<span class="line"><span style="color:#F8F8F2"> setText,</span></span>
<span class="line"><span style="color:#F8F8F2"> state,</span></span>
<span class="line"><span style="color:#F8F8F2">} </span><span style="color:#F92672">from</span><span style="color:#E6DB74"> "../../../"</span><span style="color:#F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F92672">import</span><span style="color:#F8F8F2"> { SpinButtonProps } </span><span style="color:#F92672">from</span><span style="color:#E6DB74"> "../spin-button/spin-button"</span><span style="color:#F8F8F2">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F92672">export</span><span style="color:#66D9EF;font-style:italic"> type</span><span> </span><span style="color:#A6E22E;text-decoration:underline">CalcTableProps</span><span style="color:#F92672"> =</span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F8F8F2"> columns</span><span style="color:#F92672">:</span><span style="color:#66D9EF;font-style:italic"> number</span><span style="color:#F8F8F2">;</span></span>
<span class="line"><span style="color:#F8F8F2"> rows</span><span style="color:#F92672">:</span><span style="color:#66D9EF;font-style:italic"> number</span><span style="color:#F8F8F2">;</span></span>
<span class="line"><span style="color:#F8F8F2">};</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F92672">export</span><span style="color:#F92672"> default</span><span style="color:#A6E22E"> component</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> "calc-table"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F8F8F2"> columns: </span><span style="color:#A6E22E">asInteger</span><span style="color:#F8F8F2">(),</span></span>
<span class="line"><span style="color:#F8F8F2"> rows: </span><span style="color:#A6E22E">asInteger</span><span style="color:#F8F8F2">(),</span></span>
<span class="line"><span style="color:#F8F8F2"> },</span></span>
<span class="line"><span style="color:#F8F8F2"> (</span><span style="color:#FD971F;font-style:italic">el</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> colHeads </span><span style="color:#F92672">=</span><span style="color:#E6DB74"> "ABCDEFGHIJKLMNOPQRSTUVWXYZ"</span><span style="color:#F8F8F2">;</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> rowTemplate </span><span style="color:#F92672">=</span></span>
<span class="line"><span style="color:#F8F8F2"> el.</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2"><</span><span style="color:#A6E22E;text-decoration:underline">HTMLTemplateElement</span><span style="color:#F8F8F2">>(</span><span style="color:#E6DB74">".calc-table-row"</span><span style="color:#F8F8F2">);</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> colheadTemplate </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> el.</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2"><</span><span style="color:#A6E22E;text-decoration:underline">HTMLTemplateElement</span><span style="color:#F8F8F2">>(</span></span>
<span class="line"><span style="color:#E6DB74"> ".calc-table-colhead"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> );</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> cellTemplate </span><span style="color:#F92672">=</span></span>
<span class="line"><span style="color:#F8F8F2"> el.</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2"><</span><span style="color:#A6E22E;text-decoration:underline">HTMLTemplateElement</span><span style="color:#F8F8F2">>(</span><span style="color:#E6DB74">".calc-table-cell"</span><span style="color:#F8F8F2">);</span></span>
<span class="line"><span style="color:#F92672"> if</span><span style="color:#F8F8F2"> (</span><span style="color:#F92672">!</span><span style="color:#F8F8F2">rowTemplate </span><span style="color:#F92672">||</span><span style="color:#F92672"> !</span><span style="color:#F8F8F2">colheadTemplate </span><span style="color:#F92672">||</span><span style="color:#F92672"> !</span><span style="color:#F8F8F2">cellTemplate)</span></span>
<span class="line"><span style="color:#F92672"> throw</span><span style="color:#F92672"> new</span><span style="color:#A6E22E"> Error</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"Missing template elements"</span><span style="color:#F8F8F2">);</span></span>
<span class="line"></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> colSums </span><span style="color:#F92672">=</span><span style="color:#F92672"> new</span><span style="color:#A6E22E"> Map</span><span style="color:#F8F8F2"><</span><span style="color:#66D9EF;font-style:italic">string</span><span style="color:#F8F8F2">, </span><span style="color:#A6E22E;text-decoration:underline">State</span><span style="color:#F8F8F2"><</span><span style="color:#66D9EF;font-style:italic">number</span><span style="color:#F8F8F2">>>();</span></span>
<span class="line"><span style="color:#F92672"> for</span><span style="color:#F8F8F2"> (</span><span style="color:#66D9EF;font-style:italic">let</span><span style="color:#F8F8F2"> i </span><span style="color:#F92672">=</span><span style="color:#AE81FF"> 0</span><span style="color:#F8F8F2">; i </span><span style="color:#F92672"><</span><span style="color:#F8F8F2"> el.columns; i</span><span style="color:#F92672">++</span><span style="color:#F8F8F2">) {</span></span>
<span class="line"><span style="color:#F8F8F2"> colSums.</span><span style="color:#A6E22E">set</span><span style="color:#F8F8F2">(colHeads[i], </span><span style="color:#A6E22E">state</span><span style="color:#F8F8F2">(</span><span style="color:#AE81FF">0</span><span style="color:#F8F8F2">));</span></span>
<span class="line"><span style="color:#F8F8F2"> }</span></span>
<span class="line"></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#A6E22E"> calcColumnSum</span><span style="color:#F92672"> =</span><span style="color:#F8F8F2"> (</span><span style="color:#FD971F;font-style:italic">rowKey</span><span style="color:#F92672">:</span><span style="color:#66D9EF;font-style:italic"> string</span><span style="color:#F8F8F2">)</span><span style="color:#F92672">:</span><span style="color:#66D9EF;font-style:italic"> number</span><span style="color:#66D9EF;font-style:italic"> =></span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F92672"> return</span><span style="color:#F8F8F2"> Array.</span><span style="color:#A6E22E">from</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> el.</span><span style="color:#A6E22E">querySelectorAll</span><span style="color:#F8F8F2"><</span><span style="color:#A6E22E;text-decoration:underline">HTMLInputElement</span><span style="color:#F8F8F2">>(</span></span>
<span class="line"><span style="color:#E6DB74"> `tbody input[data-key="</span><span style="color:#F92672">${</span><span style="color:#F8F8F2">rowKey</span><span style="color:#F92672">}</span><span style="color:#E6DB74">"]`</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"><span style="color:#F8F8F2"> )</span></span>
<span class="line"><span style="color:#F8F8F2"> .</span><span style="color:#A6E22E">map</span><span style="color:#F8F8F2">((</span><span style="color:#FD971F;font-style:italic">input</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span></span>
<span class="line"><span style="color:#F8F8F2"> Number.</span><span style="color:#A6E22E">isFinite</span><span style="color:#F8F8F2">(input.valueAsNumber)</span></span>
<span class="line"><span style="color:#F92672"> ?</span><span style="color:#F8F8F2"> input.valueAsNumber</span></span>
<span class="line"><span style="color:#F92672"> :</span><span style="color:#AE81FF"> 0</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> )</span></span>
<span class="line"><span style="color:#F8F8F2"> .</span><span style="color:#A6E22E">reduce</span><span style="color:#F8F8F2">((</span><span style="color:#FD971F;font-style:italic">acc</span><span style="color:#F8F8F2">, </span><span style="color:#FD971F;font-style:italic">val</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> acc </span><span style="color:#F92672">+</span><span style="color:#F8F8F2"> val, </span><span style="color:#AE81FF">0</span><span style="color:#F8F8F2">);</span></span>
<span class="line"><span style="color:#F8F8F2"> };</span></span>
<span class="line"></span>
<span class="line"><span style="color:#F92672"> return</span><span style="color:#F8F8F2"> [</span></span>
<span class="line"><span style="color:#88846F"> /* Control number of rows / columns */</span></span>
<span class="line"><span style="color:#A6E22E"> setProperty</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> "rows"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> () </span><span style="color:#66D9EF;font-style:italic">=></span></span>
<span class="line"><span style="color:#F8F8F2"> el.</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2"><</span><span style="color:#A6E22E;text-decoration:underline">Component</span><span style="color:#F8F8F2"><</span><span style="color:#A6E22E;text-decoration:underline">SpinButtonProps</span><span style="color:#F8F8F2">>>(</span></span>
<span class="line"><span style="color:#E6DB74"> ".rows spin-button"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> )?.value,</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"><span style="color:#A6E22E"> setProperty</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> "columns"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> () </span><span style="color:#66D9EF;font-style:italic">=></span></span>
<span class="line"><span style="color:#F8F8F2"> el.</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2"><</span><span style="color:#A6E22E;text-decoration:underline">Component</span><span style="color:#F8F8F2"><</span><span style="color:#A6E22E;text-decoration:underline">SpinButtonProps</span><span style="color:#F8F8F2">>>(</span></span>
<span class="line"><span style="color:#E6DB74"> ".columns spin-button"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> )?.value,</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"></span>
<span class="line"><span style="color:#88846F"> /* Create rows */</span></span>
<span class="line"><span style="color:#A6E22E"> first</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> "tbody"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#A6E22E"> insertOrRemoveElement</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> (</span><span style="color:#FD971F;font-style:italic">target</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> el.rows </span><span style="color:#F92672">-</span><span style="color:#F8F8F2"> target.</span><span style="color:#A6E22E">querySelectorAll</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"tr"</span><span style="color:#F8F8F2">).length,</span></span>
<span class="line"><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F8F8F2"> position: </span><span style="color:#E6DB74">"beforeend"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#A6E22E"> create</span><span style="color:#F8F8F2">: (</span><span style="color:#FD971F;font-style:italic">parent</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> row </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> document.</span><span style="color:#A6E22E">importNode</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> rowTemplate.content,</span></span>
<span class="line"><span style="color:#AE81FF"> true</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> ).firstElementChild;</span></span>
<span class="line"><span style="color:#F92672"> if</span><span style="color:#F8F8F2"> (</span><span style="color:#F92672">!</span><span style="color:#F8F8F2">(row </span><span style="color:#F92672">instanceof</span><span> </span><span style="color:#A6E22E;text-decoration:underline">HTMLTableRowElement</span><span style="color:#F8F8F2">))</span></span>
<span class="line"><span style="color:#F92672"> throw</span><span style="color:#F92672"> new</span><span style="color:#A6E22E"> Error</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> `Expected <tr> as root in table row template, got </span><span style="color:#F92672">${</span><span style="color:#F8F8F2">row</span><span style="color:#F92672">}</span><span style="color:#E6DB74">`</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> );</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> rowKey </span><span style="color:#F92672">=</span><span style="color:#A6E22E"> String</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> parent.</span><span style="color:#A6E22E">querySelectorAll</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"tr"</span><span style="color:#F8F8F2">).length </span><span style="color:#F92672">+</span><span style="color:#AE81FF"> 1</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> );</span></span>
<span class="line"><span style="color:#F8F8F2"> row.dataset[</span><span style="color:#E6DB74">"key"</span><span style="color:#F8F8F2">] </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> rowKey;</span></span>
<span class="line"><span style="color:#F8F8F2"> row</span></span>
<span class="line"><span style="color:#F8F8F2"> .</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"slot"</span><span style="color:#F8F8F2">)</span></span>
<span class="line"><span style="color:#F8F8F2"> ?.</span><span style="color:#A6E22E">replaceWith</span><span style="color:#F8F8F2">(document.</span><span style="color:#A6E22E">createTextNode</span><span style="color:#F8F8F2">(rowKey));</span></span>
<span class="line"><span style="color:#F92672"> return</span><span style="color:#F8F8F2"> row;</span></span>
<span class="line"><span style="color:#F8F8F2"> },</span></span>
<span class="line"><span style="color:#A6E22E"> resolve</span><span style="color:#F8F8F2">: () </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F92672"> for</span><span style="color:#F8F8F2"> (</span><span style="color:#66D9EF;font-style:italic">const</span><span style="color:#F8F8F2"> [colKey, colSum] </span><span style="color:#F92672">of</span><span style="color:#F8F8F2"> colSums) {</span></span>
<span class="line"><span style="color:#F8F8F2"> colSum.</span><span style="color:#A6E22E">set</span><span style="color:#F8F8F2">(</span><span style="color:#A6E22E">calcColumnSum</span><span style="color:#F8F8F2">(colKey));</span></span>
<span class="line"><span style="color:#F8F8F2"> }</span></span>
<span class="line"><span style="color:#F8F8F2"> },</span></span>
<span class="line"><span style="color:#F8F8F2"> },</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"></span>
<span class="line"><span style="color:#88846F"> /* Create column headers */</span></span>
<span class="line"><span style="color:#A6E22E"> first</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> "thead tr"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#A6E22E"> insertOrRemoveElement</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> (</span><span style="color:#FD971F;font-style:italic">target</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span></span>
<span class="line"><span style="color:#F8F8F2"> el.columns </span><span style="color:#F92672">-</span><span style="color:#F8F8F2"> (target.</span><span style="color:#A6E22E">querySelectorAll</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"th"</span><span style="color:#F8F8F2">).length </span><span style="color:#F92672">-</span><span style="color:#AE81FF"> 1</span><span style="color:#F8F8F2">),</span></span>
<span class="line"><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F8F8F2"> position: </span><span style="color:#E6DB74">"beforeend"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#A6E22E"> create</span><span style="color:#F8F8F2">: (</span><span style="color:#FD971F;font-style:italic">parent</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> cell </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> document.</span><span style="color:#A6E22E">importNode</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> colheadTemplate.content,</span></span>
<span class="line"><span style="color:#AE81FF"> true</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> ).firstElementChild;</span></span>
<span class="line"><span style="color:#F92672"> if</span><span style="color:#F8F8F2"> (</span><span style="color:#F92672">!</span><span style="color:#F8F8F2">(cell </span><span style="color:#F92672">instanceof</span><span> </span><span style="color:#A6E22E;text-decoration:underline">HTMLTableCellElement</span><span style="color:#F8F8F2">))</span></span>
<span class="line"><span style="color:#F92672"> throw</span><span style="color:#F92672"> new</span><span style="color:#A6E22E"> Error</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> `Expected <th> as root in column header template, got </span><span style="color:#F92672">${</span><span style="color:#F8F8F2">cell</span><span style="color:#F92672">}</span><span style="color:#E6DB74">`</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> );</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> colKey </span><span style="color:#F92672">=</span></span>
<span class="line"><span style="color:#F8F8F2"> colHeads[</span></span>
<span class="line"><span style="color:#F8F8F2"> parent.</span><span style="color:#A6E22E">querySelectorAll</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"th"</span><span style="color:#F8F8F2">).length </span><span style="color:#F92672">-</span><span style="color:#AE81FF"> 1</span></span>
<span class="line"><span style="color:#F8F8F2"> ];</span></span>
<span class="line"><span style="color:#F8F8F2"> colSums.</span><span style="color:#A6E22E">set</span><span style="color:#F8F8F2">(colKey, </span><span style="color:#A6E22E">state</span><span style="color:#F8F8F2">(</span><span style="color:#AE81FF">0</span><span style="color:#F8F8F2">));</span></span>
<span class="line"><span style="color:#F8F8F2"> cell</span></span>
<span class="line"><span style="color:#F8F8F2"> .</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"slot"</span><span style="color:#F8F8F2">)</span></span>
<span class="line"><span style="color:#F8F8F2"> ?.</span><span style="color:#A6E22E">replaceWith</span><span style="color:#F8F8F2">(document.</span><span style="color:#A6E22E">createTextNode</span><span style="color:#F8F8F2">(colKey));</span></span>
<span class="line"><span style="color:#F92672"> return</span><span style="color:#F8F8F2"> cell;</span></span>
<span class="line"><span style="color:#F8F8F2"> },</span></span>
<span class="line"><span style="color:#F8F8F2"> },</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"></span>
<span class="line"><span style="color:#88846F"> /* Create input cells for each row */</span></span>
<span class="line"><span style="color:#A6E22E"> all</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> "tbody tr"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#A6E22E"> insertOrRemoveElement</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> (</span><span style="color:#FD971F;font-style:italic">target</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span></span>
<span class="line"><span style="color:#F8F8F2"> el.columns </span><span style="color:#F92672">-</span><span style="color:#F8F8F2"> target.</span><span style="color:#A6E22E">querySelectorAll</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"td"</span><span style="color:#F8F8F2">).length,</span></span>
<span class="line"><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F8F8F2"> position: </span><span style="color:#E6DB74">"beforeend"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#A6E22E"> create</span><span style="color:#F8F8F2">: (</span><span style="color:#FD971F;font-style:italic">parent</span><span style="color:#F92672">:</span><span> </span><span style="color:#A6E22E;text-decoration:underline">HTMLElement</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> cell </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> document.</span><span style="color:#A6E22E">importNode</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> cellTemplate.content,</span></span>
<span class="line"><span style="color:#AE81FF"> true</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> ).firstElementChild;</span></span>
<span class="line"><span style="color:#F92672"> if</span><span style="color:#F8F8F2"> (</span><span style="color:#F92672">!</span><span style="color:#F8F8F2">(cell </span><span style="color:#F92672">instanceof</span><span> </span><span style="color:#A6E22E;text-decoration:underline">HTMLTableCellElement</span><span style="color:#F8F8F2">))</span></span>
<span class="line"><span style="color:#F92672"> throw</span><span style="color:#F92672"> new</span><span style="color:#A6E22E"> Error</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> `Expected <td> as root in cell template, got </span><span style="color:#F92672">${</span><span style="color:#F8F8F2">cell</span><span style="color:#F92672">}</span><span style="color:#E6DB74">`</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> );</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> rowKey </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> parent.dataset[</span><span style="color:#E6DB74">"key"</span><span style="color:#F8F8F2">];</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> colKey </span><span style="color:#F92672">=</span></span>
<span class="line"><span style="color:#F8F8F2"> colHeads[parent.</span><span style="color:#A6E22E">querySelectorAll</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"td"</span><span style="color:#F8F8F2">).length];</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> input </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> cell.</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"input"</span><span style="color:#F8F8F2">);</span></span>
<span class="line"><span style="color:#F92672"> if</span><span style="color:#F8F8F2"> (</span><span style="color:#F92672">!</span><span style="color:#F8F8F2">input)</span></span>
<span class="line"><span style="color:#F92672"> throw</span><span style="color:#F92672"> new</span><span style="color:#A6E22E"> Error</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> "No input found in cell template"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> );</span></span>
<span class="line"><span style="color:#F8F8F2"> input.dataset[</span><span style="color:#E6DB74">"key"</span><span style="color:#F8F8F2">] </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> colKey;</span></span>
<span class="line"><span style="color:#F8F8F2"> cell</span></span>
<span class="line"><span style="color:#F8F8F2"> .</span><span style="color:#A6E22E">querySelector</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"slot"</span><span style="color:#F8F8F2">)</span></span>
<span class="line"><span style="color:#F8F8F2"> ?.</span><span style="color:#A6E22E">replaceWith</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> document.</span><span style="color:#A6E22E">createTextNode</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> `</span><span style="color:#F92672">${</span><span style="color:#F8F8F2">colKey</span><span style="color:#F92672">}${</span><span style="color:#F8F8F2">rowKey</span><span style="color:#F92672">}</span><span style="color:#E6DB74">`</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"><span style="color:#F8F8F2"> );</span></span>
<span class="line"><span style="color:#F92672"> return</span><span style="color:#F8F8F2"> cell;</span></span>
<span class="line"><span style="color:#F8F8F2"> },</span></span>
<span class="line"><span style="color:#F8F8F2"> },</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"><span style="color:#F8F8F2"> ),</span></span>
<span class="line"></span>
<span class="line"><span style="color:#88846F"> /* Create empty cells for column sums */</span></span>
<span class="line"><span style="color:#A6E22E"> first</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#E6DB74"> "tfoot tr"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#A6E22E"> insertOrRemoveElement</span><span style="color:#F8F8F2">(</span></span>
<span class="line"><span style="color:#F8F8F2"> (</span><span style="color:#FD971F;font-style:italic">target</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span></span>
<span class="line"><span style="color:#F8F8F2"> el.columns </span><span style="color:#F92672">-</span><span style="color:#F8F8F2"> target.</span><span style="color:#A6E22E">querySelectorAll</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"td"</span><span style="color:#F8F8F2">).length,</span></span>
<span class="line"><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#F8F8F2"> position: </span><span style="color:#E6DB74">"beforeend"</span><span style="color:#F8F8F2">,</span></span>
<span class="line"><span style="color:#A6E22E"> create</span><span style="color:#F8F8F2">: (</span><span style="color:#FD971F;font-style:italic">parent</span><span style="color:#F8F8F2">) </span><span style="color:#66D9EF;font-style:italic">=></span><span style="color:#F8F8F2"> {</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> cell </span><span style="color:#F92672">=</span><span style="color:#F8F8F2"> document.</span><span style="color:#A6E22E">createElement</span><span style="color:#F8F8F2">(</span><span style="color:#E6DB74">"td"</span><span style="color:#F8F8F2">);</span></span>
<span class="line"><span style="color:#66D9EF;font-style:italic"> const</span><span style="color:#F8F8F2"> colKey </span><span style="color:#F92672">=</span></span>
<span class="line"><span style="color:#F8F8F2"> colHeads[parent.</span><span style="color:#A6E22E">querySelectorAll</span><spa