Home Work
SaaS developmentAI developmentAPI developmentMobile app developmentGoogle Ads managementHeadless ShopifyLaravel developmentNext.js developmentReact developmentTypeScript engineeringUI/UX designSEO & AEOEcommerce development
AI solutionsB2B platformsE-commerceHospitalityLead generationLogisticsEducationProcess automationSaaS platformsStartup MVPReal estateHealthcare
LegalHealthcareReal estateFinanceHospitality
The HagueRotterdamAmsterdamUtrechtEindhovenAlmereBredaArnhemNijmegenTilburgEnschedeGroningenLeidenDelftZoetermeerDen Bosch
Studio
AboutProcessLabBlogContact

Foutstaat met opnieuw proberen New

Widget that fails gracefully: loading, error with "Try again" (button gets a busy state) and recovery. Plus an offline banner driven by navigator online/offline events that reloads on reconnect; a demo button simulates offline. In production attach your own fetch to load().

Demo

Vrije plekken deze week

Fysiotherapie Kralingen

Beschikbaarheid laden...

How to use it

  1. Paste the HTML where the components should appear.
  2. Add the CSS to your stylesheet. All classes are prefixed, so nothing clashes with your own styles.
  3. Add the JavaScript and call init() with the element that contains the HTML.
<!-- Foutstaat met opnieuw proberen · NedDev · eigen werk. -->
<div class="jouw-container">
<div class="fss">
<div class="fss__bar"><span class="fss__eyebrow">Demo</span><button type="button" class="fss__ctl fss__off" aria-pressed="false">Simuleer offline</button><button type="button" class="fss__ctl fss__restart">Opnieuw starten</button></div>
<div class="fss__banner" role="status" hidden><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M3 7.5a10 10 0 0 1 14 0M5.5 10.5a6.5 6.5 0 0 1 9 0M8.2 13.4a2.6 2.6 0 0 1 3.6 0M3 3l14 14"/></svg><span class="fss__btxt">Je bent offline. We laden opnieuw zodra je weer verbinding hebt.</span></div>
<div class="fss__card">
<div class="fss__head"><p class="fss__title">Vrije plekken deze week</p><p class="fss__sub">Fysiotherapie Kralingen</p></div>
<div class="fss__body" aria-live="polite" aria-busy="true">
<div class="fss__view fss__view--load"><span class="fss__spin" aria-hidden="true"></span><span>Beschikbaarheid laden...</span></div>
<div class="fss__view fss__view--err" hidden><svg class="fss__eico" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="M12 7.5v5.5M12 16.2v.3"/></svg><div class="fss__etxt"><p class="fss__eh">Laden lukte niet</p><p class="fss__ep">De agenda reageert even niet. Je keuzes zijn bewaard.</p><button type="button" class="fss__retry"><span class="fss__rspin" aria-hidden="true"></span><span class="fss__rlbl">Opnieuw proberen</span></button></div></div>
<div class="fss__view fss__view--ok" hidden><ul class="fss__slots"><li><button type="button">di 14 okt<b>08:30</b></button></li><li><button type="button">di 14 okt<b>16:45</b></button></li><li><button type="button">do 16 okt<b>10:00</b></button></li><li><button type="button">vr 17 okt<b>13:15</b></button></li></ul></div>
</div>
</div>
</div>
</div>

More components

Seen something you like?

Add it to your selection and send it over. We build your site around it, in your brand.

Get in touch →