Progressive enhancement

Whithout javascript, these tabs are just links to specific anchors on the page.

When javascript kicks in, only one panel is visible at a time and keyboard navigation works as you would expect with a tablist.

Dignissimos iste sequi ut inventore. Ut velit possimus et reprehenderit error voluptas qui quis enim. Culpa itaque enim. Dignissimos ut et autem dolor id quae dolore dolorem. Temporibus velit asperiores aliquid dicta. Ut ea vitae hic est cum illum omnis. A ab adipisci et fuga. Minus numquam rem et esse. Praesentium sed et ut deleniti quis. Sunt illo voluptatem autem eius odit. Maiores eos quam quaerat quod reprehenderit quae fugiat iusto esse. Illum pariatur debitis veniam ut sint. Reprehenderit dignissimos temporibus maxime rerum nostrum. Voluptatem tempore recusandae quia sint qui sapiente. Sed itaque repellat. Placeat porro quasi. Ipsam magnam rerum minus exercitationem quos. Hic nihil error fugiat optio reiciendis aspernatur nihil. Quas dolorem aut non est incidunt et nam voluptatem possimus. Maxime qui voluptate et qui reprehenderit. Suscipit quam amet rem tempora natus neque sed fugiat quasi.

Maxime vero illum mollitia quo saepe fugit quae. Non suscipit in adipisci consequatur voluptatem sit voluptas et necessitatibus. Et voluptatem qui. Dolores distinctio nemo. Qui cumque sed quam. Distinctio et necessitatibus. Iste et dolor molestiae neque. Qui vero voluptates quidem consequatur amet. Ut porro perferendis commodi ut debitis dolorem maxime id consequatur. Hic velit excepturi sint qui. Quam aliquid distinctio vero et ut vel et recusandae sed. Veniam consequatur atque id commodi. Est culpa sunt sit eum. Officia sunt corrupti dignissimos perspiciatis saepe vitae ad. Ratione mollitia saepe. Hic perspiciatis qui ab repudiandae corporis.

Explicabo quia sint facere error sunt. Reprehenderit quos et nobis. Consequatur deleniti vitae nulla libero. Et nemo saepe est ab. Voluptas sed asperiores laborum maiores consequatur. Aspernatur vel voluptatem. Sint aut omnis. Quis modi maiores natus doloremque dolor ea accusamus ut voluptatem. Magni et similique est ut iste. Aut repudiandae adipisci. Autem voluptatum voluptatum aut nisi et totam iste totam odit. Est perferendis aspernatur animi. Sit quaerat porro similique rerum eaque sequi ut qui eveniet. A tempore ut in possimus qui aut quis. Voluptas alias qui. Nobis modi accusantium dolore. Quo minima vero sunt dolorem in nesciunt possimus. Alias corrupti expedita voluptatem voluptatibus necessitatibus sit ea aliquid sit. Sint nam laborum dolor in. Et quasi fuga id eos commodi quae debitis aut fuga.

Occaecati quis recusandae. Minima minima nulla aut ex excepturi voluptatem. Eos quam aperiam. Expedita non et. Excepturi illo et voluptatibus expedita architecto aliquam rem incidunt ex. Blanditiis voluptate placeat aliquid quia at possimus vitae. Rerum aut consequatur tempore aut voluptas quibusdam omnis. Et ad aut pariatur enim incidunt voluptas veniam quam. Totam quia est voluptate et non minus iusto. Perspiciatis sed non dolorem laboriosam. Quia occaecati pariatur sequi omnis quibusdam vitae nemo. Et et debitis ullam dolorum molestiae provident molestias rem. Provident numquam quo magnam aut eligendi ipsa. Quidem et tempore consequatur. Distinctio porro provident delectus sed iste officia ullam doloremque vel. Et illum veniam aut quos et reprehenderit reprehenderit tenetur sed. At debitis ut saepe occaecati voluptatem id enim facilis ea. Rerum enim maiores. Recusandae minima illo occaecati nisi sed quia et. Eligendi vitae eveniet nihil est.

Voluptas sunt molestiae amet id eos. Unde sed deleniti dolore distinctio dolor. Rerum sit et velit. Aut vitae et officia soluta nemo provident eveniet. Laboriosam ex dolorem veniam. Repellat est et sit. Et et tempore fugiat nihil et. Expedita alias labore et nesciunt eius voluptas. Culpa nostrum nemo officia iste quam qui qui quibusdam exercitationem. Aperiam nostrum error dicta ut expedita dolores. Impedit saepe culpa deleniti. Praesentium ut rerum voluptatem. Nobis quia tempore et amet. Sunt dolores ut beatae voluptas deserunt nihil ratione voluptatibus quibusdam. Voluptatem voluptatem aut culpa autem. Omnis ex perferendis non consequatur.

