<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://bestax.io/blog</id>
    <title>Bestax-Bulma Blog</title>
    <updated>2026-08-06T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://bestax.io/blog"/>
    <subtitle>Bestax-Bulma Blog</subtitle>
    <icon>https://bestax.io/img/logo.svg</icon>
    <entry>
        <title type="html"><![CDATA[Accelerated Evolution for Agent Skills]]></title>
        <id>https://bestax.io/blog/ai-loop-keeps-skills-honest</id>
        <link href="https://bestax.io/blog/ai-loop-keeps-skills-honest"/>
        <updated>2026-08-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Coding agents barely know new libraries, so bestax ships skills that teach them. Then we proved the skills work with graded cold-start runs and evolved them for ten generations: 85/100 to a 95.2 mean.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Accelerated Evolution for Agent Skills, drawn as pixel art: a builder robot hands a glowing bestax cartridge across a workbench to a grader robot whose clipboard scorecard reads 95.2" src="https://bestax.io/assets/images/ai-loop-keeps-skills-honest-f122433de5f1c220a80e65eec5176894.svg" width="1200" height="630" class="img_WUYJ"></p>
<p>Ask a coding agent for a dashboard in a library its training data barely saw, and one of two things happens: it quietly switches to the popular library it has seen a million times, or it stays loyal and invents props that don't exist. We fought that with agent skills, playbooks that teach an agent our library. This is the story of what came after: proving the skills actually work, then making them better the way evolution would, just faster.</p>
<p>The fight itself is quick to retell. bestax is our React component library for Bulma, young enough and niche enough that no model's training data carries it properly. Whatever is over-represented gets recommended, recommendations compound, and a library outside that flywheel barely exists to an agent; even a model that has met bestax has met an old bestax, frozen at its training cutoff. I made the long version of that argument in <a class="" href="https://bestax.io/blog/fighting-ai-training-bias">Fighting AI Training Bias</a>, along with everything we ship to counter it: docs a machine can read whole, a complete component catalog, and seven agent skills. What that post couldn't answer was the question that matters: do the skills actually make agents better? This one is about how we found out, and what we did with the answer.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="skills-in-the-wild">Skills in the Wild<a href="https://bestax.io/blog/ai-loop-keeps-skills-honest#skills-in-the-wild" class="hash-link" aria-label="Direct link to Skills in the Wild" title="Direct link to Skills in the Wild" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Skills as a shipped product, drawn as pixel art: a bestax cartridge in an open retail box on a store counter beside a tray of bug tickets numbered 194 to 197, with a robot shopkeeper filing one" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAJ2CAIAAADAIuwLAAAQAElEQVR4nOzdT4wk133Y8fequ2d2V5Rhx4APC8eBHEJWLjZAJ4YAEggQ2IADGAYEmqBPCuQAvuUmxzFgI6ccEvgWIIAdxEJuIgReYsSh41yIkIcYMBUdhFAyJCGKYykb6C8p7s50V5Xfq+qenZ3lamc4Pf3v9/lo2Oytrekla1bs/c77U9Pju88mAAAA4mkSAAAAIQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQ0wQb98LLL1448sYrryYAAGCzjBACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQ+fjuswkAAIB4jBACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQ1DQB3ICvvfXmhSMfee75BADALjFCCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQeXju88mAAC4eS+8/OKFI2+88moCtscIIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABGWXUQAAgKCMEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAENU176GtvvXnhyEeeez7tmx//yWcTcIjunX7/wpHJvXuJffbCyy9eOPLGK68mANh/RggBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACCofHzXXpfb8fguo9/7zjcTsP9OPnTnwhG7jAIAu8kIIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCmib2wbuv3j17/syLf50OUYR/x2256Wt7ndc//7nnbet1AABCMUIIAAAQlCAEAAAIShACAAAEZQ0hcF3XWad3/nOftA5wk68DABCKEUIAAICgBCEAAEBQghAAACAoawj3z2XWR11mTdcmX+dJr/mkz73OPeWu8+911fvpbfLeide5zld9/etc532/799NX2cAgJ1ihBAAACAoQQgAABCUIAQAAAjKGsL9c521betaI7eutXM3/ZpP8qRf6zL/PNtaN3gTv9Z1Xv+Q7vu3ya8pAMBOMUIIAAAQlCAEAAAIShACAAAEZQ1hXNdZ93XV9WObXJe1rvVs21o3eJl/hsuc/yTWyz1ul38/AwDcKCOEAAAAQQlCAACAoAQhAABAUNYQxrWudVCbXLd2E/dXvOlfa13WdZ134d9ll1mHCQCEYoQQAAAgKEEIAAAQlCAEAAAIKh/ffTaxDT/+kxev/Pe+880nnXzVe+utax3dk17nJv55LvP66/r3etJrXmct4k2sJVvXdb7MP+dNrMPcl9dZ++/nkw/duXBkcu9eAgDYPUYIAQAAghKEAAAAQQlCAACAoKwh3JorrSEE9og1hADAvjBCCAAAEJQgBAAACEoQAgAABCUIAQAAgpqmMN77P1+6cOTO3/6ZBAAAEJURQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACCrQLqO7tqfovdPvXzz0oTsJAABgU4wQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIF2Gd01k3v3EgBw8154+cULR9545dW0Dut65a+99eaFIx957vkEcPOMEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFD5+O6zCQA4dDe30yYA+8sIIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABGWXUQAAgKCMEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQU0TrNXX3nrzwpGPPPd8AoCneeHlFy8ceeOVVxMAN8kIIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABJWP7z6bAAAAiMcIIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAENQ0AQAA+yAv/1o+KY8598PjcDBfPL/vl499fcz1R8PzdP4JsQlCAADYA2cRmIb2KynY5PHJZPUknU/CfkzBPnX1se37vj4pp4yVWE7WhAhCAADYD8sWTM0wKtg05aOm4KQ8yfWHqzHDetY4Klj+6roahG03KY+5a7uujBSWI0MW5qQIEYQAALAfagcONTiZTEoBTpuhBsvjpKRhfX42SDgOD7bd8FFzsD5Z5Ek5oW3b8iLdOIOU8AQhAADsgXH0b6jB2n7TSX0ymzaz+jjGYenEh0HYtiUC20WX5otm3pbHLrdpMfxs+amcLSOkEoQAALAHlusGm2FscFI/jmbN8SwdTctjrk1Yi7BOHy3qNNGSf7UD08m8P110TW5OU5dqBk7qhNKuTav1hEQmCAEAYD/kYa1gHQwcavDWUbo1m9w+TsdHzfG0Himjhc1wX7muDAy26XSeThZpdtrdP5nkMj6YmrrFzMOdZhIIQgAA2APjtqLjLjKzSR0bLDX4oVtNCcI75bHE4VEzziNNaTk8+OA03T9N7zXLYcO+b7uu6buu7eqRYRVhTsQmCNfga2+9eeHIR557/sKRF15+8cKRN155NQEAwOWUEsx5uYvMbFpnipYUvH0r/dm/+cmnfu4v/fO/GvYabRZtV0KxvEjbTca5pYnYmgQAAOy88U6DdYSwLiBsjqb5+Ki5c3ypP8+X08rJ5VPO1hmOrwaCEAAA9sN4v8FhyuhyR5nbR5f683w5rW4/MywyHMcYGzXIQBACAMAeWI7p5brN6KTJdZfRad1X5jLKaeXkusKwyXWX0twYIWQkCAEAYG/k1V6jw8TROnf0Mp9VThv3m2nO3bwekk1lAABgL4whNz6O242OWXgZYwqOn5XPvRQIwjV4fE/Rx9lTFABg911m93g4JIIQAAD2QL2h/OqxG+4s33X1foOXUU4rJ4+f1Z97KRCEHApzHtbLOwQA7KQx5MYUXNSPS91IcLz94JiFYw3CSBCyn/Lqb/mRH7/fOVzC428LeXW0P/8EANiaGnI1B7vSgMMt5tPpontweqlNZR6c1pNrE3Z9W6Nw9WqEJwjZNzmtOvD8DlnnnuvA6+gfe1KuZ59XP/YdRQDYpuU00S7NSw3Ou5N5c//0UiOE5bSTef2UeW3C5fRRSIKQPfPIlljj83o3ntXPrnKRD25cUnD2o+7RMhwPegMBgC0Yx/RKyA2TRbvTRXNy2r13uV1G3zvpysmni758Yp04aoSQlXx899kEe2G8f+qYfM3Qgctdk3OfV3FYubvmdQzfZRyaMPer94phdsrwM2fr0L2BAMCmTSf9pCmPk6NpOpo1t4/T7aPJh27VJ3fK41H6hV/6xWnTNbm+TXd9XnTNn//Zf7t/mt570N0/ST8oj6dteVLGCU8XJSnbMlS4aH0nPTojhOyJsxrMqxos/7Wrj83ww/GuOvnhyXwANfMmyydd39fH8n7S5VqDJb/L4zhKmFcnAwCb0/e5vD/XEcI6ZbRr5k3OdY/RcmTRpZPT9O58NskPg7Dtm+++250syk/VIHwwb0/m9RPbs+1Ge39kQhCyF/LZx/ImrH0zpOBkvCFrMxxflWEShB/U2HirDqxP6jtG7ttag7nW4GqccHl+AgA2adxfdFG+Dd6m0/qu3PR9W9tw0Z1M0w9Op/Ub5ssd4Uo95u+/181LEM7708VyDWGdbtot3+chCUL2wHLR4PBRazDXGpyWDpykYdpEeezHMhyz8Ox8VXh54xvH8sZG3fhuU76vmIapJKnpUpv6RRrfYNJ4v6NxG1LvJQCwKUPC5a5ry590FsOknvqG3TeLtm4VU/5w9IP5GITDycMg4TvvtSX/ShOWE0o0jneqKK8wvNtnTUgShOyNnMYBwGUNlg4cPvrpNM2GMqx9mIeppPVbYgYJr6wfvqHYDcsFawq2/TAfJZcIL28d4yzRRV+njzbjaQkA2KTl92/z8mb0y3X9Xbdo0umiKX8aerCY5HPv0OVPRO8+qN/dLWOI496k49hg+fSze9ODIGQvjCN+zThCWNuv1OBs2s+m6Whan4yJWI6PJ4z7jkrCy1vOFV0tKRi+f5jLm8Zk0Z/mPNb1cvCwvNE0y71nvI8AwGaN435lGLAt37qtk3smJfNKCtZpo006WTQ5nwvCPp+cduMdJpbrBsexweFFvIszEoTstrP7DQ4fdReZWoM1//qj6fyf/uPEzZv9h/+y3HG0m5RmrOvXl5NRypfGdxcBDtALL7944cgbr7ya2LpxZ7f6zdv63dq+7gDXdmXAsJuMm+vNuyY/evrJfHmninLm6sm5maLexBGE7IHlfSaG/85NmnF26HJskM04mpa3nFzeQybL7y7Wr0V9T1KDALA5y/fe1RrB8RZR9fZbqWZh0XZ9erQI54s6u3R5D6lxVPDs3dvbOAN/pGbb8iN/e5+fzeP2ocPOopOH80UF4eaUSz1uMFOnm3R9O2xn3bfDss7usbO9vQDATenTaqFHOhvfe/iHqHl38U9HpwtLaHgKf6RmS3J6+N+vsybMescbZwAAEABJREFUF89Y3ntwuNXEsLPotE4WnQ3rBo+OEhtRLnVeDHNSxvUH0375LlTnnTQXd61ezWZZ/kAcAgDsMEHINpy/g3w+e1KfTc5CcbV6MOflzQbzdJJnZWxwko+G4cGj6fcTm3CnXO1hj+q+7kpWb4hbhgvrzSe6brGcg5Iett94JJ999zLJQgCAnSUI2bi86r0xAnOeLJ83y/w7f3P5OjzY5GFn0TzMFM3HJQWP0vHwwWaUS93WW03k0oT9EPHzWul910271d0L6z0pxufjRx5GDs/tOuNWRwAAu0cQsll59TiGX1NqsN5MIpcxwOWd5cuRvBo5rD8cRwjzpKljg7NZCcJ866h8pNvHiY04Kpe67mNWRwf7NCzmLDXYtu24wcyyCftp389LL547srxNxRlNCLAn7CkKcQhCNujhPSSGgcGhK/K4cWjTTOqd5YfBwKEMhxLMqxHCYcro+SC8fZxv30psxOz2rb4btjLLuZ9M+um8nU9T207HPWbK/2oudrnrj2oNdqfD8VqG9VYh3bDvTL/8ZoAmBADYJYKQTTrbJ2aowdJ4w5ahk+nk7MnyYFMqcJg/OtxoPq9OzkfTfDwbRgiP8x0jhBsyvXO7DgyWFJxM+9m8P5nnRVvXE7Z1YWG9E+4wVLhYlPard7Q/aksTDiekkoVp2H6me3irI0kIALAzBCGbNQwPTppxFugQgbPp5GiWZ9PyUZ6XI3k6bcZRwWZ5+8E8DCGOm8rkcvJxnTKa71hDuCHTZ273TRkYLDU4KzXY35pP5m1Xk68rTZiH21G0bTtr2/l8UYIwzxfHi6ZkY0rlnPI1H4YK2+G16vcE7DEDALArBCGbtdwqZpgpelaDx0eT0njHs7EMJ7PZ8LPNcNqw2cxykHAIwpKOt2b5qDThLLER0w/d6Sez/qjU4Kyft/3pvFRfkYZxwmbRLtpuuih/W8xOF4vys5OmnpMfzhLNw9rD1BkeBADYLYKQDRq3FxnH/SZNnSla1wTOprePy4jf5NZx+Zgez1LJwtKKk0k3GWaOPgzCOkjYjYOENSPL795F4uZNP3ynP1rUGjw9KkGY5ot+0TbtcBeK2oFtXizKwXw6X5yczqbNvBnm+ua83IC0Pnb1joXLu9iLQgCAXZGP7z6bYAOGNYE18GrXTZvSDWVg8PZx+ZjeufX3//2/TOyzP/6TP71wZPaZ/5pPTlMZKjyZp3mb65rDbth6tDdrFACKj3/ik2m3ffH11y4ceefb9xKHpUmwMXn833Jz0WY6zP+skz9tD3OIjmb9bJqGzWPHtaAP7y0JAMBuMGWUzcqrmxAON5qvawiPZxNBeIhuH03SYvJg2BDokSAEAGBnGCFks8Z7SYxrzOrOMXVz0bpukMMzrcOD/Wp4sF/WoCYEANghRgjZpLwswtqEw30Fp0291cSRIDxA702HTWKbZvmRh/tOZHvKAADsECOEbNDZENFyg5liMmThJHF4Hlk9OBxZriE0SAgAsCuMELJZjzbh2c0kHj/xj//fXyf22tnqwfH7TjoQAJ7mG19+O8FmGSFkw1a7yuTVDQmbYVYhh2c5MLicJ7z8ZoAqBADYJUYI2bhlGuTlg80nD1VeTRY9+/r6OgMA7BgjM2zJctboMFYoCA+U7WMAAHacEUK2TQ0equXYoK8vAMDuMkIIAAAQlBFCAAB2yLe+8pfpgLz5+S+NT371134lwe4xQggAABCUIAQAAAjKlFEAAHbRu/fvJ+CGGSEEAAAIShACAAAEZcooAADsqC///q8/9ZyPfvqzG3sdDo8RQgAAgKAEIQAAQFCmjLKHPvWvE1vxmd9OAAAcECOEAAAAQQlCAACAoEwZDeGllz6VbsbnPveZBDfJ714AgJtjhBAAACAoQQgAABCUKaMAAOyTl/7JPzt7/rn/+G/TVZz/3Ce5zGuu63Vg64wQAgAABCUIAQAAgjJlFAAAdtRHP/3ZtA7reh0OjyAEAGDXXWbN3mU+96rrA8+ff53X+d3f+a0EO8mUUQAAgKCMEMJD7775xvjkmedfSNdwpdc5O/nMzX0WAACcZ4QQAAAgKCOEAADsuiet5QOuSRDC+l1p9ubZyY/PAl37Z8Eu+NZX/jIdkDc//6Xxya/+2q9c/rNchOQiDFwEYOtMGQUAAAhKEAIAAARlyigH7jIzKq+0q+cPOXn3d/5c19WAtXj3/v0UnouQXISBi3Cj1rX+8KqvM57/hbe/nmCHGSEEAAAIShACAAAEZcoo1/LSS5+65Jl9Tinn3OR+2qTppD+a9Mez7vasuzNr7xzN05pt5RbzO7vz57quxpX87M/+g1vz7tZpf7xIR20/bdO0T83wUX871N8QABDaF19/LcG2CUIAAKI4vw7wSZ60PvD88au+zu/+zm8l2EmmjAIAAARlhJDDdJnZm5fZL/Qwtty85tUAAOBQGSEEAAAIShACAAAEZcoo1/K/v/rVy56ac9/kpslpNsmzab41S7eP8zPH6Znb6cO3n0k35YPNC318juWBzR193Nr/Tb/zrW8dPVjMHiymp235mMy7puvLR+5T7rt06V1G/85P/3QCYD997a03Lxz5yHPPJ1be+fa9tA6//Bu/+dRzXvujP0zwfowQAgAABCUIAQAAgjJllMN0mVvDf7B7zV9m1uXjR7b7Weu6GrAZV73T15M+90mu+ppPev3rvM6N/kLXuQiX+dwnWftt1nbhd8JN/4660j9A2N8Jo5u4N+CTPOl1zh+//Ot84e2vJ9hhRggBAACCEoQAAABBmTLKmr319l+8/0/knJpmMm3ybDo5PprcPp5++M70R56Z/ugzs/s/8jNpzT7YBMgf8llXml+6rl90XZ+1lemg//f//1V+935+90G+f5IezPPJPC3a3Hap61Lfp/79P+u5j/18AuBQ2FP0vI9/4pPpZnz3Ow+ees66fvUvvv7ahSPr2iuVbRGEAGzfdRYsXWcF0bpWHK3Frl2Ey69YW+MSqV24CBtbKfoku3ARbmK94jWt62uxa68DW2fKKAAAQFCCEAAAIChBCAAAEJQ1hABs31Xv7nXTLrO6bO12+SI8ydqXUe3aRdiKfbkIj//fxA33YB8JQgAA2IJvfPnttP9++Td+86nnvPZHf5jYVaaMAgAABCUIAQAAgjJllD30md9OACvrWnC19bvPXce6LsJ17j73u7/zW2mrbmLp3VYWUl7HTa8/3Ov/mwDvywghAABAUIIQAAAgKEEIAAAQlDWEAByOyyxquszCqques/Xlc+et6yLstXVdhKu+zkH+TrBuEA6bEUIAAICgjBCybf3yLwAAYMMEIdtzloJ6EAAAtkEQslUlBXs5COyEqy64Gs//wttfTwfEajGAaAQhG9efPfalBrvUt+UBAODSdu17MT/3sZ966jk/+mO3Lhz5RoLts6kMm3WuBrs+dX1twvK3xOEx9gsAsPMEIdvQ1xpMZzXYGSE8UJoQAGC3mTLKJi3zoE39tNZgV2qw7dpGEB6k+iVePcLTPOlmaFdd0rauO8ttxS5chPPHL/86a5y85yIk/3fgab78+7+e1uGjn/5sAiOEbME4MDiMDbYlBdtusWgTh+dh5itCAIAdJQjZrGUN1ie1Bru2XXRpsUgcnnE+cD/uJWsQGABgF5kyysaULMjt8LdZKuOC3bQrOdhNy/jgfPHHf/KniQPTtXV1aPno++z+IgCs1WV29QQuQxCyQcstRvsxEhZtN1u0i8ViNp8nDk5u+/LxcEw4aUJ+mHUtZLrpBVE3+vq7dhG2srrMRUguArBZpoyySQ/ni5YhwuXqwflicSIID1H54nZtbcLufBMmAAB2hyBk03Lfz7thi9G2LaOEi/lifnKaODyLRc3+OnF0OU6Yh/tPakIAgN1hyiibtbr94GnbH7XDdjInOTU5cXDyvK2DhG2f60rC1e4yAADsEkHIBtVtZbqUJsMdCPPpou2b5rjJ+UQQHqLTRa5BeDZC2CVRCACwYwQhm1JrcDlCmNtUpw92XV4sToaDP/bZ/55m0zSbpOnwMWl+0DTDjOahFQXjDukfedqvlgjWr2adBpzmbe3AUoPz8Xk3TBwdNxodP9usUQAi+u53HiTYPYKQTSolkIetJnPdaLTefTDntOj7/kFX70uY5qUGc5pM+jJsWIKw/OSYgoJwF/Tvd2g5BzjVIGyHm0wMWTjOFx1GCMc7T3TD172TggAAO0UQsnE1DPrcDX+19UAuRdgNK80mizRv+qbJZWywBGHKUnCn9cu/luOE9YvY111k2r7WYNsta7C0oumiAAA7SRCyQXVocBgkrDnY1Imj/TBk1OcaEm1dUpjq2GA5oakpmM0X3W396m+rvYJWWTjsIjPMFF3V4NnwoPmiAHAtH/30ZxOsjyBks85WEpY8KPFXG6F0YenAvuRfbrphmmgdGOxrBzZqcNct667LZ3NHH64qrBvJ5OX+op37EAIA7CBByMaNawirYZxw2Hq0Hhvzr1mOChoc3Cv92cPyDhNpNTA4xn+/2oEGAIBdIgjZhrEJl3ehqE+GW5a3ZWyw3psgnZWgINwXD4Mwn4XfcoLoao6oGgQA2D2CkC0peVDnjg6bjuYxFerz/MhGMhJi35xtM5PO34neukEAgB0lCNmeMR6WNyfMDweYxMNe6x995qsJALDDBCHb1j/yt9SbKLrP5B8AwF4RhOweUQEAABvRJAAAAEIyQgjAB/Qv/uAP0s34wttfT7vk5z72U089Z+1Xw0VILsLgwC7Cv/q937twZHLvXgK2xwghAABAUIIQAAAgKFNGAQDYIW9+/ksJ2BQjhAAAAEEJQgAAgKBMGQVgbf7n//iLp5/0i//oqadcZhvDXXOpf/czLkJyEQYuwvv51V/7lXSIPv6JT6ZD9Nof/WFinxkhBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoOwyCsDO+cLbX0+bsrNbOLoIyUUYuAjAjTJCCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQdllFICdY6vD5CIMXITkIhyQL77+WoLdY4QQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCsstoCJ/73GfSOrz00qcSbNZnX//PF45M7t1LALBv3vn209+/fuHn/2G6uj//i9efes7NvTL7zgghAABAUIIQAAAgKFNGAdioNz//pRSei5BchIGLAGydEUIAAICgBCEAAEBQpowCsFH/7k/+UwrPRUguwsBFALbOCCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBTROs1XMf+/kEAADsAyOEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQVD6++2yCy2l/4lrY8QUAAARHSURBVCcSbNvk3r3EbvDfBOD6Iv9Xfe3/FX38Ym7gl2DfGSEEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgpokf6uOf+GQCAAD2wRdff+3CkXe+bWfUH8YIIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABGWX0Sv7xpffTgAAAPvPCCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABB5eO7zyae7MN/6ycSAACwn9759r3EkxkhBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoKaJH+r+O99Lm/J3f/rvpXX4ylf/VwIAgHXz59XDY4QQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoPLdX/jlBAAAQDxGCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIKjp977zzQQAAEA8RggBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAI6m8AAAD//0mM6BUAAAAGSURBVAMAKiMV3Ps2pGYAAAAASUVORK5CYII=" width="1200" height="630" class="img_WUYJ"></p>
<p>A skill is a folder of instructions and reference files a coding agent loads before it works. Documentation tells an agent what exists; a skill tells it how we actually build things. bestax ships <a class="" href="https://bestax.io/docs/skills/intro">seven</a>: page layouts, forms, theming, icons, custom components, CSS optimization, and migrating off an older Bulma library.</p>
<p>They aren't an internal experiment, either. Every app scaffolded with <code>npm create bestax@latest</code> gets the bundle preinstalled, and <code>npx skills add</code> installs any of them into an existing project. That makes them a product, and products meet reality: people install them, hit the gaps, and <a href="https://github.com/allxsmith/bestax/issues/196" target="_blank" rel="noopener noreferrer" class="">file them as bugs</a>. Good. A skill that teaches a wrong pattern is worse than no skill at all, because it teaches that mistake to every agent that loads it. It's why skill bugs get a particular kind of fix around here: repair the guidance that produced the bad output, not just the example that exposed it.</p>
<p>But bug reports only tell you where a skill failed someone. They can't tell you whether the skills work at all. For that, we built an exam.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-exam-cold-start-runs">The Exam: Cold-Start Runs<a href="https://bestax.io/blog/ai-loop-keeps-skills-honest#the-exam-cold-start-runs" class="hash-link" aria-label="Direct link to The Exam: Cold-Start Runs" title="Direct link to The Exam: Cold-Start Runs" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="A graded cold-start run, drawn as pixel art: a builder robot types at a bare desk inside a test chamber while a grader robot watches through the window holding a clipboard rubric, the chamber door stamped cold start" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAJ2CAIAAADAIuwLAAAQAElEQVR4nOzdX2xk133Y8XPuDMmV4rqBAyetY6RR4igyUiCFYrdA7LaAYQiGn1o7hVz3KS3Qp6BIYwV9aJuHoC9t5RYI8hr0zZGAGuhLUsUwjCxqIQHcKDBQwZLQWq7TQvmDWLIj7ZKcuffmnHuHXC53lxySw9khf5+PdmeHwztDYVfS6MvfuedOd973gQQAAEA8TQIAACAkQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgpgnYeB99+tPHHvnq819MAABwMSaEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlF1GgTV5/aUXjz3y2JMfSQAAq/PZX/03xx75wq/8u8SDmRACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQeed9H0gAm8repAAAl8eEEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAgrLLKGfw0ac/feyRrz7/xQQAAFxNJoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUXUZhrV5/6cVjjzz25EcSAMD1Zaf6TWZCCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQdllFAAAICgTQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACGqagA3z+ksvHnvksSc/kgAAYNVMCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIKi8874PJAAArj77VANnZUIIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABB2WUUAAAgKBNCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACCoaQKAh+r1l1489shjT34kAbCcjz796WOPfPX5LyZYjgkhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAElXfe94EEy7ETIAAAXCcmhAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJRdRuFK+ujTnz72yFef/2IC1sWuywBcDyaEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlF1GL4UdIAEAgM1nQggAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEHZZRSAa+L1l1489shjT34kAQAPZkIIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABB2WUUAAAgKBNCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKCmiUvwN37qbycAuLK++WffetCnfuy9P5oAuFJO+K+6CSEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKBcmH7dvvPGtxIAbLhz/Q+C9ziADfXg/6qbEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAENU1cBbf3biUAOLtHdh5NAPAAJoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgqGkCAAjmp/7+JxKE9PLNFxIcYUIIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoF6YHALjjjddeSQBhmBACAAAEJQgBAACCsmT0Uvz1x584x6euq5dvvnDskdt7txIAAPCwmRACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQdhldE1e5BQAANo0JIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoFyYHgDgot7+7ncSrNe7/up7ElyYCSEAAEBQghAAACAoQQgAABCUcwgBAFirvPhZbvrys9zN44e5P/rZhT714699Hm6HD/vhmUc+C5yPIAQAYH3G3stDx5UOHH709TZNmvHD1OcjQTgUYC63Xb3T1g/7IRz74SbXitSEcG6CEACANcqL22a8zX3T1BScNLUDm4MgHJtwyL/ae91wp+0m5U7Xtd3w+a4eMbygIoTzEoQAAKxVSb6xBidNUwpwOunHIKwfNuXOOCes+jR2YO66ctuVw0oQztMk98OHJQ7r53MCzksQAgCwPosVoYsCrLfTpt+aNtNJ2pr0YxaW28MiLDXY1plgnrV53ubZvM4Fy4flc+V2PK1QE8K5CUIAANZnXA7aDLPBEn4lAksN7kzLbd4ut5MyMKxDwmZIvK4GYZq3adam/XmpwRKTTR6asO/LYDF1Xb1vySicmyAEAGDdxpWi42zwxla/s5VvbHXldnuayo/ShIdBOK8pWH/szbrdUpF1Q5mm74cmbHOXgAsRhAAArM8wHqwnDZYfW5M6Gywd+Oh2emQ7P7KThzjshyFhnfq1XZ63/d4s7c7ydDE2zH3RNV0/vEjTd531onB+ghAAgHWqWTecK9hPp2lrWmeDJQX/6y+PXdccHHY08xY7k/7cf+xLB7ZdM+/68mNYUDoZPmXNKJxTkwAAYF0Orj1YTxScNs3WMCEs48FlnlsOKweXp0zrxjN3Xgo4N0EIAMBajetFmzIhnPTbk7y91d/YWuqJ5bBycHlKvVLFwbpT4CIEIQAA65PHS8+nPFxeou4fsz1pdraWWvO5U2uwGbchndRtSvPiIhbAeTmHEACAdVtcfCIPlyKsl5poljkPsBw2mXTjRSksFoWVEIQAAKxPPjyNsNxpFstHxz1FTzU5WCZannj0dYBzs2QUAAAgKBNCWLG8+Lm4M57bMH4X8+hnF/rF+ph+uDPc5sMH79wBgOti8X43vvF19dLzw9Uj8jJLRsthXV+vNlGeePR1gHMThLBKBxE43M99zgcnOdRT3w8+eyQI+35RfV19Y2v7+qZYH6sn2w832fscANfR2HJdn9sutW2al1+WWPtZDmvb+pTahP34lglciCCElVq0YGrSogbrDmr1No27Yx8926G/83ZYgjB33aTcyV19Sxy+9VlHhWmpb5gCwJUxLocpN21X3vMm8zbtt93ebKnzmPZmuRw8b5uakV1522zqS3mjhAsQhLBiOS1qcNLUqeCweVo/7o493B4PwuEtLQ1viql+1zNPcv2wbfrahN7jALh+uoNvhs7bGnj7s7y73P+T7s7Sfm3CvjRh/V7q8DrARQhCWKV8sFJ00oz7aPfTSdqaNlvldlK31R6ycHHFpKEGc03BNs3aZlZuc/k4tcNYsHxqOJtQEwJwrSxO/Bu+JTrvutk878268na5zJLR2/v93qyfzZv58I3Uw5cCzk0QwiotzhscZ4OTfmuatqfNzrQ24c5W/XBrkpsmN8Nb3vDN0ZKCeTava2Cm865+JnfDe+V0ONW+HVaP2k8bgOukG9aL1lMq5vM8a/rdpl5j/uf+Q//ITr6x1X3wyb85bcp7Yj8cmsvb4zde+l+7s+b2Xn97P+/OyvtmX544rK8pB7Xj92MTcC6CEFYsL66nlMo3O0sN3thKO1vNIzt9uS1luL2Vy6iwGU6UGGow7c+avXkpxu723liDda3o4tzC7LueAFw3/XjmfK5dOCtJNy9vf/Wk+fLmN+/Kd0jT27Py7dM7Qdj2zXdvpf15nQ2WGiy3eyUj6xmEeVx36r0SLkIQwiotNpLJw3hwUguwdOD33ciPbOdHb+Qb2+nGVl0+Ol5+t7wJliDcnXW7++nWbjOMDWsNdl3T1ds6SDQdBOBaKi03b4ftt+fjN0PLzLCZteXdM72zPy01OGytVrefKeH3F7eHb6HOmzIbrDU47+bD+YdOIISLE4SwSuNlJsa9ZLaGlaJlNvjITn7hV3/g1Od+4lf+vBveDuddeZ9LbVPeAyfD26G3OwCuj3GgN3zjsy4cHR4pb4Dl7a+ft/UN9J3ZGITDwcOQ8O3desLhrO4ls6jB4YKE7TgeNCGEixCEsEq5qleYqEtGm2Z7q64UfXRnqTFfOWzeNvvzbjZvJk3X1L1nhpcThABcI329rlLtveFi9OPd1M1K7PWzpp5NuDsfvx965/h39pruYEfuelbhMBusT19cmN5yGjg/QQgr1hyeQzjuKLOVbmwvdW2lctjerN2bNXvTfjJfvE6bAOC6qQtBU9/0w7UE65CvbjBTF5F29Zq9e4uzCg8O7ut5g8OV6MfBYKphOCwp7ZIahIsShLBKedjnLOfFJQe36r4y+cbWUs8th92e5q2DixYOL7W4QAUAXB/9sCfokHPl13rR3a5O+8Z9R8sb36xr8t2H789rNdYmTO2wRvTulaJW0sAFCEJYvZwPdpcZ9hrdmiw1ISyHTSddecr4digFAbiWag/Wayotrsnbj9//HNaNdnncdO3usV/djLRNi8WlQwoODy4O6vUgXIgghFXKYw0Od5qmL2O+cfnoMibNYploPXvwyEsBwDXTL36O5xMe/Ux935t1x/8HdTZf7q0UODtBuIle/fxbD/rUT37u+1fyrMODT3jBM32JE74WAACwmXy7BVapT+N2Z8M22eOJ7/WM+aWeO+yclhbX2D3yUgAAcElMCGH1xjPdh7RL8zbNlivCclg5uBuy0FWVAABYA0G4QZZZxnnvMed71gWt82tdLf0w2uvrdmll4tfM2rQ/73dnSz23HFYOLk8ZntsNL5VlIQAAl8eSUVixw2Wi83kJvG5vlnb3l5oQlsP2ahN25YmHy0cBAODyCEJYpb6qJwHWIOy6/Vnem3W39pYKu3JYObg8ZV4vuDucSdiP23EDAMClsGT0irGH54Ybp3pdNylFN5unadPd3muanD7xb//80Rv5xnb60N/9aHmwGa6z1PWl/Zr/+T++urufbu32t/fT7b08m3ezcULYDZffra/q2hMAAFwKQQirtNhLppRcm2e5a+ZNzl0ZxXd9X9pvbz+9Pdua5DtB2PbNd9/u9+apzAZLDZbbcn/WduXp4+sYPIV6/gAAEABJREFUEAIAcHkEIaxYf3AOYW7TWIPDHjNNGf3tTdM7+9NSg3lxSd5Sffl7t+tIcG9WZ4N7w2mH83ZxDqEaBADgUglCWKW+tF7qu64tydfWf7/6UoNd38y7mnmTSXpnNgbhcPAwJPyL231bL01R9xedjTVYxoPd/OAcQutFAdhoP/Hhn00r9dabu6v9Ei/ffOHYI9uPvjsBA0EIqzQM/nLpuLbLw4d5GBjWzNtvmkmTdueTfORq8+WAd3YX15mot20ezx5sD2rQjBAAgMsjCGHF6twv5aYvTdgOUTepm442qal7yaS9elbhkSDs8+5+N1zCPo+XpK9hOF7XPqlBAAAulyCEleqHPUGHnMvjZeq7OizM3aQpJZjSrFbhXYfvz/KwMemwp+jBRjJ3VoqKQgAALo0ghFWqPVhybnGOYC29vrRdCcLUjleZr7/cXYSztk3DVjT94rYuKe0PPqsHAQC4PIIQVqxf/Dy8c9euMLPu+L90+3PbxgAA8HAIwivm1c+/Nd5xhXoAYDO98dorCbgimgQAAEBIghAAACAoS0Y3yOEq0MN1oSccc8FnHTrhWSc8/XxfCwAA2CgmhAAAAEEJQgAAgKAsGd1E51t1eaZnreFLAAAAG86EEAAAIChBCAAAEJQlo3CSDz31qbRSb725u9ov8fLNF449cnvvVgIAgCWYEAIAAAQlCAEAAIKyZBQAgMv12rOfOfWYx595bm2vAxwyIQQAAAhKEAIAAARlySiczRuvvZIAAOBaMCEEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICg7DL60Lz6+bdOPeYnP/f9yx9877OW+VpnOvi8zzp+8Ls+fSsBAAAPmwkhAABAUIIQAAAgKEtG1+1waeW9qy5PcMISzRNe54LHnOlZJ/wdvvezZ1jvCgBcP48/81xahVW9DnDIhBAAACAoQQgAABCUJaNwUa89+5lTj1lmicuqXgcAAJZkQggAABCUIAQAAAjKktF1W+Za82fagHQZZ7qu/TLPWvnfIQBwXx9+6mNpXb72pa8kIBgTQgAAgKAEIQAAQFCWjD40F7yg/Mq/1gnPWvnfDwAAsAlMCAEAAIIShAAAAEFZMsrprB0FAB7k5ZsvJODKMiEEAAAIShACAAAEZcnoui1zjfiNXZBp7eh9Pf7Mc2kVVvU6AGyC127+93Tl/OtfTmf34h++euyRf/LP/2kCrggTQgAAgKAEIQAAQFCWjK7bGq41f8FjLuGVT18lCwBcG9uPvjud3Yef+tipx3ztS19JwEqZEAIAAAQlCAEAAIKyZBQAYB3evn07AWwYE0IAAICgBCEAAEBQlowCALBKP/Hhn01n99abu6cec75XvtfLN1849sj5dkaFa8CEEAAAIChBCAAAEJQlo3CSe5eUAADAtWFCCAAAEJQgBAAACMqSUYALyotffYdtbdrDe129WfwJ5ARXxNdf+Xa6+n76iR950KfeeO2VdNV8+KmPnXrM1770lQTXjiAEOJ8hP5oj9wXJ2kz6w3v1ph1/Dg/m5A8CAJYnCAHOIQ8pmA/bY7L4UIuswywtRoODPtcqnCyysFZh748CAJYkCOEkt/dupVX4+NOfPfWYLz//hcQVkGty1AKpCThpch4fLL/eGyFZk1xY39/70NZwmxZl2A1HdGmS83wy/AkcZqHffwA4hSAEOIvFGtGmJGFucv24GUIwN/XnWIXj5FCMrF7f1sHgOBwszddtl7tNs18e6cofTNfX97Sc2/KHMx/SXRMCwCkEIcDyxrpoJs0QfLnWYMnAMpoqWZLGIhxqcDIe3qiRCxvmfwebyPTTGuR9mQrOm36MwCELm/3mcBFp15cx4Xxafg5/Fr21owBwAkEIsKTxvMFhNljvT2oKNgd3JrkuJB1XkDbN5PApC33iAvK4BDTV3GvrPLDfKqGY23n5bW9rGm533V7T5K4bZrhlVNjndrpYO5o1IRvnhP05AdZMEAKczbAwtBlqsEwIm2mpv9KE00k9fa00ybCOtOZhSZL7XIhCGZ7RMPebjr9vfanBftrVIGzLX10z7dp56ha113V9+f1vu7H+huWiUhAATiEIAZZTkySng/MGh9lgM51O63RwCMJUx4R1CemwfHRcUXr/V+HMxo1jUt/UAWE/70sWNvN5XUm6lfrZsEy3xl/X9+UPZnGeYb9YLqoKAeDBBCHc8aGnPpUux1tv7p56zKq++ss3Xzj2yKr2Sg2tZl6ajFuUlDu53J1MpyUAJ0986O8lHobf/f3fWdxr0hDhzY29Wa5zwj53TZqWiJzmxSUKAYD7axIASxk3EB02j8l5WC9aZ4OJDZL7fnhfWwxiD+exBrMAcH+CEOBs6hUmmro0NI8rRdkYjxxcIvJO/ylBADiRJaMASxp2GR0vLZGGrUTrOlJBuEkmfT3bsB/vNOOph84fZAN9/ZVvp41k+1MIyIQQYHljXIw7yuShCf1XdIPcSuNlCo8xJQSAB/K/MgBLyAc3ebGxzGQ4kzBn86cN0pfpYD2HUBICwLIsGSWKjz/92VOPuXcv0DdeeyXBXfLBFeqH60o09/m22v/+2u8lHrbhOoQJ2FivPfuZtAqPP/NcAi5AEAKcVQmN8YKEAABXmyWjAOeRj9yyScarDrrgBAAsxYQQ4IzyPXfYFPKPq8FmnsDmEIQAXBtdAgDOwpJRAACAoAQhAABAUIIQAAAgKEEIAAAQlE1lANbn/7XfS5zF+yfvTgDApTEhBAAACEoQAgAABGXJKABAIH/tv/3nY4/88T/4l2ntHn/muQRsABNCAACAoAQhAABAUJaMwuq99uxn0ipYTgMAwKUyIQQAAAhKEAIAAARlySjAZvgv/ypdOT//7xOw2TZkT1FgY5kQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUHYZBdgMduwELsyeosBZmRACAAAEJQgBAACCsmQUVu/xZ55LAMDV8bUvfSVBSCaEAAAAQQlCAACAoCwZBQBYq1XtBWpPUeDiTAgBAACCEoQAAABBWTIKsBl+4ZMprF//7QQAPAwmhAAAAEEJQgAAgKAsGeUM/vG/+GenHvObv/YbCQB4sHv3Al1mv1B7igKXwYQQAAAgKEEIAAAQlCWjAJvBTpvAdfGdN76VgCvChBAAACAoQQgAABCUJaNE8eXnv3DqMR966lMJANbOnqLAw2JCCAAAEJQgBAAACMqSUQAAVumDj30wnd3/+ZP/f+oxP/5DP5zObplXhrBMCAEAAIIShAAAAEFZMgqwGX7hk2kT/PpvJ2AD2FMUWA8TQgAAgKAEIQAAQFCWjAIb7Zn/9PlTj3n2lz6XAAA4OxNCAACAoAQhAABAUJaMwh0v33whXUcff/qzic1ne08I4+uvfDtdfT/9xI8k4OozIQQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKDsMsoZ/Oav/Ua61m7v3Tr1mCef+Jl0di+98genHnN5rwzARrE/J7A5TAgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAou4zC9ffl57+Qrqy/9XfOs/kqAADLMCEEAAAIShACAAAEZckosNGe/aXPpWvk/ZN3JwCAjSEIAc6tH34AAFxVghDgHIYU7FL9AQBwZQlCgLMaUrA/uA9wPy/+4asJYOMJQoAzGWpwktrU59Q3vSAEAK4wu4wCnMUQgG3Nwi711owCAFebIARYUonAmoNticBxMNgtHgEAuKIsGQU4k2HJaPnZ1R/zvk1sonzPHQDgPgQhwFnVwWCZE+a+m5oQAgBXmSAEWEJbd5KZTeoy0e0mzVO/1fd918675nd//3cSmyIf7vuajQZ52H7+F38xRfXjP/TDCbginEMIsISjdbFYLNrNy3hwbsnoBsldm3N3n2Wi4hAAHsCEEGB5/bCtaFObsNzm+cx1CDdLTu3w864ElIMA8ECCEGBJbZ5P+mnab9J2ScOuy3WRRWulxSYZlozWHuzGNaNaENbgT/e/d/yRP/peuoAf3H73g77EBV/5hC8BYQlCgKXVvOjKX/up2V5cgbBUoSLcFIv1orm04MHkVhECwIkEIcAyDncrGQuj26uTwa5emt6IcHO0YxMedqCLTwDAKQQhcGb/8JP/KMXS1wvR933X577pu65ru74tUj+fz+b1tmvTvG37tnym6/qqG65d3/eLSZW9Z1YjjwtBR13TNP2kmUwm00nK02LSTPN0Msn1kW7SNF0uh+RmeEJaPgufu/lbxx7ZeedWAoDrSBACnG5cg5hTl9rSF6Uy+tQ3qWTgtMltXz5s87RNbVcOa3JtweGyFP1iE5rkP7YrlMcszOXPoSiFPqlKFva5lmD52UxqBvaLbBzWkCYA4L78PwrAskpZ9LkdBlPDhjK1EKe5PLKVmi5NUtPXGOzrQtJ++IvLMUReasYkbOqcsOnKULDcSUMNTuonmvFkQi0IACcRhACnGk8gHHqw3i9zwq7pmlQXKnbDvLDpcl9mg/20GdaLDqtFJeElGXOw7iSaDzTNVj+Obqt5GRx240LRdGelqDLkct270ybntobfzOvx5/Wu9J4EFyYIAZZSV432B2eilVFU7pu2yZPSiCUEu2ER6bBYNI9BOEly8BLlehWQSV092gzLR4eJ4DAwbHOedIv1pAfLSwGABxGEAMuoQ8LhTMIyfVpMm3LT1b1j+hqFaVozsBkj8HArGU14KcYqbw6uNDgk33wcFbaLlaIH5w7m49uNAgB3EYTACvzfb34zBbFYDpoO1oQeKcB+cnCIDlyHO7O/0oHDx+nIetKDEpSCAHASQQhwFmN11ORbnFA4nF2YhwFitzgkGQ1eviO/y/nwUpBSEADOSBACnN2RLEz5rivWHxyQWKO7LzIoBQFgaYIQ4LyOn6CWk8Wi6yf/2Aw/9t4fTQBXkCAEWB1xAgBcKU0CAAAgJBNCOMne9z167JHf+6NvpHM4eJ2dd2496Etc8JUP3fslAADgvkwIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKLuMwknWsGPnVdwU9Lmbv5UAALj6TAgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAou4wCZ7aqnVGffOJnlj/4pVf+IBGYf1oA4DKYEAIAAAQlCAEAAIKyZBQACOflmy8kAEwIAQAAwhKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAF4oNFMAAAM4SURBVEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIKaJli7R3YeTZDSN17/xvIH+8cmOP+0AMBlMCEEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACGqaYO3e8s8dwJX1zT/71gM/5z/vAFeNCSEAAEBQghAAACCovPO+DyRW7a+85wcTD2bJKAAAbAITQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACGr6A++3yyjrZg9WAADYBCaEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQ1PS7b/5xAgAAIB4TQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIL6SwAAAP//cbB/XQAAAAZJREFUAwC1Cm0sc9IpGQAAAABJRU5ErkJggg==" width="1200" height="630" class="img_WUYJ"></p>
<p>You can't ask an agent whether the skills helped. You have to strip everything away and watch one work. One run of <a href="https://github.com/allxsmith/bestax/tree/main/eval/agent-loop" target="_blank" rel="noopener noreferrer" class="">our harness</a> goes like this:</p>
<ul>
<li class="">Scaffold a brand-new app with the current tooling: the seven skills plus the small rules file the scaffolder writes.</li>
<li class="">Hand a frozen brief (build this SaaS marketing site) to a cold-start agent session: fresh directory, no project history, empty memory, the library installed from the public registry. Exactly what a stranger's agent sees on day one.</li>
<li class="">Measure the result by machine: did it build, how many type errors, how many inline styles, how many raw CSS classes where a component prop existed, how many hand-rolled widgets, which skill files the agent actually opened.</li>
<li class="">Have a separate grader agent score it against a frozen <a href="https://github.com/allxsmith/bestax/blob/main/eval/agent-loop/rubric.md" target="_blank" rel="noopener noreferrer" class="">100-point rubric</a>, under one hard rule: the machine-measured numbers are ground truth the grader may not contradict.</li>
</ul>
<p>My favorite part is the gate at the very top of the rubric, a specific kind of paranoia. An untouched scaffold typechecks, builds, and reports zero inline styles, zero invented props, zero hand-rolled widgets. Graded naively, an agent that does nothing collects 50 of 100 points. So before anything is scored, the harness checks whether the agent modified the app at all, and zeroes the run if it didn't. Doing nothing is a failed exam, not a clean sheet.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="accelerated-evolution">Accelerated Evolution<a href="https://bestax.io/blog/ai-loop-keeps-skills-honest#accelerated-evolution" class="hash-link" aria-label="Direct link to Accelerated Evolution" title="Direct link to Accelerated Evolution" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="The improvement loop, drawn as pixel art: cartridges ride a circular conveyor past a wrench station and a scoreboard ticking from 85 to 95.2, with a robot tightening one cartridge mid-lap" src="https://bestax.io/assets/images/ai-loop-keeps-skills-honest-loop-58ba2e0fa3370c75150ca2b47515afe5.png" width="1200" height="630" class="img_WUYJ"></p>
<p>One exam gives you a score. The interesting move is running it as a loop, because the loop is evolution with the waiting removed.</p>
<p>Evolution needs three things. A fixed environment: the brief, the rubric, the model, and the budget caps stayed frozen for the whole experiment. Variation: after each run we read the scorecard and revised the tooling, the skills, the generated rules file, the component catalog, then rebuilt. Selection: a fresh cold agent took the same exam against the revised tooling, and revisions that didn't survive the grading didn't stay. We ran ten generations that way and <a href="https://github.com/allxsmith/bestax/blob/main/eval/agent-loop/report.md" target="_blank" rel="noopener noreferrer" class="">wrote everything down</a>, scorecards and metrics per run.</p>
<table><thead><tr><th></th><th>First run (baseline)</th><th>Nine revised runs</th></tr></thead><tbody><tr><td>Rubric score</td><td>85/100</td><td>mean 95.2 (median 96, min 89, max 99)</td></tr><tr><td>Raw CSS classes in output</td><td>42</td><td>0, in every run</td></tr><tr><td>Custom CSS added</td><td>77 lines</td><td>56 in the first, then 10 to 21, settling near the ~10-line pattern the skills sanction</td></tr><tr><td>Agent cost / turns per run</td><td>$10.55 / 127</td><td>mean $6.00 / 79</td></tr></tbody></table>
<p>The score rose while the cost of earning it fell 43% and the turn count fell 38%. Better guidance doesn't just produce better apps; it produces them with less thrashing.</p>
<p>Two disciplines kept the selection honest. The yardstick never moved: improvements went into the tooling, never into the brief or the rubric, or the generations stop being comparable. And the graders got audited: three of the ten scorecards contained a factual error, caught by checking them against the run transcripts before anything acted on them. After the last generation, a compare-only pass confirmed the gains without shipping anything unvalidated.</p>
<p>One lesson from those generations transfers to anyone writing guidance for agents: <strong>placement beats content</strong>. Facts that lived on surfaces the agent always loads held in every generation that followed. Facts one reference-hop away failed randomly, even when the agent read the pointer to them. If an agent must know something every time, put it where the agent already is.</p>
<p>And that's what "accelerated" means here. The slow version of this loop exists everywhere: ship guidance, wait months for bug reports, fix, wait again. Model training is slower still; a fix in our skills reaches agents today, while a fix in training data doesn't reach them until the next model ships. The loop compresses a feedback cycle we don't control into one we run on a schedule, ten generations for the price of a script.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="runs-you-can-watch">Runs You Can Watch<a href="https://bestax.io/blog/ai-loop-keeps-skills-honest#runs-you-can-watch" class="hash-link" aria-label="Direct link to Runs You Can Watch" title="Direct link to Runs You Can Watch" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="A captured agent run, drawn as pixel art: a retro console replays a recorded build on screen while a label card beside it lists skill, prompt, model, and date, with a robot pointing at the card" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAJ2CAIAAADAIuwLAAAQAElEQVR4nOzdXaik913A8f/zzOyeJCJtfSlllWBlicWbSgWNZMEbC70oxbAt26sUi21FqSCmVVG8EASVikKx2CiVepWlLvRyUW8CGwTBSi+i24hUom3CQjdJk2b3nDPzPP6f55k5Z/bsme7MzsvOzO/z8WScnfPMnLNDejjf/N/6e+fOJwAAAOIpEwAAACEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEFQ/ARvmwqWLJx65dvlKAgCAZTNCCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQRV7584nAADYLXbthlkYIQQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKDsMgoAABCUEUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAiqn9bowqWLJx65dvlKAgAA4EEwQggAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEVe+fOJwAAAOIxQggAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEH1EwAAsNO++bXnTzzy7vc9kcAIIQAAQFiCEAAAIChBCAAAEJQgBAAACEoQAgAABFXsnTufAAAAiMcIIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEH1EwAAwI66cOniiUeuXb6SGDNCCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQRV7584nAAAA4jFCCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAE1U8AAMBOu3Dp4olHrl2+ksAIIQAAQFiCEAAAIChBCAAAEJQgBAAACEoQAgAABFXsnTufAAAAiMcIIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABNVPsFQXLl088ci1y1fStvnm154/8ci73/dEAgCA3WKEEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAgir2zp1PAAAAxGOEEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIqp/YchcuXTzxyLXLVxIAAMC9GCEEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgir1z5xMAsGyPP/lUAtgJLzx3ddqn3rh5I7HNjBACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAiqnwCA9Xr5xesJADaAEUIAAICgBCEAAEBQpowCAAAswYVLF088cu3ylbTZjBACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQdhkFAABYgs3fU/RuRggBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAou4zCVrpw6eKJR7ZxVysAAB4sI4QAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUXUZhK9lTFACAxRkhBAAACMoIIQBsiaL9p0h10d6WZSqLuixSr8y3db7tlaloH8kf3TXtc4Bd1fyvvE6prlNVF1W+XxfDqvnI97vb5vGq+VlQt1d218MEQQgA26Kpu7ptwlSMarDu95oU7OcI7NX9XIY5C5sg7KKxC0hgN40Dr+iCcNi236Cqe8NikH8GFGkwbH9qlCl/uvmhULc/RhQhdxCEALA9itE4Yd3VYK+rwbI+02vunylH44TdyGHThEXdPQvYMd0EgLodFexGAruxwTLf5s8Mu2uaO/nK/Ej7w0AMcjdBCABbYzQFtMvCoh0JzDWYBwn7vSo34Zl2kLBpwl47a7SbXCoHYUflFOwmgjY1OGxqcFAVxbA8HIVfG4ptChajocRCEXIXQchCvvm150888u73PZEAWJ0285qP0ezQpgBf+s33J4CxR//yH3MN1r0qVWXOxVyCzXQBMchp7DIKANumGyEs02gLmZ4xQOBOvfG88fJoqjmcThACwDYoxpNFxxNG8726/f/Nr30AE+rRpPHuT+MfGt0fTSPnToIQAAAgKEEIANugPtohsB5/tLsG1u2+EQAT2jMJRxuLHv/Q6P5Y+4nBHQQhAGyb7re7Ko22mx/69Q6403B0Tn37g8JpE3w/dhllIfYUBVi37hDq5ve8Kg2LutecOfbw7z1Tn+2ns2dSc/JEP/V6qT2ePjl2AnbY6EdB+1+FhsNiMEiHw3RwWBwMih95NP+I6I6qL45Op4DTCEIA2BpF89tfMZ7/1R5FPaiaT+Tf//Lve/n3wkGv6A9TdzZ9IQhhp3Wn0o+asEqDYf4ochMeDop8J/9w6AYJxyOEDiHkVIIQALZH9+tc0U4Ga0JvONo28OCwHQ3IA4O9uq3B/FEc1aAkhN1ztCCwC8LmbPoqjxOOsnBQNefU52HDqv1xkWoTR5lGEALAtqjbDePrutlLvjlvugm9/Jtf/nMOwuGwHuQgLIuybA8fK0ZnVKhB2FXdLlPNiuKjaeRNBObbctDcFm0oprpK9dHwoCjkJEEIAFti/Mtf94tdkaqjzxTf+W4yEAiM9X7wdoLZ2GUUAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABBUPwEAIb3tHe9KwGZ7/dVXEqySEUIAAICgBCEAAEBQa50yeuHSxROPXLt8JQEAAPAgGCEEAAAIShACAAAEZZdRYCU+8PFPpnW5+qVnErAM3/6bX0/rcu4TX0iwXr/1K7+WluEv/u6v1/bKsGpGCAEAAIIShAAAAEGtdcqoPUUBAAA2hxFCAACAoAQhAABAUHYZBQBG7PzJblvdHp52B2V7GSEEAAAIShACAAAEZcooO+U7//1fiYB+/zOJB+H5f//GiUc+9OEPJgBgexghBAAACEoQAgAABGXKKAAE9fqrryQAYjNCCAAAEJQgBAAACMqUUXbcm7duJQAA4DRGCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAICi7jAJAUG97x7sSsNlef/WVBKtkhBAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQfUTsGwf+dinj+5/5cufT8u2yOtPPnfSg3odYOt862+P/2vyj/1qlXZRhL8jQMcIIQAAQFCCEAAAIChBCAAAEJQ1hLB9FlmnN/ncaesA1/k61iICADxARggBAACCMkIIABDIt//m1xPTnfvEFxJEYoQQAAAgKCOEcLp518Utco7fLM+11g7YQJPn9U0zyzl+63ydaa857bnTHl/132vesxCdnQjcHyOEAAAAQQlCAACAoAQhAABAUNYQwrF51/Wt8/WXde7fprEGErbaImvblrVGbllr51b9mtNM+1qzfD/WDQKLM0IIAAAQlCAEAAAIShACAAAEZQ0hHJt3nd685wdaL3c35ysCaf7zAyfNcpbgtOtXbZG/1yTrBoHVMUIIAAAQlCAEAAAIShACAAAEZQ0hnG5Z6wOnrUu0Rg7gyLLWwi1y7t+8VnG+4qq/FsDdlhaEFy5dPPHItctXEgAAm+TcJ76QAMZMGQUAAAhKEAIAAARlDSEcm+XswUnzrgNcZD3htO9t21/HWkrYaouc+7es8wPnPetvlrV2s3xvy/p7TTPL+kDrCYHFCcJFFaN/RnfybVHU7W37YHHy+roe3dbNbdH8qb2fJu8AAACsniBcyFEEprb9cgqWRXenN76TJpOw7lKwTlVzO6zrurmTL+kqMV+sCQEAgHVZWhAG3VN01IKpbEcFyzJ/NCnYy3eK5o/jMcPmqm5UMP9TVU0QDqtevi2qYVXlkcL8SJuFRVKEAADAehR7584n7lc3AFiWTQ32er1cgP2yrcF828tp2Nw/GiTshgeHVfuRM7C9M6iaPhwOh/mzVVXU4zml3J/v/Pd/nXjkzVu3ErAaX7/+0olHPvThDybGHn/yqWmfevnF62mpvvU//5Hm97Z3vCsBm+31V19J8/uxn/jptFQ3X/6faZ964+aNxDYzZXQhxbgJe72m/fq95s6Zfnmmue3iMHficRAOhzkChzkCDwfl4TDfVsUwDdrP5k8VhWWEAADA+gjChYzWDZbt2GCv+Th7ptw7k872823RNGFThM300ayZJprzr+nAtH9YHwyqsigPUrMPWJ16zYTSapjG6wkBAABWTRAuqmjXCjaDgW0NPnQ2PXSm9/Be2jtb7vWbR/JoYdluBF3lgcFhOjhM+4N05qC6td8r8vhgKpstZo53mkkAAADrIQgX0m0r2u0ic6bXjA3mGvyBh8ochI/k2xyHZ8tuHmlKo+HB2wfp1kF6qxwNG9b1sKrKuqqGVfNIew5FkQAAAFZPEC4kl2BRjHaROdNvZormFHz4ofRPf/bj93zu+z/7f+1eo+VgWOVQzC8yrHrd3NLEA3L3DhlE8N73PJoAAEIqEwvoThpsRgibBYTl2X6xd7Z8ZG+mdzVfli/OTzlaZ9i9GgAAwHoIwkV15w22U0ZHO8o8fHamdzVf1mw/0y4y7MYYSzUIAACskSBcyGhMr2i2Ge2VRbPLaL/ZV2YW+bJ8cbPCsCyaXUqL0gghAACwToJwCYrxXqPtxNFm7ugsz8qXdfvNlBOH1wMAAKyNTWUW0oVcd9ttN9pl4Sy6FOyeVUy8FAAAwHoYIQQAAAjKCOFCmgPlx7dVe7J8VTXnDc4iX5Yv7p5VT7wUAADAegjCJehCrkvBQfMx00GC3fGDXRZ2NQgAALBOgnAhTcg1OVjlBmyPmE8Hg+r2wUwTcW8fNBc3TVjVwyYKx6/Gg+OAcgAAQrGGcFGjaaJVOsw1eFjtH6ZbBzONEObL8sX5KYdNE46mjwIAAKyNEcKFdGN6OeTayaLVwaDcP6jemm2X0bf2q3zxwaDOT2wmjhohBAAA1ksQLiSXYE647zRW2QAAD3hJREFUYdXr5RHCQTroVbf2e2WR3v+Z/3vkofLhs+nn3v9L/bIqi6bzqroYVOW//tM/3zpIb93OV6b8cTCo8hO7Mca6HrY96OgJANbh9VdfSQDEJggXUtdFVdfNCGEzZbQqD8uiaPYYzY8MqrR/kN48PNMrjoNwWJevvVntD/KnmiC8fTjcP2yeODzabrRWgwAAwJoIwkV1+4sOipRL8CBVKZV5oK9pw0G130/fO+jnGizaPUTrlOux+O5bzZDg/mGdxwa7NYTNdNNqtNcoAADA2gjChbQJV1TVsCjSIDVrB5s8rMvBsNkqpl+m7x12Qdhe3A4SvvHWcNDOL80X5GjsTqrIr9AGYaEJAQCAtRGEC+kG/nLwdYfRj86Xr6pBmQ4GZa9Mtwe9YuKIwTxI+ObtZn5pHkPs1g12Y4P56Udn0wMAAKyHIFxUN+6XhwGHw2G7TWgvZ15OwWbaaJn2B2VRTARhXewfVN0JE6N1g93YYPsiahAAAFgnQbiYut0TtNkPpijyUGBV1/WwKpp9R8si5UcOq7K48/L9w9FJFc2eouONZI5niopCAABgXQThQpoebKeMdn+oU5N2RbNosMnCbJiD784iPBw0s0u72aF1Nyp4NFPUlFEAAGCNBOGi6tE/x3cmDxI8rE6+wwcDB0sAAAAbQRACD9JHPvbpo/tf+fLnEwAAa1QmAAAAQhKEAAAAQZkyCgBBPbz3SGK6W/tv3fMa7+H35z1c3CzvISxCEAK7YHIt4iTrEgEAvg9TRgEAAIIShAAAAEEJQgAAgKCsIYRj09ahTTNtfdq0s/UWWec2y/c2y/cz7fpZzgNcxfszy+PWAQIArIggvMPjTz6Vluq1V28v90u88NzVE4+8cfNGAgAAmJ8powAAAEEJQgAAgKBMGYXTzbuub971hLNcM8tz5/1as7z+vK8z7/ezyN9xGusMYbme+OVfTg/O81/9atp+3sPFeQ9hDYwQAgAABCUIAQAAgjJl9B5efvF6AgAA2EWCEFZrlrVt1r8tzhmGAAD3wZRRAACAoAQhAABAUIIQAAAgKGsI4XTT1qRNirw+bZ3vz7LOKgQA4AQjhAAAAEEJQgAAgKAEIQAAQFDWEMLpNmGt2uT3sGlrGpf1tWb5OzrLEQBgRYwQAgAABCUIAQAAgjJldG4vfu6j97zmsaefXdvrAAAA3B9BCMu3ivVsi7zmtOfO+/iqWQcIALBmpowCAAAEJQgBAACCEoQAAABBCUIAAICgbCoDx/7g9z5zdP/r119K3Mn7s3ve+55HEwAQmBFCAACAoAQhAABAUKaMAgAnPf/VryYW4z1cnPcQ1sAIIQAAQFCCEAAAIChTRuf22NPPpmVY1usAAADcHyOEAAAAQQlCAACAoEwZhWMO6QYAIBQjhAAAAEEJQgAAgKBMGQUATvqd3/hsiuFP/+rP0mp4DxfnPYQ1MEIIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABB2WX0Di88dzUBQHj2PFyc93Bx3kNYAyOEAAAAQQlCAACAoEwZhd3xkY99+uj+V778+bRKk19r0qq/LgAAS2SEEAAAIChBCAAAEJQpo3d44+aNtAwf+Pgn73nN1S89kwBgI/3Ob3w2bZtN25HSe7g47yGsgSAE7sfkWsFp6wlnYS0iAMADZMooAABAUIIQAAAgKEEIAAAQlDWEcGyW9WzznvU3y/q6Zb3OLJb1/QAAsANCB+HjTz6VVuO1V2/f85plffUXnrt64pFl7ZUKQFh2Slyc93Bx3kNYA1NGAQAAghKEAAAAQVlDCKebZd3gvI9Ps4rXmeX15/1+VsF6RQCAB8gIIQAAQFCCEAAAIKidnTL6gY9/8p7X3L0X6MsvXk8AEMOt/bcSi/EeLs57CA+WNYQQy7LOM1yWWc5+BABgRUwZBQAACMoIIZvud7/4xXte8yef+lQCAADmZIQQAAAgKCOEEIu1eQAAHBGEO2iWHVYBAABMGQUAAAhKEAIAAARlyigs3+Q6vVnO/Zu2rm/e11n19zNp2utMPj7L61jTCADwABkhBAAACEoQAgAABCUIAQAAgrKGEI7NspZvlsfnvWYWu/o6AAA8QEYIAQAAgjJCuAQvfu6jaRkee/rZBAAAsC5GCAEAAIIShAAAAEGZMrqDrn7pmbRDfubnv5jW5evXX0rE8973PJoAAEIyQggAABCUIAQAAAjKlFE23Z986lMJAABYASOEAAAAQQlCAACAoEwZBYCtt/8DjyQAmJ8RQgAAgKAEIQAAQFCmjC7BY08/m9gJDigHACAUI4QAAABBGSEEgF322r88f+KRt//CE/d+WtH+k2+LIpX5o2xue73UK/NH3dz2Ro93FxSj5xBDnf8vVfm2TlXV3BkOi2GVRh/D5pHu8bq9srse2EiCEAC427gGm49xDfabj7pfju63cThqxdRemVThruu6LmdevtdVXxeBg7LOTTioUjFsrximOv/Hgmr0nLpIihA2lSAEAKY7GiHsdTXYS2f66Ux72zzSBmGvq8FxQ7LDjkf88qhgG4SDdkjwcJAOyzoNivaT7WVV04G1DoRNJwgBIJaZJ5F2w4NdE7YzRZsa7KWz/eajy8Je91HWxfhidl7be0UThG0KNjXYjhI3/y2g6b+iGTksm/HD7l+eLiCBTSUIAYDTdHU3HiGs8zBgr8yDhMM/fCrBaX70j/+h6A2K8rAoh6k3WlXYpGO3mJAZ3Dj4boL1EoQAwBTF+KOcWEkIU9RlMf5XpRrNHbZ4EDaeIASA6E5MIs2/wL/jiQvt3aMiTMd7zMA05eTM4dHK0mZLmW4TWoOEsJGcQwgAABCUIAQA7lQfnRpXjz+Oto40yMN0xwcPptFOpO2JE6N/eYCNZMooAER3yi6j3dTQox6s2lME2vPHE0xRVHXzUVfNRqOjEwsTsOEEIdy/j3zs00f3v/Llz6dVWufXAmjU3Y4go/PHi2FZN+ePD3t/9PeOnQjtlGMn2nMIDwY3Dw7z/eJg0Pxx0H6qGm8xaoQQNpUgBABO1Q7ydGeLV+35AYNh+0t9MarEQZX6w+5g+sLB9EF8v4PpmzIsmg6smse7K+vaKCFsOEEIALFMOYZ+iq79ivaX/qI7RGDUh82xhPmjbI+jSOMNSPXgbhtNBG0zrxr/m9AOHed/Q4pBNR4YrJw9CNtiZ4Pw6peeuec1jz/paF0AOFXd7gbSbSeTf7kvU2pXD9Z1UZV1r22A9sD60cn13bkCRFGPV5bWo/Ybjo6hH80j7Rad1vXxiCKwqYwQAvdjck3jJOsbYUeMpgW2t00J3rGXjPID2BmCEAB22XwTRAEIxjmEAAAAQQlCAACAoEwZhdNNWyO3iteZtu5u2nMXWb+3yPcDAMCOEYQAsPV+8kd/IgHA/EwZBQAACEoQAgAABGXKKBybXF+3zvV4077u5P15v7dZXn+R660zBADYAUYIAQAAghKEAAAAQYWeMvrCc1cTAABAVNYQwmot6zzDZVn1+YrWFgIAbBFTRgEAAIIShAAAAEEJQgAAgKCsIYTlW8V5hsv6utb4AQBwJHQQvnHzxj2v+bmf/cU0v3/9t+fuec3qXhkAAGAWpowCAAAEJQgBAACCsoYQjk2ur1tkXd+yXmfe15xl3eAs388s6wytRQQA2AFGCAEAAIIShAAAAEEJQgAAgKCsIYTTLWuN3CrW2i3ymtb+AQBwxAghAABAUEYIAWAlXnjuagKAzWaEEAAAIChBCAAAEJQpo3Ds69dfSsTz3vc8mgAAQjJCCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQdllFABW4o2bN9L2e/zJpxKwDC88d/XEI7vxU4JtZ4QQAAAgKEEIAAAQlCmjcMwB5QAAhGKEEAAAIChBCAAAEJQpowDAHF5+8XoCYFcYIQQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKDsMspOef7fv5EAAIDZGCEEAAAIShACAAAEZcooALARvvHnr6Vl+Knffvs9r3nxcx9Ny/DY088mgG1mhBAAACAoQQgAABCUKaN3GL7znSce+Zf//c90H8av07txY9qXWPCVj9z9JSL70Ic/mAAAgNkYIQQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKDsMnqHNezYaVNQAABgQxghBAAACEoQAgAABGXKKACwEX7qt9+e1uWxp59NABghBAAACEsQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQVLF37nwCADjND/7QOxOwGm/cvJHgQTNCCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQfUTAMAUdkEE2G1GCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACC6v/wj59PAAAAxGOEEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAguq//uorCQAAgHiMEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABDU/wMAAP//lTp9TwAAAAZJREFUAwCFjeOQAFSW3wAAAABJRU5ErkJggg==" width="1200" height="630" class="img_WUYJ"></p>
<p>Numbers convince maintainers. Seeing convinces everyone else. Our <a href="https://bestax.io/storybook" target="_blank" rel="noopener noreferrer" class="">Storybook</a> has a Skills section where the showcases are agent-generated: each skill's canonical example was built by an agent following that skill, and it renders live next to the components themselves. Every example opens with a small header recording exactly what produced it: the skill, the prompt, the model, and the date. The current set lists two different models, because the record keeps what actually ran. It's the exam at eye level: prompt in, rendered page out, replayable with your own eyes.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="holding-the-line-between-generations">Holding the Line Between Generations<a href="https://bestax.io/blog/ai-loop-keeps-skills-honest#holding-the-line-between-generations" class="hash-link" aria-label="Direct link to Holding the Line Between Generations" title="Direct link to Holding the Line Between Generations" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Review and gates, drawn as pixel art: two reviewer robots flank a turnstile gate topped with a check-marked shield, one cartridge passing with an approved stamp while a dusty one bounces off with a yellow X" src="https://bestax.io/assets/images/ai-loop-keeps-skills-honest-gates-f91eb5ad74429f93552b0512a057efaf.png" width="1200" height="630" class="img_WUYJ"></p>
<p>Evolution only accumulates if survivors don't quietly regress between generations, so the daily machinery guards the skills the way it guards the library code.</p>
<p>Every skill change goes through the same adversarial review as a component change: two AI reviewers pick at it and a human does every merge (that pipeline is <a class="" href="https://bestax.io/docs/guides/getting-started/ai-development">its own story</a>). The <a href="https://github.com/allxsmith/bestax/pull/302" target="_blank" rel="noopener noreferrer" class="">icons</a> and <a href="https://github.com/allxsmith/bestax/pull/329" target="_blank" rel="noopener noreferrer" class="">optimization</a> skills landed that way, and so did the <a href="https://github.com/allxsmith/bestax/pull/303" target="_blank" rel="noopener noreferrer" class="">dark-mode contrast rules</a> in the theming and layout skills.</p>
<p>The build itself also fails when the skills drift from the library:</p>
<ul>
<li class="">The component catalog agents read is generated from the docs, and CI fails on any diff, so the list is complete and current on every commit. A component the catalog can't see is a component an agent will rebuild.</li>
<li class="">The theming skill's inventories must name every themable component and CSS variable the library registers. Add a themable component without updating the skill, and the build says no.</li>
<li class="">A house rule with teeth: a library change that invalidates skill guidance updates the skill in the same pull request, always.</li>
</ul>
<p>None of that replaces the loop. It keeps the loop's winnings from eroding while nobody's looking.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="still-evolving">Still Evolving<a href="https://bestax.io/blog/ai-loop-keeps-skills-honest#still-evolving" class="hash-link" aria-label="Direct link to Still Evolving" title="Direct link to Still Evolving" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="What the loop keeps finding, drawn as pixel art: a corkboard pinned with issue tickets numbered 367 through 371 while a robot pins one more, a glowing cartridge resting on the shelf below" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAJ2CAIAAADAIuwLAAAQAElEQVR4nOzdT2xl133Y8XPueyRnJKV/gRSQncBGBSP1xqkDJCpsoEXgAAGykhXDAgpIaBYBuvDOaXZZZNc2O++ySJBFARuxVgYCBQmKCrVQIEAt2IDcsbyw4caWpYXsRiPNkHz33p5z73ucITUzJId85Lvv9/mYenrzeElqyKuBvv6de+587+lnEgAAAPE0CQAAgJAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIKap63w2S8+f+KVb37t5bTZpvjPzOZw/gBwWX7wrddOvPLxT38mATGYEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFB57+lnEgBwMfb+BWCKTAgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAou4wCAAAEZUIIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBzRNcuR9867UTr3z8059JAADA1TIhBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoPLe088kAAAA4jEhBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoOYJYOt89ovPn3jlm197OQFsF3/WARdnQggAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEHlvaefSRDJD7712olXPv7pzyTicSYAAJgQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUHYZBQAACMqEEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIap4I4Affeu3EKx//9GcSpPTZLz5/4pVvfu3lBABADCaEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQVN57+pkEAADnYQ/zi7PXN5vAhBAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIKyyyhsLfu/AQDwaCaEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlF1GJ++zX3z+xCvf/NrLCQCYMjtFA1fDhBAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIK65l1G7ZAJAPB4pvjfUXZPhU1jQggAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEFd8y6jAAAAXBcTQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgqHkCYPDscy8mAOAKvfHqKw9713vvvpNYPxNCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBuTE9wOneevNWAgDYOiaEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEHNEwDr8eMffjcBQAwf+dgnExNkQggAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoOYJANbv9stPn3rMU8//JMGDvP/1Pz71mCd/948SPIg/f+ARTAgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAou4wCbKi3v/N62ibf/51TD9mO3/Jrr39vfPL5l15I12fLzp+n3vzGqcc4fy6RP38makPOH6bFhBAAACAoQQgAABCUJaMAm+72nTtp+p48wzHb8TvdNHG+q86fdfDnD2w9E0IAAICgBCEAAEBQlowCcBXe/ujXEzyun/7S5xI8Ln/+wCOYEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQc0TAFF94aUvpcf1l3/xlbMffK4v9OjPfJF/5nN9IU41xfPnyj4zp3L+wIYwIQQAAAhKEAIAAAQlCAEAAIIShAAAAEHZVAYgrotscnBiN4UTn+rR772IS/xn5oKmeP5c5DOv758qJudPgs1gQggAABCUIAQAAAhKEAIAAAQlCAEAAIKyqQwAW8suDgDwaCaEAAAAQQlCAACAoAQhAABAUIIQAAAgKJvKALB0YguWRzvXBi3r+8yP/kJ2kblKkzh/Trz3ys5MTrX15w9sLBNCAACAoAQhAABAUIIQAAAgKEEIAAAQlE1lAFi6yD4N59qJ4RI/s11kNsckzp+LnDBOtrWa4p8/69vbBq6SCSEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFDzBEBUX3jpS+lx/eVffOXs7z3XF3r0Z2ZzTPH8cWZuji3488f5w3YwIQQAAAhKEAIAAAQlCAEAAIIShAAAAEHlvaefSQCk9OxzLz7sXW+9eSud349/+N10AW9/5/Xxye07dxLT8e1bPxqffP6lF9L1cf5MlPOHi7je8+cjH/tkOr933/rhw9713rvvJNbPhBAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABDVPAGyRb9/6UeKyfepXfjnF4PxZB+cPFxHn/OG6mBACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQdhkF2Cr2o+MinD9chPMHpsiEEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAgrLLKMBW+fatH6Wo7HB4cc4fLsL5A1NkQggAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEHZZRRgq9jpjotw/nARzh+YIhNCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBuTE9wIZ67fXvJXhczh8uwvkDcZgQAgAABCUIAQAAgsp7Tz+TAEjp2edefNi73nrzVjq/H//wuwkAYvjIxz6Zzu/dt374sHe99+47ifUzIQQAAAhKEAIAAAQlCAEAAIJy2wk4KS//Wj4pjzn3w+PwYj55fN8vH/v6mOuvhufp/icAALB5BCEccxSBaWi/koJNHp/MVk/S/UnYjynYp64+tn3f1yflkLESy8GaEACATSUI4bhlC6ZmmAo2TXmrKTgrT3L95WpmWI8ap4Llr66rQdh2s/KYu7bryqSwvDJkYU6KEACAzSQI4aTagUMNzmazUoDzZqjB8jgraVifHw0Jx/Fg2w1vNQfrk0WelQPati2fpBtXkAIAwEYShHDMOP0barC233xWn+zMm536OMZh6cR7Qdi2JQLbRZcOF81hWx673KbF8N7yrpxdRggAwOYShHDM8rrBZpgNzurb7k6zt5N25+Ux1yasRViXjxZ1mWjJv9qBaf+wP1h0TW4OUpdqBs7qgtKuTavrCQEAYNMIQjgpD9cK1mHgUIM3dtONndnNvbS32+zN6ytlWtgMd2zpymCwTQeHaX+Rdg66O/uzXOaDqalbzNzbaSYBAMBmEoRwzLit6LiLzM6szgZLDT55oylB+ER5LHG424zrSFNajgfvHqQ7B+mDZjk27Pu265q+69quvjJcRZgTAABsHkEIx5QSzHm5i8zOvK4ULSl480b6m//y0VM/9rf+098Pe402i7YroVg+SdvNxrWlCQAANk+TgPuMdxqsE8J6AWGzO897u80Te2f6N6UcVg4uH3J0neH42QAAYDMJQjhpvN/gsGR0uaPMzd0z/ZtSDqvbzwwXGY4zxkYNAgCwwQQhHLOc6eW6zeisyXWX0XndV+YsymHl4HqFYZPrLqW5MSEEAGCTCUJ4gLzaa3RYOFrXjp7lo8ph434zzX03rwcAgI1lUxk4Zgy58XHcbnTMwrMYU3D8qHzfpwIAgM0kCAGATff+1//41GOe/N0/SvAgt19++tRjnnr+JwlCEoRwTL2h/OqxG+4s33X1foNnUQ4rB48f1d/3qQAAYDMJQniAMeTGFFzUtzPdSHC8/eCYhWMNAgDAJhOEcEwNuZqDXWnA4Rbz6WDR3T0406Yydw/qwbUJu76tUbj6bAAAsJHsMgonLZeJdumw1OBht3+Y7hycaUJYDisHlw85rE24XD4KAAAby4QQjhlneiXkhsWi3cGi2T/oPjjbLqMf7Hfl4INFXz6wLhw1IQQAYLMJQjimlGBJuLabzcqEcJEOZt2d/VmT02/9wd8/caO5uZt+/bc+N2+6JtfO6/q86Jq/+5u/vXOQPrhbjkzl7WDRlQ8cZ4x93w496NYTwFV7+zuvpy3y1JvfOPWY7fgtv/b698Ynn3/phXR9tuz8Sd//nVMPcf4QliCEY/o+d31fJ4R1yWjXHDY51z1GyyuLLu0fpNuHO7N8Lwjbvvn57W5/Ud5Vg/DuYbt/WD+wPdputFeDAABsKEEIJ437iy5yKiV4kLqUmjLoq2246Pbn6f2DeanBPOwh2qdSj/kfPqgjwf3DvswGx2sI63LTbrnXKAAAbCxBCMcMCZe7rs05LVK9drDmYd8s2rpVzLxJ7x+OQTgcPAwJ3/ugXQzrS8sBJRrHO1WUzzAEYdaEwPW6fedOiiHO7/Qqbcd39ckzHOP8ISxBCMeMg78SfOPN6Jf3l++6RZMOFs2sSXcXs3zfLQbLkPD23bq+tMwQx+sGx9lg+fCje9MDAMBmEoRw0jj3K2PAtm2HbUJnJfNKCtZlo03aXzQ53xeEfd4/6MY7TCyvGxxng8MnUYMAAGwyQQjH9cOeoHU/mJzLKLDr+77tct13tMmpvHLYNfn44fuHyztV1D1FVxvJ3FspKgphcPvlp0895qnnf5LgQX76S59L8Lje/ujXE/AQghCOqT04LBkdf9Gnmna5XjRYs7BoS/AdL8LDRV1dOq4O7cep4NFKUUtGAQDYYIIQTuqXf917cv+NBA+7k//WHCzcWAIAgElqEgAAACEJQgAAgKAEIQAAQFCuIQTYUG9/5/W0Tb7/O6cesh2/5dde/9745PMvvZAAYLOZEAIAAAQlCAEAAIKyZBRg092+cydN35NnOGY7fqcAMCEmhAAAAEEJQgAAgKAsGWXLPfvci+lS/fxndy/3S7zx6isnXnnv3XcSbJ23P/r1xHb5wktfSo/rL//iK2k9n3l9X+jRn4rz2oLz59Ff1wnDVJgQAgAABCUIAQAAghKEAAAAQQlCAACAoGwqAwA8jovsmfHo7Tcu8TOf6+ue6zPbMuSCpnj+XORg2FiCkHDeevNWAgAALBkFAAAISxACAAAEJQgBAACCcg0hADBh69vrxZYhEVzkB7wjOwAAEABJREFU/DlxsBOGiTIhBAAACEoQAgAABCUIAQAAghKEAAAAQdlUBgC4BOfaUeMiW79c2S4ytgy5Sltw/sBEmRACAAAEJQgBAACCsmQU0pt/8sKpx3ziy1+9ss8DAABXw4QQAAAgKBNCAOASnGtzjnNt7HFdu8hwlaZ4/sB2EIQAG+q//u1/P/WY//iZf5MAAB6XJaMAAABBCUIAAICgLBmFCfjt3/v9xLX6J7/xq+n8/tVjfdQFffvWjxKX7VO/8ssJALaRIAQAgrK/CIAlowAAAEEJQgAAgKAEIQAAQFCCEAAAICibykD6xJe/mi7DZX0euAj7YXJlvvDSl9Ljuq7dXE583XP9FuxAc7mmeP6c8Ojfwon3On/YWCaEAAAAQQlCAACAoAQhAABAUIIQAAAgKJvKAACP48o2yVjfF7LPxzVy/sCGEIQwAa/82Z8m1u/Z51582LveevNWOr8f//C76QJ+9Td+LQEArJMlowAAAEEJQgAAgKAsGQXYUH/wud8cn9y+cycBAKyBCSEAAEBQghAAACAoS0bZcm+8+kqCSL5960eJlU/9yi8nAODhTAgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAou4yy5d579510GX77937/1GNe+bM/TXDd7KvJRdildh3i/Fvp/FkHf6qzbiaEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlF1G2SrPPvdiWo+f/+zuqcdc1ld/49VXTrxyWXulAjya/Qy5COcPTJEJIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABGWXUSbjt3/v90895sN7gb715q0EwNl8+9aPUlR2yLw45w9MkQkhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEZZdRAGDJTolchPMHpsiEEAAAICgTQgAAJqPv+5Ov5D4x6FO3fJbP8TEEJwgBANh0Rx24yr9mfKU+fjhpzp5D26U7+p3nM38L8v1N2B89EIcgBABgcx1PwaYGYJG7tAzC8vrJI8MmzaJfTQibM18XVr5Xy8YevpX9mNO9LIxDEAIAsKHujQGbIQVTV2twqJWu7/qSMv3yheHAqJPBlcVRPM9ODcJ7w8BcO3AZgjUOx8jOKfWiMARBCADAZmuarutqtpQKTHUK1nZtN1Rgt1w0OjZh9NnWfrdYPpvPTjv2XhDWsq5PujJ2TWNX1wHs8EQTBiAIAQDYRMvxYM5jDXY1/7pFX37Rt32/6MpjTZny2A0HLy8nDDwmvLMKwn5v56EH9eNfwwrc8VvW18lrfaGOB0sWlscmLfen0YTbTxACALCh+tyPCxiHCGwXXSopeNiVLGyHx64d4rCtD+Oc8AHbkMbxfnewfLb3yP/IvzcY7McaLM1dm7AtjyUKu/rLNDRhf2LXGbaQIIQHePNPXkiX4RNf/moCuA6vvf69BI9rE86f2nV5Nb6qy0T7kn+LMhgsKbh87A5rEA4zwzTOD/vl9Cv6tYSpv7n38Pel5braOnDt6zywq8PWtGhzzrUJ87C9TJ26NsPa0TxcWJjYVoIQAIDN1Q812K7a76B2YLvftQf1+WpOWA+o065uyEj6J84QhF1dHdq3bRprsMl9bcKUFmOOd0ebj7LdBCEAAJup7hOzusatJt9hfWvvdou7XVceSxPud4eHw/CwHa4tHK97M8/qn3xIEC4bb7lStM4DF21adHmW+1wHhMubUNQGH8eDzWqDGbaWIASALfT5ly5n6TsxbcT5k4e/mvLQ9E2u22bOZ/3OLO3M+9353X//7xKP8JufSud347/9jzzu1trPhqHs6v72Vo1uNUEIAMBGqjXS1CjJTSpNWN5mQxPunnpPBR7L7qzW4Dg5bIZvexp2lzEk3GqCEACA65CP/e0B7811QtiXx1muN6aflSFhk+bzfsd/wa5F+cbmtt7ksW9nNQuHPKxPHvwzMjPcEv51AgDgCuV0LzCOmjCfPGIIwnpL+vo2a4Ylo00/n6c6IdxJrEP5xtabeJQsLCPB2fIuhbluP1NXjfZH97IfQ/D+n5k4nDBBCADAVcn53pN8/5M8OxGK9a3JdaVok2sN1hTMu+Vxnnbn+4nL90T59i664Q4eQwHWhaJt+V8ZE7ZHt7Af3YvDbrzL/fDzGm4ZydQIQgAArkQ+Gv3lccOY2fJJXg4Jh40ul1lYr2Gr78rNsFJ0Z15rsIyw9nbT7m5iHco3tq2ZV29HMaRdXuS+BHnXzcddSVNNwcNhk9Ll9q9pNUjsx6sNh3FiloVTIggBAFi/vHrMy9KbDbvF1MnguGdMSb/hXflocljXi5ZXmzxsLlqDcG8339hNNwThWuyUb+xwQ4rhzvT1Z9TPmr7titXYsEbgztCEfTcc2nf1FvbleW5qQta/N/cGiUyBIAQAYM3Gud+qBmdj6c2a8RLB2Wy4SjAPE8NVFo5vebiAMM+bUoNHQZhv7iXWYOfmjWHyV7/z/WzWzxftwaKMB4dLCrvU1ltB1vbru93hlYN2uH19/Yh6j/ux+cshww0NNeFkCEIAANZtXCx6VINNHvaJmc1nQ+/NShTmMQtLH65GiPeCsLzt7qTdWV4GoQnhWsyfuNHnuptr3dB1Z9GXGtwtFdjWVaBtVyaF8zoq7BZt/WVq25KFB/WawzYtUr1bxfLO9ml5e3vXE06EIIQH+MSXv5rgur32+vcSwNYYd44Zbie4rMGdeXmra0HHJ/PShKUWh1bM4y3phyPzsKnMzizvDEFY3m7aZXQt5k/e7Jt5P9zYo9RgOlzMFm07tF8pwDon7Np20e2Uh0XbH5YOXOw2ZYiY6k+3XV0j2g8LTuv1hLYenQZBCADA+uXVtjFHNVhXge7O9srob2e2u7PMwmEeOF49OEwIh11G6x0IxyDcqWtH9wThWtQgLDW4O+/3dvqD2nv9os2lBhe1CXOJwzIkPFwU9fFwkfZz3+Rhh9EaheV5qmPCow1ImQZBCADAmo2LB5tx/5hmVuuu1ODO7GaZ+O3NbpQsrGVYXxyWj3blYbnL6HDniVqJs26nGT8q7Zb/gr2buGyzp55Iu4t+97A/XJS3VMaAi7Zpu/I4BmFe1LFhPjxc7B/O9w8WY7HX6wbrhYR9s7z/RF4OCR92R3s2iyAE2FCff+mFBLAF8nhLwfEKwtwMlwU2ZR5YI3DvX3/lD9L5/cvE9fjGX/31iVdufPV/5r5a3VKyT8shoVWj09AkAABYq/smhHm2nBCm3Z3sBhJbYGfe182BZnXJ6NFNJpkOQQgAwPrl1e3m626i4zWEO2VImJi4mzuzmzUIc5kI1nWi2faiEyMIAQBYu2FutLr1/LCvTN1FxvYwW2A+H+4XMlvePXI5HlwtH2XjuYYQAIArMQRDM1veWnC2MywcZeI+mA8bw5YJYa5vy11GXT04HSaEAACs23jHifpXvY6wqled1RsMMnH9rOnHLWHvbSpjODgl/l8ZAACuSq6XEeZh1WjpwvSgIPzG2z9JTEhzdN/I4Ze1BsXglJgQAgCwfnm1r8zRKGlWbzOYmLrlYDD39brBrAUnx4QQAICrcq8Jm2HfEftRTl9eNaEf5jT5f2UAALhaeXVRoSDcLsaDU2RCCADAdRCD28FscOJMCAEAAIIyIWQyXvmzPz31mGefezEBAABnY0IIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoN6YHAGAi/sN/TlyBP//DRBgmhAAAAEEJQgAAgKAsGWWrvPHqKwkAADgbE0IAAICgBCEAAEBQlowCrMtHPvbJBEDOfZNnsybNZ83uvLmx0zxxo3nqRvMLN5t/9ERi4v7xP/0XsxuHsycP036bmCATQgAAgKAEIQAAQFCWjLJV3nv3nVOP+fVf+7fp/P7uf7966jHr+8wAwDrcfu2b45OnPvPZdAHn+jxHBx9Z30fBqUwIAQAAghKEAAAAQVkyCgAAF3Ku1ZtHB394FeilfxScyoQQAAAgKEEIAAAQlCWjAABsj7OsqDzXrp6POHjzd/68rO8GW8yEEAAAIChBCAAAEJQlowAATN613GJ+Y3f+vKzvBhGYEAIAAAQlCAEAAIKyZBQAgMk7y+rNs+wXuh1rLC/43SAUE0IAAICgBCEAAEBQlowCLL3x6isJgEuXc2qa2bxJ8/lsb2d2c2/21M3ZwZPz9ql5eipdtsdbF/rhNZZbtnb0wy7rd/rBP/ysef9ufv9uc+cg7x/mg0VedKntctelvk99YsOZEAIAAAQlCAEAAIKyZBQAgMk7y63hH+9e82dZdfnhV673oy7ru0EEJoQAAABBCUIAAICgLBkFAGDyHm8B5CM+6lzrSy/ri17WR1kOytmZEAIAAAQlCAEAAIKyZBRg6b1330kAXLqc06yZzWZ5dz7b250f3Jh3T87z4c68m+8mpm7/zu30/gf5vTv5g7vpzn7aX+TFIrVt6vpU702f2HAmhAAAAEEJQgAAgKAsGQUAYCL+/A8TcKlMCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAICi7jAIAcB169yyH6ycIAQC4Qv19KSgJ4boJQgAArlxpwpqFihCumSBky7W/+IsnXvlf//f/pMew+jyzd9552Je44Gc+8uEvAQDb4Fj99W1KjVWjcN1sKgMAwNXox/WiXX0bhoSdIJw+VT9xghAAgCswZkPfpWGxaNcNb21i6vrhp2r172RZMgoAwJqthkhlIpj7qjzruq4tTcjU9X0e572ScJpMCAEAWL9+tZFMeTKmYNu2CxPC6buXgqu8V4aTIggBALgSq+sGuzIobLvFokuLRWLqjjp/eUORIQc14XRYMsqWu4IdO20KCgCPVOIgt0Mi7KRSgl1TJ4TtfLFoDxff+Ku/Tkxa2y6vCB0XBttjZmpMCAEAWLPV+Kiv2dAt2q4/bEsN9geHialru9TeNyRMSRlOiyAEAGDdhlYY1xbW9aLtYrHoDxeL/YPE1C3aOiRsu9WccHhRDE6HJaMAAKzfMCFcdN1OaYaSEIt2UcaDc8OJycuHixKEuQZhP+w4qggnRhACALB+qx1lDtput+3yYpEOmjTLiak7bOvbckK4mgMzHYIQAIA1q9vKlE7I4y3pD9pFOmz2msPcCMLpOziseb9cNXpfEKrCich7Tz+TAEjp2edeTABcvj7l4dbluT7rm9Q1uRse21naLc9nafhlfaXP+f1yWD0825bkWt373uflbjH1x1Lemq4+ado06+rz8liftKkpL/Z97soPezgyj/cnPGvzv/HqKydeee9dG7lfBRNCAADWrQZeqb2h8lLu+mb14sEwVepKBJYgrCWRdvJwbD/c5dwE8er1D3yp/kjqz672Yd+U6is/xBqHaTYkYjO0Yn2r4e8HNyWCEACAqzEWRc5DFpaWqCPAMjKsU6USGcP8cNkTfa8oNkdNxG74sQw/vm6ovjELh8ehBsfBYF7ef8KPbzoEIQAAaypya4oAAASuSURBVFUjYRgwjSVY+2+YNKWm5kV5Z9eUd3dpuUNlHgdRlotunLwsw5zvK8DV86HmV+PBnM63XpRrJAgBAFi/fmy/IRFyDYlx75FVUyyvM0yruxZIic2y/KkcjW/z+LhcI9qPrbi82jDL+UkRhAAArNs4Gizpl/vl+G9Mi+GFcU/K1ZLE+1JCVWyOfO9vR+139ENcLgY+qsH+/g9hwwlCgId6681bCYBLVFKhqRvK9Ed9sQyLVTzkY39jwxy7n0S+l/LjcHd4tetS9uObEkEIAMBVWS4b7fOwz2i/aoshLYY4XC1NTGyy/r5Vofc2AKqXgarByRGEAABcrTEn8rjgsFm+di8P7yMuNsGDbkRx30+mW73gpzVJghAAgOuwbIr7NpHJHyoPk8LNdOyuIDpw2gQhAACbwc0H4co1CQAAgJAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAgsp7Tz+TAEjpF/7ZLyYAYDO89+47ifUzIQQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKDmCYCB3cwAgGhMCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIKj5P//oMwkAAIB4TAgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACCo+f/72U8TAAAA8ZgQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAEJQgBAAACEoQAgAABCUIAQAAghKEAAAAQQlCAACAoAQhAABAUIIQAAAgKEEIAAAQlCAEAAAIShACAAAEJQgBAACCEoQAAABBCUIAAICgBCEAAEBQghAAACAoQQgAABCUIAQAAAhKEAIAAAQlCAEAAIIShAAAAEEJQgAAgKAEIQAAQFCCEAAAIChBCAAAENT/BwAA//9LQvf3AAAABklEQVQDAOyrvOOOlXUZAAAAAElFTkSuQmCC" width="1200" height="630" class="img_WUYJ"></p>
<p>A working loop's best output isn't the score; it's the to-do list. The ten generations filed real bugs and gaps, open right now: color props that typecheck <a href="https://github.com/allxsmith/bestax/issues/367" target="_blank" rel="noopener noreferrer" class="">values with no shipped styles</a>, a form label <a href="https://github.com/allxsmith/bestax/issues/368" target="_blank" rel="noopener noreferrer" class="">never wired to its input</a> for screen readers, <a href="https://github.com/allxsmith/bestax/issues/369" target="_blank" rel="noopener noreferrer" class="">no clean route</a> to a scheme-aware background in dark mode, <a href="https://github.com/allxsmith/bestax/issues/370" target="_blank" rel="noopener noreferrer" class="">casing traps</a> like <code>isFullWidth</code> on one component and <code>isFullwidth</code> on another, and <a href="https://github.com/allxsmith/bestax/issues/371" target="_blank" rel="noopener noreferrer" class="">scaffold rough edges</a> an agent shouldn't have to route around. I like that list more than I like the 95.2. Agents tripped over these in a test chamber so users don't have to in production.</p>
<p>The honest limits, straight from the harness's own docs: one brief, one model, ten runs, and single-run scores swung by six points on identical tooling, so one run is one sample and trends need several. That's fine. The yardstick is built, the baseline is recorded, and the next loop starts where this one stopped: swap the brief or the model, freeze everything else, and evolve again.</p>
<p>That's the whole story. Training bias made our library invisible to agents, so we <a class="" href="https://bestax.io/blog/fighting-ai-training-bias">made it legible</a> and taught the technique with skills. The exam made the skills provable. Accelerated evolution keeps making them better. If you want the skills in your own agent, the last post has every entrypoint, and the <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">tracker</a> is where the next generation lands.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="ai" term="ai"/>
        <category label="skills" term="skills"/>
        <category label="ci" term="ci"/>
        <category label="Storybook" term="Storybook"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fighting AI Training Bias]]></title>
        <id>https://bestax.io/blog/fighting-ai-training-bias</id>
        <link href="https://bestax.io/blog/fighting-ai-training-bias"/>
        <updated>2026-08-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[An agent can't one-shot a library its training data barely saw. So bestax ships docs, skills, and a catalog a machine can actually read.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Fighting AI Training Bias, drawn as pixel art: a robot coding agent turns away from a toppling stack of identical gray cartridges under a most popular marquee toward a glowing bestax cartridge seated in a retro console whose screen reads llms.txt" src="https://bestax.io/assets/images/fighting-ai-training-bias-8160e4158adda261abeb8da16d44cdb9.svg" width="1200" height="630" class="img_WUYJ"></p>
<p>A coding agent can't one-shot a library its training data barely saw. Ask one for a dashboard in an under-represented library and you get one of two failures: it quietly reaches for the incumbent it has seen a million times, or it stays loyal and invents props that don't exist. bestax's answer is to make the real, current API machine-legible so one shot is enough, and this post is everything that ships today.</p>
<p>This is post six of the catch-up series (<a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">tracker</a>). The <a class="" href="https://bestax.io/blog/v5-one-css-story">v5 recap</a> closed out the release backlog; this one explains where the AI effort has been going. The title says training bias. That's my word for it, not the repo's, and I already <a class="" href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it">argued the case at length in July</a>: what's over-represented gets recommended, recommendations compound into monoculture, and nobody compares two options anymore. I'm not re-arguing it here. This is the build log.</p>
<p>Start with the staleness math. <a class="" href="https://bestax.io/docs/api/components/avatar">Avatar</a> and <a class="" href="https://bestax.io/docs/api/components/badge">Badge</a> shipped July 10. Dot-notation sub-components landed across every parent component on July 20. What does a model trained in the spring know about a component that shipped July 10? Nothing, and that's the good case: even a model that has met bestax has met a bestax that no longer exists. Under-represented and stale, at the same time. The bestax homepage has an AI-Ready section, "Bring Bestax to your AI tools," with three cards: <strong>LLM-ready docs</strong>, <strong>Agent skills</strong>, and an <strong>MCP server</strong> marked coming soon. This post is those three cards in order, with receipts.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="machine-readable-docs">Machine-Readable Docs<a href="https://bestax.io/blog/fighting-ai-training-bias#machine-readable-docs" class="hash-link" aria-label="Direct link to Machine-Readable Docs" title="Direct link to Machine-Readable Docs" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="The LLM docs pipeline, drawn as pixel art: a dot matrix printer feeds a long perforated sheet labeled llms-full.txt, a card index box labeled llms.txt sits on the desk beside it, and a docs page marked button stands next to its glowing twin marked button.md" src="https://bestax.io/assets/images/fighting-ai-training-bias-docs-7dfba35b1e941285add49f593838372b.png" width="1200" height="630" class="img_WUYJ"></p>
<p>Every page of the bestax docs ships in a form a model can read whole. The site build regenerates three artifacts on every deploy:</p>
<ul>
<li class=""><a href="https://bestax.io/llms.txt" target="_blank" rel="noopener noreferrer" class="">llms.txt</a>, a <strong>curated index</strong> of the docs, small enough to pin in your project rules</li>
<li class=""><a href="https://bestax.io/llms-full.txt" target="_blank" rel="noopener noreferrer" class="">llms-full.txt</a>, the <strong>entire documentation as one file</strong></li>
<li class="">a <strong>Markdown twin of every page</strong>: append <code>.md</code> to any docs URL, like <a href="https://bestax.io/docs/api/elements/button.md" target="_blank" rel="noopener noreferrer" class="">bestax.io/docs/api/elements/button.md</a>, when you want one component in a small context</li>
</ul>
<p>The <a class="" href="https://bestax.io/docs/guides/llms">LLMs guide</a> pitches the big one with a line I didn't have to write for this post: "Feed it everything. For a one-shot load of the whole library." The docs already speak this vocabulary, because the artifact exists for exactly this reason: a single context load standing in for what training never contained. And because the artifacts regenerate on every build, they can't drift behind the deployed site. There's no stale window between what the docs say and what the model reads.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="agent-skills">Agent Skills<a href="https://bestax.io/blog/fighting-ai-training-bias#agent-skills" class="hash-link" aria-label="Direct link to Agent Skills" title="Direct link to Agent Skills" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Agent skills as pixel art game cartridges: a robot snaps a glowing cartridge labeled form into its open chest slot while six more cartridges labeled layout, theming, icons, custom, optimize, and migrate wait in a wall rack" src="https://bestax.io/assets/images/fighting-ai-training-bias-skills-ba13b63ba7b35e916be92ba459ae1c8a.png" width="1200" height="630" class="img_WUYJ"></p>
<p>Docs give an agent knowledge; skills give it technique. That distinction took me a while to respect. With llms-full.txt in context an agent knows every prop of every component, and it will still open a layout task with four clarifying questions, or validate a form the way its favorite form library does. Knowing the API and knowing the house way to use it are different things.</p>
<p>A skill is a folder with a <code>SKILL.md</code> of instructions the agent always loads, plus deeper references it reads on demand. bestax ships <a class="" href="https://bestax.io/docs/skills/intro">seven</a>:</p>
<ul>
<li class=""><strong><a class="" href="https://bestax.io/docs/skills/layout-scaffold">bestax-layout-scaffold</a></strong>: scaffold a complete, responsive page, from app shells and marketing pages to auth screens and card-grid catalogs</li>
<li class=""><strong><a class="" href="https://bestax.io/docs/skills/form">bestax-form</a></strong>: Field and Control composition, the whole input set, and the validate-it-yourself pattern</li>
<li class=""><strong><a class="" href="https://bestax.io/docs/skills/theming">bestax-theming</a></strong>: brand colors, tokens, and dark mode through <code>--bulma-*</code> variables</li>
<li class=""><strong><a class="" href="https://bestax.io/docs/skills/custom-component">bestax-custom-component</a></strong>: build beyond stock Bulma without leaving the bestax style</li>
<li class=""><strong><a class="" href="https://bestax.io/docs/skills/icons">bestax-icons</a></strong>: <code>Icon</code> and <code>IconText</code> across the five supported icon libraries</li>
<li class=""><strong><a class="" href="https://bestax.io/docs/skills/optimize">bestax-optimize</a></strong>: measure the built CSS, then shrink it with the cheapest lever that fits</li>
<li class=""><strong><a class="" href="https://bestax.io/docs/skills/migrate">bestax-migrate</a></strong>: move an app off react-bulma-components with the codemod, then resolve every TODO it leaves</li>
</ul>
<p>My favorite sentence in any of them is a behavioral rule in the layout skill: "Select an archetype from the request and build it in one shot." The same rule forbids asking layout questions. That's the thesis of this post with a lint rule attached. And yeah, skills really are cartridges: snap one in and the agent knows moves it didn't know a minute ago.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="two-ways-to-install">Two Ways to Install<a href="https://bestax.io/blog/fighting-ai-training-bias#two-ways-to-install" class="hash-link" aria-label="Direct link to Two Ways to Install" title="Direct link to Two Ways to Install" translate="no">​</a></h3>
<p>Channel one is the <a href="https://skills.sh/" target="_blank" rel="noopener noreferrer" class="">skills CLI</a>:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npx skills add https://github.com/allxsmith/bestax --skill bestax-layout-scaffold</span><br></div></code></pre></div></div>
<p>The same command takes any of the seven names, or drop the <code>--skill</code> flag to pick from a list.</p>
<p>Channel two is the scaffolder. <code>pnpm create bestax@latest</code> offers to preinstall the skill bundle into the new app's <code>.claude/skills/</code>, and while it's in there it writes two more files: a <code>.claude/launch.json</code> so an agent's browser preview can boot the dev server by name, and a <code>CLAUDE.md</code> recording the choices the scaffolder just made (CSS flavor, class prefix, icon library). The agent never has to rediscover the setup it was born into.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="dont-reinvent-the-component-catalog">Don't Reinvent: The Component Catalog<a href="https://bestax.io/blog/fighting-ai-training-bias#dont-reinvent-the-component-catalog" class="hash-link" aria-label="Direct link to Don't Reinvent: The Component Catalog" title="Direct link to Don't Reinvent: The Component Catalog" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="The component catalog as a pixel art inventory screen: item slots labeled Button, Tooltip, Avatar, and Badge with the Tooltip slot glowing, a robot hand at a crafting bench lowering a half built duplicate tooltip, and a shield stamped with a check marked ci guard at the corner of the grid" src="https://bestax.io/assets/images/fighting-ai-training-bias-catalog-8c2ee2c506072d9e36073ed20eeffcef.png" width="1200" height="630" class="img_WUYJ"></p>
<p>The most expensive agent failure isn't a wrong prop; it's a rebuilt component. A wrong prop fails loud, in the console or the type checker. A hand-rolled tooltip works, looks almost right, ships, and is quietly yours to maintain forever.</p>
<p>So the custom-component skill leads with a generated catalog whose header states its job: every documented component, "so you don't reinvent one that already exists." All 87 components fit in 149 lines, names and one-line purposes only, each linked to its full API page. It's lean on purpose, cheap to hold in context, with the full prop tables one fetch away.</p>
<p>The part I care about most is the guard behind it. The catalog is generated from the API docs, and CI fails if any exported component lacks an API page. A component the catalog can't see is a component an agent will rebuild, so completeness isn't a habit here. It's a build gate. The list the agent reads is guaranteed complete on every commit.</p>
<p>I've watched an agent lovingly hand-roll a tooltip while <a class="" href="https://bestax.io/docs/api/components/tooltip">Tooltip</a> sat one import away, shipped and tested and documented. Small heartbreak, nobody's fault: to a model with a stale snapshot, some of these 87 components simply don't exist. The catalog is how they exist again. Here's the kind of thing that's already in the box:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tooltip</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Shipped, tested, one import away</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Badge</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">dot</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">overlap</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">circle</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Ada Lovelace</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Badge</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tooltip</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>A <a class="" href="https://bestax.io/docs/api/components/tooltip">Tooltip</a>, a <a class="" href="https://bestax.io/docs/api/components/badge">Badge</a>, and an <a class="" href="https://bestax.io/docs/api/components/avatar">Avatar</a>, composed instead of hand-rolled.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="meeting-agents-in-node_modules">Meeting Agents in node_modules<a href="https://bestax.io/blog/fighting-ai-training-bias#meeting-agents-in-node_modules" class="hash-link" aria-label="Direct link to Meeting Agents in node_modules" title="Direct link to Meeting Agents in node_modules" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="Meeting agents in node_modules, drawn as pixel art: a robot holding a lantern kneels in a dark mine of stacked crates labeled node_modules before three glowing files labeled llms.txt, AGENTS.md, and CLAUDE.md, beside a signpost pointing to a lit doorway labeled bestax.io" src="https://bestax.io/assets/images/fighting-ai-training-bias-node-modules-f236e3c113c20ded2e30a78678a1ac42.png" width="1200" height="630" class="img_WUYJ"></p>
<p>Some agents never fetch a URL; they read what's on disk. Since <a href="https://github.com/allxsmith/bestax/pull/345" target="_blank" rel="noopener noreferrer" class="">5.8.0</a>, the published npm tarball carries three pointer files at the package root, <code>llms.txt</code>, <code>AGENTS.md</code>, and <code>CLAUDE.md</code>, named for the filenames agent tooling probes first, "so agents exploring <code>node_modules</code> land on these resources by filename," as the <a href="https://www.npmjs.com/package/@allxsmith/bestax-bulma" target="_blank" rel="noopener noreferrer" class="">package README</a> puts it. They're pointers, not documentation: each is a short signpost back to the site artifacts above, which stay the single source of truth, so nothing in the tarball goes stale between releases. Network context, project context, and now the filesystem itself. The <a class="" href="https://bestax.io/docs/guides/llms#in-the-npm-package">LLMs guide</a> lists exactly what ships.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="whats-next-the-mcp-server">What's Next: The MCP Server<a href="https://bestax.io/blog/fighting-ai-training-bias#whats-next-the-mcp-server" class="hash-link" aria-label="Direct link to What's Next: The MCP Server" title="Direct link to What's Next: The MCP Server" translate="no">​</a></h2>
<p>The third AI-Ready card says coming soon, and it means it. A first-party MCP server is planned: a Model Context Protocol endpoint an agent can query for component props, variants, and live examples while it builds. It isn't shipped, the homepage card deliberately has no link, and this post won't describe software that doesn't exist. When it ships, it gets its own post.</p>
<p>The nearer sequel is live: <a class="" href="https://bestax.io/blog/ai-loop-keeps-skills-honest">the accelerated evolution loop that keeps those seven skills honest</a>. The <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">tracker</a> has the rest of the plan.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="point-your-agent-at-it">Point Your Agent at It<a href="https://bestax.io/blog/fighting-ai-training-bias#point-your-agent-at-it" class="hash-link" aria-label="Direct link to Point Your Agent at It" title="Direct link to Point Your Agent at It" translate="no">​</a></h2>
<p>Pick whichever entrypoint matches your setup:</p>
<ul>
<li class="">In an existing app: paste <code>https://bestax.io/llms.txt</code> into your project rules, or point the agent at <a class="" href="https://bestax.io/docs/guides/llms">the LLMs guide</a>.</li>
<li class="">For the technique, not just the API: <code>npx skills add</code> any of the <a class="" href="https://bestax.io/docs/skills/intro">seven skills</a>.</li>
<li class="">Starting fresh: run <code>pnpm create bestax@latest</code> and say yes when it offers the skills.</li>
</ul>
<p>And if bestax makes your agent sharper, a <a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">star on the repo</a> is the whole marketing budget.</p>
<p>You don't fight training bias by arguing with the weights. You hand the agent the current docs, and you let one shot be enough.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="ai" term="ai"/>
        <category label="skills" term="skills"/>
        <category label="llms" term="llms"/>
        <category label="react" term="react"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Form Library Agnostic]]></title>
        <id>https://bestax.io/blog/forms-without-a-form-library</id>
        <link href="https://bestax.io/blog/forms-without-a-form-library"/>
        <updated>2026-08-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Forms in bestax-bulma are plain React. Field and Control composition, auto-wrapping inputs, escape hatches, and validation your way, with useState or the validation library of your choice.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Form Library Agnostic, drawn as a pixel art RPG character creation screen: a name field with a blinking cursor, a class picker with the cursor on Mage, stat sliders for STR, DEX, and INT, and a green status row reading form libs loaded: 0, ready." src="https://bestax.io/assets/images/forms-without-a-form-library-0450aa3c4c624dbbeeb5d63166c481f0.svg" width="1200" height="630" class="img_WUYJ"></p>
<p>A form in bestax-bulma is plain React: state goes in, props come out, and nothing new sits in between. There's no bundled form library and none is coming; the library's job ends at rendering Bulma correctly, so your form state stays yours. By the end of this post you'll have a validated signup form built with nothing but <code>useState</code>, you'll see where the validation library of your choice plugs in, and you'll know where every escape hatch is.</p>
<p>This one's part of the <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">catch-up series</a>, but it's a design post, not a release recap. The components here shipped across v2 and the <a class="" href="https://bestax.io/blog/v3-forms-release">v3 forms release</a>; what follows is how they're meant to be used together.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="field-control-and-auto-wrap">Field, Control, and Auto-Wrap<a href="https://bestax.io/blog/forms-without-a-form-library#field-control-and-auto-wrap" class="hash-link" aria-label="Direct link to Field, Control, and Auto-Wrap" title="Direct link to Field, Control, and Auto-Wrap" translate="no">​</a></h2>
<p>Bulma builds every form the same way: a <code>field</code> div handles layout and the label, a <code>control</code> div wraps exactly one input and owns its icons and loading spinner, and an optional <code>help</code> paragraph carries the message. Our <a class="" href="https://bestax.io/docs/api/form/field">Field</a> and <a class="" href="https://bestax.io/docs/api/form/control">Control</a> components render exactly that structure.</p>
<p>Writing three wrappers for every input gets old fast, so the convenience inputs handle it. <a class="" href="https://bestax.io/docs/api/form/input">Input</a>, <a class="" href="https://bestax.io/docs/api/form/select">Select</a>, and <a class="" href="https://bestax.io/docs/api/form/textarea">TextArea</a> wrap themselves in a <code>Field</code> and <code>Control</code> automatically, which is what lets props like <code>label</code>, <code>iconLeftName</code>, and <code>message</code> exist on a single tag:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">AutoWrapDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">email</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEmail</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">you@example.com</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">email</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEmail</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">target</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">value</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">iconLeftName</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">envelope</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">message</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">One tag, and you get the label, the icon, and this help text.</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">id</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">autowrap-email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">labelProps</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> htmlFor</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'autowrap-email'</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>To be precise about the mechanics: the wrapping isn't triggered by those props. A convenience input always wraps itself unless it detects it's already inside a <code>Field</code> or <code>Control</code>, and <code>label</code> and friends just forward into the generated wrapper. The field-level props are shared across inputs (<code>label</code>, <code>labelSize</code>, <code>labelProps</code>, <code>horizontal</code>, <code>message</code>, <code>messageColor</code>, and <code>fieldClassName</code>), with <code>messageColor</code> tinting the help text.</p>
<p>One accessibility note: <code>label</code> now wires the <code>&lt;label&gt;</code> to the input on its own (a generated <code>id</code> plus <code>htmlFor</code>, or your own <code>id</code> if you pass one), and composing a <code>Field</code> around a single base input gets the same treatment. The demos on this page wire it explicitly, which still works and is the way to go when you want a stable <code>id</code>; on library versions before this shipped, it was required.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="skip-if-wrapped">Skip-If-Wrapped<a href="https://bestax.io/blog/forms-without-a-form-library#skip-if-wrapped" class="hash-link" aria-label="Direct link to Skip-If-Wrapped" title="Direct link to Skip-If-Wrapped" translate="no">​</a></h2>
<p>Write the wrappers yourself and the inputs get out of the way. Here's the detection mechanism, from <code>FormContext.tsx</code>:</p>
<div class="language-tsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-tsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">FieldContext</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token maybe-class-name">ControlContext</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">createContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">useInsideField</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">FieldContext</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">useInsideControl</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useContext</span><span class="token punctuation" style="color:#393A34">(</span><span class="token maybe-class-name">ControlContext</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>That's it. <code>Field</code> and <code>Control</code> each set their context to <code>true</code>, and an input checks both hooks before wrapping. Presence detection, not state: no values flow through this context, it only answers "am I already wrapped?" So composed layouts and convenience inputs mix freely. This is the same <code>Input</code> from the demo above, dropped into an addons layout:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SearchDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setQuery</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">hasAddons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isExpanded</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Search the docs</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">aria-label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Search the docs</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">query</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setQuery</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">target</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">value</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Search</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>If <code>Input</code> had wrapped itself again, that button wouldn't sit attached to the field. And because <code>useInsideField</code> and <code>useInsideControl</code> are public exports rather than private internals, a custom input of your own can join the same protocol; the group components (<code>Radios</code>, <code>Checkboxes</code>) already ride on it.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-base-escape-hatch">The Base Escape Hatch<a href="https://bestax.io/blog/forms-without-a-form-library#the-base-escape-hatch" class="hash-link" aria-label="Direct link to The Base Escape Hatch" title="Direct link to The Base Escape Hatch" translate="no">​</a></h2>
<p>Sometimes you want zero magic. Six components ship as raw versions with a <code>Base</code> suffix: <code>InputBase</code>, <code>SelectBase</code>, <code>TextAreaBase</code>, <code>DateInputBase</code>, <code>TimeInputBase</code>, and <code>DateTimeInputBase</code>. They render the bare Bulma element and never wrap themselves in anything:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Convenience: one tag, wrappers included</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">label</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Email</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">message</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">We only email for receipts.</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Composed: you own every element</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Field</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">label</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Email</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">labelProps</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript literal-property property" style="color:#36acaa">htmlFor</span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript string" style="color:#e3116c">'composed-email'</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Control</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">InputBase</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">id</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">composed-email</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">email</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Control</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">className</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">help</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">We only email for receipts.</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Field</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>Reach for composition when one field holds several controls, when you're building addons or grouped layouts, or when your markup needs to be exact for a snapshot test or a CSS framework migration. The <a class="" href="https://bestax.io/docs/guides/library/form">form guide</a> shows both styles side by side.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="validate-it-yourself">Validate It Yourself<a href="https://bestax.io/blog/forms-without-a-form-library#validate-it-yourself" class="hash-link" aria-label="Direct link to Validate It Yourself" title="Direct link to Validate It Yourself" translate="no">​</a></h2>
<p>Validation is the part the library deliberately leaves to you, and the pattern is short: own the value with <code>useState</code> (or <code>useReducer</code>, or whatever you prefer), compute the error yourself, and reflect it through the input's <code>color</code>, <code>message</code>, and <code>messageColor</code> props.</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SignupDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">email</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEmail</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">''</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">touched</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setTouched</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">sent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setSent</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> valid </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token regex regex-delimiter">/</span><span class="token regex regex-source language-regex anchor function" style="color:rgb(130, 170, 255)">^</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token regex regex-source language-regex char-class char-class-negation operator" style="color:rgb(127, 219, 202)">^</span><span class="token regex regex-source language-regex char-class">@</span><span class="token regex regex-source language-regex char-class char-set class-name" style="color:rgb(255, 203, 139)">\s</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token regex regex-source language-regex quantifier number" style="color:rgb(247, 140, 108)">+</span><span class="token regex regex-source language-regex">@</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token regex regex-source language-regex char-class char-class-negation operator" style="color:rgb(127, 219, 202)">^</span><span class="token regex regex-source language-regex char-class">@</span><span class="token regex regex-source language-regex char-class char-set class-name" style="color:rgb(255, 203, 139)">\s</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token regex regex-source language-regex quantifier number" style="color:rgb(247, 140, 108)">+</span><span class="token regex regex-source language-regex special-escape escape">\.</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token regex regex-source language-regex char-class char-class-negation operator" style="color:rgb(127, 219, 202)">^</span><span class="token regex regex-source language-regex char-class">@</span><span class="token regex regex-source language-regex char-class char-set class-name" style="color:rgb(255, 203, 139)">\s</span><span class="token regex regex-source language-regex char-class char-class-punctuation punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token regex regex-source language-regex quantifier number" style="color:rgb(247, 140, 108)">+</span><span class="token regex regex-source language-regex anchor function" style="color:rgb(130, 170, 255)">$</span><span class="token regex regex-delimiter">/</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">test</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">email</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> error </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    touched </span><span class="token operator" style="color:rgb(127, 219, 202)">&amp;&amp;</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">!</span><span class="token plain">valid </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Please enter a valid email address.'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">undefined</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">form</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSubmit</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">        e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript method function property-access" style="color:rgb(130, 170, 255)">preventDefault</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">        </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setTouched</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">        </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setSent</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">valid</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">      </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">you@example.com</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">email</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">          </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEmail</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">target</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">value</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">          </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setSent</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">false</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">        </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onBlur</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setTouched</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">error </span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">?</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'danger'</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript keyword" style="color:rgb(127, 219, 202)">undefined</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">message</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">error</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">messageColor</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">error </span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">?</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'danger'</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript keyword" style="color:rgb(127, 219, 202)">undefined</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">iconLeftName</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">envelope</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">id</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">signup-email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">labelProps</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> htmlFor</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'signup-email'</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">submit</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">3</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Sign up</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">sent </span><span class="token operator" style="color:rgb(127, 219, 202)">&amp;&amp;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          Signed up. Your state, your rules, no library required.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">form</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>Type something that isn't an email and tab away: the border goes <code>danger</code> and the message appears, because the component reflects exactly the state you computed. One gotcha worth knowing: validation state belongs on the input, not the <code>Field</code>. <code>Field</code> has no <code>message</code> prop, and although its types accept a <code>color</code>, it renders no class for it, so setting it looks right and does nothing.</p>
<p>The demo's validation is one regex and one ternary. A form used to be an input and an if statement, and it turns out it still can be.</p>
<p>And if you'd rather keep using react-hook-form, or validate with zod or yup? Bring them. The pattern above isn't a lock-in, it's a socket: the text-style inputs are controlled components with a <code>value</code>, an <code>onChange</code>, and a string-friendly <code>message</code>, which is exactly the surface a validation library produces. Prop shapes vary at the edges (the boolean controls take <code>checked</code>, and <code>Autocomplete</code> speaks <code>value</code>, <code>onInput</code>, and <code>onSelect</code>), so wire into each component's documented props and everything here still applies. Here's the same field with its error coming from a zod schema instead of a regex:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> z </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'zod'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> schema </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> z</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">object</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">email</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> z</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">string</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">email</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Please enter a valid email address.'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">ZodSignup</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">email</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setEmail</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">touched</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setTouched</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> schema</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">safeParse</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> email </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> error </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    touched </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">result</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">success</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">?</span><span class="token plain"> result</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">error</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">issues</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">message</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword nil" style="color:#00009f">undefined</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Input</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">label</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Email</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">email</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">email</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript parameter" style="color:#00009f">e</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript arrow operator" style="color:#393A34">=&gt;</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript function" style="color:#d73a49">setEmail</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript" style="color:#00009f">e</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">target</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">value</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">onBlur</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript arrow operator" style="color:#393A34">=&gt;</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript function" style="color:#d73a49">setTouched</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript boolean" style="color:#36acaa">true</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">error </span><span class="token tag script language-javascript operator" style="color:#393A34">?</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript string" style="color:#e3116c">'danger'</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript keyword nil" style="color:#00009f">undefined</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">message</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">error</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">      </span><span class="token tag attr-name" style="color:#00a4db">messageColor</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">error </span><span class="token tag script language-javascript operator" style="color:#393A34">?</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript string" style="color:#e3116c">'danger'</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript operator" style="color:#393A34">:</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript keyword nil" style="color:#00009f">undefined</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>react-hook-form works the same way: hand its field state to <code>value</code> and <code>onChange</code>, or spread <code>register</code> onto the input, and pass <code>formState.errors.email?.message</code> to <code>message</code>. Same three props, whatever validation library you choose. bestax-bulma doesn't prescribe one, and it doesn't make you carry one either.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-full-input-set">The Full Input Set<a href="https://bestax.io/blog/forms-without-a-form-library#the-full-input-set" class="hash-link" aria-label="Direct link to The Full Input Set" title="Direct link to The Full Input Set" translate="no">​</a></h2>
<p>None of this would matter if the inputs stopped at <code>&lt;input type="text"&gt;</code>. The core set covers stock Bulma, and the extended set goes well past it:</p>
<table><thead><tr><th>Component</th><th>What you get</th></tr></thead><tbody><tr><td><a class="" href="https://bestax.io/docs/api/form/input"><strong>Input</strong></a>, <a class="" href="https://bestax.io/docs/api/form/textarea"><strong>TextArea</strong></a>, <a class="" href="https://bestax.io/docs/api/form/select"><strong>Select</strong></a>, <a class="" href="https://bestax.io/docs/api/form/file"><strong>File</strong></a></td><td>The core text, select, and file controls</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/checkbox"><strong>Checkbox</strong></a> and <a class="" href="https://bestax.io/docs/api/form/radio"><strong>Radio</strong></a>, plus <a class="" href="https://bestax.io/docs/api/form/checkboxes"><strong>Checkboxes</strong></a> and <a class="" href="https://bestax.io/docs/api/form/radios"><strong>Radios</strong></a> group containers</td><td>Boolean and single-choice controls, themed variants</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/switch"><strong>Switch</strong></a></td><td>A checkbox styled as a toggle</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/slider"><strong>Slider</strong></a></td><td>Range slider, single or dual thumb</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/numberinput"><strong>Numberinput</strong></a></td><td>Number input with stepper buttons</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/rate"><strong>Rate</strong></a></td><td>Star ratings without hand-rolled stars</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/autocomplete"><strong>Autocomplete</strong></a></td><td>Filterable suggestion input</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/taginput"><strong>Taginput</strong></a></td><td>Multi-tag input with suggestions</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/datetime/dateinput"><strong>DateInput</strong></a>, <a class="" href="https://bestax.io/docs/api/form/datetime/timeinput"><strong>TimeInput</strong></a>, <a class="" href="https://bestax.io/docs/api/form/datetime/datetimeinput"><strong>DateTimeInput</strong></a></td><td>Date and time pickers on native <code>Date</code> and <code>Intl</code></td></tr></tbody></table>
<p>The wrap behavior stays consistent across the table: most of the set generates a full <code>Field</code> and <code>Control</code>, the inputs that manage richer inner markup (<code>Autocomplete</code>, <code>Taginput</code>, <code>File</code>, and <code>Numberinput</code>) generate just the <code>Field</code>, and the small controls (<code>Checkbox</code>, <code>Radio</code>, <code>Switch</code>) plus every <code>Base</code> component never wrap at all. Every input that wraps itself also takes the <code>label</code> and <code>message</code> treatment from the top of this post, and state stays plain React throughout: a value in, a change handler out, whether that value is a string, a number, a tag list, or a <code>Date</code>.</p>
<p>The date and time pickers got their own deep dive in the <a class="" href="https://bestax.io/blog/v3-forms-release">v3 forms release</a>, so I won't rerun it here. The short version: popover calendar, wheel spinner, segmented keyboard entry, and zero date libraries in your bundle.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="documentation">Documentation<a href="https://bestax.io/blog/forms-without-a-form-library#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/guides/library/form">Form components guide</a>: descriptions and live examples for every input</li>
<li class="">API references: <a class="" href="https://bestax.io/docs/api/form/field">Field</a>, <a class="" href="https://bestax.io/docs/api/form/control">Control</a>, and <a class="" href="https://bestax.io/docs/api/form/input">Input</a> are the best starting points</li>
<li class="">The <a class="" href="https://bestax.io/docs/skills/form">bestax-form skill</a> teaches AI agents this exact composition and validation pattern</li>
<li class="">The <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">blog revival tracker</a> has the rest of the catch-up plan</li>
</ul>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="forms" term="forms"/>
        <category label="react" term="react"/>
        <category label="bulma" term="bulma"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v5.0.0: One CSS, Any Prefix]]></title>
        <id>https://bestax.io/blog/v5-one-css-story</id>
        <link href="https://bestax.io/blog/v5-one-css-story"/>
        <updated>2026-08-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[bestax-bulma v5.0.0 shipped one breaking change, and it was a deletion. One prefix scheme, a runtime classPrefix, and everything that landed from 5.1 to 5.8.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="One CSS, Any Prefix, drawn as pixel art: a glowing bestax cartridge wired to three identical buttons captioned .button, .bestax-button, and .acme-button, while a faded bulma- cartridge crumbles into loose pixels at the edge of the frame" src="https://bestax.io/assets/images/v5-one-css-story-4df41d332dc38d83a09b967d1d61335e.svg" width="1200" height="630" class="img_WUYJ"></p>
<p>In June, bestax-bulma v5.0.0 shipped exactly one breaking change, and it was a deletion: 3 files touched, 22 lines removed, 0 added. If you never imported <code>versions/bestax-bulma-prefixed.css</code>, you won't feel a thing.</p>
<p>Same housekeeping as <a class="" href="https://bestax.io/blog/the-floor-is-react-18">the v4 post</a>: this is a recap, not breaking news. <a href="https://github.com/allxsmith/bestax/blob/main/bulma-ui/CHANGELOG.md" target="_blank" rel="noopener noreferrer" class="">v5.0.0</a> was tagged on June 26, 2026, six days after v4.0.0, and this is the fifth post in the <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">catch-up series</a>. It also brings the recaps up to the present: the library sits at 5.8.0 today, so the back half of this post sweeps 5.1 to 5.8.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-breaking-change">The Breaking Change<a href="https://bestax.io/blog/v5-one-css-story#the-breaking-change" class="hash-link" aria-label="Direct link to The Breaking Change" title="Direct link to The Breaking Change" translate="no">​</a></h2>
<p>4.x shipped <strong>two</strong> prefixed CSS bundles: <code>versions/bestax-prefixed.css</code> (<code>bestax-</code> on every class) and <code>versions/bestax-bulma-prefixed.css</code> (<code>bulma-</code> on every class). Same contents, different prefix. 5.0.0 deletes the <code>bulma-</code> one.</p>
<p>The <a href="https://github.com/allxsmith/bestax/commit/94baa3489ac54587e6026a8bece9f86816af9372" target="_blank" rel="noopener noreferrer" class="">whole change</a> is <code>package.json</code>, the rollup config, and one fifteen-line Sass file: 22 deletions, 0 insertions.</p>
<p>Both bundles and <code>classPrefix</code> <a class="" href="https://bestax.io/blog/prefixed-bulma-and-theming">date back to v2</a>. The reason the pair didn't survive, straight from the <a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-4-to-5">migration guide</a>: "maintaining two parallel prefixed bundles doubled the prefixed build and test surface without adding capability". Anything the <code>bulma-</code> bundle did, the <code>bestax-</code> bundle or a custom Sass build does.</p>
<p>To be precise about the title: all <a class="" href="https://bestax.io/docs/guides/getting-started/variations#choosing-the-right-variation">five CSS variations</a> still ship. What v5 removed is the second prefix <strong>scheme</strong>. One scheme, <code>bestax-</code>, plus a runtime <code>classPrefix</code> that matches whatever prefix your stylesheet uses. Migrating is a two-line swap:</p>
<p><strong>Before (4.x):</strong></p>
<div class="language-tsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-tsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ConfigProvider</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma/versions/bestax-bulma-prefixed.css'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">App</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">classPrefix</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bulma-</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Save</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p><strong>After (5.x):</strong></p>
<div class="language-tsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-tsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ConfigProvider</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma/versions/bestax-prefixed.css'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">App</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">classPrefix</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bestax-</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Save</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>And the rendered HTML moves with it:</p>
<div class="language-html codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-html codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- 4.x with bestax-bulma-prefixed.css --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bulma-button bulma-is-primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Save</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- 5.x with bestax-prefixed.css --&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bestax-button bestax-is-primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Save</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>If custom CSS overrides or test selectors target <code>.bulma-*</code> names, update those alongside the swap. Miss the swap entirely and the failure is loud: the package export is gone, so the old import dies at build time with <code>ERR_PACKAGE_PATH_NOT_EXPORTED</code> instead of quietly serving an unstyled page. Need to keep the <code>bulma-</code> prefix? It isn't reserved; <a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-4-to-5#if-you-need-to-keep-the-bulma--prefix">rebuild the same stylesheet from Sass</a> with <code>$class-prefix: 'bulma-'</code>.</p>
<p><a class="" href="https://bestax.io/docs/api/helpers/config#basic-usage-with-class-prefix"><code>classPrefix</code></a> itself is unchanged, the same <code>ConfigProvider</code> prop it's been since v2; the <a class="" href="https://bestax.io/docs/guides/features/configuration#css-class-prefixing">configuration guide</a> covers it end to end.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="scaffolding-follows">Scaffolding Follows<a href="https://bestax.io/blog/v5-one-css-story#scaffolding-follows" class="hash-link" aria-label="Direct link to Scaffolding Follows" title="Direct link to Scaffolding Follows" translate="no">​</a></h2>
<p>create-bestax cut 3.0.0 the same day, fixing a bug with the same root cause. Only the <code>complete</code> flavor scaffolded the bundled bestax CSS; the other four imported stock Bulma plus a separate <code>extras.css</code> for the bestax-only components. On the prefixed flavors that combination shipped broken: components emitted prefixed class names while <code>extras.css</code> was unprefixed, so the bestax extras (Tooltip and friends) rendered unstyled in a fresh project.</p>
<p><a href="https://github.com/allxsmith/bestax/commit/43621dc7cebef2dd51f017feccc91a2154e1f7a3" target="_blank" rel="noopener noreferrer" class="">The fix</a> is the same consolidation: every flavor now imports the single bundled bestax variant for its choice, and the prefixed flavors set <code>classPrefix="bestax-"</code> to match. With one CSS path to wire, the scaffold is correct by construction.</p>
<p>create-bestax is on its 4.x line today, so <code>pnpm create bestax@latest</code> already scaffolds all of this (<a class="" href="https://bestax.io/docs/guides/intro">two minutes to a running app</a>); the <a class="" href="https://bestax.io/docs/guides/getting-started/installation">installation guide</a> covers the manual path.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="everything-since-51-to-58">Everything Since: 5.1 to 5.8<a href="https://bestax.io/blog/v5-one-css-story#everything-since-51-to-58" class="hash-link" aria-label="Direct link to Everything Since: 5.1 to 5.8" title="Direct link to Everything Since: 5.1 to 5.8" translate="no">​</a></h2>
<p>The major carried one deletion; the minors carried the features. Eight of them in three weeks:</p>
<table><thead><tr><th>Release</th><th>What Landed</th></tr></thead><tbody><tr><td><strong>5.1.0</strong> (July 1)</td><td><a class="" href="https://bestax.io/docs/api/helpers/theme#dark-mode"><code>colorMode</code></a> on <code>Theme</code>: <code>'light'</code>, <code>'dark'</code>, or <code>'system'</code></td></tr><tr><td><strong>5.2.0</strong> (July 7)</td><td>Polymorphic <code>as</code> on the <a class="" href="https://bestax.io/docs/api/elements/button#polymorphic-as-router-links">Button API</a> and the <a class="" href="https://bestax.io/docs/api/elements/link#polymorphic-as-router-links">Link API</a>; see the <a class="" href="https://bestax.io/docs/guides/features/routing">routing guide</a></td></tr><tr><td><strong>5.3.0</strong> (July 8)</td><td><a class="" href="https://bestax.io/docs/api/components/reveal">Reveal</a>, scroll-triggered animations</td></tr><tr><td><strong>5.4.0</strong> (July 10)</td><td><a class="" href="https://bestax.io/docs/api/components/avatar">Avatar</a>, <a class="" href="https://bestax.io/docs/api/components/avatars">Avatars</a>, and <a class="" href="https://bestax.io/docs/api/components/badge">Badge</a></td></tr><tr><td><strong>5.5.0</strong> (July 14)</td><td>Accessibility batch for Avatar and Badge</td></tr><tr><td><strong>5.6.0</strong> (July 14)</td><td>A consistent <a class="" href="https://bestax.io/docs/api/columns#gap-sizes--responsive-gaps"><code>gap</code> prop on Columns</a></td></tr><tr><td><strong>5.7.0</strong> (July 20)</td><td><a class="" href="https://bestax.io/docs/api/components/message#compound-dot-notation-usage">Dot-notation sub-components</a> across all parent/child families</td></tr><tr><td><strong>5.8.0</strong> (July 22)</td><td><a class="" href="https://bestax.io/docs/guides/llms#in-the-npm-package">Agent files in the npm tarball</a></td></tr></tbody></table>
<p>Reveal, the avatar family, and the accessibility batch are covered in <a class="" href="https://bestax.io/blog/enhanced-addons-round-two">Enhanced Add-Ons, Round Two</a>, so 5.3 through 5.5 stay one-liners here. One patch is worth a call-out: <a href="https://github.com/allxsmith/bestax/pull/301" target="_blank" rel="noopener noreferrer" class="">5.6.1</a> routed every hardcoded class name through the prefix helpers and added a sweep test that renders the library under a custom prefix and fails on any class that ignores <a class="" href="https://bestax.io/docs/api/helpers/config#useclassprefix"><code>classPrefix</code></a>.</p>
<p>Four of the minors deserve more than a row.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="dark-mode-on-demand">Dark Mode on Demand<a href="https://bestax.io/blog/v5-one-css-story#dark-mode-on-demand" class="hash-link" aria-label="Direct link to Dark Mode on Demand" title="Direct link to Dark Mode on Demand" translate="no">​</a></h3>
<p>Since 5.1.0, <code>Theme</code> takes a <code>colorMode</code> prop: <code>'light'</code>, <code>'dark'</code>, or <code>'system'</code>. It sets Bulma's <code>data-theme</code> on <code>&lt;html&gt;</code>, <code>'system'</code> follows the OS preference, and omitting it leaves whatever's already set, so single-mode designs should pin it (<a class="" href="https://bestax.io/docs/api/helpers/theme#dark-mode">the Theme docs</a> explain the contrast trap).</p>
<div class="language-tsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-tsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> useState </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'react'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Theme</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">App</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">mode</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setMode</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token generic-function function" style="color:#d73a49">useState</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name string" style="color:#e3116c">'light'</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name operator" style="color:#393A34">|</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name string" style="color:#e3116c">'dark'</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name operator" style="color:#393A34">|</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name string" style="color:#e3116c">'system'</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'system'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Theme</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">isRoot</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">colorMode</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">mode</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript arrow operator" style="color:#393A34">=&gt;</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript function" style="color:#d73a49">setMode</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript string" style="color:#e3116c">'dark'</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        Dark</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript arrow operator" style="color:#393A34">=&gt;</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript function" style="color:#d73a49">setMode</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript string" style="color:#e3116c">'light'</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        Light</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript arrow operator" style="color:#393A34">=&gt;</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript function" style="color:#d73a49">setMode</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript string" style="color:#e3116c">'system'</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">System</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Theme</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Static on purpose: the blog's live sandbox pins its own light and dark preview, so a toggle that flips the document theme can't run in it. Paste it into an app and it works as written.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="one-gap-scale-for-columns-and-grid">One Gap Scale for Columns and Grid<a href="https://bestax.io/blog/v5-one-css-story#one-gap-scale-for-columns-and-grid" class="hash-link" aria-label="Direct link to One Gap Scale for Columns and Grid" title="Direct link to One Gap Scale for Columns and Grid" translate="no">​</a></h3>
<p><code>Grid</code> takes <code>gap</code> on Bulma's 0 to 8 scale; <code>Columns</code> wanted <code>gapSize</code>. 5.6.0 gives <code>Columns</code> the same <a class="" href="https://bestax.io/docs/api/columns#gap-sizes--responsive-gaps"><code>gap</code> prop</a>, plus <code>gapMobile</code>, <code>gapTablet</code>, and the other responsive variants; <code>gapSize</code> still works as a deprecated alias. This one is live:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">GapDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">gap</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setGap</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">useState</span><span class="token operator" style="color:rgb(127, 219, 202)">&lt;</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">|</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">8</span><span class="token operator" style="color:rgb(127, 219, 202)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mb</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setGap</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">0</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">gap 0</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setGap</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">2</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">gap 2</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setGap</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">5</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">gap 5</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setGap</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">8</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">gap 8</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">gap</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">gap</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">One</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Two</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Three</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="dot-notation-sub-components">Dot-Notation Sub-Components<a href="https://bestax.io/blog/v5-one-css-story#dot-notation-sub-components" class="hash-link" aria-label="Direct link to Dot-Notation Sub-Components" title="Direct link to Dot-Notation Sub-Components" translate="no">​</a></h3>
<p>Since 5.7.0, every parent/child family hangs its children off the parent: <code>Card.Header</code>, <code>Modal.Card</code>, <code>Navbar.Item</code>, <code>Message.Body</code>, and the rest (<a href="https://github.com/allxsmith/bestax/pull/331" target="_blank" rel="noopener noreferrer" class="">#331</a>). The statics are the same components as the named exports (attached, not wrapped), so identity checks like <code>child.type === Modal.Card</code> keep working. If you're coming from react-bulma-components, the shape matches; the <a class="" href="https://bestax.io/docs/guides/getting-started/migration/react-bulma-components">migration guide</a> maps the differences.</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message.Header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">One Import, Dot Notation</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Delete</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">aria-label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">delete</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message.Header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      Message.Header and Message.Body ride along on the Message import, so the</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      whole family stays in one place.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="the-npm-package-reads-itself">The npm Package Reads Itself<a href="https://bestax.io/blog/v5-one-css-story#the-npm-package-reads-itself" class="hash-link" aria-label="Direct link to The npm Package Reads Itself" title="Direct link to The npm Package Reads Itself" translate="no">​</a></h3>
<p>Since 5.8.0, the npm tarball ships <code>llms.txt</code>, <code>AGENTS.md</code>, and a consumer-facing <code>CLAUDE.md</code> (<a href="https://github.com/allxsmith/bestax/pull/345" target="_blank" rel="noopener noreferrer" class="">#345</a>). An AI coding agent reading <code>node_modules</code> gets what the library is, where the docs live, and an <code>llms.txt</code> index of what to fetch next, instead of guessing from training data. The <a class="" href="https://bestax.io/docs/guides/llms#in-the-npm-package">LLMs guide</a> covers exactly what ships where.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="documentation">Documentation<a href="https://bestax.io/blog/v5-one-css-story#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<p>Everything above, in reference form:</p>
<ul>
<li class="">The <a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-4-to-5">4.x to 5.x migration guide</a>: the two-step swap, the rendered-HTML diff, and the keep-<code>bulma-</code> escape hatch</li>
<li class=""><a class="" href="https://bestax.io/docs/api/helpers/config"><code>ConfigProvider</code> and <code>classPrefix</code></a>, plus the <a class="" href="https://bestax.io/docs/guides/features/configuration#css-class-prefixing">configuration guide</a></li>
<li class=""><a class="" href="https://bestax.io/docs/guides/getting-started/variations#choosing-the-right-variation">Choosing a CSS variation</a>: which of the five bundles to import</li>
<li class=""><a class="" href="https://bestax.io/docs/api/helpers/theme#dark-mode">Theme and dark mode</a></li>
<li class=""><a class="" href="https://bestax.io/docs/guides/llms">The LLMs guide</a>: every AI-facing artifact the project publishes</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="whats-next">What's Next<a href="https://bestax.io/blog/v5-one-css-story#whats-next" class="hash-link" aria-label="Direct link to What's Next" title="Direct link to What's Next" translate="no">​</a></h2>
<p>The catch-up series rolls on: next is the agent skills post, then a deep dive on bestax-migrate 1.0. The <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">tracker</a> has the full plan.</p>
<p>One CSS, any prefix. The best thing v5 shipped was a deletion.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="release" term="release"/>
        <category label="v5" term="v5"/>
        <category label="css" term="css"/>
        <category label="theme" term="theme"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Floor Is React 18]]></title>
        <id>https://bestax.io/blog/the-floor-is-react-18</id>
        <link href="https://bestax.io/blog/the-floor-is-react-18"/>
        <updated>2026-08-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[bestax-bulma v4.0.0 dropped React 16 and 17. One breaking change, three honest reasons, and what it means for you (probably nothing).]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="The Floor Is React 18, drawn as a pixel art lava level: tiles labeled 16 and 17 sink into the lava while the React atom hops between a solid brick floor labeled React 18 and a floating 19 platform" src="https://bestax.io/assets/images/the-floor-is-react-18-f76f851a9e72e91b6a4133f631dea1d3.svg" width="1200" height="630" class="img_WUYJ"></p>
<p>In June, bestax-bulma v4.0.0 dropped support for React 16 and 17. That's the whole release: one breaking change, no new components, and if you're on React 18 or 19 you won't feel a thing. Here's why I moved the floor anyway.</p>
<p>Same housekeeping as the <a class="" href="https://bestax.io/blog/v3-forms-release">v3 forms recap</a>: this is a recap, not breaking news. <a href="https://github.com/allxsmith/bestax/blob/main/bulma-ui/CHANGELOG.md" target="_blank" rel="noopener noreferrer" class="">v4.0.0</a> was tagged on June 20, 2026, three days after v3.0.0, the library sits at 5.8.0 today, and this is the third post in the <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">catch-up series</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="what-changed">What Changed<a href="https://bestax.io/blog/the-floor-is-react-18#what-changed" class="hash-link" aria-label="Direct link to What Changed" title="Direct link to What Changed" translate="no">​</a></h2>
<p>Two lines in <code>package.json</code>. Honestly, that's it:</p>
<div class="language-diff codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-diff codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">-    "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">-    "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">+    "react": "^18.0.0 || ^19.0.0",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">+    "react-dom": "^18.0.0 || ^19.0.0"</span><br></div></code></pre></div></div>
<p>No components changed, no props were renamed, no CSS moved. The rest of the release was internal lint tooling that never ships to you. The <a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-3-to-4">3.x to 4.x migration guide</a> is the shortest one we have, and it exists mostly to say there's nothing to migrate.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="why-i-dropped-16-and-17">Why I Dropped 16 and 17<a href="https://bestax.io/blog/the-floor-is-react-18#why-i-dropped-16-and-17" class="hash-link" aria-label="Direct link to Why I Dropped 16 and 17" title="Direct link to Why I Dropped 16 and 17" translate="no">​</a></h2>
<p><strong>The support claim wasn't real.</strong> CI built and tested this library against React 18 and 19. Nothing ever ran against 16 or 17, so the <code>^16.8.0</code> in the peer range was a claim, not a fact. I know exactly what untested claims are worth, because the day I <a href="https://github.com/allxsmith/bestax/commit/abdee88caa5636b7fe9b1b1dae017bed8eb97a04" target="_blank" rel="noopener noreferrer" class="">added a React 18 + 19 test matrix</a>, its very first run failed on React 18: a Carousel test helper passed <code>ref</code> through a prop spread, which only works on React 19's ref-as-prop. If React 18 could break quietly inside the range I actually test, what do you figure the odds were that React 16.8 still worked?</p>
<p><strong>v3 had already crossed the line.</strong> The <a class="" href="https://bestax.io/blog/v3-forms-release">date and time pickers</a> that headlined v3.0.0 call <a href="https://react.dev/reference/react/useId" target="_blank" rel="noopener noreferrer" class=""><code>useId</code></a> for SSR-safe accessible IDs, and <code>useId</code> doesn't exist before React 18. So v3 shipped claiming React 16.8 support while its newest components would have crashed there on mount. <a href="https://github.com/allxsmith/bestax/commit/c7251b0a4a1f92ab90c4eda59c60c0ee931e91e1" target="_blank" rel="noopener noreferrer" class="">v4.0.0</a> didn't really drop 16 and 17; it stopped claiming something that had already stopped being true.</p>
<p><strong>Old floors are expensive.</strong> Keeping 16 and 17 would have meant a fallback ID generator and shims for exactly the versions almost nobody runs. React 18 came out in <a href="https://react.dev/blog/2022/03/29/react-v18" target="_blank" rel="noopener noreferrer" class="">March 2022</a>, React 19 has been <a href="https://react.dev/blog/2024/12/05/react-19" target="_blank" rel="noopener noreferrer" class="">stable since December 2024</a>, and React 16.8 is from <a href="https://legacy.reactjs.org/blog/2019/02/06/react-v16.8.0.html" target="_blank" rel="noopener noreferrer" class="">February 2019</a>. Every major in a peer range is a promise to test against it, reproduce bugs on it, and design APIs around its limits. I'd rather make a smaller promise and keep it.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-react-18--19-matrix">The React 18 + 19 Matrix<a href="https://bestax.io/blog/the-floor-is-react-18#the-react-18--19-matrix" class="hash-link" aria-label="Direct link to The React 18 + 19 Matrix" title="Direct link to The React 18 + 19 Matrix" translate="no">​</a></h2>
<p>Narrowing the range was half the move. The other half was making what's left verifiable: since that same day, every CI run includes a compatibility matrix that builds, type-checks, and tests the library once against React 18 and once against React 19, with real peer installs (no <code>--legacy-peer-deps</code> anywhere) and fail-fast off so a break on either major reports on its own. The peer range and the test matrix now say the same thing. <code>^18.0.0 || ^19.0.0</code> isn't a hope, it's what CI verified on the latest commit.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="upgrading">Upgrading<a href="https://bestax.io/blog/the-floor-is-react-18#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading" translate="no">​</a></h2>
<ul>
<li class=""><strong>On React 18 or 19</strong>: skip 4.x and go straight to the current 5.x; that's the path forward. The React floor is identical, and the only breaking change past 4.x is the removal of one prefixed stylesheet variant you probably never imported (the <a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-4-to-5">4.x to 5.x guide</a> has the two-step swap if you did).</li>
<li class=""><strong>On React 16 or 17</strong>: stay on <code>@allxsmith/bestax-bulma@^3</code> until your app can move to React 18, and mind that the v3 date and time pickers already assume a modern React.</li>
</ul>
<p>The <a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-3-to-4">3.x to 4.x migration guide</a> covers both paths.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="sometimes-you-gotta-move-on">Sometimes You Gotta Move On<a href="https://bestax.io/blog/the-floor-is-react-18#sometimes-you-gotta-move-on" class="hash-link" aria-label="Direct link to Sometimes You Gotta Move On" title="Direct link to Sometimes You Gotta Move On" translate="no">​</a></h2>
<p>If you maintain a package, a wide peer range feels like generosity. It's also the easiest promise to make, because nothing enforces it: peer ranges aren't verified by your test suite unless you build that verification yourself, and the versions at the old end are exactly the ones your CI stopped seeing years ago. That's how support rots. Not in one decision, but in one hook you adopt, one helper you refactor, one API you design around, until the range describes a library that no longer exists.</p>
<p>So this is me saying the quiet part in a changelog font: I dropped React 16 and 17 because I couldn't keep the promise, and pretending is worse than a major bump. React 16.8 gave us hooks and changed how all of us write components, and 17 carried the whole ecosystem across a bridge. Genuinely: thanks. But sometimes you gotta move on.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="whats-next">What's Next<a href="https://bestax.io/blog/the-floor-is-react-18#whats-next" class="hash-link" aria-label="Direct link to What's Next" title="Direct link to What's Next" translate="no">​</a></h2>
<p>The catch-up series rolls on: next is v5.0.0, the release that made the CSS story one story, any prefix. The <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">tracker</a> has the full plan.</p>
<p>Meanwhile, the floor is holding.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="release" term="release"/>
        <category label="v4" term="v4"/>
        <category label="react" term="react"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Enhanced Add-Ons, Round Two]]></title>
        <id>https://bestax.io/blog/enhanced-addons-round-two</id>
        <link href="https://bestax.io/blog/enhanced-addons-round-two"/>
        <updated>2026-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Round two. Since January's batch of extra components, four more Enhanced Add-Ons have landed: original components that go past what the Bulma spec covers while keeping Bulma's helper props, CSS variables, and theming. Meet Avatar (and its stacking sibling Avatars), Badge, Reveal, and LinkButton.]]></summary>
        <content type="html"><![CDATA[<p>Round two. Since January's <a class="" href="https://bestax.io/blog/extra-components">batch of extra components</a>, four more Enhanced Add-Ons have landed: original components that go past what the Bulma spec covers while keeping Bulma's helper props, CSS variables, and theming. Meet Avatar (and its stacking sibling Avatars), Badge, Reveal, and LinkButton.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="new-since-january">New since January<a href="https://bestax.io/blog/enhanced-addons-round-two#new-since-january" class="hash-link" aria-label="Direct link to New since January" title="Direct link to New since January" translate="no">​</a></h2>
<p>Same housekeeping as the <a class="" href="https://bestax.io/blog/v3-forms-release">v3 forms recap</a>: this is a recap, not breaking news. Reveal landed in 5.3.0 on July 8, Avatar, Avatars, and Badge followed in 5.4.0 two days later, and the library sits at 5.8.0 today. And a confession about LinkButton: it isn't new at all. It shipped in the very same commit as the components the <a class="" href="https://bestax.io/blog/extra-components">January post</a> announced, and that post just never mentioned it. If a component ships in a release and no blog post names it, did it even ship? Consider this its overdue introduction. We won't re-explain the first eight here; the January post has them covered.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="avatar--avatars">Avatar &amp; Avatars<a href="https://bestax.io/blog/enhanced-addons-round-two#avatar--avatars" class="hash-link" aria-label="Direct link to Avatar &amp; Avatars" title="Direct link to Avatar &amp; Avatars" translate="no">​</a></h3>
<p><code>Avatar</code> shows a person as a photo, initials, or an icon, whichever is available. <code>Avatars</code> stacks them with an overlap and a surplus bubble.</p>
<ul>
<li class="">Automatic fallback chain: <a class="" href="https://bestax.io/docs/api/components/avatar#photo-with-automatic-fallback">photo</a>, then <a class="" href="https://bestax.io/docs/api/components/avatar#initials">initials</a>, then <a class="" href="https://bestax.io/docs/api/components/avatar#icon-fallback">icon</a>, plus <a class="" href="https://bestax.io/docs/api/components/avatar#shapes">shapes</a> and <a class="" href="https://bestax.io/docs/api/components/avatar#sizes">sizes</a> from 16 to 128 pixels (or any number you want)</li>
<li class=""><a class="" href="https://bestax.io/docs/api/components/avatar#clickable-avatar">Clickable avatars</a> render a real link or button, and <a class="" href="https://bestax.io/docs/api/components/avatar#forwarding-props-to-the-image"><code>imageProps</code></a> reaches the underlying <code>img</code></li>
<li class=""><code>Avatars</code> clamps a long list behind a <a class="" href="https://bestax.io/docs/api/components/avatars#clamped-with-a-surplus-bubble">surplus bubble</a>, takes a <a class="" href="https://bestax.io/docs/api/components/avatars#localized-surplus-label">localized surplus label</a>, and has a <a class="" href="https://bestax.io/docs/api/components/avatars#non-overlapping-spaced">spaced, non-overlapping mode</a></li>
</ul>
<p>All three fallback stages, side by side. The first loads a real photo, the second points at a domain that's guaranteed to fail (so it falls back to initials), and the third has no photo or name at all:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatars</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">spaced</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">https://github.com/allxsmith.png</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Al Smith</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">64x64</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">https://example.invalid/missing.jpg</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Grace Hopper</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">64x64</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">icon</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:rgb(255, 203, 139)">Icon</span><span class="token tag script language-javascript tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag script language-javascript tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag script language-javascript tag attr-value" style="color:rgb(127, 219, 202)">user</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag script language-javascript tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">64x64</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatars</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>There's a fourth stage too: with no photo, name, or icon, a built-in generic silhouette renders. And the initials background isn't random. It's hashed deterministically from the name, so Grace gets the same color on every page load.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="badge">Badge<a href="https://bestax.io/blog/enhanced-addons-round-two#badge" class="hash-link" aria-label="Direct link to Badge" title="Direct link to Badge" translate="no">​</a></h3>
<p><code>Badge</code> overlays a count or status dot on the corner of anything, or stands alone as a pill.</p>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/api/components/badge#unread-count">Counts with a max</a> (past it the pill shows a plus), <a class="" href="https://bestax.io/docs/api/components/badge#status-dot-on-an-avatar">dots</a>, and <a class="" href="https://bestax.io/docs/api/components/badge#custom-node-content">custom node content</a></li>
<li class="">Four <a class="" href="https://bestax.io/docs/api/components/badge#positions">positions</a> and an <a class="" href="https://bestax.io/docs/api/components/badge#overlap-circle-vs-square">overlap mode</a> that hugs round targets correctly</li>
<li class=""><a class="" href="https://bestax.io/docs/api/components/badge#pulse">Pulse</a> for in-progress states (it goes still under reduced motion), <a class="" href="https://bestax.io/docs/api/components/badge#toggling-visibility">visibility toggling</a>, and <a class="" href="https://bestax.io/docs/api/components/badge#hidden-at-zero-unless-showzero">zero handling</a> with <code>showZero</code></li>
<li class=""><a class="" href="https://bestax.io/docs/api/components/badge#standalone">Standalone mode</a> when there's nothing to overlay</li>
</ul>
<p>A cart button that counts, with a max:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">CartDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">items</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setItems</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">display</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">flex</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">alignItems</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">center</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Badge</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">content</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">items</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">max</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">9</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">danger</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">overlap</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">square</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mr</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">shopping-cart</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">ariaLabel</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Cart</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">span</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cart</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">span</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Badge</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setItems</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">count </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> count </span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">+</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">1</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Add item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>Click past nine and the pill reads 9+. The count lives in a polite live region, which matters more than it sounds (more on that below).</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="reveal">Reveal<a href="https://bestax.io/blog/enhanced-addons-round-two#reveal" class="hash-link" aria-label="Direct link to Reveal" title="Direct link to Reveal" translate="no">​</a></h3>
<p><code>Reveal</code> animates content into view as it scrolls into the viewport, with <code>IntersectionObserver</code> doing the watching and zero animation libraries in your bundle.</p>
<ul>
<li class="">Seven <a class="" href="https://bestax.io/docs/api/components/reveal#animation-styles">animation styles</a> with <code>delay</code>, <code>duration</code>, and <code>threshold</code> knobs</li>
<li class=""><a class="" href="https://bestax.io/docs/api/components/reveal#staggered-cascade-children">Cascade</a> staggers children, and <a class="" href="https://bestax.io/docs/api/components/reveal#re-animating-on-every-entry"><code>once={false}</code></a> re-animates on every entry</li>
<li class=""><a class="" href="https://bestax.io/docs/api/components/reveal#rendering-as-a-different-element">Polymorphic <code>as</code></a> renders the observed element as any tag</li>
</ul>
<p>Three boxes, one <code>Reveal</code>, staggered 120 milliseconds apart:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Reveal</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">animation</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">fade-up</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">cascade</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">cascadeInterval</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">120</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">display</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">flex</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">flexWrap</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">wrap</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">m</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">flexGrow</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">1</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">First</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Each direct child gets its own delay.</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">m</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">flexGrow</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">1</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Second</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">120 milliseconds behind the one before it.</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">m</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">flexGrow</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">1</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Third</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">No animation runtime in your bundle.</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Reveal</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>Two things worth knowing. First, <code>cascade</code> staggers only the direct children of <code>Reveal</code>, so hand it the items themselves, not a wrapper component. Second, and this one matters: Reveal respects <code>prefers-reduced-motion</code>. When the reader's OS asks for less motion, the animation is skipped entirely and content simply appears. It also renders everything visible during SSR, so crawlers and no-JS visitors never get a blank page. The full <a class="" href="https://bestax.io/docs/api/components/reveal#accessibility">accessibility story</a> is on the API page.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="linkbutton">LinkButton<a href="https://bestax.io/blog/enhanced-addons-round-two#linkbutton" class="hash-link" aria-label="Direct link to LinkButton" title="Direct link to LinkButton" translate="no">​</a></h3>
<p>The component the January post forgot. <code>LinkButton</code> is a real <code>&lt;button&gt;</code> dressed as text or a link, and it exists to kill the <code>&lt;div onClick&gt;</code> pattern: you keep native keyboard focus, Enter and Space handling, and screen reader semantics while looking like prose.</p>
<ul>
<li class="">Three variants, <a class="" href="https://bestax.io/docs/api/elements/linkbutton#default-text-variant">text</a>, <a class="" href="https://bestax.io/docs/api/elements/linkbutton#ghost-variant">ghost</a>, and underline, in <a class="" href="https://bestax.io/docs/api/elements/linkbutton#all-colors">any Bulma color</a> and <a class="" href="https://bestax.io/docs/api/elements/linkbutton#all-sizes">size</a></li>
<li class=""><a class="" href="https://bestax.io/docs/api/elements/linkbutton#polymorphic-as-router-links">Polymorphic <code>as</code></a> for router links</li>
<li class="">Everything <code>Button</code> offers passes through, minus the three props that make no sense on a link look (<code>isOutlined</code>, <code>isInverted</code>, <code>isLight</code>)</li>
</ul>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">LinkButton</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Text variant</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">LinkButton</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">LinkButton</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">variant</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">ghost</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Ghost variant</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">LinkButton</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">LinkButton</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">variant</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">underline</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    Underline variant</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">LinkButton</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="built-for-accessibility">Built for Accessibility<a href="https://bestax.io/blog/enhanced-addons-round-two#built-for-accessibility" class="hash-link" aria-label="Direct link to Built for Accessibility" title="Direct link to Built for Accessibility" translate="no">​</a></h2>
<p>Some honesty about the rollout: Avatar and Badge shipped in 5.4.0 on a Friday, and by the following Tuesday we'd landed 5.4.1, 5.4.2, and a dedicated 5.5.0 accessibility batch. Shipping fast and patching fast are the same muscle, and the result is a set of defaults we're happy to stand behind:</p>
<ul>
<li class="">An avatar with an explicit <code>alt=""</code> is treated as decorative and skipped by screen readers entirely, but never when it's a link or a button</li>
<li class="">Link and button avatars always get an accessible name, even when you forget to provide one</li>
<li class="">Badge's <code>role="status"</code> live region stays mounted even when a zero hides the pill, so a change from 0 to 1 is announced reliably instead of inserting a region nobody hears</li>
<li class="">Keyboard focus on a stacked avatar lifts it above its overlapping neighbors, so the focus ring is never buried</li>
<li class="">The surplus label in <code>Avatars</code> is localizable, and <code>as="button"</code> avatars default to <code>type="button"</code> so a click can't accidentally submit a form</li>
</ul>
<p>Reveal didn't need the patch batch. Its accessibility story shipped on day one: content never leaves the accessibility tree, the animation touches only opacity and transform, and reduced motion turns it off.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="themeable-like-stock-bulma">Themeable like Stock Bulma<a href="https://bestax.io/blog/enhanced-addons-round-two#themeable-like-stock-bulma" class="hash-link" aria-label="Direct link to Themeable like Stock Bulma" title="Direct link to Themeable like Stock Bulma" translate="no">​</a></h2>
<p>Every Enhanced Add-On follows the same SCSS contract as the stock components: its variables derive from Bulma tokens (never hardcoded hex) and register as <code>--bulma-*</code> CSS variables on the component root. That's why the <code>Theme</code> component and plain CSS overrides work on the extras exactly like they work on a <code>Button</code>.</p>
<p>Take the badge's ring, the thin outline separating the pill from whatever sits behind it. It defaults to <code>var(--bulma-scheme-main)</code>, the page's scheme color, so it's already correct in dark mode without a dark-mode rule anywhere. Want it branded? One variable:</p>
<div class="language-css codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-css codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token selector class" style="color:#00009f">.badge</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token variable" style="color:#36acaa">--bulma-badge-ring-color</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">var</span><span class="token punctuation" style="color:#393A34">(</span><span class="token variable" style="color:#36acaa">--bulma-primary</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>The same goes for the rest: avatar size, background, and radius; Reveal's duration and easing riding Bulma's own motion tokens. Initials avatars even pick their background from Bulma's palette (primary, link, info, success, warning, danger), so a retheme recolors your avatars with everything else. Each API page lists its variables at the bottom: <a class="" href="https://bestax.io/docs/api/components/avatar#css--sass-variables">Avatar</a>, <a class="" href="https://bestax.io/docs/api/components/badge#css--sass-variables">Badge</a>, <a class="" href="https://bestax.io/docs/api/components/reveal#css--sass-variables">Reveal</a>. For the bigger picture, see the <a class="" href="https://bestax.io/docs/api/helpers/theme">Theme helper</a> and the <a class="" href="https://bestax.io/docs/guides/features/css-variables">CSS variables guide</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="all-12-enhanced-add-ons">All 12 Enhanced Add-Ons<a href="https://bestax.io/blog/enhanced-addons-round-two#all-12-enhanced-add-ons" class="hash-link" aria-label="Direct link to All 12 Enhanced Add-Ons" title="Direct link to All 12 Enhanced Add-Ons" translate="no">​</a></h2>
<p>The full set, straight from the homepage grid, four of them new since January:</p>
<table><thead><tr><th>Component</th><th>What it does</th></tr></thead><tbody><tr><td><a class="" href="https://bestax.io/docs/api/elements/linkbutton"><strong>LinkButton</strong></a></td><td>A button that dresses like a link: semantics of a button, look of an anchor.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/avatar"><strong>Avatar</strong></a></td><td>User images with automatic initials and icon fallbacks, in any size or shape.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/badge"><strong>Badge</strong></a></td><td>Corner status dots and counts overlaid on any element.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/carousel"><strong>Carousel</strong></a></td><td>Slide any content with autoplay, drag, arrows, and indicators.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/collapse"><strong>Collapse</strong></a></td><td>Smoothly expanding panels for accordions and FAQs.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/dialog"><strong>Dialog</strong></a></td><td>Confirmation and alert dialogs with customizable actions.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/loading"><strong>Loading</strong></a></td><td>Spinner overlays for full pages or single containers.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/reveal"><strong>Reveal</strong></a></td><td>Scroll-triggered entrance animations, solo or cascading, that respect reduced motion.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/sidebar"><strong>Sidebar</strong></a></td><td>Slide-out navigation panels from either edge.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/steps"><strong>Steps</strong></a></td><td>Multi-step progress for wizards and checkouts.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/toast"><strong>Toast</strong></a></td><td>Brief stacking notifications with a programmatic API.</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/components/tooltip"><strong>Tooltip</strong></a></td><td>Hover hints in any direction and color.</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="documentation">Documentation<a href="https://bestax.io/blog/enhanced-addons-round-two#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class="">API references: <a class="" href="https://bestax.io/docs/api/components/avatar">Avatar</a>, <a class="" href="https://bestax.io/docs/api/components/avatars">Avatars</a>, <a class="" href="https://bestax.io/docs/api/components/badge">Badge</a>, <a class="" href="https://bestax.io/docs/api/components/reveal">Reveal</a>, and <a class="" href="https://bestax.io/docs/api/elements/linkbutton">LinkButton</a></li>
<li class="">Theming: the <a class="" href="https://bestax.io/docs/api/helpers/theme">Theme helper</a> and the <a class="" href="https://bestax.io/docs/guides/features/css-variables">CSS variables guide</a></li>
<li class="">Round one: <a class="" href="https://bestax.io/blog/extra-components">Introducing Extra Components</a>, the first eight</li>
</ul>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="components" term="components"/>
        <category label="bulma" term="bulma"/>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Forms Mega-Release]]></title>
        <id>https://bestax.io/blog/v3-forms-release</id>
        <link href="https://bestax.io/blog/v3-forms-release"/>
        <updated>2026-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Back in January, our Extra Components post ended with a promise: DateInput, TimeInput, and Colorpicker were coming. In June, v3.0.0 delivered the date and time pickers (plus a DateTimeInput we never promised) inside a release that added about 30 new components in one shot. Two out of three ain't bad.]]></summary>
        <content type="html"><![CDATA[<p>Back in January, our <a class="" href="https://bestax.io/blog/extra-components">Extra Components post</a> ended with a promise: DateInput, TimeInput, and Colorpicker were coming. In June, v3.0.0 delivered the date and time pickers (plus a DateTimeInput we never promised) inside a release that added about 30 new components in one shot. Two out of three ain't bad.</p>
<p>Some honesty up front: this is a recap, not breaking news. v3.0.0 was tagged on June 17, 2026, the library sits at 5.8.0 today, and the blog fell behind the code. This post starts a series that catches things up, one release at a time. (And no, Colorpicker hasn't shipped yet. We're not going to pretend otherwise.)</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="what-shipped-in-v3">What Shipped in v3<a href="https://bestax.io/blog/v3-forms-release#what-shipped-in-v3" class="hash-link" aria-label="Direct link to What Shipped in v3" title="Direct link to What Shipped in v3" translate="no">​</a></h2>
<p>v3 was the forms release. The 2.x form story covered the basics (Input, Select, TextArea, File, Checkbox, Radio), and 3.0 filled in just about everything else:</p>
<table><thead><tr><th>Component</th><th>What you get</th></tr></thead><tbody><tr><td><a class="" href="https://bestax.io/docs/api/form/datetime/dateinput"><strong>DateInput</strong></a></td><td>Popover calendar with segmented keyboard entry right in the field</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/datetime/timeinput"><strong>TimeInput</strong></a></td><td>Popover wheel spinner for time of day, 12-hour or 24-hour</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/datetime/datetimeinput"><strong>DateTimeInput</strong></a></td><td>Calendar and time wheels combined in a single popover</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/switch"><strong>Switch</strong></a></td><td>Bulma switch toggle</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/slider"><strong>Slider</strong></a></td><td>Range slider with dual-thumb mode and ticks</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/numberinput"><strong>Numberinput</strong></a></td><td>Number input with +/- steppers</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/rate"><strong>Rate</strong></a></td><td>Star rating with half-star precision</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/autocomplete"><strong>Autocomplete</strong></a></td><td>Filterable suggest input</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/taginput"><strong>Taginput</strong></a></td><td>Multi-tag input with autocomplete</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/checkbox"><strong>Checkbox</strong></a> and <a class="" href="https://bestax.io/docs/api/form/radio"><strong>Radio</strong></a></td><td>Themed styling with color and size variants</td></tr><tr><td><a class="" href="https://bestax.io/docs/api/form/checkboxes"><strong>Checkboxes</strong></a> and <a class="" href="https://bestax.io/docs/api/form/radios"><strong>Radios</strong></a></td><td>Optional group-state containers</td></tr><tr><td><strong>InputBase</strong>, <strong>SelectBase</strong>, <strong>TextAreaBase</strong></td><td>The bare 2.x-style elements, when you want them (<a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-2-to-3">migration guide</a>)</td></tr></tbody></table>
<p>The same release also brought a wave of UI components (Tooltip, Dialog, Toast, Steps, Sidebar, Carousel, and more) and a set of text elements, but this post sticks to the forms story. The <a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-2-to-3">2.x to 3.x migration guide</a> has the complete list.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="native-date--time-pickers">Native Date &amp; Time Pickers<a href="https://bestax.io/blog/v3-forms-release#native-date--time-pickers" class="hash-link" aria-label="Direct link to Native Date &amp; Time Pickers" title="Direct link to Native Date &amp; Time Pickers" translate="no">​</a></h2>
<p>The standout of the release. The pickers run on native <code>Date</code> and <code>Intl</code> alone: no date library in your bundle, no peer dependency to version-match, and no locale data to ship. If you've ever shipped an entire date library just so a user could pick a Tuesday, you know exactly why that matters.</p>
<p>What that buys you (each link lands on a live example in the API docs):</p>
<ul>
<li class="">A <a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#basic-dateinput">popover calendar</a> for dates and a <a class="" href="https://bestax.io/docs/api/form/datetime/timeinput#basic-timeinput">wheel spinner</a> for times</li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#manual-keyboard-entry">Segmented keyboard entry</a> directly in the field, so typing a date never requires the popover</li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#min-and-max">Min/max bounds</a>, <a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#disabled-dates">disabled-date predicates</a>, <a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#custom-format">custom formats</a>, <a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#locale">locales</a>, and an <a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#inline">inline mode</a></li>
<li class="">A focus trap while the popover is open, with <a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#keyboard-navigation">keyboard navigation</a> fully mapped, and a <a class="" href="https://bestax.io/docs/api/form/datetime/dateinput#mobile-native">native fallback on touch devices</a> so phones get the platform picker</li>
<li class="">On TimeInput, <a class="" href="https://bestax.io/docs/api/form/datetime/timeinput#12-hour-format">12-hour</a> or <a class="" href="https://bestax.io/docs/api/form/datetime/timeinput#24-hour-format">24-hour</a> formats, <a class="" href="https://bestax.io/docs/api/form/datetime/timeinput#with-seconds">optional seconds</a>, and <a class="" href="https://bestax.io/docs/api/form/datetime/timeinput#increment-steps">custom minute increments</a> for slot-style pickers</li>
</ul>
<p>Here's a controlled DateInput clamped to the current month:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">DateDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setDate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">null</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> today </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 139)">Date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> min </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 139)">Date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">today</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">getFullYear</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> today</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">getMonth</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> max </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 139)">Date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">today</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">getFullYear</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> today</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">getMonth</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">DateInput</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Pick a day this month</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">YYYY-MM-DD</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">min</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">min</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">max</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">max</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">date</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setDate</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Selected: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">date </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> date</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">toDateString</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'nothing yet'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>And a controlled TimeInput on the 12-hour clock:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">TimeDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">time</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setTime</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">null</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">TimeInput</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Departure</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">HH:MM AM</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">hourFormat</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">12</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">time</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setTime</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Selected: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">time </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> time</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">toLocaleTimeString</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'nothing yet'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>Note the <code>onChange</code>: it hands you a <code>Date</code> (or <code>null</code>), not an event, so a state setter drops straight in. When you need both halves at once, <code>DateTimeInput</code> combines the calendar and the wheels in a single popover with an iOS-style footer; click the time and the spinner floats over the calendar, which is a pretty cool trick:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">DateTimeInput</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Appointment</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">YYYY-MM-DD HH:MM</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="fieldcontrol-auto-wrap">Field/Control Auto-Wrap<a href="https://bestax.io/blog/v3-forms-release#fieldcontrol-auto-wrap" class="hash-link" aria-label="Direct link to Field/Control Auto-Wrap" title="Direct link to Field/Control Auto-Wrap" translate="no">​</a></h2>
<p>The one breaking change in v3, told straight. In 2.x, <code>&lt;Input&gt;</code> rendered a bare <code>&lt;input class="input"&gt;</code>. In 3.x, <a class="" href="https://bestax.io/docs/api/form/input"><code>Input</code></a>, <a class="" href="https://bestax.io/docs/api/form/select"><code>Select</code></a>, <a class="" href="https://bestax.io/docs/api/form/textarea"><code>TextArea</code></a>, and <a class="" href="https://bestax.io/docs/api/form/file"><code>File</code></a> detect whether they're already inside a <code>&lt;Field&gt;</code> and <code>&lt;Control&gt;</code>, and wrap themselves when they're not:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Input</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">value</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">hi</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 2.x → &lt;input class="input" value="hi" /&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 3.x → &lt;div class="field"&gt;&lt;div class="control"&gt;&lt;input class="input" value="hi" /&gt;&lt;/div&gt;&lt;/div&gt;</span><br></div></code></pre></div></div>
<p>That wrapper pattern isn't something we invented, it's Bulma stuff. Bulma's form markup puts every control inside a <code>&lt;div class="control"&gt;</code> and groups controls under a <code>&lt;div class="field"&gt;</code> that handles spacing, labels, addons, and icons; <a href="https://bulma.io/documentation/form/general/" target="_blank" rel="noopener noreferrer" class="">Bulma's own form docs</a> build everything on that skeleton. Our <a class="" href="https://bestax.io/docs/api/form/field"><code>Field</code></a> and <a class="" href="https://bestax.io/docs/api/form/control"><code>Control</code></a> components render exactly that structure, so in 3.x the inputs guarantee the markup Bulma expects.</p>
<p>Why make wrapping the default? Because <code>&lt;Field&gt;&lt;Control&gt;&lt;Input /&gt;&lt;/Control&gt;&lt;/Field&gt;</code> is the single most common pattern in Bulma forms, and once the wrapper is guaranteed, props like <code>label</code>, <code>message</code>, and <code>iconLeftName</code> can exist at all:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">iconLeftName</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">envelope</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">message</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">We'll never share your email.</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Inspect and see</div><div class="admonitionContent_bqRL"><p>That example is live. Right-click the rendered input and hit Inspect: there's a <code>field</code> div wrapping a <code>control</code> div wrapping the <code>input</code>, and you wrote none of them.</p></div></div>
<p>Code that already wrapped its inputs keeps working (context detection skips the re-wrap), and CSS that targets <code>.input</code> still matches. If a snapshot test asserted the root element, or a layout dropped <code>&lt;Input&gt;</code> straight into a flex or grid container, the <a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-2-to-3">migration guide</a> has the watch-for list. And if you want the bare element back, <code>InputBase</code>, <code>SelectBase</code>, and <code>TextAreaBase</code> render exactly what 2.x did.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="themed-checkbox--radio">Themed Checkbox &amp; Radio<a href="https://bestax.io/blog/v3-forms-release#themed-checkbox--radio" class="hash-link" aria-label="Direct link to Themed Checkbox &amp; Radio" title="Direct link to Themed Checkbox &amp; Radio" translate="no">​</a></h2>
<p><code>Checkbox</code> and <code>Radio</code> got the themed treatment: a visually hidden native input plus a custom indicator span, which unlocks color and size variants like <code>&lt;Radio color="primary" size="large"&gt;</code>. The catch is that the indicator needs the new extras stylesheet. Upgrade without it and your radios become invisible click targets.</p>
<p>The easy path is swapping your <code>bulma.css</code> import for <code>bestax.css</code>, a drop-in superset that bundles Bulma plus every bestax extra in one file:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma/dist/bestax.css'</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>Here's what the checkboxes look like once the CSS is loaded:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Checkboxes</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Checkbox</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">defaultChecked</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">I agree to the terms</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Checkbox</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Checkbox</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Subscribe to newsletter</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Checkbox</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Checkbox</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">disabled</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Disabled option</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Checkbox</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Checkboxes</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>And the radios:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Radios</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">answer</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Radio</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">defaultChecked</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Yes</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Radio</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Radio</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">No</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Radio</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Radio</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">disabled</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Maybe</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Radio</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Radios</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><code>Checkboxes</code> and <code>Radios</code> also grew optional group state: pass <code>value</code> and <code>onChange</code> to the container and skip wiring each control. Existing JSX keeps working, since the new props are all optional.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-rest-of-the-form-suite">The Rest of the Form Suite<a href="https://bestax.io/blog/v3-forms-release#the-rest-of-the-form-suite" class="hash-link" aria-label="Direct link to The Rest of the Form Suite" title="Direct link to The Rest of the Form Suite" translate="no">​</a></h2>
<p>The pickers got the spotlight, but the rest of the suite pulls its weight. Every link below lands on a live example in the API docs, and every demo here is poke-able.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="switch">Switch<a href="https://bestax.io/blog/v3-forms-release#switch" class="hash-link" aria-label="Direct link to Switch" title="Direct link to Switch" translate="no">​</a></h3>
<p>A styled checkbox that renders as a toggle, made for settings screens.</p>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/api/form/switch#colors">Colors</a>, <a class="" href="https://bestax.io/docs/api/form/switch#sizes">sizes</a>, and <a class="" href="https://bestax.io/docs/api/form/switch#rounded-style">rounded</a>, <a class="" href="https://bestax.io/docs/api/form/switch#thin-style">thin</a>, and <a class="" href="https://bestax.io/docs/api/form/switch#outlined-style">outlined</a> styles</li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/switch#rtl-layout">RTL layout</a> and a <a class="" href="https://bestax.io/docs/api/form/switch#controlled-usage">controlled mode</a></li>
</ul>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SwitchDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEnabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Switch</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">checked</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">enabled</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEnabled</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">target</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">checked</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRounded</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Enable notifications</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Switch</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Status: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">enabled </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Enabled'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Disabled'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="slider">Slider<a href="https://bestax.io/blog/v3-forms-release#slider" class="hash-link" aria-label="Direct link to Slider" title="Direct link to Slider" translate="no">​</a></h3>
<p>A range slider for picking values.</p>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/api/form/slider#with-output-display">Output display</a> with a <a class="" href="https://bestax.io/docs/api/form/slider#custom-output-format">custom format</a></li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/slider#custom-range">Custom ranges</a>, <a class="" href="https://bestax.io/docs/api/form/slider#color-variants">colors</a>, <a class="" href="https://bestax.io/docs/api/form/slider#size-variants">sizes</a>, and <a class="" href="https://bestax.io/docs/api/form/slider#rounded-and-circle">rounded or circle</a> thumbs</li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/slider#controlled-mode">Controlled</a> and <a class="" href="https://bestax.io/docs/api/form/slider#uncontrolled-mode">uncontrolled</a> modes</li>
</ul>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SliderDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setValue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">50</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Slider</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">value</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setValue</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">min</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">0</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">max</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">100</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">showOutput</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRounded</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Value: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="numberinput">Numberinput<a href="https://bestax.io/blog/v3-forms-release#numberinput" class="hash-link" aria-label="Direct link to Numberinput" title="Direct link to Numberinput" translate="no">​</a></h3>
<p>A number input with +/- stepper buttons.</p>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/api/form/numberinput#with-min-and-max">Min/max</a> and a <a class="" href="https://bestax.io/docs/api/form/numberinput#custom-step">custom step</a></li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/numberinput#controls-position">Controls position</a>, <a class="" href="https://bestax.io/docs/api/form/numberinput#color-variants">colors</a>, <a class="" href="https://bestax.io/docs/api/form/numberinput#size-variants">sizes</a>, and <a class="" href="https://bestax.io/docs/api/form/numberinput#rounded-buttons">rounded buttons</a></li>
</ul>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">NumberDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">quantity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setQuantity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Numberinput</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">quantity</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setQuantity</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">min</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">1</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">max</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">10</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Quantity: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">quantity</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="rate">Rate<a href="https://bestax.io/blog/v3-forms-release#rate" class="hash-link" aria-label="Direct link to Rate" title="Direct link to Rate" translate="no">​</a></h3>
<p>Star ratings without hand-rolling the stars.</p>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/api/form/rate#with-score-display">Score display</a> and <a class="" href="https://bestax.io/docs/api/form/rate#with-text-labels">text labels</a> alongside the icons</li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/rate#custom-max-value">Custom max</a>, <a class="" href="https://bestax.io/docs/api/form/rate#custom-icons">custom icons</a>, and <a class="" href="https://bestax.io/docs/api/form/rate#size-variants">sizes</a></li>
</ul>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">RateDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">rating</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setRating</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">3</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Rate</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">rating</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setRating</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">showScore</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">showText</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">texts</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Poor'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Fair'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Average'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Good'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Excellent'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="autocomplete">Autocomplete<a href="https://bestax.io/blog/v3-forms-release#autocomplete" class="hash-link" aria-label="Direct link to Autocomplete" title="Direct link to Autocomplete" translate="no">​</a></h3>
<p>An input with filtered dropdown suggestions and keyboard navigation.</p>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/api/form/autocomplete#open-on-focus">Open on focus</a>, a <a class="" href="https://bestax.io/docs/api/form/autocomplete#with-clear-button">clear button</a>, and <a class="" href="https://bestax.io/docs/api/form/autocomplete#keep-first-highlighted">keep-first highlighting</a></li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/autocomplete#with-object-data">Object data</a>, <a class="" href="https://bestax.io/docs/api/form/autocomplete#custom-item-template">custom item templates</a>, and <a class="" href="https://bestax.io/docs/api/form/autocomplete#loading-state">loading</a> and <a class="" href="https://bestax.io/docs/api/form/autocomplete#with-empty-state">empty</a> states</li>
</ul>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">AutocompleteDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">selected</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setSelected</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token keyword" style="color:rgb(127, 219, 202)">null</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> fruits </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Apple'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Banana'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Cherry'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Date'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Elderberry'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Fig'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Grape'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Autocomplete</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">data</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">fruits</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Search fruit...</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSelect</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setSelected</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">openOnFocus</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">clearable</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">selected </span><span class="token operator" style="color:rgb(127, 219, 202)">&amp;&amp;</span><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Selected: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">selected</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="taginput">Taginput<a href="https://bestax.io/blog/v3-forms-release#taginput" class="hash-link" aria-label="Direct link to Taginput" title="Direct link to Taginput" translate="no">​</a></h3>
<p>A tag and chip input for managing multiple values.</p>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/api/form/taginput#with-autocomplete">Autocomplete suggestions</a>, optionally <a class="" href="https://bestax.io/docs/api/form/taginput#restrict-to-suggestions">restricted to the list</a></li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/taginput#maximum-tags">Max tags</a>, <a class="" href="https://bestax.io/docs/api/form/taginput#allow-duplicates">duplicate control</a>, and <a class="" href="https://bestax.io/docs/api/form/taginput#custom-confirm-keys">custom confirm keys</a></li>
<li class=""><a class="" href="https://bestax.io/docs/api/form/taginput#tag-colors">Tag colors</a> and <a class="" href="https://bestax.io/docs/api/form/taginput#non-closable-tags">non-closable tags</a></li>
</ul>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">TaginputDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setTags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">'React'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'TypeScript'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> suggestions </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'React'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Vue'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Angular'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Svelte'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'TypeScript'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'JavaScript'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Taginput</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">tags</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setTags</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">data</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">suggestions</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Add frameworks...</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">tagColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Tags: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">join</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">', '</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="documentation">Documentation<a href="https://bestax.io/blog/v3-forms-release#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/guides/getting-started/migration/bulma-ui-2-to-3">Upgrading bestax-bulma 2.x to 3.x</a>: the complete change list and every watch-for</li>
<li class=""><a class="" href="https://bestax.io/docs/guides/library/form">Form components guide</a>: live examples of every input</li>
<li class="">API references: <a class="" href="https://bestax.io/docs/api/form/datetime/dateinput">DateInput</a>, <a class="" href="https://bestax.io/docs/api/form/datetime/timeinput">TimeInput</a>, and <a class="" href="https://bestax.io/docs/api/form/datetime/datetimeinput">DateTimeInput</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="whats-next">What's Next<a href="https://bestax.io/blog/v3-forms-release#whats-next" class="hash-link" aria-label="Direct link to What's Next" title="Direct link to What's Next" translate="no">​</a></h2>
<p>v3 was the first of three majors that landed in under two weeks this June, so the recaps continue: v4.0.0 (React 18 becomes the floor), then v5.0.0 (one CSS story, any prefix). After that, the series digs into bestax-migrate, building forms without a form library, and the AI loop that helps maintain this project. The full plan lives in the <a href="https://github.com/allxsmith/bestax/issues/384" target="_blank" rel="noopener noreferrer" class="">blog revival tracker</a>.</p>
<p>Last time we said "coming soon" it took five months, so no dates this time. Yeah, we learned.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="release" term="release"/>
        <category label="v3" term="v3"/>
        <category label="forms" term="forms"/>
        <category label="bulma" term="bulma"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bulma Is the #3 CSS Framework. AI Will Never Tell You About It]]></title>
        <id>https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it</id>
        <link href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it"/>
        <updated>2026-07-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Bulma is the #3 CSS framework, behind Tailwind and Bootstrap. Here is why third place is the best place to be, why your AI assistant will never suggest it, and how to scaffold a React + Bulma site in one command with create-bestax.]]></summary>
        <content type="html"><![CDATA[<p>Tailwind is first. Bootstrap is second. Bulma is third.</p>
<p>That's the whole leaderboard, and it has been remarkably stable for years. Every survey, every npm download chart, every "what CSS framework should I use in 2026" thread lands in the same order.</p>
<p>So let's talk about third place, because third place is the interesting place to be.</p>
<p><strong>Congrats on being different.</strong> Now here's what to do.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="third-place-is-not-second-loser">Third Place Is Not Second Loser<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#third-place-is-not-second-loser" class="hash-link" aria-label="Direct link to Third Place Is Not Second Loser" title="Direct link to Third Place Is Not Second Loser" translate="no">​</a></h2>
<p>There's a certain kind of developer who reads "third most used" and hears "the one that lost." I'd like to gently push back on that.</p>
<p>First place in a popularity contest tells you almost nothing about fit. It tells you about momentum, marketing budget, and the gravitational pull of defaults. Tailwind is genuinely excellent and deserves its adoption. Bootstrap earned its position over a decade of being the safe answer. Neither of those facts makes them the right answer for <em>your</em> project.</p>
<p>Here's what third place actually means for Bulma:</p>
<ul>
<li class=""><strong>Big enough to be safe.</strong> Millions of downloads, a decade of production use, active v1 development. This isn't a weekend project you're betting your app on.</li>
<li class=""><strong>Small enough to still have a point of view.</strong> Bulma didn't chase the utility-first trend. It didn't bolt on a JavaScript runtime. It stayed a CSS framework.</li>
<li class=""><strong>Boring in the good way.</strong> No build step required. No config file with 400 lines. No plugin ecosystem you have to keep in sync.</li>
</ul>
<p>Bulma is what you pick when you want your HTML to be readable six months from now.</p>
<p>Here's the leaderboard, rendered in the framework that placed third. Every code block in this post is <strong>live and editable</strong>. Change it and watch it re-render:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Heading</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">CSS Framework Leaderboard</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Heading</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">trophy</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">variant</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">solid</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    Tailwind CSS: utility-first, enormous, deserved</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">medal</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">variant</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">solid</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    Bootstrap: the safe answer for over a decade</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Block</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">active</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">heart</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">variant</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">solid</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    Bulma: third place, on purpose</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel.Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Panel</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="why-that-was-react-and-not-raw-bulma">Why That Was React and Not Raw Bulma<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#why-that-was-react-and-not-raw-bulma" class="hash-link" aria-label="Direct link to Why That Was React and Not Raw Bulma" title="Direct link to Why That Was React and Not Raw Bulma" translate="no">​</a></h3>
<p>You may have noticed that example is not hand-written Bulma markup. There is no <code>class="panel is-primary"</code> anywhere in it. It is a <code>&lt;Panel&gt;</code> component from <a href="https://bestax.io/" target="_blank" rel="noopener noreferrer" class=""><code>@allxsmith/bestax-bulma</code></a>, and so is every other example in this post. That is a deliberate choice, and it is worth a paragraph before we go any further.</p>
<p>Bulma ships CSS and nothing else. That is precisely what makes it pleasant to write by hand, and precisely what makes it hard for an AI assistant to write correctly. A class string has no schema behind it. Nothing tells a model which modifiers are legal on which element, nothing catches <code>is-primaryy</code>, nothing knows that <code>is-large</code> belongs on the button and not the wrapper. The mistake does not surface until a human looks at the page, and class soup is close to invisible in code review.</p>
<p>Typed components close that gap. <code>color="primary"</code> has six legal values and an editor that lists them. A wrong prop is a red squiggle, not a silently unstyled div. The component owns the class names, so an assistant never has to remember Bulma's naming rules, only the props. On top of that, bestax publishes its full API as a machine-readable <a href="https://bestax.io/docs/guides/llms" target="_blank" rel="noopener noreferrer" class="">LLM index</a> and ships Agent Skills, so an assistant can read the real component surface instead of reconstructing it from whatever it half-remembers about Bulma.</p>
<p>That is the whole point of bestax. Not to replace Bulma, but to give it the surface that modern tooling expects: types, autocomplete, docs a machine can parse, and skills an agent can load. <strong>A framework that AI cannot use confidently is a framework AI will not recommend</strong>, and as we will get to at the end of this post, not being recommended is how a perfectly good framework quietly disappears. Making Bulma AI-native is how third place stays on the board.</p>
<p>So: Bulma underneath, bestax on top, and every example below is real, running code you can edit.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="what-bulma-actually-gives-you">What Bulma Actually Gives You<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#what-bulma-actually-gives-you" class="hash-link" aria-label="Direct link to What Bulma Actually Gives You" title="Direct link to What Bulma Actually Gives You" translate="no">​</a></h2>
<p>Bulma v1 (2024) was not a maintenance release. It was a rebuild of the foundations:</p>
<ul>
<li class=""><strong>CSS variables throughout</strong>: theming without a Sass pipeline</li>
<li class=""><strong>HSL-based color system</strong>: derive an entire palette from a few values</li>
<li class=""><strong>CSS Grid support</strong>: modern layouts, not just flexbox columns</li>
<li class=""><strong>Native dark mode</strong>: first-class, not an afterthought</li>
<li class=""><strong>Skeleton loaders</strong>: built into the components you already use</li>
<li class=""><strong>Prefixed distribution</strong>: run Bulma next to another framework without class collisions</li>
</ul>
<p>And the thing that hasn't changed since 2016: <code>class="button is-primary is-large"</code> means exactly what it looks like it means. You can read a Bulma template out loud. Try that with a wall of utility classes.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="semantic-colors-everywhere">Semantic Colors, Everywhere<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#semantic-colors-everywhere" class="hash-link" aria-label="Direct link to Semantic Colors, Everywhere" title="Direct link to Semantic Colors, Everywhere" translate="no">​</a></h3>
<p>One color vocabulary (<code>primary</code>, <code>link</code>, <code>info</code>, <code>success</code>, <code>warning</code>, <code>danger</code>) applied consistently across every component. Learn it once:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Primary</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">link</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Link</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Info</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Success</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">warning</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Warning</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">danger</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Danger</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>The same six words work on tags:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tags</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">bulma</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">link</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">react</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">typescript</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">vite</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">warning</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRounded</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    open source</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">danger</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRounded</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    please star</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tags</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>And on messages:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">title</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Third place</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    Big enough to trust, small enough to still have opinions.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">title</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Zero JavaScript</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    Bulma ships CSS. You bring the behavior.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="hsl-theming-without-a-sass-pipeline">HSL Theming Without a Sass Pipeline<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#hsl-theming-without-a-sass-pipeline" class="hash-link" aria-label="Direct link to HSL Theming Without a Sass Pipeline" title="Direct link to HSL Theming Without a Sass Pipeline" translate="no">​</a></h3>
<p>Bulma v1 derives its whole palette from hue, saturation, and lightness. Change three numbers and get a new theme at runtime, with no rebuild. Edit the <code>primaryH</code> value below:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ThemeDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">hue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setHue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">270</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Slider</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">hue</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setHue</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">min</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">0</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">max</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">360</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mb</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">3</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        primaryH: </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">hue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryH</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript known-class-name class-name" style="color:rgb(255, 203, 139)">String</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">hue</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryS</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">90%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryL</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">50%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">One variable, whole palette</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Primary</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              Light</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isOutlined</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              Outlined</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">medium</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            Themed tag</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>That's the entire theming story. No <code>tailwind.config.js</code>, no Sass variables file, no build step.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="skeleton-loaders-built-in">Skeleton Loaders, Built In<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#skeleton-loaders-built-in" class="hash-link" aria-label="Direct link to Skeleton Loaders, Built In" title="Direct link to Skeleton Loaders, Built In" translate="no">​</a></h3>
<p>Loading states used to be a component library's job. Bulma v1 ships them:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Skeleton</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Skeleton</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="columns-that-just-work">Columns That Just Work<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#columns-that-just-work" class="hash-link" aria-label="Direct link to Columns That Just Work" title="Direct link to Columns That Just Work" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">First</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">link</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Second</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Third, the good one</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<div class="theme-admonition theme-admonition-note admonition_QWZn alert alert--secondary"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Pure CSS, no JavaScript</div><div class="admonitionContent_bqRL"><p>Bulma ships zero JavaScript. That's a feature. It means the framework never fights your React state, never needs a wrapper to initialize, and never breaks when your bundler changes. You bring the behavior; Bulma brings the styles.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="now-scaffold-a-site">Now: Scaffold a Site<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#now-scaffold-a-site" class="hash-link" aria-label="Direct link to Now: Scaffold a Site" title="Direct link to Now: Scaffold a Site" translate="no">​</a></h2>
<p>Enough theory. Let's build something. One command:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app</span><br></div></code></pre></div></div>
<p>Answer four short questions and you have a working React + Bulma application. Then:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">cd my-app</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm install</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm run dev</span><br></div></code></pre></div></div>
<p>That's a running dev server with hot reload, Bulma v1 wired up, and the <a href="https://bestax.io/" target="_blank" rel="noopener noreferrer" class="">@allxsmith/bestax-bulma</a> component library ready to import.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="the-prompts">The Prompts<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#the-prompts" class="hash-link" aria-label="Direct link to The Prompts" title="Direct link to The Prompts" translate="no">​</a></h3>
<p>Four questions, in order. Click through them:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ScaffoldSteps</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">step</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setStep</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> labels </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">'Project name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Framework'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Bulma flavor'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Icon library'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Steps</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">step</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onStepClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setStep</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">items</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">labels</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript method function property-access" style="color:rgb(130, 170, 255)">map</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">label </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> label</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> clickable</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Step </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">step </span><span class="token operator" style="color:rgb(127, 219, 202)">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"> of 4: </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">labels</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">step</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>1. Project name</strong>: validated to be npm-compatible.</p>
<div class="language-text codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-text codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">? Project name: my-app</span><br></div></code></pre></div></div>
<p><strong>2. Framework</strong>: JavaScript or TypeScript, both on Vite.</p>
<div class="language-text codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-text codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">? Select a framework:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ❯ Vite</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Vite + TypeScript</span><br></div></code></pre></div></div>
<p><strong>3. Bulma flavor</strong>: this is the part nobody else automates.</p>
<div class="language-text codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-text codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">? Which Bulma CSS flavor would you like to use?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ❯ Complete (Recommended) - Full Bulma CSS with all components and helpers</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Prefixed - All classes prefixed with "bulma-" to avoid conflicts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    No Helpers - Core components only, no utility classes</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    No Helpers, Prefixed - Core components only with "bulma-" prefix</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    No Dark Mode - Light mode only, smaller bundle size</span><br></div></code></pre></div></div>
<p>Bulma v1 publishes several CSS distributions. Figuring out which one you want, and how to import it correctly, is exactly the kind of yak-shave that kills a Saturday. create-bestax picks the file, wires the import, and moves on.</p>
<p><strong>4. Icon library</strong>: installed and configured, not just mentioned in a README.</p>
<div class="language-text codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-text codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">? Would you like to add an icon library?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ❯ None (I'll add icons later)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Font Awesome</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Material Design Icons</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Ionicons</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Google Material Icons</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Material Symbols</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="skip-the-prompts">Skip the Prompts<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#skip-the-prompts" class="hash-link" aria-label="Direct link to Skip the Prompts" title="Direct link to Skip the Prompts" translate="no">​</a></h3>
<p>Every answer has a flag:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain"># All defaults, zero questions</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -y</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># TypeScript + Font Awesome</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -t vite-ts -i fontawesome</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Prefixed Bulma (running alongside another framework) + Material Design Icons</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -b prefixed -i mdi</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Everything specified</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -t vite-ts -b complete -i fontawesome</span><br></div></code></pre></div></div>
<table><thead><tr><th>Flag</th><th>Values</th></tr></thead><tbody><tr><td><code>-t, --template</code></td><td><code>vite</code>, <code>vite-ts</code></td></tr><tr><td><code>-b, --bulma</code></td><td><code>complete</code>, <code>prefixed</code>, <code>no-helpers</code>, <code>no-helpers-prefixed</code>, <code>no-dark-mode</code></td></tr><tr><td><code>-i, --icon</code></td><td><code>none</code>, <code>fontawesome</code>, <code>mdi</code>, <code>ionicons</code>, <code>material-icons</code>, <code>material-symbols</code></td></tr><tr><td><code>-y, --yes</code></td><td>skip all prompts</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="your-first-component">Your First Component<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#your-first-component" class="hash-link" aria-label="Direct link to Your First Component" title="Direct link to Your First Component" translate="no">​</a></h3>
<p>The scaffold drops you into a project where this already works:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ThirdPlace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">medium</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">half</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Third place never looked so good.</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Ship it</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>Typed props, Bulma helper props on every component, and no <code>style={{}}</code> in sight. Full reference at <a href="https://bestax.io/docs/api" target="_blank" rel="noopener noreferrer" class="">bestax.io/docs/api</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="a-tour-in-live-code">A Tour in Live Code<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#a-tour-in-live-code" class="hash-link" aria-label="Direct link to A Tour in Live Code" title="Direct link to A Tour in Live Code" translate="no">​</a></h2>
<p>This is the part where most framework posts show you a screenshot. Instead, here's the actual library, running in your browser, editable. Change anything you like and it re-renders as you type.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="forms">Forms<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#forms" class="hash-link" aria-label="Direct link to Forms" title="Direct link to Forms" translate="no">​</a></h3>
<p>Every form control is controlled or uncontrolled, typed, and accessible out of the box.</p>
<p><strong>Field, Control, Input</strong>: the Bulma form primitives:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Repository</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">text</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">defaultValue</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">allxsmith/bestax</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Select:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Select</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Which Bulma flavor?</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">option</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">complete</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Complete (recommended)</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">option</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">option</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">prefixed</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Prefixed</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">option</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">option</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">no-helpers</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">No helpers</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">option</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">option</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">no-dark-mode</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">No dark mode</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">option</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Select</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Switch</strong>: controlled, with a color:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SwitchDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">on</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setOn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Switch</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">checked</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">on</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setOn</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">target</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">checked</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRounded</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      Support open source: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">on </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'yes'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'also yes'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Switch</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Slider</strong> with a live output:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SliderDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setValue</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">72</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Slider</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">value</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setValue</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRounded</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">showOutput</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Enthusiasm: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text">%</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Numberinput</strong>: increment/decrement without writing the handlers:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">NumberDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setCount</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">3</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Numberinput</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">count</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setCount</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">min</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">0</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Dependencies you've never starred: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">count</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Taginput</strong>: multi-value entry, no third-party dependency:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">TagDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setTags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">'bulma'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'vite'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Taginput</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">tags</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setTags</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Add a tag...</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">2</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">grey</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">tags</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"> tags</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="feedback">Feedback<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#feedback" class="hash-link" aria-label="Direct link to Feedback" title="Direct link to Feedback" translate="no">​</a></h3>
<p><strong>Notification</strong>, dismissable:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">NotificationDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">open</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setOpen</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> open </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">hasDelete</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onDelete</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setOpen</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">false</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      Your project scaffolded successfully. Now go build something.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setOpen</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      Bring it back</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Toast</strong>: programmatic notifications with auto-dismiss:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ToastDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">show</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setShow</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setShow</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Star the repo (pretend)</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">show </span><span class="token operator" style="color:rgb(127, 219, 202)">&amp;&amp;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Toast</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">inline</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">message</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">⭐ Thank you. That genuinely helped.</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">duration</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">0</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClose</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setShow</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">false</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Dialog</strong>: confirmations without a modal library:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">DialogDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">open</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setOpen</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">danger</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setOpen</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Use only the most popular framework, forever</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dialog</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isOpen</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">open</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">title</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Are you sure?</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">message</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Monocultures are convenient right up until they aren't.</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">warning</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onConfirm</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setOpen</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">false</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onCancel</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setOpen</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">false</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Tooltip:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tooltip</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Costs nothing. Takes two seconds.</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">warning</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Why star a repo?</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tooltip</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Progress:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Progress</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">95</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">max</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">100</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Progress</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">70</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">max</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">100</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Progress</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">45</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">max</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">100</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="navigation">Navigation<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#navigation" class="hash-link" aria-label="Direct link to Navigation" title="Direct link to Navigation" translate="no">​</a></h3>
<p><strong>Tabs:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">TabsDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">tab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setTab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">'Complete'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> options </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(173, 219, 103)">'Complete'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Prefixed'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'No helpers'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tabs</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">align</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">centered</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tabs.List</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">map</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">o </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tabs.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">key</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">o</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">active</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">tab </span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">===</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> o</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">a</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setTab</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">o</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">o</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">a</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tabs.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">          </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tabs.List</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tabs</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">link</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Selected flavor: </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">tab</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Dropdown:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Pick an icon library</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Font Awesome</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Material Design Icons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Ionicons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Divider</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">None, I'll add them later</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Dropdown</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Menu:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Label</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Docs</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Label</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.List</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">active</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Getting started</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Components</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Theming</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">For AI agents</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu.List</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Menu</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Breadcrumb:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Breadcrumb</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">li</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">a</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">href</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">#</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">library</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">fa</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">home</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">ariaLabel</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">home icon</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"> Home</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">a</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">li</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">li</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">a</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">href</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">#</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">CSS frameworks</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">a</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">li</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">li</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">className</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">is-active</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">a</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">href</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">#</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Third place</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">a</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">li</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Breadcrumb</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="content--layout">Content &amp; Layout<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#content--layout" class="hash-link" aria-label="Direct link to Content &amp; Layout" title="Direct link to Content &amp; Layout" translate="no">​</a></h3>
<p><strong>Media object</strong>: the classic comment/post layout:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Media</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Media.Left</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Open Source</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">64x64</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Media.Left</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Media.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Every maintainer</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">small</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">@unpaid</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">small</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string" style="color:rgb(173, 219, 103)">' '</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">small</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">just now</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">small</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">br</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Someone opened a well-written issue with a reproduction today. I have</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        never been happier.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isMobile</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level.Left</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">library</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">fa</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">star</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">variant</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">solid</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">small</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">library</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">fa</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">code-branch</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">variant</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">solid</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">small</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">library</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">fa</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">heart</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">variant</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">solid</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">small</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level.Left</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Level</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Media.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Media</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Table:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Table</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isStriped</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isHoverable</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isFullwidth</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Thead</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Framework</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Approach</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Ships JS</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Thead</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tbody</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Tailwind</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Utility-first</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">No</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Bootstrap</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Component-first</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Yes</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Bulma</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Component-first, semantic</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">No</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tbody</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Table</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Avatars</strong>: stacked contributor row:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatars</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Ada Lovelace</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Grace Hopper</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Katherine Johnson</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Alan Turing</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatars</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Badge on an avatar:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Badge</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">content</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript number" style="color:rgb(247, 140, 108)">12</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">danger</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">overlap</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">circle</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Avatar</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Open Issues</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">64x64</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Badge</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Collapse</strong>: progressive disclosure:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Collapse</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">trigger</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">    </span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag script language-javascript tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">p</span><span class="token tag script language-javascript tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag script language-javascript tag attr-value" style="color:rgb(127, 219, 202)">3</span><span class="token tag script language-javascript tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag script language-javascript plain-text" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript plain-text" style="color:rgb(127, 219, 202)">      </span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag script language-javascript tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag script language-javascript plain-text" style="color:rgb(127, 219, 202)">Why does third place matter? (click)</span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag script language-javascript tag class-name" style="color:rgb(255, 203, 139)">Strong</span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag script language-javascript plain-text" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript plain-text" style="color:rgb(127, 219, 202)">    </span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag script language-javascript tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag script language-javascript tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">  </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">p</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">3</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      Because the alternative to third place is no third place. Once a category</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      collapses to one option, the remaining option stops having to earn you.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Collapse</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Reveal</strong>: scroll-triggered animation, no animation library:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Reveal</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">animation</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">fade-up</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">This faded up on scroll</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Zero dependencies. It's in the box.</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Reveal</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>IconText:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">IconText</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">iconProps</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> library</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'fa'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> name</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'star'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> ariaLabel</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'star'</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  Free to give, worth a lot to receive</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">IconText</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p><strong>Card, composed:</strong></p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">half</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Header.Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">create-bestax</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Header.Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">One command. React, Bulma v1, Vite, icons, done.</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tags</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">CLI</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">MIT</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tags</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Footer</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.FooterItem</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Docs</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.FooterItem</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.FooterItem</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">GitHub</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.FooterItem</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Footer</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>That's a fraction of it. There are 87 documented components at <a href="https://bestax.io/docs/api" target="_blank" rel="noopener noreferrer" class="">bestax.io/docs/api</a>, every one of them with live examples exactly like these.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="thank-you">Thank You<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#thank-you" class="hash-link" aria-label="Direct link to Thank You" title="Direct link to Thank You" translate="no">​</a></h2>
<p>Seriously. Thank you.</p>
<p>If you're reading a post about the <em>third</em> most popular CSS framework, you are already the kind of developer who evaluates tools instead of inheriting them. And if you use Bulma, or bestax-bulma, or create-bestax, you're using software that someone wrote and gave away.</p>
<p>That's true of most of your stack. The framework, the bundler, the test runner, the linter, the type checker, the package manager: free, maintained by people who mostly aren't paid for it, and used by companies that will never send them a dollar.</p>
<p>Open source works because people keep showing up. You showing up, filing the issue, reading the docs, choosing the smaller option, is what keeps the ecosystem from collapsing into three vendors and a pricing page.</p>
<p>So: thank you for supporting open source software. It's not a throwaway line. It's the actual business model.</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">title</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Thank you</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    For reading the docs before opening the issue. For the reproduction case.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    For the typo fix PR. For choosing a tool on its merits. For being here at</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    all. Genuinely, thank you.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Message</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="ways-to-support-ranked-by-effort">Ways to Support, Ranked by Effort<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#ways-to-support-ranked-by-effort" class="hash-link" aria-label="Direct link to Ways to Support, Ranked by Effort" title="Direct link to Ways to Support, Ranked by Effort" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Table</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isStriped</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isFullwidth</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Thead</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">What you can do</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cost to you</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Value to the project</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Th</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Thead</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tbody</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Star the repo</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">2 seconds, $0</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Very high</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Write about it</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">20 minutes</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Very high</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">File a good issue</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">10 minutes</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">High</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Fix a typo in the docs</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">5 minutes</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">High</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Ship a component PR</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">An afternoon</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Enormous</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Td</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tr</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tbody</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Table</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="stars-cost-nothing-theyre-worth-a-lot">Stars Cost Nothing. They're Worth a Lot.<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#stars-cost-nothing-theyre-worth-a-lot" class="hash-link" aria-label="Direct link to Stars Cost Nothing. They're Worth a Lot." title="Direct link to Stars Cost Nothing. They're Worth a Lot." translate="no">​</a></h2>
<p>Here's the most concrete thing you can do in the next ten seconds.</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">StarDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">stars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setStars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> messages </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Costs nothing.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Still costs nothing.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'A real user, starring a real project.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'This is how projects get discovered.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Now go do it on GitHub for real.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'You are the reason third place still exists. 💛'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Try it (no signup, no cost)</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Rate</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">stars</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setStars</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">large</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">warning</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">3</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">messages</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">stars</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">href</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">https://github.com/allxsmith/bestax</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">target</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">_blank</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">rel</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">noopener noreferrer</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">library</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">fa</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">star</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">ariaLabel</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">star</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">span</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Star bestax on GitHub</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">span</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">href</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">https://github.com/jgthms/bulma</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">target</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">_blank</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">rel</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">noopener noreferrer</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">          </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Icon</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">library</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">fa</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">star</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">ariaLabel</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">star</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">span</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Star Bulma on GitHub</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">span</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Buttons</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>Those stars above are a toy. They reset the moment you reload. <strong>The ones that count are two clicks away.</strong> Head over to <a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">github.com/allxsmith/bestax</a> and hit the ⭐ in the top right, then do the same for <a href="https://github.com/jgthms/bulma" target="_blank" rel="noopener noreferrer" class="">Bulma itself</a>. The buttons in the demo will take you straight there.</p>
<p><strong>Star the projects you actually use.</strong> A GitHub star costs you nothing: no money, no email, no signup, no ongoing commitment. But for a legitimate open source project, stars are load-bearing:</p>
<ul>
<li class=""><strong>Discovery.</strong> GitHub search, trending pages, and "most starred" lists are ranked by stars. So are a lot of the "best X library" blog posts that developers actually read.</li>
<li class=""><strong>Trust.</strong> Star count is the first thing an engineer checks before adopting a dependency, and the first thing they show their team lead when justifying it.</li>
<li class=""><strong>Training data and recommendations.</strong> Popularity signals feed the tools that now answer "which library should I use?" for millions of developers.</li>
<li class=""><strong>Momentum.</strong> Stars bring contributors, contributors bring features, features bring users. It compounds.</li>
</ul>
<p>The important qualifier: <strong>when legitimate projects receive them.</strong> Bought stars, star-for-star rings, and engagement farms poison the signal for everyone, and they're why the metric gets dismissed. The fix isn't to abandon stars; it's for real users to star real projects they've genuinely used. That's what makes the number mean something again.</p>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Ten seconds, no cost, real impact</div><div class="admonitionContent_bqRL"><p>If Bulma, bestax-bulma, or create-bestax has saved you time:</p><p>⭐ <strong><a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">github.com/allxsmith/bestax</a></strong>
⭐ <strong><a href="https://github.com/jgthms/bulma" target="_blank" rel="noopener noreferrer" class="">github.com/jgthms/bulma</a></strong></p><p>And then go star the other five dependencies in your <code>package.json</code> that you've never thanked anyone for.</p></div></div>
<p>I maintain this ecosystem (the component library, the CLI, the docs, the examples, the AI skills) largely on stars and Diet Coke. The Diet Coke I can buy myself.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="diversity-is-the-thing-ai-is-quietly-eating">Diversity Is the Thing AI Is Quietly Eating<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#diversity-is-the-thing-ai-is-quietly-eating" class="hash-link" aria-label="Direct link to Diversity Is the Thing AI Is Quietly Eating" title="Direct link to Diversity Is the Thing AI Is Quietly Eating" translate="no">​</a></h2>
<p>Now the part I actually want to talk about.</p>
<p>AI coding assistants are extraordinary. I use them daily; this project ships Agent Skills specifically so they can use bestax-bulma well. This is not an anti-AI post.</p>
<p>But there's a feedback loop forming, and it's worth naming.</p>
<p>An AI assistant recommends what's most represented in its training data. What's most represented is what's most popular. What gets recommended becomes more popular. Which means it's more represented next time. <strong>Popularity now compounds automatically, without a human ever comparing two options.</strong></p>
<p>Before AI assistants, a developer picking a CSS framework read a few blog posts, skimmed three docs sites, and made a call. Some of them picked the third option because it fit better. That's how alternatives survived: a steady trickle of people actually evaluating.</p>
<p>Now the default path is "ask the assistant," and the assistant, reasonably and statistically, says the most popular thing. Multiply that by millions of scaffolded projects and the long tail stops getting watered. Not because it's worse. Because nobody's asking anymore.</p>
<p>Here's that loop, one step at a time:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">FeedbackLoop</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">step</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setStep</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> stages </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      label</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Popular'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      text</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'One option has the most tutorials, posts, and repos.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      color</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'info'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      label</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Represented'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      text</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'So it dominates what the assistants learned from.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      color</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'info'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      label</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Recommended'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      text</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'So it is what gets suggested, by default, every time.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      color</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'warning'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      label</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'More popular'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      text</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'So it gets adopted more, and the loop tightens.'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      color</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'danger'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> current </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> stages</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">step</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Steps</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">step</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">current</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">color</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onStepClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setStep</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">items</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">stages</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript method function property-access" style="color:rgb(130, 170, 255)">map</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">s </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> label</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> s</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">label</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> clickable</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">current</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">color</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isLight</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">current</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">text</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Notification</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>The endpoint of that loop is a monoculture: one framework per category, permanently, because the recommendation engine can't recommend what nobody's writing about, and nobody writes about what nobody uses.</p>
<p>That's bad even if you like the winner:</p>
<ul>
<li class=""><strong>Monocultures don't innovate.</strong> Bulma didn't get CSS Grid support and HSL theming because it was winning. It got them because it had to stay worth choosing.</li>
<li class=""><strong>Monocultures are fragile.</strong> One license change, one acquisition, one abandoned repo, and an entire category of the web has no plan B.</li>
<li class=""><strong>Monocultures set the price.</strong> "Free and open" holds as long as there's somewhere else to go.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="what-actually-helps">What Actually Helps<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#what-actually-helps" class="hash-link" aria-label="Direct link to What Actually Helps" title="Direct link to What Actually Helps" translate="no">​</a></h3>
<p>None of this is fixed by complaining about AI. It's fixed by feeding the signal:</p>
<ol>
<li class=""><strong>Write about the tools you use.</strong> A blog post, a Stack Overflow answer, a README, a comment in a thread. Text is the substrate now. If your framework isn't written about, it doesn't exist to the next model.</li>
<li class=""><strong>Star and link.</strong> Both are signals. Both are free. Both take seconds.</li>
<li class=""><strong>Evaluate at least once.</strong> Before you accept a scaffold recommendation, spend five minutes on the second and third options. You'll sometimes change your mind, and even when you don't, you've made a real choice instead of an inherited one.</li>
<li class=""><strong>Teach your assistant.</strong> Point it at real docs. This is the reasoning behind the typed components, the <a href="https://bestax.io/docs/guides/llms" target="_blank" rel="noopener noreferrer" class="">LLM index</a> and the Agent Skills described at the top of this post: an assistant that can read a real API will happily use Bulma. The gap is availability, not capability.</li>
<li class=""><strong>Contribute upstream.</strong> Issues, docs fixes, examples. Every one of them is a durable artifact that outlives the conversation.</li>
</ol>
<p>The two futures, side by side. <code>display="flex"</code> on each column and <code>flexGrow="1"</code> on the box keep the cards the same height no matter how much text they hold:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">display</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">flex</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">flexGrow</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">1</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">danger</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Monoculture</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tags</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">danger</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">One option</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tags</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        No pressure to improve. No fallback if it changes. No leverage when the</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        license does.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">display</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">flex</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">flexGrow</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">1</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Ecosystem</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tags</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Tailwind</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Bootstrap</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Bulma</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">…and the long tail</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tag</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Tags</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Every option has to stay worth choosing.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<p>Third place stays on the board because people keep choosing it on purpose. That's the whole mechanism. It doesn't survive on merit alone.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="get-started">Get Started<a href="https://bestax.io/blog/2026/07/28/bulma-3-css-framework-ai-will-never-tell-you-about-it#get-started" class="hash-link" aria-label="Direct link to Get Started" title="Direct link to Get Started" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cd my-app</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm install</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm run dev</span><br></div></code></pre></div></div>
<ul>
<li class=""><strong>Docs</strong>: <a href="https://bestax.io/" target="_blank" rel="noopener noreferrer" class="">bestax.io</a></li>
<li class=""><strong>Components</strong>: <a href="https://bestax.io/docs/api" target="_blank" rel="noopener noreferrer" class="">bestax.io/docs/api</a></li>
<li class=""><strong>Getting started</strong>: <a href="https://bestax.io/docs/guides/getting-started" target="_blank" rel="noopener noreferrer" class="">bestax.io/docs/guides/getting-started</a></li>
<li class=""><strong>For AI agents</strong>: <a href="https://bestax.io/docs/guides/llms" target="_blank" rel="noopener noreferrer" class="">bestax.io/docs/guides/llms</a></li>
<li class=""><strong>npm</strong>: <a href="https://www.npmjs.com/package/create-bestax" target="_blank" rel="noopener noreferrer" class="">create-bestax</a> · <a href="https://www.npmjs.com/package/@allxsmith/bestax-bulma" target="_blank" rel="noopener noreferrer" class="">@allxsmith/bestax-bulma</a></li>
<li class=""><strong>Star it</strong>: <a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">github.com/allxsmith/bestax</a></li>
</ul>
<hr>
<p><strong>Questions?</strong> <a href="https://github.com/allxsmith/bestax/issues" target="_blank" rel="noopener noreferrer" class="">Open an issue</a> or <a href="https://github.com/allxsmith/bestax/discussions" target="_blank" rel="noopener noreferrer" class="">start a discussion</a>.</p>
<p><strong>Want to contribute?</strong> PRs welcome. See the <a href="https://github.com/allxsmith/bestax/blob/main/CONTRIBUTING.md" target="_blank" rel="noopener noreferrer" class="">contributing guide</a>.</p>
<p>Congrats on being different. Now go build something.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="bulma" term="bulma"/>
        <category label="css" term="css"/>
        <category label="react" term="react"/>
        <category label="create-bestax" term="create-bestax"/>
        <category label="opensource" term="opensource"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The State of React — July 2026]]></title>
        <id>https://bestax.io/blog/state-of-react-2026-07</id>
        <link href="https://bestax.io/blog/state-of-react-2026-07"/>
        <updated>2026-07-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A dated, linkable snapshot comparing bestax against Mantine, MUI, Chakra UI, shadcn/ui, React-Bootstrap, and react-bulma-components — capability by capability, with every cell linking to the real docs.]]></summary>
        <content type="html"><![CDATA[<img class="sor-cover" src="https://bestax.io/img/state-of-react/2026-07.svg" alt="The State of React — July 2026: React component libraries, compared">
<p>Picking a React component library is one of the bigger architectural calls in a project, and the honest answer to “which one” depends entirely on what you’re building. We maintain <a class="" href="https://bestax.io/docs/intro">bestax</a>, a component library for Bulma v1, so we spend a lot of time studying the field. This post maps it out <strong>fairly and in the open</strong>: every user-facing capability across seven React libraries, with each cell linking straight to that library’s own documentation so you can check our work.</p>
<p>It’s a point-in-time capture — the first edition of a series we’ll refresh regularly. We’re calling it <em>The State of React</em>, with a nod to Armin’s long-running radio show. Over time we’d like it to grow into a wider read on the React ecosystem; for now, it stays focused on <strong>component libraries</strong>.</p>
<div class="theme-admonition theme-admonition-info admonition_QWZn alert alert--info"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Snapshot — July 2026</div><div class="admonitionContent_bqRL"><p>The table below reflects each library <strong>as of July 27, 2026</strong>. Component catalogs move fast — the <a class="" href="https://bestax.io/blog/tags/state-of-react">latest edition of <em>The State of React</em></a> always has the freshest data.</p></div></div>
<p>In the ring: <strong><a class="" href="https://bestax.io/docs/intro">bestax</a></strong> (Bulma v1), <strong><a href="https://react-bulma.dev/" target="_blank" rel="noopener noreferrer" class="">react-bulma-components</a></strong> (the other Bulma wrapper), <strong><a href="https://mantine.dev/" target="_blank" rel="noopener noreferrer" class="">Mantine</a></strong>, <strong><a href="https://mui.com/" target="_blank" rel="noopener noreferrer" class="">MUI</a></strong>, <strong><a href="https://chakra-ui.com/" target="_blank" rel="noopener noreferrer" class="">Chakra UI</a></strong>, <strong><a href="https://ui.shadcn.com/" target="_blank" rel="noopener noreferrer" class="">shadcn/ui</a></strong>, and <strong><a href="https://react-bootstrap.netlify.app/" target="_blank" rel="noopener noreferrer" class="">React-Bootstrap</a></strong>.</p>
<p>Each row is a capability; read across to see who ships it. <strong>✓</strong> is a dedicated component, <strong>◐</strong> is available via a prop or by composition, and a muted dash means no first-party equivalent. The columns are abbreviated (hover a header for the full name); <strong>hover any cell for the component name, or click it</strong> to open that component’s docs.</p>
<div class="root_qFXu sor-comparison"><div class="meta_tYVT"><span class="asOf_VJ_o">Data as of <strong>July 27, 2026</strong></span><span class="latest_QtiZ">A newer edition may exist —<!-- --> <a href="https://bestax.io/blog/tags/state-of-react">see the latest edition</a>.</span></div><div class="legend_K980"><span><span class="glyph_WTJt full_p2Zz">✓</span> <!-- -->Dedicated component</span><span><span class="glyph_WTJt partial_gOIh">◐</span> <!-- -->Via prop / composition</span><span><span class="glyph_WTJt none_kx7u">–</span> <!-- -->None</span><span class="legendNote_xKSK">Hover a cell for the component name; click it to open the docs.</span></div><div class="tableWrap_in3N"><table class="table_D9BQ"><thead><tr><th class="headCell_PXIU capCol_zAfS">Capability</th><th class="headCell_PXIU libCol_MgLV" style="--lib-color:#00b89c" title="bestax"><span class="libLabel_kzUc">bestax</span></th><th class="headCell_PXIU libCol_MgLV" style="--lib-color:#c99700" title="react-bulma-components"><span class="libLabel_kzUc">r-bulma</span></th><th class="headCell_PXIU libCol_MgLV" style="--lib-color:#4c6ef5" title="Mantine"><span class="libLabel_kzUc">Mantine</span></th><th class="headCell_PXIU libCol_MgLV" style="--lib-color:#1e88e5" title="MUI"><span class="libLabel_kzUc">MUI</span></th><th class="headCell_PXIU libCol_MgLV" style="--lib-color:#2f9e91" title="Chakra UI"><span class="libLabel_kzUc">Chakra</span></th><th class="headCell_PXIU libCol_MgLV" style="--lib-color:#6b7280" title="shadcn/ui"><span class="libLabel_kzUc">shadcn</span></th><th class="headCell_PXIU libCol_MgLV" style="--lib-color:#7952b3" title="React-Bootstrap"><span class="libLabel_kzUc">R-Bootstrap</span></th></tr></thead><tbody><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Buttons &amp; actions</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Button</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Button — dedicated component" aria-label="bestax Button — dedicated component" href="https://bestax.io/docs/api/elements/button"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Button — dedicated component" aria-label="react-bulma-components Button — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/button/" class="cellLink_zI0g" title="Mantine Button — dedicated component" aria-label="Mantine Button — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-button/" class="cellLink_zI0g" title="MUI Button — dedicated component" aria-label="MUI Button — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/button" class="cellLink_zI0g" title="Chakra UI Button — dedicated component" aria-label="Chakra UI Button — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Button — dedicated component" aria-label="shadcn/ui Button — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/buttons/" class="cellLink_zI0g" title="React-Bootstrap Button — dedicated component" aria-label="React-Bootstrap Button — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Button group</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Buttons — dedicated component" aria-label="bestax Buttons — dedicated component" href="https://bestax.io/docs/api/elements/buttons"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Button.Group — dedicated component" aria-label="react-bulma-components Button.Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/button/" class="cellLink_zI0g" title="Mantine Button.Group — dedicated component" aria-label="Mantine Button.Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-button-group/" class="cellLink_zI0g" title="MUI ButtonGroup — dedicated component" aria-label="MUI ButtonGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/group" class="cellLink_zI0g" title="Chakra UI Group — dedicated component" aria-label="Chakra UI Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui ButtonGroup — dedicated component" aria-label="shadcn/ui ButtonGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/button-group/" class="cellLink_zI0g" title="React-Bootstrap ButtonGroup — dedicated component" aria-label="React-Bootstrap ButtonGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Icon button</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Button — via prop or composition" aria-label="bestax Button — via prop or composition" href="https://bestax.io/docs/api/elements/button"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Button — via prop or composition" aria-label="react-bulma-components Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/action-icon/" class="cellLink_zI0g" title="Mantine ActionIcon — dedicated component" aria-label="Mantine ActionIcon — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-button/" class="cellLink_zI0g" title="MUI IconButton — dedicated component" aria-label="MUI IconButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/icon-button" class="cellLink_zI0g" title="Chakra UI IconButton — dedicated component" aria-label="Chakra UI IconButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Button — via prop or composition" aria-label="shadcn/ui Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Close / delete button</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Delete — dedicated component" aria-label="bestax Delete — dedicated component" href="https://bestax.io/docs/api/elements/delete"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Delete — dedicated component" aria-label="react-bulma-components Delete — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/close-button/" class="cellLink_zI0g" title="Mantine CloseButton — dedicated component" aria-label="Mantine CloseButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-button/" class="cellLink_zI0g" title="MUI IconButton — via prop or composition" aria-label="MUI IconButton — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/close-button" class="cellLink_zI0g" title="Chakra UI CloseButton — dedicated component" aria-label="Chakra UI CloseButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Button — via prop or composition" aria-label="shadcn/ui Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/close-button/" class="cellLink_zI0g" title="React-Bootstrap CloseButton — dedicated component" aria-label="React-Bootstrap CloseButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Copy button</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/copy-button/" class="cellLink_zI0g" title="Mantine CopyButton — dedicated component" aria-label="Mantine CopyButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/clipboard" class="cellLink_zI0g" title="Chakra UI Clipboard — dedicated component" aria-label="Chakra UI Clipboard — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">File-trigger button</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/file-button/" class="cellLink_zI0g" title="Mantine FileButton — dedicated component" aria-label="Mantine FileButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/file-upload" class="cellLink_zI0g" title="Chakra UI FileUpload — via prop or composition" aria-label="Chakra UI FileUpload — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Toggle button</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/chip/" class="cellLink_zI0g" title="Mantine Chip — via prop or composition" aria-label="Mantine Chip — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-toggle-button/" class="cellLink_zI0g" title="MUI ToggleButton — dedicated component" aria-label="MUI ToggleButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Toggle — dedicated component" aria-label="shadcn/ui Toggle — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/buttons/" class="cellLink_zI0g" title="React-Bootstrap ToggleButton — dedicated component" aria-label="React-Bootstrap ToggleButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Segmented / toggle group</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/segmented-control/" class="cellLink_zI0g" title="Mantine SegmentedControl — dedicated component" aria-label="Mantine SegmentedControl — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-toggle-button/" class="cellLink_zI0g" title="MUI ToggleButtonGroup — dedicated component" aria-label="MUI ToggleButtonGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/segment-group" class="cellLink_zI0g" title="Chakra UI SegmentGroup — dedicated component" aria-label="Chakra UI SegmentGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui ToggleGroup — dedicated component" aria-label="shadcn/ui ToggleGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/buttons/" class="cellLink_zI0g" title="React-Bootstrap ToggleButtonGroup — dedicated component" aria-label="React-Bootstrap ToggleButtonGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Split button</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/menu/" class="cellLink_zI0g" title="Mantine Menu — via prop or composition" aria-label="Mantine Menu — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-button-group/" class="cellLink_zI0g" title="MUI ButtonGroup — via prop or composition" aria-label="MUI ButtonGroup — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/menu" class="cellLink_zI0g" title="Chakra UI Menu — via prop or composition" aria-label="Chakra UI Menu — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui DropdownMenu — via prop or composition" aria-label="shadcn/ui DropdownMenu — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/dropdowns/" class="cellLink_zI0g" title="React-Bootstrap SplitButton — dedicated component" aria-label="React-Bootstrap SplitButton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Floating action button</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-floating-action-button/" class="cellLink_zI0g" title="MUI Fab — dedicated component" aria-label="MUI Fab — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Speed dial</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-speed-dial/" class="cellLink_zI0g" title="MUI SpeedDial — dedicated component" aria-label="MUI SpeedDial — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Link-styled button</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax LinkButton — dedicated component" aria-label="bestax LinkButton — dedicated component" href="https://bestax.io/docs/api/elements/linkbutton"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Button — via prop or composition" aria-label="react-bulma-components Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/button/" class="cellLink_zI0g" title="Mantine Button — via prop or composition" aria-label="Mantine Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-button/" class="cellLink_zI0g" title="MUI Button — via prop or composition" aria-label="MUI Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/button" class="cellLink_zI0g" title="Chakra UI Button — via prop or composition" aria-label="Chakra UI Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Button — via prop or composition" aria-label="shadcn/ui Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/buttons/" class="cellLink_zI0g" title="React-Bootstrap Button — via prop or composition" aria-label="React-Bootstrap Button — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Inputs &amp; form controls</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Text input</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Input — dedicated component" aria-label="bestax Input — dedicated component" href="https://bestax.io/docs/api/form/input"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Input — dedicated component" aria-label="react-bulma-components Input — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/text-input/" class="cellLink_zI0g" title="Mantine TextInput — dedicated component" aria-label="Mantine TextInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-text-field/" class="cellLink_zI0g" title="MUI TextField — dedicated component" aria-label="MUI TextField — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/input" class="cellLink_zI0g" title="Chakra UI Input — dedicated component" aria-label="Chakra UI Input — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Input — dedicated component" aria-label="shadcn/ui Input — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/form-control/" class="cellLink_zI0g" title="React-Bootstrap Form.Control — dedicated component" aria-label="React-Bootstrap Form.Control — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Textarea</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax TextArea — dedicated component" aria-label="bestax TextArea — dedicated component" href="https://bestax.io/docs/api/form/textarea"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Textarea — dedicated component" aria-label="react-bulma-components Textarea — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/textarea/" class="cellLink_zI0g" title="Mantine Textarea — dedicated component" aria-label="Mantine Textarea — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-text-field/" class="cellLink_zI0g" title="MUI TextField — dedicated component" aria-label="MUI TextField — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/textarea" class="cellLink_zI0g" title="Chakra UI Textarea — dedicated component" aria-label="Chakra UI Textarea — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Textarea — dedicated component" aria-label="shadcn/ui Textarea — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/form-control/" class="cellLink_zI0g" title="React-Bootstrap Form.Control — dedicated component" aria-label="React-Bootstrap Form.Control — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Number input (steppers)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Numberinput — dedicated component" aria-label="bestax Numberinput — dedicated component" href="https://bestax.io/docs/api/form/numberinput"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/number-input/" class="cellLink_zI0g" title="Mantine NumberInput — dedicated component" aria-label="Mantine NumberInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/number-input" class="cellLink_zI0g" title="Chakra UI NumberInput — dedicated component" aria-label="Chakra UI NumberInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Password input</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/password-input/" class="cellLink_zI0g" title="Mantine PasswordInput — dedicated component" aria-label="Mantine PasswordInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Checkbox</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Checkbox — dedicated component" aria-label="bestax Checkbox — dedicated component" href="https://bestax.io/docs/api/form/checkbox"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Checkbox — dedicated component" aria-label="react-bulma-components Checkbox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/checkbox/" class="cellLink_zI0g" title="Mantine Checkbox — dedicated component" aria-label="Mantine Checkbox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-checkbox/" class="cellLink_zI0g" title="MUI Checkbox — dedicated component" aria-label="MUI Checkbox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/checkbox" class="cellLink_zI0g" title="Chakra UI Checkbox — dedicated component" aria-label="Chakra UI Checkbox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Checkbox — dedicated component" aria-label="shadcn/ui Checkbox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/checks-radios/" class="cellLink_zI0g" title="React-Bootstrap Form.Check — dedicated component" aria-label="React-Bootstrap Form.Check — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Checkbox group</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Checkboxes — dedicated component" aria-label="bestax Checkboxes — dedicated component" href="https://bestax.io/docs/api/form/checkboxes"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/checkbox/" class="cellLink_zI0g" title="Mantine Checkbox.Group — dedicated component" aria-label="Mantine Checkbox.Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-checkbox/" class="cellLink_zI0g" title="MUI FormGroup — via prop or composition" aria-label="MUI FormGroup — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/checkbox" class="cellLink_zI0g" title="Chakra UI Checkbox.Group — dedicated component" aria-label="Chakra UI Checkbox.Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Radio</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Radio — dedicated component" aria-label="bestax Radio — dedicated component" href="https://bestax.io/docs/api/form/radio"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Radio — dedicated component" aria-label="react-bulma-components Radio — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/radio/" class="cellLink_zI0g" title="Mantine Radio — dedicated component" aria-label="Mantine Radio — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-radio-button/" class="cellLink_zI0g" title="MUI Radio — dedicated component" aria-label="MUI Radio — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/radio-group" class="cellLink_zI0g" title="Chakra UI RadioGroup — dedicated component" aria-label="Chakra UI RadioGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui RadioGroup — dedicated component" aria-label="shadcn/ui RadioGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/checks-radios/" class="cellLink_zI0g" title="React-Bootstrap Form.Check — dedicated component" aria-label="React-Bootstrap Form.Check — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Radio group</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Radios — dedicated component" aria-label="bestax Radios — dedicated component" href="https://bestax.io/docs/api/form/radios"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/radio/" class="cellLink_zI0g" title="Mantine Radio.Group — dedicated component" aria-label="Mantine Radio.Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-radio-button/" class="cellLink_zI0g" title="MUI RadioGroup — dedicated component" aria-label="MUI RadioGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/radio-group" class="cellLink_zI0g" title="Chakra UI RadioGroup — dedicated component" aria-label="Chakra UI RadioGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui RadioGroup — dedicated component" aria-label="shadcn/ui RadioGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Switch</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Switch — dedicated component" aria-label="bestax Switch — dedicated component" href="https://bestax.io/docs/api/form/switch"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/switch/" class="cellLink_zI0g" title="Mantine Switch — dedicated component" aria-label="Mantine Switch — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-switch/" class="cellLink_zI0g" title="MUI Switch — dedicated component" aria-label="MUI Switch — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/switch" class="cellLink_zI0g" title="Chakra UI Switch — dedicated component" aria-label="Chakra UI Switch — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Switch — dedicated component" aria-label="shadcn/ui Switch — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/checks-radios/" class="cellLink_zI0g" title="React-Bootstrap Form.Check — dedicated component" aria-label="React-Bootstrap Form.Check — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Select</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Select — dedicated component" aria-label="bestax Select — dedicated component" href="https://bestax.io/docs/api/form/select"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Select — dedicated component" aria-label="react-bulma-components Select — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/select/" class="cellLink_zI0g" title="Mantine Select — dedicated component" aria-label="Mantine Select — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-select/" class="cellLink_zI0g" title="MUI Select — dedicated component" aria-label="MUI Select — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/select" class="cellLink_zI0g" title="Chakra UI Select — dedicated component" aria-label="Chakra UI Select — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Select — dedicated component" aria-label="shadcn/ui Select — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/select/" class="cellLink_zI0g" title="React-Bootstrap Form.Select — dedicated component" aria-label="React-Bootstrap Form.Select — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Multi-select</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Select — via prop or composition" aria-label="bestax Select — via prop or composition" href="https://bestax.io/docs/api/form/select"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/multi-select/" class="cellLink_zI0g" title="Mantine MultiSelect — dedicated component" aria-label="Mantine MultiSelect — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-select/" class="cellLink_zI0g" title="MUI Select — via prop or composition" aria-label="MUI Select — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/select" class="cellLink_zI0g" title="Chakra UI Select — via prop or composition" aria-label="Chakra UI Select — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Autocomplete</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Autocomplete — dedicated component" aria-label="bestax Autocomplete — dedicated component" href="https://bestax.io/docs/api/form/autocomplete"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/autocomplete/" class="cellLink_zI0g" title="Mantine Autocomplete — dedicated component" aria-label="Mantine Autocomplete — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-autocomplete/" class="cellLink_zI0g" title="MUI Autocomplete — dedicated component" aria-label="MUI Autocomplete — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/combobox" class="cellLink_zI0g" title="Chakra UI Combobox — dedicated component" aria-label="Chakra UI Combobox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Combobox — dedicated component" aria-label="shadcn/ui Combobox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Combobox (headless)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/combobox/" class="cellLink_zI0g" title="Mantine Combobox — dedicated component" aria-label="Mantine Combobox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/combobox" class="cellLink_zI0g" title="Chakra UI Combobox — dedicated component" aria-label="Chakra UI Combobox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Combobox — dedicated component" aria-label="shadcn/ui Combobox — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Tag / token input</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Taginput — dedicated component" aria-label="bestax Taginput — dedicated component" href="https://bestax.io/docs/api/form/taginput"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/tags-input/" class="cellLink_zI0g" title="Mantine TagsInput — dedicated component" aria-label="Mantine TagsInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-autocomplete/" class="cellLink_zI0g" title="MUI Autocomplete — via prop or composition" aria-label="MUI Autocomplete — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/combobox" class="cellLink_zI0g" title="Chakra UI Combobox — via prop or composition" aria-label="Chakra UI Combobox — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Pills input (multi-value)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/pills-input/" class="cellLink_zI0g" title="Mantine PillsInput — dedicated component" aria-label="Mantine PillsInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">PIN / OTP input</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/pin-input/" class="cellLink_zI0g" title="Mantine PinInput — dedicated component" aria-label="Mantine PinInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/pin-input" class="cellLink_zI0g" title="Chakra UI PinInput — dedicated component" aria-label="Chakra UI PinInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui InputOTP — dedicated component" aria-label="shadcn/ui InputOTP — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">JSON input</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/json-input/" class="cellLink_zI0g" title="Mantine JsonInput — dedicated component" aria-label="Mantine JsonInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Slider</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Slider — dedicated component" aria-label="bestax Slider — dedicated component" href="https://bestax.io/docs/api/form/slider"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/slider/" class="cellLink_zI0g" title="Mantine Slider — dedicated component" aria-label="Mantine Slider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-slider/" class="cellLink_zI0g" title="MUI Slider — dedicated component" aria-label="MUI Slider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/slider" class="cellLink_zI0g" title="Chakra UI Slider — dedicated component" aria-label="Chakra UI Slider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Slider — dedicated component" aria-label="shadcn/ui Slider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/range/" class="cellLink_zI0g" title="React-Bootstrap Form.Range — dedicated component" aria-label="React-Bootstrap Form.Range — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Range slider (dual thumb)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Slider — via prop or composition" aria-label="bestax Slider — via prop or composition" href="https://bestax.io/docs/api/form/slider"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/slider/" class="cellLink_zI0g" title="Mantine RangeSlider — dedicated component" aria-label="Mantine RangeSlider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-slider/" class="cellLink_zI0g" title="MUI Slider — via prop or composition" aria-label="MUI Slider — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/slider" class="cellLink_zI0g" title="Chakra UI Slider — via prop or composition" aria-label="Chakra UI Slider — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Slider — via prop or composition" aria-label="shadcn/ui Slider — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Angle slider</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/angle-slider/" class="cellLink_zI0g" title="Mantine AngleSlider — dedicated component" aria-label="Mantine AngleSlider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Rating</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Rate — dedicated component" aria-label="bestax Rate — dedicated component" href="https://bestax.io/docs/api/form/rate"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/rating/" class="cellLink_zI0g" title="Mantine Rating — dedicated component" aria-label="Mantine Rating — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-rating/" class="cellLink_zI0g" title="MUI Rating — dedicated component" aria-label="MUI Rating — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/rating-group" class="cellLink_zI0g" title="Chakra UI RatingGroup — dedicated component" aria-label="Chakra UI RatingGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Color input</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/color-input/" class="cellLink_zI0g" title="Mantine ColorInput — dedicated component" aria-label="Mantine ColorInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/color-picker" class="cellLink_zI0g" title="Chakra UI ColorPicker — dedicated component" aria-label="Chakra UI ColorPicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Color picker (palette)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/color-picker/" class="cellLink_zI0g" title="Mantine ColorPicker — dedicated component" aria-label="Mantine ColorPicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/color-picker" class="cellLink_zI0g" title="Chakra UI ColorPicker — dedicated component" aria-label="Chakra UI ColorPicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">File input</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax File — dedicated component" aria-label="bestax File — dedicated component" href="https://bestax.io/docs/api/form/file"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components InputFile — dedicated component" aria-label="react-bulma-components InputFile — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/file-input/" class="cellLink_zI0g" title="Mantine FileInput — dedicated component" aria-label="Mantine FileInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-button/" class="cellLink_zI0g" title="MUI Button + input — via prop or composition" aria-label="MUI Button + input — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/file-upload" class="cellLink_zI0g" title="Chakra UI FileUpload — dedicated component" aria-label="Chakra UI FileUpload — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/form-control/" class="cellLink_zI0g" title="React-Bootstrap Form.Control — dedicated component" aria-label="React-Bootstrap Form.Control — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Fieldset</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/fieldset/" class="cellLink_zI0g" title="Mantine Fieldset — dedicated component" aria-label="Mantine Fieldset — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-text-field/" class="cellLink_zI0g" title="MUI FormControl — via prop or composition" aria-label="MUI FormControl — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/fieldset" class="cellLink_zI0g" title="Chakra UI Fieldset — dedicated component" aria-label="Chakra UI Fieldset — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Field — via prop or composition" aria-label="shadcn/ui Field — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Field (label+control+error)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Field — dedicated component" aria-label="bestax Field — dedicated component" href="https://bestax.io/docs/api/form/field"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Field — dedicated component" aria-label="react-bulma-components Field — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/input/" class="cellLink_zI0g" title="Mantine Input.Wrapper — dedicated component" aria-label="Mantine Input.Wrapper — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-text-field/" class="cellLink_zI0g" title="MUI FormControl — via prop or composition" aria-label="MUI FormControl — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/field" class="cellLink_zI0g" title="Chakra UI Field — dedicated component" aria-label="Chakra UI Field — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Field — dedicated component" aria-label="shadcn/ui Field — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/form-group/" class="cellLink_zI0g" title="React-Bootstrap Form.Group — dedicated component" aria-label="React-Bootstrap Form.Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Input addons / adornments</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Control — dedicated component" aria-label="bestax Control — dedicated component" href="https://bestax.io/docs/api/form/control"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Control — dedicated component" aria-label="react-bulma-components Control — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/input/" class="cellLink_zI0g" title="Mantine Input — via prop or composition" aria-label="Mantine Input — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-text-field/" class="cellLink_zI0g" title="MUI InputAdornment — dedicated component" aria-label="MUI InputAdornment — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/input-addon" class="cellLink_zI0g" title="Chakra UI InputAddon — dedicated component" aria-label="Chakra UI InputAddon — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui InputGroup — dedicated component" aria-label="shadcn/ui InputGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/input-group/" class="cellLink_zI0g" title="React-Bootstrap InputGroup — dedicated component" aria-label="React-Bootstrap InputGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Floating label</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-text-field/" class="cellLink_zI0g" title="MUI TextField — via prop or composition" aria-label="MUI TextField — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/forms/floating-labels/" class="cellLink_zI0g" title="React-Bootstrap FloatingLabel — dedicated component" aria-label="React-Bootstrap FloatingLabel — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Date &amp; time</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Date input</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax DateInput — dedicated component" aria-label="bestax DateInput — dedicated component" href="https://bestax.io/docs/api/form/datetime/dateinput"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/dates/date-input/" class="cellLink_zI0g" title="Mantine DateInput — dedicated component" aria-label="Mantine DateInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-date-pickers/" class="cellLink_zI0g" title="MUI DateField — dedicated component" aria-label="MUI DateField — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui DatePicker — dedicated component" aria-label="shadcn/ui DatePicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Date picker (popover)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax DateInput — dedicated component" aria-label="bestax DateInput — dedicated component" href="https://bestax.io/docs/api/form/datetime/dateinput"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/dates/date-picker-input/" class="cellLink_zI0g" title="Mantine DatePickerInput — dedicated component" aria-label="Mantine DatePickerInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-date-pickers/" class="cellLink_zI0g" title="MUI DatePicker — dedicated component" aria-label="MUI DatePicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui DatePicker — dedicated component" aria-label="shadcn/ui DatePicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Date range picker</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/dates/date-picker-input/" class="cellLink_zI0g" title="Mantine DatePickerInput — dedicated component" aria-label="Mantine DatePickerInput — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-date-pickers/" class="cellLink_zI0g" title="MUI DateRangePicker — dedicated component" aria-label="MUI DateRangePicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui DatePicker — via prop or composition" aria-label="shadcn/ui DatePicker — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Date-time picker</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax DateTimeInput — dedicated component" aria-label="bestax DateTimeInput — dedicated component" href="https://bestax.io/docs/api/form/datetime/datetimeinput"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/dates/date-time-picker/" class="cellLink_zI0g" title="Mantine DateTimePicker — dedicated component" aria-label="Mantine DateTimePicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-date-pickers/" class="cellLink_zI0g" title="MUI DateTimePicker — dedicated component" aria-label="MUI DateTimePicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Time input / picker</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax TimeInput — dedicated component" aria-label="bestax TimeInput — dedicated component" href="https://bestax.io/docs/api/form/datetime/timeinput"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/dates/time-picker/" class="cellLink_zI0g" title="Mantine TimePicker — dedicated component" aria-label="Mantine TimePicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-date-pickers/" class="cellLink_zI0g" title="MUI TimePicker — dedicated component" aria-label="MUI TimePicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Calendar (inline)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/dates/calendar/" class="cellLink_zI0g" title="Mantine Calendar — dedicated component" aria-label="Mantine Calendar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-date-pickers/" class="cellLink_zI0g" title="MUI DateCalendar — dedicated component" aria-label="MUI DateCalendar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Calendar — dedicated component" aria-label="shadcn/ui Calendar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Month picker</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/dates/month-picker/" class="cellLink_zI0g" title="Mantine MonthPicker — dedicated component" aria-label="Mantine MonthPicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-date-pickers/" class="cellLink_zI0g" title="MUI DatePicker — via prop or composition" aria-label="MUI DatePicker — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Year picker</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/dates/year-picker/" class="cellLink_zI0g" title="Mantine YearPicker — dedicated component" aria-label="Mantine YearPicker — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-date-pickers/" class="cellLink_zI0g" title="MUI DatePicker — via prop or composition" aria-label="MUI DatePicker — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Navigation</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Navbar / app bar</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Navbar — dedicated component" aria-label="bestax Navbar — dedicated component" href="https://bestax.io/docs/api/components/navbar"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Navbar — dedicated component" aria-label="react-bulma-components Navbar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/app-shell/" class="cellLink_zI0g" title="Mantine AppShell — via prop or composition" aria-label="Mantine AppShell — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-app-bar/" class="cellLink_zI0g" title="MUI AppBar — dedicated component" aria-label="MUI AppBar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/navbar/" class="cellLink_zI0g" title="React-Bootstrap Navbar — dedicated component" aria-label="React-Bootstrap Navbar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">App shell (layout frame)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/app-shell/" class="cellLink_zI0g" title="Mantine AppShell — dedicated component" aria-label="Mantine AppShell — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Breadcrumb</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Breadcrumb — dedicated component" aria-label="bestax Breadcrumb — dedicated component" href="https://bestax.io/docs/api/components/breadcrumb"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Breadcrumb — dedicated component" aria-label="react-bulma-components Breadcrumb — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/breadcrumbs/" class="cellLink_zI0g" title="Mantine Breadcrumbs — dedicated component" aria-label="Mantine Breadcrumbs — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-breadcrumbs/" class="cellLink_zI0g" title="MUI Breadcrumbs — dedicated component" aria-label="MUI Breadcrumbs — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/breadcrumb" class="cellLink_zI0g" title="Chakra UI Breadcrumb — dedicated component" aria-label="Chakra UI Breadcrumb — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Breadcrumb — dedicated component" aria-label="shadcn/ui Breadcrumb — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/breadcrumb/" class="cellLink_zI0g" title="React-Bootstrap Breadcrumb — dedicated component" aria-label="React-Bootstrap Breadcrumb — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Menu (vertical nav)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Menu — dedicated component" aria-label="bestax Menu — dedicated component" href="https://bestax.io/docs/api/components/menu"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Menu — dedicated component" aria-label="react-bulma-components Menu — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/nav-link/" class="cellLink_zI0g" title="Mantine NavLink — dedicated component" aria-label="Mantine NavLink — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/api/menu-list/" class="cellLink_zI0g" title="MUI MenuList — via prop or composition" aria-label="MUI MenuList — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Sidebar — dedicated component" aria-label="shadcn/ui Sidebar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/navs/" class="cellLink_zI0g" title="React-Bootstrap Nav — via prop or composition" aria-label="React-Bootstrap Nav — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Dropdown menu (actions)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Dropdown — dedicated component" aria-label="bestax Dropdown — dedicated component" href="https://bestax.io/docs/api/components/dropdown"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Dropdown — dedicated component" aria-label="react-bulma-components Dropdown — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/menu/" class="cellLink_zI0g" title="Mantine Menu — dedicated component" aria-label="Mantine Menu — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-menu/" class="cellLink_zI0g" title="MUI Menu — dedicated component" aria-label="MUI Menu — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/menu" class="cellLink_zI0g" title="Chakra UI Menu — dedicated component" aria-label="Chakra UI Menu — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui DropdownMenu — dedicated component" aria-label="shadcn/ui DropdownMenu — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/dropdowns/" class="cellLink_zI0g" title="React-Bootstrap Dropdown — dedicated component" aria-label="React-Bootstrap Dropdown — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Pagination</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Pagination — dedicated component" aria-label="bestax Pagination — dedicated component" href="https://bestax.io/docs/api/components/pagination"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Pagination — dedicated component" aria-label="react-bulma-components Pagination — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/pagination/" class="cellLink_zI0g" title="Mantine Pagination — dedicated component" aria-label="Mantine Pagination — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-pagination/" class="cellLink_zI0g" title="MUI Pagination — dedicated component" aria-label="MUI Pagination — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/pagination" class="cellLink_zI0g" title="Chakra UI Pagination — dedicated component" aria-label="Chakra UI Pagination — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Pagination — dedicated component" aria-label="shadcn/ui Pagination — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/pagination/" class="cellLink_zI0g" title="React-Bootstrap Pagination — dedicated component" aria-label="React-Bootstrap Pagination — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Stepper / steps</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Steps — dedicated component" aria-label="bestax Steps — dedicated component" href="https://bestax.io/docs/api/components/steps"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/stepper/" class="cellLink_zI0g" title="Mantine Stepper — dedicated component" aria-label="Mantine Stepper — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-stepper/" class="cellLink_zI0g" title="MUI Stepper — dedicated component" aria-label="MUI Stepper — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/steps" class="cellLink_zI0g" title="Chakra UI Steps — dedicated component" aria-label="Chakra UI Steps — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Tabs</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Tabs — dedicated component" aria-label="bestax Tabs — dedicated component" href="https://bestax.io/docs/api/components/tabs"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Tabs — dedicated component" aria-label="react-bulma-components Tabs — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/tabs/" class="cellLink_zI0g" title="Mantine Tabs — dedicated component" aria-label="Mantine Tabs — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-tabs/" class="cellLink_zI0g" title="MUI Tabs — dedicated component" aria-label="MUI Tabs — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/tabs" class="cellLink_zI0g" title="Chakra UI Tabs — dedicated component" aria-label="Chakra UI Tabs — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Tabs — dedicated component" aria-label="shadcn/ui Tabs — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/tabs/" class="cellLink_zI0g" title="React-Bootstrap Tabs — dedicated component" aria-label="React-Bootstrap Tabs — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Bottom navigation</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-bottom-navigation/" class="cellLink_zI0g" title="MUI BottomNavigation — dedicated component" aria-label="MUI BottomNavigation — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Burger / hamburger</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Navbar.Burger — via prop or composition" aria-label="react-bulma-components Navbar.Burger — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/burger/" class="cellLink_zI0g" title="Mantine Burger — dedicated component" aria-label="Mantine Burger — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/navbar/" class="cellLink_zI0g" title="React-Bootstrap Navbar.Toggle — via prop or composition" aria-label="React-Bootstrap Navbar.Toggle — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Table of contents</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/table-of-contents/" class="cellLink_zI0g" title="Mantine TableOfContents — dedicated component" aria-label="Mantine TableOfContents — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Command palette / spotlight</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/x/spotlight/" class="cellLink_zI0g" title="Mantine Spotlight — dedicated component" aria-label="Mantine Spotlight — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Command — dedicated component" aria-label="shadcn/ui Command — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Route progress bar</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/x/nprogress/" class="cellLink_zI0g" title="Mantine NavigationProgress — dedicated component" aria-label="Mantine NavigationProgress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Layout &amp; grid</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Container</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Container — dedicated component" aria-label="bestax Container — dedicated component" href="https://bestax.io/docs/api/layout/container"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Container — dedicated component" aria-label="react-bulma-components Container — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/container/" class="cellLink_zI0g" title="Mantine Container — dedicated component" aria-label="Mantine Container — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-container/" class="cellLink_zI0g" title="MUI Container — dedicated component" aria-label="MUI Container — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/container" class="cellLink_zI0g" title="Chakra UI Container — dedicated component" aria-label="Chakra UI Container — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/layout/grid/" class="cellLink_zI0g" title="React-Bootstrap Container — dedicated component" aria-label="React-Bootstrap Container — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Grid — flex 12-col</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Columns — dedicated component" aria-label="bestax Columns — dedicated component" href="https://bestax.io/docs/api/columns"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Columns — dedicated component" aria-label="react-bulma-components Columns — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/grid/" class="cellLink_zI0g" title="Mantine Grid — dedicated component" aria-label="Mantine Grid — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-grid2/" class="cellLink_zI0g" title="MUI Grid — dedicated component" aria-label="MUI Grid — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/simple-grid" class="cellLink_zI0g" title="Chakra UI SimpleGrid — via prop or composition" aria-label="Chakra UI SimpleGrid — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/layout/grid/" class="cellLink_zI0g" title="React-Bootstrap Row / Col — dedicated component" aria-label="React-Bootstrap Row / Col — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Grid — CSS grid</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Grid — dedicated component" aria-label="bestax Grid — dedicated component" href="https://bestax.io/docs/api/grid"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/simple-grid/" class="cellLink_zI0g" title="Mantine SimpleGrid — dedicated component" aria-label="Mantine SimpleGrid — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/system/react-box/" class="cellLink_zI0g" title="MUI Box — via prop or composition" aria-label="MUI Box — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/grid" class="cellLink_zI0g" title="Chakra UI Grid — dedicated component" aria-label="Chakra UI Grid — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Grid cell</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Cell — dedicated component" aria-label="bestax Cell — dedicated component" href="https://bestax.io/docs/api/grid/cell"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Column — via prop or composition" aria-label="react-bulma-components Column — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/simple-grid/" class="cellLink_zI0g" title="Mantine SimpleGrid — via prop or composition" aria-label="Mantine SimpleGrid — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-grid2/" class="cellLink_zI0g" title="MUI Grid — via prop or composition" aria-label="MUI Grid — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/grid-item" class="cellLink_zI0g" title="Chakra UI GridItem — dedicated component" aria-label="Chakra UI GridItem — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/layout/grid/" class="cellLink_zI0g" title="React-Bootstrap Col — dedicated component" aria-label="React-Bootstrap Col — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Stack (vertical)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Block — via prop or composition" aria-label="bestax Block — via prop or composition" href="https://bestax.io/docs/api/elements/block"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/stack/" class="cellLink_zI0g" title="Mantine Stack — dedicated component" aria-label="Mantine Stack — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-stack/" class="cellLink_zI0g" title="MUI Stack — dedicated component" aria-label="MUI Stack — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/stack" class="cellLink_zI0g" title="Chakra UI Stack — dedicated component" aria-label="Chakra UI Stack — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/utilities/stack/" class="cellLink_zI0g" title="React-Bootstrap Stack — dedicated component" aria-label="React-Bootstrap Stack — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Group (horizontal)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/group/" class="cellLink_zI0g" title="Mantine Group — dedicated component" aria-label="Mantine Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-stack/" class="cellLink_zI0g" title="MUI Stack — via prop or composition" aria-label="MUI Stack — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/group" class="cellLink_zI0g" title="Chakra UI Group — dedicated component" aria-label="Chakra UI Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/utilities/stack/" class="cellLink_zI0g" title="React-Bootstrap Stack — via prop or composition" aria-label="React-Bootstrap Stack — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Flex</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/flex/" class="cellLink_zI0g" title="Mantine Flex — dedicated component" aria-label="Mantine Flex — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/system/react-box/" class="cellLink_zI0g" title="MUI Box — via prop or composition" aria-label="MUI Box — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/flex" class="cellLink_zI0g" title="Chakra UI Flex — dedicated component" aria-label="Chakra UI Flex — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Center</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/center/" class="cellLink_zI0g" title="Mantine Center — dedicated component" aria-label="Mantine Center — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/center" class="cellLink_zI0g" title="Chakra UI Center — dedicated component" aria-label="Chakra UI Center — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Spacer</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Block — via prop or composition" aria-label="bestax Block — via prop or composition" href="https://bestax.io/docs/api/elements/block"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/space/" class="cellLink_zI0g" title="Mantine Space — dedicated component" aria-label="Mantine Space — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/spacer" class="cellLink_zI0g" title="Chakra UI Spacer — dedicated component" aria-label="Chakra UI Spacer — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Aspect ratio</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Image — via prop or composition" aria-label="bestax Image — via prop or composition" href="https://bestax.io/docs/api/elements/image"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/aspect-ratio/" class="cellLink_zI0g" title="Mantine AspectRatio — dedicated component" aria-label="Mantine AspectRatio — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/aspect-ratio" class="cellLink_zI0g" title="Chakra UI AspectRatio — dedicated component" aria-label="Chakra UI AspectRatio — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui AspectRatio — dedicated component" aria-label="shadcn/ui AspectRatio — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/utilities/ratios/" class="cellLink_zI0g" title="React-Bootstrap Ratio — dedicated component" aria-label="React-Bootstrap Ratio — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Scroll area (custom bars)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/scroll-area/" class="cellLink_zI0g" title="Mantine ScrollArea — dedicated component" aria-label="Mantine ScrollArea — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui ScrollArea — dedicated component" aria-label="shadcn/ui ScrollArea — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Splitter (resizable)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/splitter/" class="cellLink_zI0g" title="Mantine Splitter — dedicated component" aria-label="Mantine Splitter — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Resizable — dedicated component" aria-label="shadcn/ui Resizable — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Affix (sticky)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/affix/" class="cellLink_zI0g" title="Mantine Affix — dedicated component" aria-label="Mantine Affix — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Section</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Section — dedicated component" aria-label="bestax Section — dedicated component" href="https://bestax.io/docs/api/layout/section"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Section — dedicated component" aria-label="react-bulma-components Section — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Hero / banner</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Hero — dedicated component" aria-label="bestax Hero — dedicated component" href="https://bestax.io/docs/api/layout/hero"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Hero — dedicated component" aria-label="react-bulma-components Hero — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Level (space-between bar)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Level — dedicated component" aria-label="bestax Level — dedicated component" href="https://bestax.io/docs/api/layout/level"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Level — dedicated component" aria-label="react-bulma-components Level — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/group/" class="cellLink_zI0g" title="Mantine Group — via prop or composition" aria-label="Mantine Group — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/group" class="cellLink_zI0g" title="Chakra UI Group — via prop or composition" aria-label="Chakra UI Group — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Media object</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Media — dedicated component" aria-label="bestax Media — dedicated component" href="https://bestax.io/docs/api/layout/media"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Media — dedicated component" aria-label="react-bulma-components Media — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Tile (Bulma grid tile)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Tile — dedicated component" aria-label="react-bulma-components Tile — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/simple-grid/" class="cellLink_zI0g" title="Mantine SimpleGrid — via prop or composition" aria-label="Mantine SimpleGrid — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-grid2/" class="cellLink_zI0g" title="MUI Grid — via prop or composition" aria-label="MUI Grid — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/grid" class="cellLink_zI0g" title="Chakra UI Grid — via prop or composition" aria-label="Chakra UI Grid — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Footer</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Footer — dedicated component" aria-label="bestax Footer — dedicated component" href="https://bestax.io/docs/api/layout/footer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Footer — dedicated component" aria-label="react-bulma-components Footer — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/app-shell/" class="cellLink_zI0g" title="Mantine AppShell — via prop or composition" aria-label="Mantine AppShell — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Box (polymorphic primitive)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Element — dedicated component" aria-label="react-bulma-components Element — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/box/" class="cellLink_zI0g" title="Mantine Box — dedicated component" aria-label="Mantine Box — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/system/react-box/" class="cellLink_zI0g" title="MUI Box — dedicated component" aria-label="MUI Box — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/box" class="cellLink_zI0g" title="Chakra UI Box — dedicated component" aria-label="Chakra UI Box — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Paper / elevated surface</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Box — dedicated component" aria-label="bestax Box — dedicated component" href="https://bestax.io/docs/api/elements/box"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Box — dedicated component" aria-label="react-bulma-components Box — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/paper/" class="cellLink_zI0g" title="Mantine Paper — dedicated component" aria-label="Mantine Paper — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-paper/" class="cellLink_zI0g" title="MUI Paper — dedicated component" aria-label="MUI Paper — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/box" class="cellLink_zI0g" title="Chakra UI Box — via prop or composition" aria-label="Chakra UI Box — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Card — via prop or composition" aria-label="shadcn/ui Card — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/cards/" class="cellLink_zI0g" title="React-Bootstrap Card — via prop or composition" aria-label="React-Bootstrap Card — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Data display</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Avatar</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Avatar — dedicated component" aria-label="bestax Avatar — dedicated component" href="https://bestax.io/docs/api/components/avatar"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/avatar/" class="cellLink_zI0g" title="Mantine Avatar — dedicated component" aria-label="Mantine Avatar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-avatar/" class="cellLink_zI0g" title="MUI Avatar — dedicated component" aria-label="MUI Avatar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/avatar" class="cellLink_zI0g" title="Chakra UI Avatar — dedicated component" aria-label="Chakra UI Avatar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Avatar — dedicated component" aria-label="shadcn/ui Avatar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Avatar group</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Avatars — dedicated component" aria-label="bestax Avatars — dedicated component" href="https://bestax.io/docs/api/components/avatars"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/avatar/" class="cellLink_zI0g" title="Mantine Avatar.Group — dedicated component" aria-label="Mantine Avatar.Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-avatar/" class="cellLink_zI0g" title="MUI AvatarGroup — dedicated component" aria-label="MUI AvatarGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/avatar" class="cellLink_zI0g" title="Chakra UI Avatar.Group — dedicated component" aria-label="Chakra UI Avatar.Group — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Avatar — via prop or composition" aria-label="shadcn/ui Avatar — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Badge (corner indicator)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Badge — dedicated component" aria-label="bestax Badge — dedicated component" href="https://bestax.io/docs/api/components/badge"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/indicator/" class="cellLink_zI0g" title="Mantine Indicator — dedicated component" aria-label="Mantine Indicator — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-badge/" class="cellLink_zI0g" title="MUI Badge — dedicated component" aria-label="MUI Badge — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/float" class="cellLink_zI0g" title="Chakra UI Float — via prop or composition" aria-label="Chakra UI Float — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Tag / label</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Tag — dedicated component" aria-label="bestax Tag — dedicated component" href="https://bestax.io/docs/api/elements/tag"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Tag — dedicated component" aria-label="react-bulma-components Tag — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/badge/" class="cellLink_zI0g" title="Mantine Badge — dedicated component" aria-label="Mantine Badge — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-chip/" class="cellLink_zI0g" title="MUI Chip — dedicated component" aria-label="MUI Chip — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/tag" class="cellLink_zI0g" title="Chakra UI Tag — dedicated component" aria-label="Chakra UI Tag — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Badge — dedicated component" aria-label="shadcn/ui Badge — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/badge/" class="cellLink_zI0g" title="React-Bootstrap Badge — dedicated component" aria-label="React-Bootstrap Badge — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Chip (deletable / interactive)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Tag — via prop or composition" aria-label="bestax Tag — via prop or composition" href="https://bestax.io/docs/api/elements/tag"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Tag — via prop or composition" aria-label="react-bulma-components Tag — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/chip/" class="cellLink_zI0g" title="Mantine Chip — dedicated component" aria-label="Mantine Chip — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-chip/" class="cellLink_zI0g" title="MUI Chip — dedicated component" aria-label="MUI Chip — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/tag" class="cellLink_zI0g" title="Chakra UI Tag — dedicated component" aria-label="Chakra UI Tag — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Card</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Card — dedicated component" aria-label="bestax Card — dedicated component" href="https://bestax.io/docs/api/components/card"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Card — dedicated component" aria-label="react-bulma-components Card — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/card/" class="cellLink_zI0g" title="Mantine Card — dedicated component" aria-label="Mantine Card — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-card/" class="cellLink_zI0g" title="MUI Card — dedicated component" aria-label="MUI Card — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/card" class="cellLink_zI0g" title="Chakra UI Card — dedicated component" aria-label="Chakra UI Card — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Card — dedicated component" aria-label="shadcn/ui Card — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/cards/" class="cellLink_zI0g" title="React-Bootstrap Card — dedicated component" aria-label="React-Bootstrap Card — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Table (static)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Table — dedicated component" aria-label="bestax Table — dedicated component" href="https://bestax.io/docs/api/elements/table"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Table — dedicated component" aria-label="react-bulma-components Table — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/table/" class="cellLink_zI0g" title="Mantine Table — dedicated component" aria-label="Mantine Table — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-table/" class="cellLink_zI0g" title="MUI Table — dedicated component" aria-label="MUI Table — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/table" class="cellLink_zI0g" title="Chakra UI Table — dedicated component" aria-label="Chakra UI Table — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Table — dedicated component" aria-label="shadcn/ui Table — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/table/" class="cellLink_zI0g" title="React-Bootstrap Table — dedicated component" aria-label="React-Bootstrap Table — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Data grid (sort/filter/page)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/x/react-data-grid/" class="cellLink_zI0g" title="MUI DataGrid — dedicated component" aria-label="MUI DataGrid — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui DataTable — dedicated component" aria-label="shadcn/ui DataTable — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Description / data list</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/data-list/" class="cellLink_zI0g" title="Mantine DataList — dedicated component" aria-label="Mantine DataList — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/data-list" class="cellLink_zI0g" title="Chakra UI DataList — dedicated component" aria-label="Chakra UI DataList — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">List (styled)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax UnorderedList — dedicated component" aria-label="bestax UnorderedList — dedicated component" href="https://bestax.io/docs/api/elements/unorderedlist"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Content — via prop or composition" aria-label="react-bulma-components Content — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/list/" class="cellLink_zI0g" title="Mantine List — dedicated component" aria-label="Mantine List — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-list/" class="cellLink_zI0g" title="MUI List — dedicated component" aria-label="MUI List — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/list" class="cellLink_zI0g" title="Chakra UI List — dedicated component" aria-label="Chakra UI List — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/list-group/" class="cellLink_zI0g" title="React-Bootstrap ListGroup — dedicated component" aria-label="React-Bootstrap ListGroup — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Tree view</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/tree/" class="cellLink_zI0g" title="Mantine Tree — dedicated component" aria-label="Mantine Tree — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-tree-view/" class="cellLink_zI0g" title="MUI TreeView — dedicated component" aria-label="MUI TreeView — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Tree select</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/tree-select/" class="cellLink_zI0g" title="Mantine TreeSelect — dedicated component" aria-label="Mantine TreeSelect — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Timeline</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/timeline/" class="cellLink_zI0g" title="Mantine Timeline — dedicated component" aria-label="Mantine Timeline — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-timeline/" class="cellLink_zI0g" title="MUI Timeline — dedicated component" aria-label="MUI Timeline — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/timeline" class="cellLink_zI0g" title="Chakra UI Timeline — dedicated component" aria-label="Chakra UI Timeline — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Kbd (keyboard key)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/kbd/" class="cellLink_zI0g" title="Mantine Kbd — dedicated component" aria-label="Mantine Kbd — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/kbd" class="cellLink_zI0g" title="Chakra UI Kbd — dedicated component" aria-label="Chakra UI Kbd — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Kbd — dedicated component" aria-label="shadcn/ui Kbd — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Number formatter</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/number-formatter/" class="cellLink_zI0g" title="Mantine NumberFormatter — dedicated component" aria-label="Mantine NumberFormatter — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/format-number" class="cellLink_zI0g" title="Chakra UI FormatNumber — dedicated component" aria-label="Chakra UI FormatNumber — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Image</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Image — dedicated component" aria-label="bestax Image — dedicated component" href="https://bestax.io/docs/api/elements/image"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Image — dedicated component" aria-label="react-bulma-components Image — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/image/" class="cellLink_zI0g" title="Mantine Image — dedicated component" aria-label="Mantine Image — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-image-list/" class="cellLink_zI0g" title="MUI ImageList — via prop or composition" aria-label="MUI ImageList — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/image" class="cellLink_zI0g" title="Chakra UI Image — dedicated component" aria-label="Chakra UI Image — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/images/" class="cellLink_zI0g" title="React-Bootstrap Image — dedicated component" aria-label="React-Bootstrap Image — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Image list / gallery</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/simple-grid/" class="cellLink_zI0g" title="Mantine SimpleGrid — via prop or composition" aria-label="Mantine SimpleGrid — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-image-list/" class="cellLink_zI0g" title="MUI ImageList — dedicated component" aria-label="MUI ImageList — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Background image</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/background-image/" class="cellLink_zI0g" title="Mantine BackgroundImage — dedicated component" aria-label="Mantine BackgroundImage — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Figure</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Figure — dedicated component" aria-label="bestax Figure — dedicated component" href="https://bestax.io/docs/api/elements/figure"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/figures/" class="cellLink_zI0g" title="React-Bootstrap Figure — dedicated component" aria-label="React-Bootstrap Figure — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Icon</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Icon — dedicated component" aria-label="bestax Icon — dedicated component" href="https://bestax.io/docs/api/elements/icon"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Icon — dedicated component" aria-label="react-bulma-components Icon — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/theme-icon/" class="cellLink_zI0g" title="Mantine ThemeIcon — via prop or composition" aria-label="Mantine ThemeIcon — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/icons/" class="cellLink_zI0g" title="MUI Icon — dedicated component" aria-label="MUI Icon — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/icon" class="cellLink_zI0g" title="Chakra UI Icon — dedicated component" aria-label="Chakra UI Icon — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Theme icon (colored container)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/theme-icon/" class="cellLink_zI0g" title="Mantine ThemeIcon — dedicated component" aria-label="Mantine ThemeIcon — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Carousel</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Carousel — dedicated component" aria-label="bestax Carousel — dedicated component" href="https://bestax.io/docs/api/components/carousel"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/x/carousel/" class="cellLink_zI0g" title="Mantine Carousel — dedicated component" aria-label="Mantine Carousel — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Carousel — dedicated component" aria-label="shadcn/ui Carousel — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/carousel/" class="cellLink_zI0g" title="React-Bootstrap Carousel — dedicated component" aria-label="React-Bootstrap Carousel — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Charts</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/charts/getting-started/" class="cellLink_zI0g" title="Mantine @mantine/charts — dedicated component" aria-label="Mantine @mantine/charts — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-charts/" class="cellLink_zI0g" title="MUI @mui/x-charts — dedicated component" aria-label="MUI @mui/x-charts — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Chart — dedicated component" aria-label="shadcn/ui Chart — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Spoiler (clamp / expand)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/spoiler/" class="cellLink_zI0g" title="Mantine Spoiler — dedicated component" aria-label="Mantine Spoiler — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Masonry layout</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-masonry/" class="cellLink_zI0g" title="MUI Masonry — dedicated component" aria-label="MUI Masonry — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Typography</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Text / body</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Paragraph — dedicated component" aria-label="bestax Paragraph — dedicated component" href="https://bestax.io/docs/api/elements/paragraph"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Content — via prop or composition" aria-label="react-bulma-components Content — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/text/" class="cellLink_zI0g" title="Mantine Text — dedicated component" aria-label="Mantine Text — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-typography/" class="cellLink_zI0g" title="MUI Typography — dedicated component" aria-label="MUI Typography — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/text" class="cellLink_zI0g" title="Chakra UI Text — dedicated component" aria-label="Chakra UI Text — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Typography — via prop or composition" aria-label="shadcn/ui Typography — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Heading / title</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Title — dedicated component" aria-label="bestax Title — dedicated component" href="https://bestax.io/docs/api/elements/title"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Heading — dedicated component" aria-label="react-bulma-components Heading — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/title/" class="cellLink_zI0g" title="Mantine Title — dedicated component" aria-label="Mantine Title — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-typography/" class="cellLink_zI0g" title="MUI Typography — dedicated component" aria-label="MUI Typography — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/heading" class="cellLink_zI0g" title="Chakra UI Heading — dedicated component" aria-label="Chakra UI Heading — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Typography — via prop or composition" aria-label="shadcn/ui Typography — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Subtitle</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax SubTitle — dedicated component" aria-label="bestax SubTitle — dedicated component" href="https://bestax.io/docs/api/elements/subtitle"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Heading — via prop or composition" aria-label="react-bulma-components Heading — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/title/" class="cellLink_zI0g" title="Mantine Title — via prop or composition" aria-label="Mantine Title — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-typography/" class="cellLink_zI0g" title="MUI Typography — via prop or composition" aria-label="MUI Typography — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/heading" class="cellLink_zI0g" title="Chakra UI Heading — via prop or composition" aria-label="Chakra UI Heading — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Inline code</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Code — dedicated component" aria-label="bestax Code — dedicated component" href="https://bestax.io/docs/api/elements/code"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/code/" class="cellLink_zI0g" title="Mantine Code — dedicated component" aria-label="Mantine Code — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/code" class="cellLink_zI0g" title="Chakra UI Code — dedicated component" aria-label="Chakra UI Code — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Code block (syntax highlight)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Pre — via prop or composition" aria-label="bestax Pre — via prop or composition" href="https://bestax.io/docs/api/elements/pre"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/code-highlight/" class="cellLink_zI0g" title="Mantine CodeHighlight — dedicated component" aria-label="Mantine CodeHighlight — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/code" class="cellLink_zI0g" title="Chakra UI Code — via prop or composition" aria-label="Chakra UI Code — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Blockquote</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/blockquote/" class="cellLink_zI0g" title="Mantine Blockquote — dedicated component" aria-label="Mantine Blockquote — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/blockquote" class="cellLink_zI0g" title="Chakra UI Blockquote — dedicated component" aria-label="Chakra UI Blockquote — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Typography — via prop or composition" aria-label="shadcn/ui Typography — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Highlight / mark text</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/highlight/" class="cellLink_zI0g" title="Mantine Highlight — dedicated component" aria-label="Mantine Highlight — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/highlight" class="cellLink_zI0g" title="Chakra UI Highlight — dedicated component" aria-label="Chakra UI Highlight — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Rich-HTML style wrapper</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Content — dedicated component" aria-label="bestax Content — dedicated component" href="https://bestax.io/docs/api/elements/content"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Content — dedicated component" aria-label="react-bulma-components Content — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/typography-styles-provider/" class="cellLink_zI0g" title="Mantine TypographyStylesProvider — dedicated component" aria-label="Mantine TypographyStylesProvider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/typography" class="cellLink_zI0g" title="Chakra UI Prose — dedicated component" aria-label="Chakra UI Prose — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Typography — via prop or composition" aria-label="shadcn/ui Typography — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Divider</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Divider — dedicated component" aria-label="bestax Divider — dedicated component" href="https://bestax.io/docs/api/elements/divider"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/divider/" class="cellLink_zI0g" title="Mantine Divider — dedicated component" aria-label="Mantine Divider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-divider/" class="cellLink_zI0g" title="MUI Divider — dedicated component" aria-label="MUI Divider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/separator" class="cellLink_zI0g" title="Chakra UI Separator — dedicated component" aria-label="Chakra UI Separator — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Separator — dedicated component" aria-label="shadcn/ui Separator — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Inline semantic (em/strong/span)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Emphasis/Strong/Span — dedicated component" aria-label="bestax Emphasis/Strong/Span — dedicated component" href="https://bestax.io/docs/api/elements/emphasis"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/text/" class="cellLink_zI0g" title="Mantine Text — via prop or composition" aria-label="Mantine Text — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-typography/" class="cellLink_zI0g" title="MUI Typography — via prop or composition" aria-label="MUI Typography — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/text" class="cellLink_zI0g" title="Chakra UI Text — via prop or composition" aria-label="Chakra UI Text — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Feedback &amp; status</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Alert / message box</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Notification — dedicated component" aria-label="bestax Notification — dedicated component" href="https://bestax.io/docs/api/elements/notification"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Message — dedicated component" aria-label="react-bulma-components Message — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/alert/" class="cellLink_zI0g" title="Mantine Alert — dedicated component" aria-label="Mantine Alert — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-alert/" class="cellLink_zI0g" title="MUI Alert — dedicated component" aria-label="MUI Alert — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/alert" class="cellLink_zI0g" title="Chakra UI Alert — dedicated component" aria-label="Chakra UI Alert — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Alert — dedicated component" aria-label="shadcn/ui Alert — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/alerts/" class="cellLink_zI0g" title="React-Bootstrap Alert — dedicated component" aria-label="React-Bootstrap Alert — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Toast / snackbar</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Toast — dedicated component" aria-label="bestax Toast — dedicated component" href="https://bestax.io/docs/api/components/toast"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/x/notifications/" class="cellLink_zI0g" title="Mantine Notifications — dedicated component" aria-label="Mantine Notifications — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-snackbar/" class="cellLink_zI0g" title="MUI Snackbar — dedicated component" aria-label="MUI Snackbar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/toast" class="cellLink_zI0g" title="Chakra UI Toaster — dedicated component" aria-label="Chakra UI Toaster — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Sonner — dedicated component" aria-label="shadcn/ui Sonner — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/toasts/" class="cellLink_zI0g" title="React-Bootstrap Toast — dedicated component" aria-label="React-Bootstrap Toast — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Progress (linear)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Progress — dedicated component" aria-label="bestax Progress — dedicated component" href="https://bestax.io/docs/api/elements/progress"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Progress — dedicated component" aria-label="react-bulma-components Progress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/progress/" class="cellLink_zI0g" title="Mantine Progress — dedicated component" aria-label="Mantine Progress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-progress/" class="cellLink_zI0g" title="MUI LinearProgress — dedicated component" aria-label="MUI LinearProgress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/progress" class="cellLink_zI0g" title="Chakra UI Progress — dedicated component" aria-label="Chakra UI Progress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Progress — dedicated component" aria-label="shadcn/ui Progress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/progress/" class="cellLink_zI0g" title="React-Bootstrap ProgressBar — dedicated component" aria-label="React-Bootstrap ProgressBar — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Spinner (standalone)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Loading — via prop or composition" aria-label="bestax Loading — via prop or composition" href="https://bestax.io/docs/api/components/loading"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/loader/" class="cellLink_zI0g" title="Mantine Loader — dedicated component" aria-label="Mantine Loader — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-progress/" class="cellLink_zI0g" title="MUI CircularProgress — dedicated component" aria-label="MUI CircularProgress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/spinner" class="cellLink_zI0g" title="Chakra UI Spinner — dedicated component" aria-label="Chakra UI Spinner — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Spinner — dedicated component" aria-label="shadcn/ui Spinner — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/spinners/" class="cellLink_zI0g" title="React-Bootstrap Spinner — dedicated component" aria-label="React-Bootstrap Spinner — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Loading overlay</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Loading — dedicated component" aria-label="bestax Loading — dedicated component" href="https://bestax.io/docs/api/components/loading"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/loading-overlay/" class="cellLink_zI0g" title="Mantine LoadingOverlay — dedicated component" aria-label="Mantine LoadingOverlay — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-backdrop/" class="cellLink_zI0g" title="MUI Backdrop — via prop or composition" aria-label="MUI Backdrop — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Ring / circular progress</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/ring-progress/" class="cellLink_zI0g" title="Mantine RingProgress — dedicated component" aria-label="Mantine RingProgress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-progress/" class="cellLink_zI0g" title="MUI CircularProgress — dedicated component" aria-label="MUI CircularProgress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/progress-circle" class="cellLink_zI0g" title="Chakra UI ProgressCircle — dedicated component" aria-label="Chakra UI ProgressCircle — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Semi-circle progress</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/semi-circle-progress/" class="cellLink_zI0g" title="Mantine SemiCircleProgress — dedicated component" aria-label="Mantine SemiCircleProgress — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Gauge</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/semi-circle-progress/" class="cellLink_zI0g" title="Mantine SemiCircleProgress — via prop or composition" aria-label="Mantine SemiCircleProgress — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/x/react-charts/" class="cellLink_zI0g" title="MUI Gauge — dedicated component" aria-label="MUI Gauge — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Skeleton</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Skeleton — dedicated component" aria-label="bestax Skeleton — dedicated component" href="https://bestax.io/docs/api/elements/skeleton"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/skeleton/" class="cellLink_zI0g" title="Mantine Skeleton — dedicated component" aria-label="Mantine Skeleton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-skeleton/" class="cellLink_zI0g" title="MUI Skeleton — dedicated component" aria-label="MUI Skeleton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/skeleton" class="cellLink_zI0g" title="Chakra UI Skeleton — dedicated component" aria-label="Chakra UI Skeleton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Skeleton — dedicated component" aria-label="shadcn/ui Skeleton — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/placeholder/" class="cellLink_zI0g" title="React-Bootstrap Placeholder — dedicated component" aria-label="React-Bootstrap Placeholder — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Empty state</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/empty-state/" class="cellLink_zI0g" title="Mantine EmptyState — dedicated component" aria-label="Mantine EmptyState — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/empty-state" class="cellLink_zI0g" title="Chakra UI EmptyState — dedicated component" aria-label="Chakra UI EmptyState — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Empty — dedicated component" aria-label="shadcn/ui Empty — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Overlays</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Modal</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Modal — dedicated component" aria-label="bestax Modal — dedicated component" href="https://bestax.io/docs/api/components/modal"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Modal — dedicated component" aria-label="react-bulma-components Modal — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mantine.dev/core/modal/" class="cellLink_zI0g" title="Mantine Modal — dedicated component" aria-label="Mantine Modal — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-modal/" class="cellLink_zI0g" title="MUI Modal — dedicated component" aria-label="MUI Modal — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/dialog" class="cellLink_zI0g" title="Chakra UI Dialog — dedicated component" aria-label="Chakra UI Dialog — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Dialog — dedicated component" aria-label="shadcn/ui Dialog — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/modal/" class="cellLink_zI0g" title="React-Bootstrap Modal — dedicated component" aria-label="React-Bootstrap Modal — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Confirm / alert dialog</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Dialog — dedicated component" aria-label="bestax Dialog — dedicated component" href="https://bestax.io/docs/api/components/dialog"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/modals/" class="cellLink_zI0g" title="Mantine modals — via prop or composition" aria-label="Mantine modals — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-dialog/" class="cellLink_zI0g" title="MUI Dialog — dedicated component" aria-label="MUI Dialog — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/dialog" class="cellLink_zI0g" title="Chakra UI Dialog — via prop or composition" aria-label="Chakra UI Dialog — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui AlertDialog — dedicated component" aria-label="shadcn/ui AlertDialog — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Drawer / off-canvas</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Sidebar — dedicated component" aria-label="bestax Sidebar — dedicated component" href="https://bestax.io/docs/api/components/sidebar"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/drawer/" class="cellLink_zI0g" title="Mantine Drawer — dedicated component" aria-label="Mantine Drawer — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-drawer/" class="cellLink_zI0g" title="MUI Drawer — dedicated component" aria-label="MUI Drawer — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/drawer" class="cellLink_zI0g" title="Chakra UI Drawer — dedicated component" aria-label="Chakra UI Drawer — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Drawer — dedicated component" aria-label="shadcn/ui Drawer — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/offcanvas/" class="cellLink_zI0g" title="React-Bootstrap Offcanvas — dedicated component" aria-label="React-Bootstrap Offcanvas — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Swipeable drawer</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-drawer/" class="cellLink_zI0g" title="MUI SwipeableDrawer — dedicated component" aria-label="MUI SwipeableDrawer — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Drawer — via prop or composition" aria-label="shadcn/ui Drawer — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Popover</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/popover/" class="cellLink_zI0g" title="Mantine Popover — dedicated component" aria-label="Mantine Popover — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-popover/" class="cellLink_zI0g" title="MUI Popover — dedicated component" aria-label="MUI Popover — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/popover" class="cellLink_zI0g" title="Chakra UI Popover — dedicated component" aria-label="Chakra UI Popover — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Popover — dedicated component" aria-label="shadcn/ui Popover — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/popovers/" class="cellLink_zI0g" title="React-Bootstrap Popover — dedicated component" aria-label="React-Bootstrap Popover — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Hover card</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/hover-card/" class="cellLink_zI0g" title="Mantine HoverCard — dedicated component" aria-label="Mantine HoverCard — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/hover-card" class="cellLink_zI0g" title="Chakra UI HoverCard — dedicated component" aria-label="Chakra UI HoverCard — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui HoverCard — dedicated component" aria-label="shadcn/ui HoverCard — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Tooltip</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Tooltip — dedicated component" aria-label="bestax Tooltip — dedicated component" href="https://bestax.io/docs/api/components/tooltip"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/tooltip/" class="cellLink_zI0g" title="Mantine Tooltip — dedicated component" aria-label="Mantine Tooltip — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-tooltip/" class="cellLink_zI0g" title="MUI Tooltip — dedicated component" aria-label="MUI Tooltip — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/tooltip" class="cellLink_zI0g" title="Chakra UI Tooltip — dedicated component" aria-label="Chakra UI Tooltip — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Tooltip — dedicated component" aria-label="shadcn/ui Tooltip — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/components/tooltips/" class="cellLink_zI0g" title="React-Bootstrap Tooltip — dedicated component" aria-label="React-Bootstrap Tooltip — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Backdrop / scrim</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/overlay/" class="cellLink_zI0g" title="Mantine Overlay — dedicated component" aria-label="Mantine Overlay — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-backdrop/" class="cellLink_zI0g" title="MUI Backdrop — dedicated component" aria-label="MUI Backdrop — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Disclosure</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Accordion (grouped)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/accordion/" class="cellLink_zI0g" title="Mantine Accordion — dedicated component" aria-label="Mantine Accordion — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-accordion/" class="cellLink_zI0g" title="MUI Accordion — dedicated component" aria-label="MUI Accordion — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/accordion" class="cellLink_zI0g" title="Chakra UI Accordion — dedicated component" aria-label="Chakra UI Accordion — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Accordion — dedicated component" aria-label="shadcn/ui Accordion — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/getting-started/introduction" class="cellLink_zI0g" title="React-Bootstrap Accordion — dedicated component" aria-label="React-Bootstrap Accordion — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Collapse (single)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Collapse — dedicated component" aria-label="bestax Collapse — dedicated component" href="https://bestax.io/docs/api/components/collapse"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/collapse/" class="cellLink_zI0g" title="Mantine Collapse — dedicated component" aria-label="Mantine Collapse — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/transitions/" class="cellLink_zI0g" title="MUI Collapse — dedicated component" aria-label="MUI Collapse — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/collapsible" class="cellLink_zI0g" title="Chakra UI Collapsible — dedicated component" aria-label="Chakra UI Collapsible — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui Collapsible — dedicated component" aria-label="shadcn/ui Collapsible — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/utilities/transitions/" class="cellLink_zI0g" title="React-Bootstrap Collapse — dedicated component" aria-label="React-Bootstrap Collapse — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Panel (heading + body)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Panel — dedicated component" aria-label="bestax Panel — dedicated component" href="https://bestax.io/docs/api/components/panel"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://react-bulma.dev/" class="cellLink_zI0g" title="react-bulma-components Panel — dedicated component" aria-label="react-bulma-components Panel — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Rich input &amp; special</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Dropzone (drag-drop upload)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/x/dropzone/" class="cellLink_zI0g" title="Mantine Dropzone — dedicated component" aria-label="Mantine Dropzone — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/file-upload" class="cellLink_zI0g" title="Chakra UI FileUpload — via prop or composition" aria-label="Chakra UI FileUpload — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Rich text editor</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/x/tiptap/" class="cellLink_zI0g" title="Mantine RichTextEditor — dedicated component" aria-label="Mantine RichTextEditor — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Transfer list</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-transfer-list/" class="cellLink_zI0g" title="MUI TransferList — dedicated component" aria-label="MUI TransferList — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr><th scope="colgroup" colspan="8" class="catCell_c3lm">Utilities &amp; infrastructure</th></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Theme / provider</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Theme — dedicated component" aria-label="bestax Theme — dedicated component" href="https://bestax.io/docs/api/helpers/theme"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/mantine-provider/" class="cellLink_zI0g" title="Mantine MantineProvider — dedicated component" aria-label="Mantine MantineProvider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-theme-provider/" class="cellLink_zI0g" title="MUI ThemeProvider — dedicated component" aria-label="MUI ThemeProvider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/get-started/installation" class="cellLink_zI0g" title="Chakra UI ChakraProvider — dedicated component" aria-label="Chakra UI ChakraProvider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui ThemeProvider — via prop or composition" aria-label="shadcn/ui ThemeProvider — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/getting-started/theming/" class="cellLink_zI0g" title="React-Bootstrap ThemeProvider — dedicated component" aria-label="React-Bootstrap ThemeProvider — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Global config provider</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax ConfigProvider — dedicated component" aria-label="bestax ConfigProvider — dedicated component" href="https://bestax.io/docs/api/helpers/config"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/mantine-provider/" class="cellLink_zI0g" title="Mantine MantineProvider — via prop or composition" aria-label="Mantine MantineProvider — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/get-started/installation" class="cellLink_zI0g" title="Chakra UI ChakraProvider — via prop or composition" aria-label="Chakra UI ChakraProvider — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">CSS reset / baseline</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-css-baseline/" class="cellLink_zI0g" title="MUI CssBaseline — dedicated component" aria-label="MUI CssBaseline — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Portal</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/portal/" class="cellLink_zI0g" title="Mantine Portal — dedicated component" aria-label="Mantine Portal — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-portal/" class="cellLink_zI0g" title="MUI Portal — dedicated component" aria-label="MUI Portal — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/portal" class="cellLink_zI0g" title="Chakra UI Portal — dedicated component" aria-label="Chakra UI Portal — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Focus trap</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/focus-trap/" class="cellLink_zI0g" title="Mantine FocusTrap — dedicated component" aria-label="Mantine FocusTrap — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-modal/" class="cellLink_zI0g" title="MUI TrapFocus — dedicated component" aria-label="MUI TrapFocus — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Click-away listener</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-click-away-listener/" class="cellLink_zI0g" title="MUI ClickAwayListener — dedicated component" aria-label="MUI ClickAwayListener — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Transition primitives</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Reveal — via prop or composition" aria-label="bestax Reveal — via prop or composition" href="https://bestax.io/docs/api/components/reveal"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/transition/" class="cellLink_zI0g" title="Mantine Transition — dedicated component" aria-label="Mantine Transition — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/transitions/" class="cellLink_zI0g" title="MUI Fade / Grow / Slide — dedicated component" aria-label="MUI Fade / Grow / Slide — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/presence" class="cellLink_zI0g" title="Chakra UI Presence — via prop or composition" aria-label="Chakra UI Presence — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://react-bootstrap.netlify.app/docs/utilities/transitions/" class="cellLink_zI0g" title="React-Bootstrap Fade — dedicated component" aria-label="React-Bootstrap Fade — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Scroll-reveal (on-scroll)</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax Reveal — dedicated component" aria-label="bestax Reveal — dedicated component" href="https://bestax.io/docs/api/components/reveal"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">Visually hidden (a11y)</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/visually-hidden/" class="cellLink_zI0g" title="Mantine VisuallyHidden — dedicated component" aria-label="Mantine VisuallyHidden — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-visually-hidden/" class="cellLink_zI0g" title="MUI visuallyHidden — via prop or composition" aria-label="MUI visuallyHidden — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/visually-hidden" class="cellLink_zI0g" title="Chakra UI VisuallyHidden — dedicated component" aria-label="Chakra UI VisuallyHidden — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">No-SSR guard</th><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-no-ssr/" class="cellLink_zI0g" title="MUI NoSsr — dedicated component" aria-label="MUI NoSsr — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/client-only" class="cellLink_zI0g" title="Chakra UI ClientOnly — dedicated component" aria-label="Chakra UI ClientOnly — dedicated component" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr><tr class="dataRow_qsy1"><th scope="row" class="capCell_BH83">classNames utility</th><td class="cell_MgE8"><a class="cellLink_zI0g" title="bestax classNames — dedicated component" aria-label="bestax classNames — dedicated component" href="https://bestax.io/docs/api/helpers/classnames"><span class="glyph_WTJt full_p2Zz" aria-hidden="true">✓</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td><td class="cell_MgE8"><a href="https://mantine.dev/core/clsx/" class="cellLink_zI0g" title="Mantine clsx — via prop or composition" aria-label="Mantine clsx — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://mui.com/material-ui/react-clsx/" class="cellLink_zI0g" title="MUI clsx — via prop or composition" aria-label="MUI clsx — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://chakra-ui.com/docs/components/cx" class="cellLink_zI0g" title="Chakra UI cx — via prop or composition" aria-label="Chakra UI cx — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8"><a href="https://ui.shadcn.com/docs/components" class="cellLink_zI0g" title="shadcn/ui cn — via prop or composition" aria-label="shadcn/ui cn — via prop or composition" target="_blank" rel="noopener noreferrer"><span class="glyph_WTJt partial_gOIh" aria-hidden="true">◐</span></a></td><td class="cell_MgE8 noneCell_TuKG"><span class="glyph_WTJt none_kx7u" aria-hidden="true">–</span><span class="srOnly_DLVc">none</span></td></tr></tbody></table></div><details class="method_LIa9"><summary>How this was compiled — method &amp; caveats</summary><ul><li>Rows are <strong>capabilities</strong>, not raw exports — sub-parts are folded into their parent and internal utilities dropped, so a column approximates each library’s user-facing catalog.</li><li><strong>◐</strong> means the capability exists via a prop or by composing primitives, not as a dedicated named component; it is treated as “absent” when judging what a library uniquely ships.</li><li>Official companion packages count as first-party (Mantine<!-- --> <code>@mantine/*</code>, MUI <code>@mui/lab</code> &amp;<!-- --> <code>@mui/x-*</code>). shadcn/ui is a copy-paste registry powered by Radix, cmdk, TanStack Table, and react-day-picker — not an npm dependency.</li><li>Matched by purpose, not name (e.g. bestax <code>Badge</code> → Mantine <code>Indicator</code> / MUI <code>Badge</code>). Competitor links are best-effort; a few resolve to a library’s component index rather than an exact page.</li></ul></details></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="what-the-matrix-says">What the matrix says<a href="https://bestax.io/blog/state-of-react-2026-07#what-the-matrix-says" class="hash-link" aria-label="Direct link to What the matrix says" title="Direct link to What the matrix says" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>bestax is a superset of react-bulma-components</div><div class="admonitionContent_bqRL"><p>Within the Bulma world there isn’t much contest left. <code>react-bulma-components</code> covers Bulma-core only and has been inactive since ~2021. bestax matches essentially all of it (bar Bulma’s <code>Tile</code>) and adds roughly 50 more components — date/time pickers, autocomplete, rating, tag input, slider, switch, Carousel, Steps, Avatar, Badge, Toast, Tooltip, Skeleton, Sidebar, Dialog, and Reveal.</p></div></div>
<p>A few honest takeaways across the wider field:</p>
<ul>
<li class=""><strong>Mantine</strong> has the widest first-party catalog — rich inputs (color, PIN, JSON), plus Spotlight, ScrollArea, HoverCard, and a full app-shell layout system.</li>
<li class=""><strong>MUI</strong> owns heavy data and app-frame surfaces through its X packages: Data Grid, Charts, Tree View, and Date Pickers, plus FAB, Speed Dial, and Transfer List.</li>
<li class=""><strong>Chakra UI</strong> is the closest peer to bestax’s prop-driven styling model and is deep on form controls — but ships <strong>no</strong> date pickers, charts, carousel, or data grid.</li>
<li class=""><strong>React-Bootstrap</strong> is the smallest set: a faithful Bootstrap wrapper with no date/time pickers, rating, autocomplete, stepper, or tag input.</li>
<li class=""><strong>bestax</strong> covers the mainstream set and adds Bulma-idiomatic layout — Hero, Level, Media, Section, Panel — that most libraries leave to composition.</li>
</ul>
<div class="theme-admonition theme-admonition-note admonition_QWZn alert alert--secondary"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>shadcn/ui plays by different rules</div><div class="admonitionContent_bqRL"><p>shadcn/ui looks broad because it’s a <strong>copy-paste registry</strong>, not an npm dependency: its behavior comes from Radix UI, cmdk, TanStack Table, and react-day-picker. You own the code it drops into your project — powerful, but a different maintenance model than the others here.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="corrections-welcome">Corrections welcome<a href="https://bestax.io/blog/state-of-react-2026-07#corrections-welcome" class="hash-link" aria-label="Direct link to Corrections welcome" title="Direct link to Corrections welcome" translate="no">​</a></h2>
<p>We compiled this by hand from each library’s component source and documentation, so it will have edges — a mislabelled cell, a capability we scoped wrong, or a competitor link that’s drifted. It’s meant to be honest, not perfect.</p>
<div class="theme-admonition theme-admonition-caution admonition_QWZn alert alert--warning"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Spot something off?</div><div class="admonitionContent_bqRL"><p>Please <a href="https://github.com/allxsmith/bestax/issues" target="_blank" rel="noopener noreferrer" class="">open an issue</a> — corrections make the next edition better.</p></div></div>
<p>See you in the next one.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="state-of-react" term="state-of-react"/>
        <category label="comparison" term="comparison"/>
        <category label="react" term="react"/>
        <category label="bulma" term="bulma"/>
        <category label="mantine" term="mantine"/>
        <category label="mui" term="mui"/>
        <category label="chakra" term="chakra"/>
        <category label="shadcn" term="shadcn"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing Extra Components: Advanced UI & Form Controls]]></title>
        <id>https://bestax.io/blog/extra-components</id>
        <link href="https://bestax.io/blog/extra-components"/>
        <updated>2026-01-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We're excited to announce a major addition to bestax-bulma: Extra Components. This release adds 15 new components that extend the core library with advanced UI controls and form inputs.]]></summary>
        <content type="html"><![CDATA[<p>We're excited to announce a major addition to bestax-bulma: <strong>Extra Components</strong>. This release adds 15 new components that extend the core library with advanced UI controls and form inputs.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="whats-new">What's New<a href="https://bestax.io/blog/extra-components#whats-new" class="hash-link" aria-label="Direct link to What's New" title="Direct link to What's New" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="ui-components-8">UI Components (8)<a href="https://bestax.io/blog/extra-components#ui-components-8" class="hash-link" aria-label="Direct link to UI Components (8)" title="Direct link to UI Components (8)" translate="no">​</a></h3>
<table><thead><tr><th>Component</th><th>Description</th></tr></thead><tbody><tr><td><strong>Loading</strong></td><td>Full-page or container loading overlay with spinner</td></tr><tr><td><strong>Collapse</strong></td><td>Expandable/collapsible content panels with animation</td></tr><tr><td><strong>Tooltip</strong></td><td>Hover tooltips for displaying helpful information</td></tr><tr><td><strong>Steps</strong></td><td>Multi-step progress indicator for wizard flows</td></tr><tr><td><strong>Sidebar</strong></td><td>Slide-out navigation panel from left or right</td></tr><tr><td><strong>Toast</strong></td><td>Brief notification messages with auto-dismiss and action buttons</td></tr><tr><td><strong>Dialog</strong></td><td>Confirmation and alert dialogs</td></tr><tr><td><strong>Carousel</strong></td><td>Image/content slider with navigation</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="form-components-6">Form Components (6)<a href="https://bestax.io/blog/extra-components#form-components-6" class="hash-link" aria-label="Direct link to Form Components (6)" title="Direct link to Form Components (6)" translate="no">​</a></h3>
<table><thead><tr><th>Component</th><th>Description</th></tr></thead><tbody><tr><td><strong>Switch</strong></td><td>Toggle switch for on/off states</td></tr><tr><td><strong>Slider</strong></td><td>Range slider for value selection</td></tr><tr><td><strong>Numberinput</strong></td><td>Number input with +/- buttons</td></tr><tr><td><strong>Rate</strong></td><td>Star/icon-based rating component</td></tr><tr><td><strong>Autocomplete</strong></td><td>Input with dropdown suggestions</td></tr><tr><td><strong>Taginput</strong></td><td>Tag/chip input for multiple values</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="quick-start">Quick Start<a href="https://bestax.io/blog/extra-components#quick-start" class="hash-link" aria-label="Direct link to Quick Start" title="Direct link to Quick Start" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="installation">Installation<a href="https://bestax.io/blog/extra-components#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation" translate="no">​</a></h3>
<p>Extra components are included in the main package:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npm install @allxsmith/bestax-bulma</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="css-setup">CSS Setup<a href="https://bestax.io/blog/extra-components#css-setup" class="hash-link" aria-label="Direct link to CSS Setup" title="Direct link to CSS Setup" translate="no">​</a></h3>
<p>Import the extras CSS after Bulma:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'bulma/css/bulma.min.css'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma/dist/extras.css'</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="basic-usage">Basic Usage<a href="https://bestax.io/blog/extra-components#basic-usage" class="hash-link" aria-label="Direct link to Basic Usage" title="Direct link to Basic Usage" translate="no">​</a></h3>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Switch</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Slider</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Toast</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Steps</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="feature-highlights">Feature Highlights<a href="https://bestax.io/blog/extra-components#feature-highlights" class="hash-link" aria-label="Direct link to Feature Highlights" title="Direct link to Feature Highlights" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="programmatic-notifications">Programmatic Notifications<a href="https://bestax.io/blog/extra-components#programmatic-notifications" class="hash-link" aria-label="Direct link to Programmatic Notifications" title="Direct link to Programmatic Notifications" translate="no">​</a></h3>
<p>Toast and Dialog provide programmatic APIs for triggering notifications from anywhere:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> toast</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> dialog </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Success toast</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">toast</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">success</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Changes saved!'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Toast with undo action</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">toast</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">show</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Item deleted'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">actionText</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Undo'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">actionType</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'info'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function-variable function" style="color:#d73a49">onAction</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">restoreItem</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Confirmation dialog</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> confirmed </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">await</span><span class="token plain"> dialog</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">confirm</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">title</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Delete?'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">message</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'This cannot be undone.'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token literal-property property" style="color:#36acaa">type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'danger'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="controlled--uncontrolled-modes">Controlled &amp; Uncontrolled Modes<a href="https://bestax.io/blog/extra-components#controlled--uncontrolled-modes" class="hash-link" aria-label="Direct link to Controlled &amp; Uncontrolled Modes" title="Direct link to Controlled &amp; Uncontrolled Modes" translate="no">​</a></h3>
<p>All form components support both patterns:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Controlled</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">value</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> setValue</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useState</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">50</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Slider</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">value</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">setValue</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Uncontrolled</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Slider</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">defaultValue</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript number" style="color:#36acaa">50</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="full-accessibility">Full Accessibility<a href="https://bestax.io/blog/extra-components#full-accessibility" class="hash-link" aria-label="Direct link to Full Accessibility" title="Direct link to Full Accessibility" translate="no">​</a></h3>
<p>Every component includes:</p>
<ul>
<li class="">Proper ARIA attributes</li>
<li class="">Keyboard navigation</li>
<li class="">Screen reader support</li>
<li class="">Focus management</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="bulma-helper-props">Bulma Helper Props<a href="https://bestax.io/blog/extra-components#bulma-helper-props" class="hash-link" aria-label="Direct link to Bulma Helper Props" title="Direct link to Bulma Helper Props" translate="no">​</a></h3>
<p>All components support Bulma's helper props system:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Switch</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">success</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">isRounded</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">  Dark Mode</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Switch</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Steps</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">size</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">medium</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">  ...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Steps</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="interactive-examples">Interactive Examples<a href="https://bestax.io/blog/extra-components#interactive-examples" class="hash-link" aria-label="Direct link to Interactive Examples" title="Direct link to Interactive Examples" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="switch">Switch<a href="https://bestax.io/blog/extra-components#switch" class="hash-link" aria-label="Direct link to Switch" title="Direct link to Switch" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SwitchDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">enabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setEnabled</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Switch</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">checked</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">enabled</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setEnabled</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">e</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">target</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token tag script language-javascript property-access" style="color:rgb(127, 219, 202)">checked</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRounded</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      Notifications: </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">enabled </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'On'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Off'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Switch</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="slider">Slider<a href="https://bestax.io/blog/extra-components#slider" class="hash-link" aria-label="Direct link to Slider" title="Direct link to Slider" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">SliderDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">volume</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setVolume</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">50</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Slider</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">volume</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setVolume</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">showOutput</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">        </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRounded</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="steps">Steps<a href="https://bestax.io/blog/extra-components#steps" class="hash-link" aria-label="Direct link to Steps" title="Direct link to Steps" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">StepsDemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">step</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setStep</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Steps</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">step</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">items</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">        </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> label</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Cart'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> clickable</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">        </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> label</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Shipping'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> clickable</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">        </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> label</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Payment'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> clickable</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">        </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> label</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript string" style="color:rgb(173, 219, 103)">'Complete'</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> clickable</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">:</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">      </span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onStepClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">setStep</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="documentation">Documentation<a href="https://bestax.io/blog/extra-components#documentation" class="hash-link" aria-label="Direct link to Documentation" title="Direct link to Documentation" translate="no">​</a></h2>
<p>For complete documentation and more examples:</p>
<ul>
<li class=""><a class="" href="https://bestax.io/docs/guides/getting-started/installation">Installation</a> - Setup instructions (extras are bundled into <code>bestax.css</code>)</li>
<li class=""><a class="" href="https://bestax.io/docs/guides/library/components">UI Components</a> - Toast, Dialog, Steps, etc.</li>
<li class=""><a class="" href="https://bestax.io/docs/guides/library/form">Form Components</a> - Switch, Slider, Rate, etc.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="whats-next">What's Next<a href="https://bestax.io/blog/extra-components#whats-next" class="hash-link" aria-label="Direct link to What's Next" title="Direct link to What's Next" translate="no">​</a></h2>
<p>We're continuing to expand bestax-bulma with more components and features. Coming soon:</p>
<ul>
<li class="">DateInput - Calendar date selection</li>
<li class="">TimeInput - Time selection dropdown</li>
<li class="">Colorpicker - Color selection with presets</li>
</ul>
<p>Stay tuned for more updates!</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="release" term="release"/>
        <category label="components" term="components"/>
        <category label="forms" term="forms"/>
        <category label="bulma" term="bulma"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New HTML Element Wrappers]]></title>
        <id>https://bestax.io/blog/html-element-wrappers</id>
        <link href="https://bestax.io/blog/html-element-wrappers"/>
        <updated>2026-01-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We've added 12 new HTML element wrapper components that bring Bulma's helper props to everyday HTML elements like links, paragraphs, lists, and code blocks.]]></summary>
        <content type="html"><![CDATA[<p>We've added 12 new HTML element wrapper components that bring Bulma's helper props to everyday HTML elements like links, paragraphs, lists, and code blocks.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="why">Why?<a href="https://bestax.io/blog/html-element-wrappers#why" class="hash-link" aria-label="Direct link to Why?" title="Direct link to Why?" translate="no">​</a></h2>
<p>Previously, styling basic HTML elements required manual class management. Now you get full Bulma helper prop support on semantic HTML elements:</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Before: manual classes</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">a</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">#</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">className</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">has-text-primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Link</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">a</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// After: props-based styling</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Link</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">href</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">#</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Link</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Link</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Key Benefit</div><div class="admonitionContent_bqRL"><p>No more string manipulation for classes. Use type-safe props that your IDE can autocomplete.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-components">The Components<a href="https://bestax.io/blog/html-element-wrappers#the-components" class="hash-link" aria-label="Direct link to The Components" title="Direct link to The Components" translate="no">​</a></h2>
<table><thead><tr><th>Category</th><th>Components</th><th>HTML Elements</th></tr></thead><tbody><tr><td><strong>Text</strong></td><td><code>Link</code>, <code>Span</code>, <code>Paragraph</code>, <code>Strong</code>, <code>Emphasis</code></td><td><code>&lt;a&gt;</code>, <code>&lt;span&gt;</code>, <code>&lt;p&gt;</code>, <code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code></td></tr><tr><td><strong>Lists</strong></td><td><code>UnorderedList</code>, <code>OrderedList</code>, <code>ListItem</code></td><td><code>&lt;ul&gt;</code>, <code>&lt;ol&gt;</code>, <code>&lt;li&gt;</code></td></tr><tr><td><strong>Code</strong></td><td><code>Code</code>, <code>Pre</code></td><td><code>&lt;code&gt;</code>, <code>&lt;pre&gt;</code></td></tr><tr><td><strong>Media</strong></td><td><code>Figure</code>, <code>Figure.Caption</code></td><td><code>&lt;figure&gt;</code>, <code>&lt;figcaption&gt;</code></td></tr><tr><td><strong>Layout</strong></td><td><code>Divider</code></td><td><code>&lt;hr&gt;</code></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="examples">Examples<a href="https://bestax.io/blog/html-element-wrappers#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="styled-text">Styled Text<a href="https://bestax.io/blog/html-element-wrappers#styled-text" class="hash-link" aria-label="Direct link to Styled Text" title="Direct link to Styled Text" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">info</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textAlign</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">centered</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  Centered info text</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Paragraph</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="colored-lists">Colored Lists<a href="https://bestax.io/blog/html-element-wrappers#colored-lists" class="hash-link" aria-label="Direct link to Colored Lists" title="Direct link to Colored Lists" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">UnorderedList</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ListItem</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Green item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ListItem</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ListItem</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">danger</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Red item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">ListItem</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">UnorderedList</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="figures-with-captions">Figures with Captions<a href="https://bestax.io/blog/html-element-wrappers#figures-with-captions" class="hash-link" aria-label="Direct link to Figures with Captions" title="Direct link to Figures with Captions" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Figure</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textAlign</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">centered</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Image</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">src</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">/img/bestax-solar-system-3d.png</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">alt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Bestax Solar System</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">16by9</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Figure.Caption</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">grey</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textSize</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">7</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    Bestax Solar System</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Figure.Caption</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Figure</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="code-blocks">Code Blocks<a href="https://bestax.io/blog/html-element-wrappers#code-blocks" class="hash-link" aria-label="Direct link to Code Blocks" title="Direct link to Code Blocks" translate="no">​</a></h3>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Pre</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">bgColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">dark</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">white</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">p</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token template-string template-punctuation string" style="color:rgb(173, 219, 103)">`</span><span class="token template-string string" style="color:rgb(173, 219, 103)">const hello = "world";</span><span class="token template-string template-punctuation string" style="color:rgb(173, 219, 103)">`</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Pre</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<div class="theme-admonition theme-admonition-info admonition_QWZn alert alert--info"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>All Bulma Helpers Supported</div><div class="admonitionContent_bqRL"><p>Every component supports the full range of Bulma helper props: <code>textColor</code>, <code>bgColor</code>, <code>m</code>, <code>p</code>, <code>textAlign</code>, <code>textSize</code>, and more.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="get-started">Get Started<a href="https://bestax.io/blog/html-element-wrappers#get-started" class="hash-link" aria-label="Direct link to Get Started" title="Direct link to Get Started" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">import { Link, Paragraph, Code, Figure } from '@allxsmith/bestax-bulma';</span><br></div></code></pre></div></div>
<p>Check out the <a class="" href="https://bestax.io/docs/guides/library/elements">Elements guide</a> for full documentation.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="bulma" term="bulma"/>
        <category label="elements" term="elements"/>
        <category label="html" term="html"/>
        <category label="semantic" term="semantic"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Install Bulma and React in 30 Seconds]]></title>
        <id>https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast</id>
        <link href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast"/>
        <updated>2025-11-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[One command gets you a production-ready React + Bulma app in under 30 seconds. Skip the setup, start coding with create-bestax.]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Blog Main image create-bestax" src="https://bestax.io/assets/images/create-bestax-blog-main-1ae80021359a7343daa34bcbcb9a2d59.png" width="1968" height="570" class="img_WUYJ"></p>
<p>Want to build a React app with Bulma CSS in 2025? Forget the 10-step tutorials. Skip the configuration hell. Just run one command and start coding.</p>
<p><strong>One command. Under 30 seconds. You're building.</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="tldr---the-fastest-way">TL;DR - The Fastest Way<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#tldr---the-fastest-way" class="hash-link" aria-label="Direct link to TL;DR - The Fastest Way" title="Direct link to TL;DR - The Fastest Way" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="wait-thats-it">Wait, that's it?<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#wait-thats-it" class="hash-link" aria-label="Direct link to Wait, that's it?" title="Direct link to Wait, that's it?" translate="no">​</a></h3>
<p>Okay there is one other thing, you have to install your dependencies and start the dev server.</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">cd my-app</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm install</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm run dev</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Wow you made this react app with bestax-bulma, the easiest way to create a bulma app" src="https://bestax.io/assets/images/create-bestax-end-result-4d13fbff6545f9c2674df0e30ba31fca.png" width="3004" height="1574" class="img_WUYJ"></p>
<div class="theme-admonition theme-admonition-note admonition_QWZn alert alert--secondary"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_bqRL"><p>npm install
npm run dev</p><p>This is typical of any react vite project.</p></div></div>
<p>That's it. You now have a production-ready React + Bulma application powered by Vite, with Javascript/TypeScript support, icon libraries, and the full power of <a href="https://bestax.io/" target="_blank" rel="noopener noreferrer" class="">@allxsmith/bestax-bulma</a> at your fingertips.</p>
<p>Or, if you want even less interaction:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -y</span><br></div></code></pre></div></div>
<p>The <code>-y</code> flag uses all the defaults and gets you up and running in literal seconds.</p>
<p><strong>Want your AI agent to do it for you?</strong> Just tell Claude, ChatGPT, or your favorite coding assistant: "Use create-bestax to scaffold a new React + Bulma project" and watch it happen.</p>
<div class="theme-admonition theme-admonition-warning admonition_QWZn alert alert--warning"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Good Job!</div><div class="admonitionContent_bqRL"><p>I've held your attention so far...If you enjoy reading and learning, or like my soap boxing, keep on reading.</p><p><strong>If create-bestax saved you time, please star ⭐⭐⭐ the repository</strong>: <a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">github.com/allxsmith/bestax</a></p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-death-of-create-react-app">The Death of create-react-app<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#the-death-of-create-react-app" class="hash-link" aria-label="Direct link to The Death of create-react-app" title="Direct link to The Death of create-react-app" translate="no">​</a></h2>
<p>Remember <code>create-react-app</code>? It was revolutionary when it launched. One command to bootstrap a React project with zero configuration. It democratized React development and became the de facto standard for years.</p>
<p>But in 2023, the React team deprecated it.</p>
<p>The ecosystem moved on. Webpack gave way to faster bundlers. The JavaScript landscape evolved. And developers were left asking: "So... what now?"</p>
<p>The answer isn't clear-cut anymore. You could use:</p>
<ul>
<li class="">Next.js (but that's for server-side rendering)</li>
<li class="">Vite directly (but you need to configure the CSS and Icon framework yourself)</li>
<li class="">Manual setup (do you really want to configure Babel, ESLint, and bundlers from scratch?)</li>
</ul>
<p><strong>This is where create-bestax comes in.</strong> It's the spiritual successor to create-react-app for developers who want React + a CSS framework, specifically Bulma, without the ceremony.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="why-react-bulma-and-vite">Why React, Bulma, and Vite?<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#why-react-bulma-and-vite" class="hash-link" aria-label="Direct link to Why React, Bulma, and Vite?" title="Direct link to Why React, Bulma, and Vite?" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="react-the-king-of-frontend-frameworks">React: The King of Frontend Frameworks<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#react-the-king-of-frontend-frameworks" class="hash-link" aria-label="Direct link to React: The King of Frontend Frameworks" title="Direct link to React: The King of Frontend Frameworks" translate="no">​</a></h3>
<p>React remains the most popular frontend framework in 2025, and for good reason:</p>
<ul>
<li class=""><strong>Massive ecosystem</strong>: Libraries, tools, and solutions for every problem</li>
<li class=""><strong>Component-driven</strong>: Build encapsulated, reusable UI pieces</li>
<li class=""><strong>Declarative</strong>: Describe what you want, React handles the how</li>
<li class=""><strong>Industry standard</strong>: More jobs, more tutorials, more community support</li>
<li class=""><strong>Battle-tested</strong>: Used by Facebook, Netflix, Airbnb, and countless others</li>
</ul>
<p>Whether you're building a simple dashboard or a complex application, React's flexibility and ecosystem make it the go-to choice.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="bulma-the-css-framework-renaissance">Bulma: The CSS Framework Renaissance<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#bulma-the-css-framework-renaissance" class="hash-link" aria-label="Direct link to Bulma: The CSS Framework Renaissance" title="Direct link to Bulma: The CSS Framework Renaissance" translate="no">​</a></h3>
<p>Bulma sits proudly as the third most popular CSS framework, behind Tailwind and Bootstrap. But here's the thing: Bulma v1 just changed the game.</p>
<p>The 2024 release of Bulma v1 brought:</p>
<ul>
<li class=""><strong>CSS Grid support</strong>: Modern layouts without fighting the framework</li>
<li class=""><strong>HSL theming</strong>: Dynamic color customization with CSS variables</li>
<li class=""><strong>Skeleton components</strong>: Built-in loading states</li>
<li class=""><strong>Dark mode</strong>: First-class support out of the box</li>
<li class=""><strong>Prefix support</strong>: Use Bulma alongside other frameworks without conflicts</li>
</ul>
<p>This isn't your 2019 Bulma. This is a renaissance. Bulma is back, modernized, and ready for 2025.</p>
<p>Unlike Tailwind's utility-first approach (which some love, others find verbose), Bulma gives you semantic class names that are readable and maintainable. Unlike Bootstrap's JavaScript dependency, Bulma is pure CSS, giving you full control over behavior.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="vite-the-bundler-of-choice-in-2025">Vite: The Bundler of Choice in 2025<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#vite-the-bundler-of-choice-in-2025" class="hash-link" aria-label="Direct link to Vite: The Bundler of Choice in 2025" title="Direct link to Vite: The Bundler of Choice in 2025" translate="no">​</a></h3>
<p>If you're not using Vite in 2025, you're missing out. Period.</p>
<ul>
<li class=""><strong>Lightning fast</strong>: Cold starts in milliseconds, not seconds</li>
<li class=""><strong>Instant HMR</strong>: See changes instantly during development</li>
<li class=""><strong>Optimized builds</strong>: Production bundles that are lean and mean</li>
<li class=""><strong>Modern by default</strong>: ES modules, code splitting, tree shaking</li>
<li class=""><strong>Zero config</strong>: Works beautifully out of the box</li>
</ul>
<p>Vite has become the de facto standard for modern web development, replacing Webpack for new projects. Every create-bestax project uses Vite, so you get that blazing-fast developer experience from day one.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="introducing-allxsmithbestax-bulma">Introducing @allxsmith/bestax-bulma<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#introducing-allxsmithbestax-bulma" class="hash-link" aria-label="Direct link to Introducing @allxsmith/bestax-bulma" title="Direct link to Introducing @allxsmith/bestax-bulma" translate="no">​</a></h2>
<p>At the heart of create-bestax is <code>@allxsmith/bestax-bulma</code>, a modern React component library built specifically for Bulma v1.</p>
<p><strong>Why it's special:</strong></p>
<ul>
<li class=""><strong>99% test coverage</strong>: Every component thoroughly tested</li>
<li class=""><strong>TypeScript-first</strong>: Complete type safety and autocomplete</li>
<li class=""><strong>Feature-complete</strong>: All Bulma components as React components</li>
<li class=""><strong>Global configuration</strong>: Use <code>ConfigProvider</code> for prefixed classes</li>
<li class=""><strong>Dynamic theming</strong>: Runtime theme switching with CSS variables</li>
<li class=""><strong>Comprehensive docs</strong>: Full API documentation and guides at <a href="https://bestax.io/" target="_blank" rel="noopener noreferrer" class="">bestax.io</a></li>
<li class=""><strong>Active maintenance</strong>: Regular updates and responsive support</li>
</ul>
<p>Unlike older Bulma React libraries that are abandoned or haven't updated for v1, bestax-bulma is actively maintained and built for the modern Bulma ecosystem.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="the-create-bestax-interactive-experience">The create-bestax Interactive Experience<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#the-create-bestax-interactive-experience" class="hash-link" aria-label="Direct link to The create-bestax Interactive Experience" title="Direct link to The create-bestax Interactive Experience" translate="no">​</a></h2>
<p>When you run <code>npm create bestax@latest</code>, you get a friendly interactive CLI that asks you exactly what you want:</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="1-project-name">1. Project Name<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#1-project-name" class="hash-link" aria-label="Direct link to 1. Project Name" title="Direct link to 1. Project Name" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-text codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">? Project name: my-awesome-app</span><br></div></code></pre></div></div>
<p>Simple. Straightforward. Uses validation to ensure your project name is npm-compatible.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="2-select-your-framework">2. Select Your Framework<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#2-select-your-framework" class="hash-link" aria-label="Direct link to 2. Select Your Framework" title="Direct link to 2. Select Your Framework" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-text codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">? Select a framework:</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ❯ Vite</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Vite + TypeScript</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Select your framework" src="https://bestax.io/assets/images/create-bestax-select-framework-ef263012e8e034f43d77f413f32db2e9.png" width="2000" height="294" class="img_WUYJ"></p>
<p>Choose JavaScript or TypeScript. Both use Vite for that incredible developer experience.</p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="3-choose-your-bulma-flavor">3. Choose Your Bulma Flavor<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#3-choose-your-bulma-flavor" class="hash-link" aria-label="Direct link to 3. Choose Your Bulma Flavor" title="Direct link to 3. Choose Your Bulma Flavor" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-text codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">? Which Bulma CSS flavor would you like to use?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ❯ Complete (Recommended) - Full Bulma CSS with all components and helpers</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Prefixed - All classes prefixed with "bulma-" to avoid conflicts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    No Helpers - Core components only, no utility classes</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    No Helpers, Prefixed - Core components only with "bulma-" prefix</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    No Dark Mode - Light mode only, smaller bundle size</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Select Bulma Flavor " src="https://bestax.io/assets/images/create-bestax-bulma-flavor-f276e13b227a5911f4ab195cbcb8a7f1.png" width="2000" height="420" class="img_WUYJ"></p>
<p>This is where create-bestax shines. Bulma v1 provides multiple CSS distributions, and create-bestax makes it trivial to choose the right one:</p>
<ul>
<li class=""><strong>Complete</strong>: The full Bulma experience (recommended for most projects)</li>
<li class=""><strong>Prefixed</strong>: Need to use Bulma with Bootstrap or another framework? This prefixes all classes with <code>bulma-</code></li>
<li class=""><strong>No Helpers</strong>: Want a smaller bundle? Drop the utility classes</li>
<li class=""><strong>No Helpers, Prefixed</strong>: Combination of the above</li>
<li class=""><strong>No Dark Mode</strong>: If you only need light mode, save some bytes</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="4-add-an-icon-library">4. Add an Icon Library<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#4-add-an-icon-library" class="hash-link" aria-label="Direct link to 4. Add an Icon Library" title="Direct link to 4. Add an Icon Library" translate="no">​</a></h3>
<div class="language-text codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-text codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">? Would you like to add an icon library?</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  ❯ None (I'll add icons later)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Font Awesome</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Material Design Icons</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Ionicons</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Google Material Icons</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    Material Symbols</span><br></div></code></pre></div></div>
<p><img decoding="async" loading="lazy" alt="Select an Icon Framework" src="https://bestax.io/assets/images/create-bestax-icon-framework-bd6a071d02cb1aa0b33e67fc8cd7239d.png" width="2000" height="438" class="img_WUYJ"></p>
<p>Icons are essential for modern UIs. create-bestax automatically installs and configures your chosen icon library. No more hunting through documentation to figure out how to import CSS files correctly.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="command-line-options-for-power-users">Command Line Options for Power Users<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#command-line-options-for-power-users" class="hash-link" aria-label="Direct link to Command Line Options for Power Users" title="Direct link to Command Line Options for Power Users" translate="no">​</a></h2>
<p>Don't want to answer questions? Use flags:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain"># Create a TypeScript project with Font Awesome</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -t vite-ts -i fontawesome</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Use all defaults</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -y</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Prefixed Bulma with Material Design Icons</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -b prefixed -i mdi</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Full control</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-app -t vite-ts -b complete -i fontawesome</span><br></div></code></pre></div></div>
<p><strong>Available options:</strong></p>
<ul>
<li class=""><code>-t, --template &lt;template&gt;</code>: <code>vite</code> or <code>vite-ts</code></li>
<li class=""><code>-b, --bulma &lt;flavor&gt;</code>: <code>complete</code>, <code>prefixed</code>, <code>no-helpers</code>, <code>no-helpers-prefixed</code>, <code>no-dark-mode</code></li>
<li class=""><code>-i, --icon &lt;library&gt;</code>: <code>none</code>, <code>fontawesome</code>, <code>mdi</code>, <code>ionicons</code>, <code>material-icons</code>, <code>material-symbols</code></li>
<li class=""><code>-y, --yes</code>: Skip all prompts</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="what-you-get">What You Get<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#what-you-get" class="hash-link" aria-label="Direct link to What You Get" title="Direct link to What You Get" translate="no">​</a></h2>
<p>After running create-bestax, you get a fully configured project with:</p>
<ul>
<li class=""><strong>React</strong> with Vite for blazing-fast development</li>
<li class=""><strong>Bulma CSS v1</strong> in your chosen flavor</li>
<li class=""><strong>@allxsmith/bestax-bulma</strong> component library pre-installed</li>
<li class=""><strong>Icon library</strong> of your choice (optional)</li>
<li class=""><strong>Sample components</strong> demonstrating bestax-bulma usage</li>
<li class=""><strong>Development scripts</strong> ready to go</li>
<li class=""><strong>Production build</strong> configuration</li>
<li class=""><strong>TypeScript</strong> support (if you chose it)</li>
<li class=""><strong>Zero configuration</strong> needed</li>
</ul>
<p><img decoding="async" loading="lazy" alt="bestax-bulma CLI done" src="https://bestax.io/assets/images/create-bestax-cli-done-f425ac61c711ff2bfbb583fc4ed83ef8.png" width="2000" height="746" class="img_WUYJ"></p>
<p>Just run <code>npm install &amp;&amp; npm run dev</code> and you're coding.</p>
<p><img decoding="async" loading="lazy" alt="Wow you made this react app with bestax-bulma, the easiest way to create a bulma app" src="https://bestax.io/assets/images/create-bestax-end-result-4d13fbff6545f9c2674df0e30ba31fca.png" width="3004" height="1574" class="img_WUYJ"></p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="from-zero-to-running-in-under-30-seconds">From Zero to Running in Under 30 Seconds<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#from-zero-to-running-in-under-30-seconds" class="hash-link" aria-label="Direct link to From Zero to Running in Under 30 Seconds" title="Direct link to From Zero to Running in Under 30 Seconds" translate="no">​</a></h2>
<p>Let's time it:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain"># Second 0-5: Scaffold the project</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-demo-app -y</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Second 5-25: Install dependencies</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cd my-demo-app</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm install</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># Second 25-30: Start development server</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm run dev</span><br></div></code></pre></div></div>
<p><strong>Under 30 seconds from command to running application.</strong></p>
<p>Compare that to:</p>
<ol>
<li class="">Creating a Vite project manually</li>
<li class="">Installing React</li>
<li class="">Configuring React</li>
<li class="">Installing Bulma</li>
<li class="">Figuring out which Bulma CSS file to use</li>
<li class="">Installing bestax-bulma</li>
<li class="">Setting up icon libraries</li>
<li class="">Writing your first component</li>
</ol>
<p>You just saved yourself 30 minutes to 2 hours of setup time.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="for-the-ai-assisted-developers">For the AI-Assisted Developers<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#for-the-ai-assisted-developers" class="hash-link" aria-label="Direct link to For the AI-Assisted Developers" title="Direct link to For the AI-Assisted Developers" translate="no">​</a></h2>
<p>In 2025, many of us use AI coding assistants. Claude Code, GitHub Copilot, ChatGPT, Cursor - they're all incredible tools.</p>
<p>Here's the beauty of create-bestax: <strong>Your AI can use it too.</strong></p>
<p>Just tell your AI assistant:</p>
<blockquote>
<p>"Create a new React + Bulma project using create-bestax with TypeScript and Font Awesome icons"</p>
</blockquote>
<p>And watch it execute:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npm create bestax@latest my-project -t vite-ts -i fontawesome -y</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">cd my-project</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm install</span><br></div></code></pre></div></div>
<p>No ambiguity. No configuration decisions. Just working code.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="get-started-today">Get Started Today<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#get-started-today" class="hash-link" aria-label="Direct link to Get Started Today" title="Direct link to Get Started Today" translate="no">​</a></h2>
<p>Ready to build something amazing?</p>
<ol>
<li class=""><strong>Run the CLI</strong>: <code>npm create bestax@latest my-app</code></li>
<li class=""><strong>Install dependencies</strong>: <code>cd my-app &amp;&amp; npm install</code></li>
<li class=""><strong>Start developing</strong>: <code>npm run dev</code></li>
<li class=""><strong>Explore the docs</strong>: <a href="https://bestax.io/" target="_blank" rel="noopener noreferrer" class="">bestax.io</a></li>
<li class=""><strong>Star the repo</strong>: <a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">github.com/allxsmith/bestax</a></li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="support-the-project">Support the Project<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#support-the-project" class="hash-link" aria-label="Direct link to Support the Project" title="Direct link to Support the Project" translate="no">​</a></h2>
<p>Listen, I'll be honest with you. It's alot of work maintaining this entire ecosystem: the component library, the CLI, the documentation, the examples. I survive on a strict diet of GitHub stars and Diet Coke.</p>
<p><strong>If create-bestax saved you time, please star the repository</strong>: <a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">github.com/allxsmith/bestax</a></p>
<p>It helps more developers discover the project, and it keeps me caffeinated and motivated to keep improving it.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="whats-next">What's Next?<a href="https://bestax.io/blog/2025/11/12/installing-bulma-react-super-fast#whats-next" class="hash-link" aria-label="Direct link to What's Next?" title="Direct link to What's Next?" translate="no">​</a></h2>
<p>This is just the beginning of your journey with React, Bulma, and bestax-bulma. Here's what to explore next:</p>
<ul>
<li class=""><strong>Component Documentation</strong>: Browse all available components at <a href="https://bestax.io/docs/components" target="_blank" rel="noopener noreferrer" class="">bestax.io/docs/components</a></li>
<li class=""><strong>Theming Guide</strong>: Learn how to customize your app's look with dynamic themes</li>
<li class=""><strong>API Reference</strong>: Dive deep into component props and TypeScript types</li>
</ul>
<hr>
<p><strong>Have questions?</strong> <a href="https://github.com/allxsmith/bestax/issues" target="_blank" rel="noopener noreferrer" class="">Open an issue</a> or <a href="https://github.com/allxsmith/bestax/discussions" target="_blank" rel="noopener noreferrer" class="">start a discussion</a> on GitHub.</p>
<p><strong>Want to contribute?</strong> PRs are always welcome! Check out the <a href="https://github.com/allxsmith/bestax/blob/main/CONTRIBUTING.md" target="_blank" rel="noopener noreferrer" class="">contributing guide</a>.</p>
<p><strong>View on npm</strong>: <a href="https://www.npmjs.com/package/create-bestax" target="_blank" rel="noopener noreferrer" class="">create-bestax on npm</a></p>
<p>Happy coding! Now stop reading and start building.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="react" term="react"/>
        <category label="bulma" term="bulma"/>
        <category label="vite" term="vite"/>
        <category label="cli" term="cli"/>
        <category label="quickstart" term="quickstart"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Meet bestax-bulma: Modern React Components for Bulma CSS v1]]></title>
        <id>https://bestax.io/blog/2025/09/24/meet-bestax-bulma</id>
        <link href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma"/>
        <updated>2025-09-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Discover bestax-bulma, a TypeScript-first React component library with 99% test coverage, built for Bulma CSS v1 with modern features like CSS Grid and HSL theming]]></summary>
        <content type="html"><![CDATA[<p>Hey React developers! 👋 Are you looking for a modern, actively maintained component library for Bulma CSS? Let me introduce you to <strong>bestax-bulma</strong> (pronounced "bee-stacks"), a TypeScript-first React component library that brings the full power of Bulma v1 to your React applications.</p>
<p><strong>Opensource! Free as in beer🍺</strong></p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="why-another-bulma-react-library">Why Another Bulma React Library?<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#why-another-bulma-react-library" class="hash-link" aria-label="Direct link to Why Another Bulma React Library?" title="Direct link to Why Another Bulma React Library?" translate="no">​</a></h2>
<p>Great question! While there are other Bulma React libraries out there, many haven't been updated for Bulma v1 or are no longer actively maintained. bestax-bulma fills this gap with:</p>
<ul>
<li class="">🎯 <strong>Full Bulma v1 Support</strong>: Built specifically for the latest Bulma version</li>
<li class="">📊 <strong>99% Test Coverage</strong>: Every component thoroughly tested with React Testing Library</li>
<li class="">🔷 <strong>TypeScript-First</strong>: Complete type safety with comprehensive TypeScript definitions</li>
<li class="">🚀 <strong>Modern Build</strong>: Tree-shakeable ESM and CJS builds for optimal bundle sizes</li>
<li class="">📚 <strong>Rich Documentation</strong>: Comprehensive <a href="https://bestax.io/docs/api" target="_blank" rel="noopener noreferrer" class="">API docs</a> and <a href="https://bestax.io/docs/guides/getting-started" target="_blank" rel="noopener noreferrer" class="">getting started guides</a> available at bestax.io</li>
<li class="">⚡ <strong>Active Development</strong>: Regular updates and responsive maintenance</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="quick-start-in-2-minutes">Quick Start in 2 Minutes<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#quick-start-in-2-minutes" class="hash-link" aria-label="Direct link to Quick Start in 2 Minutes" title="Direct link to Quick Start in 2 Minutes" translate="no">​</a></h2>
<p>Getting started is as simple as:</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npm install @allxsmith/bestax-bulma</span><br></div></code></pre></div></div>
<p>Then import and use components:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Card</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Hero</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'bulma/css/bulma.min.css'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">App</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Header.Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Welcome to bestax-bulma!</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Header.Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Modern React components for Bulma CSS v1</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Get Started</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="showcasing-bulma-v1s-new-features">Showcasing Bulma v1's New Features<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#showcasing-bulma-v1s-new-features" class="hash-link" aria-label="Direct link to Showcasing Bulma v1's New Features" title="Direct link to Showcasing Bulma v1's New Features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="-skeleton-loading-states">🦴 Skeleton Loading States<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#-skeleton-loading-states" class="hash-link" aria-label="Direct link to 🦴 Skeleton Loading States" title="Direct link to 🦴 Skeleton Loading States" translate="no">​</a></h3>
<p>Bulma v1 introduced the Skeleton component for beautiful loading states:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Card</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> useState</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> useEffect </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">LoadingCard</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">isLoading</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setIsLoading</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">true</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token function" style="color:rgb(130, 170, 255)">useEffect</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> timer </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">setInterval</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token function" style="color:rgb(130, 170, 255)">setIsLoading</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">prev </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">!</span><span class="token plain">prev</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2000</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">clearInterval</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">timer</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">skeleton</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">isLoading</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Your content here!</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card.Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="-css-grid-support">🎨 CSS Grid Support<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#-css-grid-support" class="hash-link" aria-label="Direct link to 🎨 CSS Grid Support" title="Direct link to 🎨 CSS Grid Support" translate="no">​</a></h3>
<p>Take advantage of Bulma's new CSS Grid components for modern layouts:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Grid</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Cell</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Card</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">Dashboard</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Grid</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 1</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 2</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 3</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 4</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 5</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 6</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 7</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 8</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Cell 9</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Cell</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Grid</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="-dynamic-hsl-theming">🌈 Dynamic HSL Theming<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#-dynamic-hsl-theming" class="hash-link" aria-label="Direct link to 🌈 Dynamic HSL Theming" title="Direct link to 🌈 Dynamic HSL Theming" translate="no">​</a></h3>
<p>Bulma v1's HSL color system enables dynamic theming:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Theme</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ThemedApp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryH</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">280</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryS</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">100%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryL</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">45%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Themed Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="why-developers-love-bestax-bulma">Why Developers Love bestax-bulma<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#why-developers-love-bestax-bulma" class="hash-link" aria-label="Direct link to Why Developers Love bestax-bulma" title="Direct link to Why Developers Love bestax-bulma" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="1-compound-components-pattern">1. Compound Components Pattern<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#1-compound-components-pattern" class="hash-link" aria-label="Direct link to 1. Compound Components Pattern" title="Direct link to 1. Compound Components Pattern" translate="no">​</a></h3>
<p>We use the compound components pattern for intuitive, readable code:</p>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Modal</span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token imports"> useState </span><span class="token imports punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'react'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ModalExample</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">showModal</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setShowModal</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">closeModal</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">setShowModal</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setShowModal</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript boolean" style="color:rgb(255, 88, 116)">true</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Open Modal</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isActive</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">showModal</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Background</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">closeModal</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card.Head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card.Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Intuitive API</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card.Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Close</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">closeModal</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card.Head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Components that make sense!</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card.Foot</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">closeModal</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              Close</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card.Foot</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal.Card</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Modal</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="2-typescript-autocomplete-heaven">2. TypeScript Autocomplete Heaven<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#2-typescript-autocomplete-heaven" class="hash-link" aria-label="Direct link to 2. TypeScript Autocomplete Heaven" title="Direct link to 2. TypeScript Autocomplete Heaven" translate="no">​</a></h3>
<p>Every prop is fully typed, giving you incredible IDE support:</p>
<div class="language-typescript codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-typescript codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Full autocomplete for colors, sizes, and more</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">Button</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  color</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"primary"</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// 'primary' | 'link' | 'info' | 'success' | ...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  size</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"large"</span><span class="token plain">     </span><span class="token comment" style="color:#999988;font-style:italic">// 'small' | 'normal' | 'medium' | 'large'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  isLoading</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  isOutlined</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token operator" style="color:#393A34">/</span><span class="token operator" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="3-zero-configuration">3. Zero Configuration<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#3-zero-configuration" class="hash-link" aria-label="Direct link to 3. Zero Configuration" title="Direct link to 3. Zero Configuration" translate="no">​</a></h3>
<p>Unlike many CSS-in-JS solutions, bestax-bulma works with standard Bulma CSS. No build configuration, no CSS extraction, just import and go!</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="try-it-live">Try It Live<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#try-it-live" class="hash-link" aria-label="Direct link to Try It Live" title="Direct link to Try It Live" translate="no">​</a></h2>
<p>Want to see bestax-bulma in action? Check out <a href="https://bestax.io/" target="_blank" rel="noopener noreferrer" class="">bestax.io</a> for comprehensive examples and interactive documentation. Storybook is also available for browsing individual component variations.</p>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="comparison-with-alternatives">Comparison with Alternatives<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#comparison-with-alternatives" class="hash-link" aria-label="Direct link to Comparison with Alternatives" title="Direct link to Comparison with Alternatives" translate="no">​</a></h2>
<table><thead><tr><th>Feature</th><th>bestax-bulma</th><th>react-bulma-components</th><th>rbx</th><th>bulma-react</th></tr></thead><tbody><tr><td>Bulma v1 Support</td><td>✅</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>TypeScript</td><td>✅ Built-in</td><td>⚠️ Separate</td><td>✅</td><td>❌</td></tr><tr><td>Test Coverage</td><td>99%</td><td>~70%</td><td>~100%</td><td>Unknown</td></tr><tr><td>Active Maintenance</td><td>✅ 2025</td><td>⚠️ 2021</td><td>❌ 2019</td><td>❌ 2015</td></tr><tr><td>Tree Shaking</td><td>✅</td><td>✅</td><td>✅</td><td>❌</td></tr><tr><td>Compound Components</td><td>✅</td><td>❌</td><td>✅</td><td>❌</td></tr><tr><td>Comprehensive Docs</td><td>✅</td><td>❌</td><td>⚠️ Partial</td><td>❌</td></tr><tr><td>Real CSS Grids</td><td>✅</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>Configurable</td><td>✅</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>Theme Support</td><td>✅</td><td>❌</td><td>❌</td><td>❌</td></tr><tr><td>Quick Start CLI</td><td>✅</td><td>❌</td><td>❌</td><td>❌</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="get-started-today">Get Started Today<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#get-started-today" class="hash-link" aria-label="Direct link to Get Started Today" title="Direct link to Get Started Today" translate="no">​</a></h2>
<p>Ready to modernize your Bulma React experience?</p>
<ol>
<li class=""><strong>Install</strong>: <code>npm install @allxsmith/bestax-bulma</code></li>
<li class=""><strong>Explore</strong>: Check our <a href="https://bestax.io/" target="_blank" rel="noopener noreferrer" class="">documentation</a></li>
<li class=""><strong>Build</strong>: Start creating beautiful UIs with modern React patterns</li>
<li class=""><strong>Contribute</strong>: Join us on <a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">GitHub</a></li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="whats-next">What's Next?<a href="https://bestax.io/blog/2025/09/24/meet-bestax-bulma#whats-next" class="hash-link" aria-label="Direct link to What's Next?" title="Direct link to What's Next?" translate="no">​</a></h2>
<p>This is just the beginning! In the next parts of this series, we'll dive deep into:</p>
<ul>
<li class="">Part 2: Building Beautiful UIs with Core Components</li>
<li class="">Part 3: Forms, Data Display, and Advanced Patterns</li>
</ul>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_bqRL"><p>👤 Follow me <a href="https://github.com/allxsmith" target="_blank" rel="noopener noreferrer" class="">@allxsmith</a> for updates!</p><p>⭐ Feel free to star the <a href="https://github.com/allxsmith/bestax" target="_blank" rel="noopener noreferrer" class="">repository</a> if you find it helpful!</p></div></div>
<hr>
<p><strong>Have questions or feedback?</strong> <a href="https://github.com/allxsmith/bestax/issues" target="_blank" rel="noopener noreferrer" class="">Create an issue</a> or <a href="https://github.com/allxsmith/bestax/discussions" target="_blank" rel="noopener noreferrer" class="">start a discussion</a> on GitHub for new ideas!</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="react" term="react"/>
        <category label="bulma" term="bulma"/>
        <category label="typescript" term="typescript"/>
        <category label="components" term="components"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Configurable and Themeable]]></title>
        <id>https://bestax.io/blog/prefixed-bulma-and-theming</id>
        <link href="https://bestax.io/blog/prefixed-bulma-and-theming"/>
        <updated>2025-08-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We're excited to announce version 2.0.0 of @allxsmith/bestax-bulma, bringing powerful new configuration and theming capabilities that fully embrace Bulma v1's modern approach to CSS customization.]]></summary>
        <content type="html"><![CDATA[<p>We're excited to announce version 2.0.0 of @allxsmith/bestax-bulma, bringing powerful new configuration and theming capabilities that fully embrace Bulma v1's modern approach to CSS customization.</p>
<p>This release introduces two major features that transform how you can customize and integrate Bulma components: <strong>ConfigProvider</strong> for global component configuration (including CSS class prefixing), and <strong>Theme</strong> for comprehensive CSS variable-based theming.</p>
<p><img decoding="async" loading="lazy" alt="Theming" src="https://bestax.io/assets/images/robot-painting-0109187878105cb1d4a9d172af9f6e29.png" width="2602" height="1536" class="img_WUYJ"></p>
<p>With ConfigProvider, you can now globally configure all bestax-bulma components using the <code>useConfig</code> hook, enabling seamless integration with other CSS frameworks through class prefixing. The new Theme component allows you to customize Bulma's appearance using CSS variables at both global and scoped nested levels, giving you unprecedented control over your design system.</p>
<div class="theme-admonition theme-admonition-info admonition_QWZn alert alert--info"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>2.x.x compatible with 1.x.x</div><div class="admonitionContent_bqRL"><p>We need to address an important note about versioning: we accidentally bumped this release to 2.0.0 instead of the intended 1.2.0. This became a major release due to a semantic-release configuration issue, when it should have been a minor release.</p><p>However, <strong>all changes are completely backward compatible</strong> - version 2.x.x is fully compatible with 1.x.x. We decided it's easier to move forward with the new version number rather than create confusion with republishing.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="configprovider-global-component-configuration">ConfigProvider: Global Component Configuration<a href="https://bestax.io/blog/prefixed-bulma-and-theming#configprovider-global-component-configuration" class="hash-link" aria-label="Direct link to ConfigProvider: Global Component Configuration" title="Direct link to ConfigProvider: Global Component Configuration" translate="no">​</a></h2>
<p>The new <code>ConfigProvider</code> component addresses a critical need in modern web development: the ability to namespace CSS classes to avoid conflicts. This becomes especially important with Bulma v1's enhanced support for prefixed CSS classes.</p>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_bqRL"><p>While not ideal, you can use prefixed css classes when integrating multiple CSS frameworks. Prefixed css classes help avoid class name collisions.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="why-we-need-configprovider">Why We Need ConfigProvider<a href="https://bestax.io/blog/prefixed-bulma-and-theming#why-we-need-configprovider" class="hash-link" aria-label="Direct link to Why We Need ConfigProvider" title="Direct link to Why We Need ConfigProvider" translate="no">​</a></h3>
<p>When building applications, you may want to prefix your Bulma CSS classes with a custom namespace like "bulma-" or your own brand name. This provides better control over your CSS architecture and helps organize your styles. Bulma v1 recognized this need and now supports CSS class prefixing out of the box. While prefixing can also help in non-ideal situations where you need to integrate with other CSS frameworks like Bootstrap or Tailwind CSS, the primary benefit is having organized, namespaced CSS that follows your project's conventions.</p>
<p>The ConfigProvider enables you to:</p>
<ul>
<li class="">Prefix all Bulma CSS classes with a custom namespace (e.g., <code>bulma-</code>)</li>
<li class="">Integrate seamlessly with other CSS frameworks</li>
<li class="">Support custom Bulma builds with your own prefixes</li>
<li class="">Maintain consistent configuration across your entire component tree</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="supporting-prefixed-bulma-css">Supporting Prefixed Bulma CSS<a href="https://bestax.io/blog/prefixed-bulma-and-theming#supporting-prefixed-bulma-css" class="hash-link" aria-label="Direct link to Supporting Prefixed Bulma CSS" title="Direct link to Supporting Prefixed Bulma CSS" translate="no">​</a></h3>
<p>If you're using the official prefixed Bulma CSS file (<code>bulma-prefixed.min.css</code>), you can now use it seamlessly:</p>
<div class="language-tsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-tsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ConfigProvider</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Box</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Title</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'bulma/css/versions/bulma-prefixed.min.css'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">App</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">classPrefix</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bulma-</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Box</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Title</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Prefixed Bulma Components</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Title</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">This uses bulma-button class</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Box</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>This renders the following HTML with prefixed CSS classes:</p>
<div class="language-html codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_EUZU">Html Markup from example above</div><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-html codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bulma-box</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bulma-title</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Prefixed Bulma Components</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h1</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    All components inside this ConfigProvider will have their CSS classes</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    prefixed with "bulma-". This allows you to use Bulma alongside other CSS</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    frameworks without class name conflicts.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">class</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bulma-button bulma-is-primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    This uses bulma-button class</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="custom-prefix-support">Custom Prefix Support<a href="https://bestax.io/blog/prefixed-bulma-and-theming#custom-prefix-support" class="hash-link" aria-label="Direct link to Custom Prefix Support" title="Direct link to Custom Prefix Support" translate="no">​</a></h3>
<p>For teams building their own Bulma CSS with custom prefixes, you can configure your SASS build and use the same prefix in ConfigProvider:</p>
<p>Setup Bulma and SASS</p>
<div class="language-bash codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-bash codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">npm install bulma sass</span><br></div></code></pre></div></div>
<p>Create this custom Sass file</p>
<div class="language-scss codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_EUZU">src/styles/mycompany-bulma.scss</div><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-scss codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">// In your SASS build</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">@use 'bulma/sass' with (</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  $class-prefix: 'mycompany-'</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">);</span><br></div></code></pre></div></div>
<p>Finally, import the custom Sass file into your react entry point</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_EUZU">src/index.js</div><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">ConfigProvider</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Box</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Title</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> </span><span class="token imports maybe-class-name">Button</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@allxsmith/bestax-bulma'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'./styles/mycompany-bulma.scss'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function maybe-class-name" style="color:#d73a49">App</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">classPrefix</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">mycompany-</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Box</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Title</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Prefixed Bulma Components</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Title</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">This uses bulma-button class</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Box</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="two-css-frameworks-example">Two CSS Frameworks Example<a href="https://bestax.io/blog/prefixed-bulma-and-theming#two-css-frameworks-example" class="hash-link" aria-label="Direct link to Two CSS Frameworks Example" title="Direct link to Two CSS Frameworks Example" translate="no">​</a></h3>
<p>Here's a comprehensive example showing ConfigProvider in action with the less ideal situation: <strong>two css frameworks coexisting together</strong>.</p>
<div class="language-tsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-tsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">FrameworkIntegration</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token comment" style="color:#999988;font-style:italic">/* Bootstrap section with equivalent markup */</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">div</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">className</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">card p-4 mb-4</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">h4</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">className</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">card-title</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Bootstrap Components</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">h4</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">className</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">card-text</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">          This section uses Bootstrap classes for styling.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">className</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">btn btn-info</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Bootstrap Button</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token punctuation" style="color:#393A34">{</span><span class="token comment" style="color:#999988;font-style:italic">/* Prefixed Bulma components to avoid conflicts */</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">classPrefix</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">bulma-</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Box</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Title</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">size</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">4</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Prefixed Components</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Title</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">            All components inside this ConfigProvider will have their CSS</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">            classes prefixed with "bulma-", preventing conflicts with other</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">            frameworks.</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">p</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text">Prefixed Bulma Button</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Button</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Box</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">div</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="theme-component-css-variable-based-theming">Theme Component: CSS Variable-Based Theming<a href="https://bestax.io/blog/prefixed-bulma-and-theming#theme-component-css-variable-based-theming" class="hash-link" aria-label="Direct link to Theme Component: CSS Variable-Based Theming" title="Direct link to Theme Component: CSS Variable-Based Theming" translate="no">​</a></h2>
<p>The new <code>Theme</code> component leverages CSS custom properties (CSS variables) to provide dynamic, runtime theming capabilities that were previously only possible with SASS preprocessing. This approach offers significant advantages over traditional methods.</p>
<p><img decoding="async" loading="lazy" alt="Runtime Theming" src="https://bestax.io/assets/images/themed-trees-20a0df078501b249e61666a056fe0f0e.png" width="2560" height="1536" class="img_WUYJ"></p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="the-power-of-css-variables-vs-sass-variables">The Power of CSS Variables vs. SASS Variables<a href="https://bestax.io/blog/prefixed-bulma-and-theming#the-power-of-css-variables-vs-sass-variables" class="hash-link" aria-label="Direct link to The Power of CSS Variables vs. SASS Variables" title="Direct link to The Power of CSS Variables vs. SASS Variables" translate="no">​</a></h3>
<p>While SASS variables are compile-time constants, CSS variables are runtime values that can be:</p>
<ul>
<li class="">Changed dynamically with JavaScript</li>
<li class="">Inherited through the CSS cascade</li>
<li class="">Scoped to specific DOM elements</li>
<li class="">Modified without rebuilding your CSS</li>
</ul>
<p>This means you can create themes that respond to user preferences, time of day, or any other runtime condition:</p>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_bqRL"><p>These theme examples look best in dark mode. Switch to dark mode using the toggle in the top navigation for the optimal viewing experience.</p></div></div>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">DynamicTheming</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">isLunar</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setIsLunar</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token boolean" style="color:rgb(255, 88, 116)">false</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">signees</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> setSignees</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">useState</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'John Adams'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Samuel Adams'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token string" style="color:rgb(173, 219, 103)">'Benjamin Franklin'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> theme </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useMemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-scheme-h'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> isLunar </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'260'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'220'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">// midnight: purple hue, sky: light blue hue</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-scheme-s'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> isLunar </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'30%'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'90%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">// midnight: muted saturation, sky: vibrant</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-light-l'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> isLunar </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'8%'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'10%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">// midnight: very dark, sky: very light</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-dark-l'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> isLunar </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'85%'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'90%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">// midnight: light text, sky: dark text</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">isLunar</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:rgb(130, 170, 255)">handleSubmit</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> e </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">preventDefault</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> formData </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(127, 219, 202)">new</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 139)">FormData</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">target</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> name </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> formData</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(173, 219, 103)">'name'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token function" style="color:rgb(130, 170, 255)">setSignees</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token spread operator" style="color:rgb(127, 219, 202)">...</span><span class="token plain">signees</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      e</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token property-access">target</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">reset</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">bulmaVars</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">theme</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRoot</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onClick</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)"> </span><span class="token tag script language-javascript function" style="color:rgb(130, 170, 255)">setIsLunar</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token tag script language-javascript operator" style="color:rgb(127, 219, 202)">!</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">isLunar</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mb</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        Toggle </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">isLunar </span><span class="token operator" style="color:rgb(127, 219, 202)">?</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Lunar'</span><span class="token plain"> </span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'Midnight'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"> Theme</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">A Call to Action</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Fellow Citizens,</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"> it is with great conviction</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                that we present this petition to secure the blessings of liberty</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                for ourselves and our posterity. As the immortal words of our</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                founding documents declare, when a long train of abuses and</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                usurpations evinces a design to reduce them under absolute</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                despotism, it is their right, it is their duty, to throw off</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                such government.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                The experience of ages has proven that mankind are more disposed</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                to suffer, while evils are sufferable, than to right themselves</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                by abolishing the forms to which they are accustomed. But when</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                circumstances compel us to action, we must not hesitate to</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                secure our fundamental rights.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">em</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  Join your fellow citizens in this righteous cause. Add your</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  name to this petition and let your voice be heard in the halls</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  of justice.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">em</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">cite</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">-- Alexander Hamilton</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">cite</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Sign the Petition</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">form</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">onSubmit</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">handleSubmit</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Full Name</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">                      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">name</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">                      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Enter your full name</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">                      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">required</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">                    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">State</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">state</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Your state of residence</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">submit</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                      Add My Signature</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">form</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">6</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">mt</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                Current Signatories</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">ul</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">signees</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">map</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> index</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">                    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">li</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">key</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">index</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">li</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">                  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">ul</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Column</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Columns</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="css-variables-vs-utility-classes">CSS Variables vs. Utility Classes<a href="https://bestax.io/blog/prefixed-bulma-and-theming#css-variables-vs-utility-classes" class="hash-link" aria-label="Direct link to CSS Variables vs. Utility Classes" title="Direct link to CSS Variables vs. Utility Classes" translate="no">​</a></h3>
<p>While utility classes like Tailwind CSS provide granular control, CSS variables offer superior theming capabilities:</p>
<ul>
<li class=""><strong>Semantic theming</strong>: Define color roles (primary, secondary) rather than specific colors</li>
<li class=""><strong>Consistent relationships</strong>: Automatic hover/active states based on base colors</li>
<li class=""><strong>Global consistency</strong>: Change one variable, update entire design system</li>
<li class=""><strong>Performance</strong>: No class proliferation or CSS bloat</li>
</ul>
<div class="theme-admonition theme-admonition-note admonition_QWZn alert alert--secondary"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_bqRL"><p>Tailwind CSS is a fantastic framework with CSS variable support built into it's core theming.</p><p>Tailwind CSS primarily encourages the use of utility classes over directly manipulating CSS variables for styling, as its core philosophy is "utility-first,"</p></div></div>
<p><img decoding="async" loading="lazy" alt="Variables vs Utilities" src="https://bestax.io/assets/images/paint-brush-dual-9c539f84dbaa4a775990866b14b3aae2.png" width="2816" height="1536" class="img_WUYJ"></p>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="global-and-scoped-theming">Global and Scoped Theming<a href="https://bestax.io/blog/prefixed-bulma-and-theming#global-and-scoped-theming" class="hash-link" aria-label="Direct link to Global and Scoped Theming" title="Direct link to Global and Scoped Theming" translate="no">​</a></h3>
<p>The Theme component supports both global theming (affecting your entire application) and scoped theming (affecting only specific sections):</p>
<h4 class="anchor anchorTargetStickyNavbar_hpRn" id="global-theme-example">Global Theme Example<a href="https://bestax.io/blog/prefixed-bulma-and-theming#global-theme-example" class="hash-link" aria-label="Direct link to Global Theme Example" title="Direct link to Global Theme Example" translate="no">​</a></h4>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_bqRL"><p>These theme examples look best in dark mode. Switch to dark mode using the toggle in the top navigation for the optimal viewing experience.</p></div></div>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">GlobalSunsetTheme</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">const</span><span class="token plain"> sunsetTheme </span><span class="token operator" style="color:rgb(127, 219, 202)">=</span><span class="token plain"> </span><span class="token maybe-class-name">React</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token method function property-access" style="color:rgb(130, 170, 255)">useMemo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:rgb(127, 219, 202)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-scheme-h'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'18'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">// sunset orange hue</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-scheme-s'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'90%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-primary-h'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'25'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-primary-s'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'85%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token string-property property" style="color:rgb(128, 203, 196)">'--bulma-primary-l'</span><span class="token operator" style="color:rgb(127, 219, 202)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(173, 219, 103)">'55%'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">App</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">3</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Contact Us</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Name</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Your full name</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">type</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">email</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">your.email@example.com</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">label</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">Message</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Input</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">placeholder</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">How can we help you?</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Send Message</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Control</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Field</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">bulmaVars</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:rgb(199, 146, 234)">=</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token tag script language-javascript" style="color:rgb(127, 219, 202)">sunsetTheme</span><span class="token tag script language-javascript punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">App</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token comment" style="color:rgb(99, 119, 119);font-style:italic">/* Entire app uses sunset theme */</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h4 class="anchor anchorTargetStickyNavbar_hpRn" id="scoped-theme-example">Scoped Theme Example<a href="https://bestax.io/blog/prefixed-bulma-and-theming#scoped-theme-example" class="hash-link" aria-label="Direct link to Scoped Theme Example" title="Direct link to Scoped Theme Example" translate="no">​</a></h4>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_bqRL"><p>These theme examples look best in dark mode. Switch to dark mode using the toggle in the top navigation for the optimal viewing experience.</p></div></div>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ScopedTheming</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Standard Theme Header</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryH</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">120</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryS</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">100%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryL</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">40%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Forest Green Section</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Green Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryH</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">280</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryS</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">100%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryL</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">45%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Purple Section</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Purple Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Box</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Block</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">div</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="advanced-theming-with-complete-color-schemes">Advanced Theming with Complete Color Schemes<a href="https://bestax.io/blog/prefixed-bulma-and-theming#advanced-theming-with-complete-color-schemes" class="hash-link" aria-label="Direct link to Advanced Theming with Complete Color Schemes" title="Direct link to Advanced Theming with Complete Color Schemes" translate="no">​</a></h3>
<p>The Theme component supports all 500+ Bulma CSS variables, allowing for comprehensive design system customization:</p>
<div class="theme-admonition theme-admonition-tip admonition_QWZn alert alert--success"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_bqRL"><p>These theme examples look best in dark mode. Switch to dark mode using the toggle in the top navigation for the optimal viewing experience.</p></div></div>
<div class="live-preview-slot"></div><div class="browserWindow_hz_A"><div class="browserWindowHeader_mpcG"><div class="buttons_jQ9H"><span class="dot_F0q0" style="background:#f25f58"></span><span class="dot_F0q0" style="background:#fbbe3c"></span><span class="dot_F0q0" style="background:#58cb42"></span></div><div class="browserWindowAddressBar_A9Wl"></div><div class="buttonGroup_xFFS"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_VvDU" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_v_3i"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_poOR"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonErrorIcon_fRIh"><g stroke="#d53035" stroke-width="3"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></span></button></div></div><div class="browserWindowBody_w27R"><div style="background-color:var(--prism-background-color);font:var(--ifm-code-font-size) / var(--ifm-pre-line-height) var(--ifm-font-family-monospace)"><pre class="prism-code language-tsx" style="margin:0;outline:none;padding:10px;font-family:inherit;color:#d6deeb;background-color:#011627" spellcheck="false"><span class="token-line" style="color:#d6deeb"><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">ForestTheme</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">CompleteApp</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">medium</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Container</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Brand</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">5</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Forest Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Brand</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Menu</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.End</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Getting Started</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Components</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">a</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Themes</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">as</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">span</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">primary</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isInverted</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                      Download</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                  </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Item</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.End</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar.Menu</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Container</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Navbar</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Head</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Container</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textAlign</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">centered</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Forest Green Design</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Title</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">SubTitle</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Experience nature-inspired theming</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">SubTitle</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">color</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">success</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">size</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">large</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              Explore Components</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Button</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Container</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Body</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Foot</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Container</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">textAlign</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">centered</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag" style="color:rgb(127, 219, 202)">strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text">Forest Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">strong</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"> demonstrates comprehensive CSS</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">                variable theming.</span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">              </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(127, 219, 202)">p</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">            </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Content</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">          </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Container</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero.Foot</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Hero</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token keyword" style="color:rgb(127, 219, 202)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">schemeH</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">150</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag comment" style="color:rgb(99, 119, 119);font-style:italic">// forest green base</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">schemeS</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">50%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">lightL</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">80%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">darkL</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">18%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryH</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">160</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryS</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">60%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">primaryL</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">45%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">successH</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">120</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">warningH</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">45</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">dangerH</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">355</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">hoverBackgroundLDelta</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">4%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">activeBackgroundLDelta</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(127, 219, 202)">8%</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">      </span><span class="token tag attr-name" style="color:rgb(173, 219, 103);font-style:italic">isRoot</span><span class="token tag" style="color:rgb(127, 219, 202)"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token tag" style="color:rgb(127, 219, 202)">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">CompleteApp</span><span class="token tag" style="color:rgb(127, 219, 202)"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">/&gt;</span><span class="token plain-text"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag class-name" style="color:rgb(255, 203, 139)">Theme</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span>
</span><span class="token-line" style="color:#d6deeb">
</span></pre></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_hpRn" id="combining-configprovider-and-theme">Combining ConfigProvider and Theme<a href="https://bestax.io/blog/prefixed-bulma-and-theming#combining-configprovider-and-theme" class="hash-link" aria-label="Direct link to Combining ConfigProvider and Theme" title="Direct link to Combining ConfigProvider and Theme" translate="no">​</a></h3>
<p>The real power comes from combining both providers for maximum flexibility. <em>Okay maybe not real power per se...</em></p>
<div class="language-tsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-tsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">EnterpriseApp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">classPrefix</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">mycompany-</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Theme</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">primaryH</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">210</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">primaryS</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">100%</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">primaryL</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">45%</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">isRoot</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">App</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Theme</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">ConfigProvider</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_hpRn" id="summary-full-bulma-v1-support">Summary: Full Bulma v1 Support<a href="https://bestax.io/blog/prefixed-bulma-and-theming#summary-full-bulma-v1-support" class="hash-link" aria-label="Direct link to Summary: Full Bulma v1 Support" title="Direct link to Summary: Full Bulma v1 Support" translate="no">​</a></h2>
<p>With version 2.0.0, @allxsmith/bestax-bulma now fully supports the modern concepts introduced in Bulma v1, the latest version of Bulma in 2025. Our implementation provides:</p>
<ul>
<li class=""><strong>Complete CSS variable theming</strong> with 500+ supported variables</li>
<li class=""><strong>Class prefix configuration</strong> for framework integration</li>
<li class=""><strong>Runtime theme switching</strong> capabilities</li>
<li class=""><strong>Scoped and global theming</strong> options</li>
<li class=""><strong>TypeScript-first design</strong> with full type safety</li>
</ul>
<p>We're committed to continuing our support for Bulma as it evolves, and you can expect new modular configuration options in future releases of this package.</p>
<p>The foundation we've built with ConfigProvider and Theme components will serve as the basis for even more powerful customization features to come.</p>
<p>Whether you're building a simple website or a complex enterprise application, <strong>@allxsmith/bestax-bulma</strong> now provides the tools you need to create consistent, themeable, and maintainable user interfaces that leverage the full power of modern CSS.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="release" term="release"/>
        <category label="v2" term="v2"/>
        <category label="config" term="config"/>
        <category label="theme" term="theme"/>
        <category label="bulma" term="bulma"/>
        <category label="prefix" term="prefix"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[First full release]]></title>
        <id>https://bestax.io/blog/first-full-release</id>
        <link href="https://bestax.io/blog/first-full-release"/>
        <updated>2025-07-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We completed the first full release, with a react component per each Bulma component.]]></summary>
        <content type="html"><![CDATA[<p>We completed the first full release, with a react component per each Bulma component.</p>
<p>The first release is published under @allxsmith/bestax-bulma.</p>
<div class="theme-admonition theme-admonition-info admonition_QWZn alert alert--info"><div class="admonitionHeading_TAXR"><span class="admonitionIcon_Y96a"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_bqRL"><p>The package name changed from bestax-lib to bestax-bulma to help users search and find the project.</p><p>We reset the package version number from 1.x and 2.x to 1.0.0 since this is the first true release under the new package name.</p></div></div>
<p>Checkout our storybook, it has complete examples.</p>
<p>Shortly, we will eventually have live examples in this docusaurus site.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="release" term="release"/>
        <category label="v1" term="v1"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Generating docs with Typedoc]]></title>
        <id>https://bestax.io/blog/typedoc-generated-docs</id>
        <link href="https://bestax.io/blog/typedoc-generated-docs"/>
        <updated>2025-06-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Guess what? We finally have typedoc running and generating documentation for our project.]]></summary>
        <content type="html"><![CDATA[<p>Guess what? We finally have typedoc running and generating documentation for our project.</p>
<p>Eventually we'll start weaving in code examples with react-live for super cool live examples.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="typedoc" term="typedoc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Bulma Components - Delete, Icon, Image, Notification, Progress]]></title>
        <id>https://bestax.io/blog/delete-icon-image-notification-progress</id>
        <link href="https://bestax.io/blog/delete-icon-image-notification-progress"/>
        <updated>2025-05-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We've added a few components representing Bulma elements]]></summary>
        <content type="html"><![CDATA[<p>We've added a few components representing Bulma elements</p>
<ul>
<li class="">Delete</li>
<li class="">Icon</li>
<li class="">Image</li>
<li class="">Notication</li>
<li class="">Progress <em>bars</em></li>
</ul>
<p>Checkout the storybook stories for examples.</p>
<p>I decided to continue working on creating components before "working on generating markdown as part of the builds". I promise, it's coming, just not right now...</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="bulma" term="bulma"/>
        <category label="delete" term="delete"/>
        <category label="icon" term="icon"/>
        <category label="image" term="image"/>
        <category label="notification" term="notification"/>
        <category label="progress" term="progress"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Bulma Components - Block, Box, Content, Button]]></title>
        <id>https://bestax.io/blog/block-box-content-button</id>
        <link href="https://bestax.io/blog/block-box-content-button"/>
        <updated>2025-05-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We've added a few components representing Bulma elements]]></summary>
        <content type="html"><![CDATA[<p>We've added a few components representing Bulma elements</p>
<ul>
<li class="">Block</li>
<li class="">Box</li>
<li class="">Content</li>
<li class="">Button</li>
</ul>
<p>Checkout the storybook stories for examples.</p>
<p>Docusaurus documentation is forth coming. Our next steps will be generating markdown as part of the builds.</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="bulma" term="bulma"/>
        <category label="block" term="block"/>
        <category label="box" term="box"/>
        <category label="content" term="content"/>
        <category label="button" term="button"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bulma Helper]]></title>
        <id>https://bestax.io/blog/bulma-hook-helper</id>
        <link href="https://bestax.io/blog/bulma-hook-helper"/>
        <updated>2025-05-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We've add a react hook that turns properties into bulma helper classes. It's pretty cool. You can add this to any custom component to leverage Bulma helper classes through properties.]]></summary>
        <content type="html"><![CDATA[<p>We've add a react hook that turns properties into bulma helper classes. It's pretty cool. You can add this to any custom component to leverage Bulma helper classes through properties.</p>
<p>All of the components in this package use this helper <code>useBulmaClasses</code>.</p>
<p>To implement this it's pretty simple.</p>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> bulmaHelperClasses rest </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useBulmaClasses</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">color</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> textColor </span><span class="token comment" style="color:#999988;font-style:italic">// Map to has-text-{color}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token literal-property property" style="color:#36acaa">backgroundColor</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> bgColor </span><span class="token comment" style="color:#999988;font-style:italic">// Map to has-background-{color}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">props </span><span class="token comment" style="color:#999988;font-style:italic">// Spread remaining Bulma props</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<div class="language-jsx codeBlockContainer_vtfk theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_EUZU">Implementation</div><div class="codeBlockContent_nEx9"><pre tabindex="0" class="prism-code language-jsx codeBlock_eQQK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Nzw9"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">MyComponent</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">m</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">2</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">color</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">primary</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></div></code></pre></div></div>
<p>The available properties are:</p>
<ul>
<li class="">color</li>
<li class="">backgroundColor</li>
<li class="">colorShade</li>
<li class="">m</li>
<li class="">mt</li>
<li class="">mr</li>
<li class="">mb</li>
<li class="">ml</li>
<li class="">mx</li>
<li class="">my</li>
<li class="">p</li>
<li class="">pt</li>
<li class="">pr</li>
<li class="">pb</li>
<li class="">pl</li>
<li class="">px</li>
<li class="">py</li>
<li class="">textSize</li>
<li class="">textAlign</li>
<li class="">textTransform</li>
<li class="">textWeight</li>
<li class="">fontFamily</li>
<li class="">display</li>
<li class="">visibility</li>
<li class="">flexDirection</li>
<li class="">flexWrap</li>
<li class="">justifyContent</li>
<li class="">alignContent</li>
<li class="">alignItems</li>
<li class="">alignSelf</li>
<li class="">flexGrow</li>
<li class="">flexShrink</li>
<li class="">float</li>
<li class="">overflow</li>
<li class="">overlay</li>
<li class="">interaction</li>
<li class="">radius</li>
<li class="">shadow</li>
<li class="">responsive</li>
<li class="">viewport</li>
</ul>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="bulma" term="bulma"/>
        <category label="css" term="css"/>
        <category label="props" term="props"/>
        <category label="hook" term="hook"/>
        <category label="helper" term="helper"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Changeset Action Signed Pull Request]]></title>
        <id>https://bestax.io/blog/changeset-action-signed-pr</id>
        <link href="https://bestax.io/blog/changeset-action-signed-pr"/>
        <updated>2025-05-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[After much suffering, GPG signing on the PRs is finally working.]]></summary>
        <content type="html"><![CDATA[<p>After much suffering, GPG signing on the PRs is finally working.</p>
<p>Turns out changeset/action@v1 recently added this feature. Signed commits. To enable it, we enabled an option:</p>
<p>commitMode: 'github-api'</p>]]></content>
        <author>
            <name>Alex Smith</name>
            <uri>https://github.com/allxsmith</uri>
        </author>
        <category label="github" term="github"/>
        <category label="Github Actions" term="Github Actions"/>
        <category label="Component Library" term="Component Library"/>
        <category label="changeset" term="changeset"/>
        <category label="publish" term="publish"/>
        <category label="version" term="version"/>
        <category label="signed" term="signed"/>
        <category label="gpg" term="gpg"/>
    </entry>
</feed>