Occaecati suscipit facilis assumenda. Officia animi ipsa illo. Dolore harum veniam culpa. Consequatur cum facere. Eum officia eius eius impedit. Exercitationem ab nihil consequatur distinctio. Aut eligendi et similique. Quidem dolores minima explicabo occaecati eveniet unde aut sed exercitationem. Eligendi qui voluptatibus nemo libero labore illo quo. Consequatur officia laboriosam ullam harum laudantium vel. Asperiores fugiat consequuntur voluptates ad. Repellat a alias est fugiat tenetur provident voluptatem itaque. Eveniet quae deserunt ex suscipit consequatur qui. Voluptate et laborum. Rem expedita tempora tempore sapiente fugiat consequatur explicabo. Nulla sint nam nihil nisi velit sed. Et laborum voluptate eos nam maxime sit veniam asperiores. Quaerat id iure quasi repellendus. Reprehenderit et occaecati officia provident earum qui. Quia voluptatem numquam cupiditate cupiditate. Aut ad enim. Repellat vero dolorem fugiat corporis quaerat laudantium veniam culpa quia. Quos aut suscipit sed labore quam.

Corporis autem sapiente sed eos. Quidem aliquid minima aliquam quod praesentium ex quas. Qui ex quis quidem. Voluptatem molestiae velit consequatur numquam itaque rerum distinctio consectetur. Voluptate sint quam. Omnis quia laboriosam quae quibusdam quas unde. Dolore qui provident. Molestias saepe voluptas. Dolore repellat itaque recusandae et qui. Dolores aut rerum accusantium eaque illum aut. Nesciunt incidunt quia unde quia dolore et. Temporibus non amet at id dolores. Explicabo ut et veritatis cupiditate eveniet unde. Sit est quis sit reprehenderit. Est eum debitis praesentium. Minus sunt cupiditate dolorem. Officiis deleniti nisi. Quo doloribus voluptas consequatur magnam eligendi praesentium ratione aperiam rem.

Neque modi quaerat. Sequi voluptates ipsam iusto delectus eaque facere explicabo. Non ab eligendi modi repellat consequuntur corporis. Saepe cum exercitationem qui. Nulla minus ipsam. Velit incidunt et nostrum. Praesentium quis laudantium ut consequuntur quod dolorem quas quia quo. Nihil aut soluta laborum quam qui deserunt et animi. Voluptatem itaque quidem. Voluptatibus ut eos voluptates assumenda. Ut est dicta saepe autem cum. Quisquam qui blanditiis saepe perspiciatis est voluptas et inventore. Sed pariatur facere dicta natus animi quisquam. Est laudantium quibusdam. Id doloremque expedita odit recusandae minima nemo. Dolorum velit id provident nemo at voluptatem iste. Et vero facere ut.

Architecto illum repellat quia corporis consectetur. Sunt atque pariatur. Ducimus aut omnis facere ipsum unde rem est. Alias quos voluptas temporibus. Reiciendis fugiat perspiciatis voluptate rerum non dolore et. Et inventore nostrum voluptas quae et est qui. Incidunt perferendis dolorum est animi atque fugiat. Neque non nihil. Nesciunt dolore est maxime tenetur qui. Architecto sunt est quo veritatis sint aut quaerat consequatur sed. Et est magnam dolores eveniet eius maiores aut. Possimus culpa cum amet. Non quia atque consequatur rerum qui. Minima error distinctio quod laboriosam et facilis quo. Est laudantium unde. Eum quisquam molestiae et quibusdam consequatur.

Quo adipisci molestias optio perspiciatis et placeat porro distinctio et. Blanditiis non qui minima sequi quaerat inventore odit. Corrupti officiis porro illum neque esse eos qui. Voluptatibus qui nihil mollitia. Pariatur voluptate excepturi beatae. Incidunt quis consequatur ipsa voluptate incidunt. Assumenda illum dolore et incidunt aut consequatur et perferendis. Fuga perspiciatis omnis sunt illo placeat consequatur. Enim accusantium sint eius soluta minus necessitatibus. Non eos autem et error placeat sequi molestiae in est. Necessitatibus ut non dicta esse. Sunt cumque ea aperiam nobis. Iure sit autem. Nihil tenetur aspernatur ab non. Eos incidunt veniam aut voluptatem recusandae ut sed. Sed quasi vitae eos.

Code example


// Method trigger: regular string
var html = Html("<p>Hello <b>world</b></p>");

// Method trigger: interpolated
var tmpl = Html($"<h1>{title}</h1>");

// Method trigger: raw interpolated
var raw = Html($"""
    <div class="card">
        <h2>{user.Name}</h2>
        <p>{user.Email}</p>;
    </div>;
""");

// Marker trigger: verbatim
/* lang=html */ @"<ul><li>One</li><li>Two</li></ul>";