Naar de inhoud
Dibos CSS-projectDocumentatie · v0.8.0InstellingenVolledig project downloaden

Van eerste start tot hergebruik

Eén bibliotheek. Helder gedocumenteerd.

Django, Django-templates, Vanilla JavaScript en lokale assets. De documentatie en alle 63 componenten zitten in hetzelfde downloadpakket.

1. Installeren en starten

Pak het volledige project uit en open een terminal in de map met manage.py en requirements.txt.

python -m venv .venv
# Windows PowerShell:
.venv\Scripts\Activate.ps1
# macOS / Linux:
# source .venv/bin/activate
python -m pip install -r requirements.txt
python manage.py migrate
python manage.py seed_projects
python manage.py runserver

Open http://127.0.0.1:8000. Catalogus: /. Projecten met echte opslag: /projects/. Deze documentatie: /documentation/.

De online preview is statisch. De download bevat de Python-backend, schema’s, tests, lokale assets en documentatie.

Eigen CSS-host en pip-pakket

Download één zelfstandig dibos.css-bestand en plaats het op je eigen website. Pip kan geen eigen --css-url-optie verwerken. Installeer het pakket en gebruik daarna het meegeleverde configuratiecommando.

python -m pip install ./dibos_css-0.8.0-py3-none-any.whl
# In je bestaande Django-project, met fluent_web in INSTALLED_APPS:
python manage.py dibos_install --css-url https://jouw-domein.nl/assets/dibos.css
# Productie:
python manage.py collectstatic --noinput

De CSS wordt eenmalig gedownload naar BASE_DIR/static/dibos/dibos-<inhoudshash>.css. BASE_DIR/dibos.json bewaart de verwijzing; de bestaande assettags en demo gebruiken de lokale kopie automatisch. De AppConfig registreert hiervoor een beperkte Django staticfiles-finder. Er zijn geen externe CSS-imports of runtimeverzoeken naar de oorspronkelijke website. Een mislukte download behoudt de vorige configuratie. Terug naar standaard-CSS: python manage.py dibos_install --bundled.

Volledige demo vanuit pip

dibos demo --directory ./dibos-demo
# Met eigen CSS, vóór of na het starten:
dibos install --directory ./dibos-demo --css-url https://jouw-domein.nl/assets/dibos.css

De wheel bevat alle templates, 63 componenten, tien spinners, iconen, Chart.js, paleteditor en documentatie. Het commando maakt de lokale demo-database en start de app op http://127.0.0.1:8000/. Je eigen gegevens staan buiten het geïnstalleerde pakket.

Instellingen → Demo

Open Instellingen in de navigatie en kies Demo. Wijzig Demoscherm inschakelen en sla op. Deze keuze blijft in de Django-app centraal bewaard na vernieuwen en opnieuw starten. Uitgeschakeld verdwijnen de demo en documentatie uit de navigatie en krijgen directe demo-URL’s HTTP 404. Je projecten, downloads en herbruikbare componenten blijven beschikbaar. Instellingen blijven bereikbaar op /settings/, of bijvoorbeeld /ui/settings/ wanneer je de app onder ui/ opneemt.

python manage.py dibos_install --demo off
python manage.py dibos_install --demo on

Bij DEBUG=False vereist de instellingenroute een aangemelde Django-gebruiker met is_staff=True; gebruik de authenticatie van je eigen applicatie. In de statische online preview geldt de schakelaar alleen voor de huidige browser. De volledige instructies staan in docs/INSTALLATION.md. Bewaar db.sqlite3, dibos.json en static/dibos/ bij updates.

2. CSS, toestanden en focus

De basislayout laadt één bibliotheekbestand: de meegeleverde dibos.css of je geïnstalleerde lokale kopie. Eigen pagina-CSS volgt daarna; focus.css staat als laatste. De afzonderlijke bronmodules blijven beschikbaar:

tokens.css         # Kleuren, afstanden, typografie en beweging
components.css     # Herbruikbare fw-componenten
fields.css         # Labels boven, links of als placeholder
spinners.css       # Tien CSS-laadanimaties
catalog.css        # Alleen voor de catalogus, niet voor je eigen app
projects.css       # Alleen voor de voorbeeldwerkruimte
focus.css          # Centrale focusstijlen; altijd als laatste

Eén fijne rand, precies op de bestaande rand

Een invoerveld, tekstvak of selectveld heeft altijd dezelfde rand van 1 px. Bij focus verandert alleen de kleur van die rand. De hoekafronding, afmetingen en padding blijven gelijk. Er is geen buitenring, gloed of tweede onderlijn.

.fw-input,
.fw-select,
.fw-textarea {
  border: 1px solid var(--fw-border-strong);
  outline: none;
  box-shadow: none;
}
.fw-input:focus,
.fw-select:focus,
.fw-textarea:focus {
  border-color: var(--fw-focus-color);
}

Focus blijft zichtbaar voor toetsenbordgebruikers. Buttons kleuren hun bestaande rand. Tabs krijgen een zachte achtergrond. Tekstlinks worden onderstreept. Checkboxes, radio’s, switches, sliders en kleurvelden gebruiken hun eigen fijne rand. Een ongeldig veld houdt één rode rand via aria-invalid="true"; disabled velden krijgen geen focus.

Waar stel je het label in?

Direct boven Text input & select staat nu de keuzelijst Veldlabel. Kies Boven, Links of Placeholder. De instelling staat ook rechts onder Veldlabels en in de componentpreview.

Veldomschrijving: boven, links of in het veld

Kies de standaardplaatsing onder Veldlabels in de catalogus, of kies een plaatsing per componentpreview. In je eigen template gebruik je label_position="top", "left" of "inside". De linkse plaatsing gebruikt een grid; een label in het veld wordt een placeholder wanneer het veld leeg is. Een verborgen label blijft beschikbaar voor schermlezers. Wisselen van plaatsing wist geen ingevulde waarden.

{% fw_component "inputs" label="Projectnaam" label_position="left" %}
{% fw_component "inputs" label="E-mailadres" label_position="inside" %}

Native datum- en tijdvelden ondersteunen geen placeholders; bij de inside-keuze blijft daar het label boven het veld staan. --fw-label-width en --fw-label-gap regelen de linkse labelkolom. Initialiseer dynamische velden met FW.configureFields(container).

Centrale tokens

TokenBetekenis
--fw-control-border-width1 px, voor normale én gefocuste controls
--fw-focus-colorVolgt automatisch --fw-accent
--fw-focus-on-accentLeesbare rand op een gevulde primaire knop
--fw-border-strongNormale grijze controlrand
--fw-radiusGelijke afronding in elke toestand
--fw-durationKorte kleurtransitie, zonder maatverandering

De CSS is leesbaar opgemaakt. Focusregels staan op één plek. Zet geen algemene *:focus-visible-buitenring of extra focus-shadow boven op deze regels. Voor Windows high contrast zijn systeemkleuren voorzien; verminderde beweging wordt gerespecteerd.

3. Alle componenten

Gebruik de template tag in een template die de basislayout uitbreidt. Deze laadt CSS, gedrag en demonstratiedialogen.

{% extends "fluent_web/base.html" %}
{% load fluent_ui %}
{% block content %}
  {% fw_component "buttons" label="Opslaan" variant="primary" %}
  {% fw_component "inputs" label="Projectnaam" name="project" required=True %}
{% endblock %}

Parameters

Velden ondersteunen label_position: top, left of inside.

Buttons: label, variant (primary, secondary, subtle), size (small, normal, large), disabled. Inputs: label, name, value, placeholder, required, disabled. Badges: label, tone (success, warning, danger, neutral, accent). Andere componenttemplates zijn samenstelbare voorbeelden; pas de inhoud en backendacties aan je eigen applicatie aan.

Elke instance krijgt unieke identifiers. Gewone tekstparameters worden door Django-templates geëscapet. Alleen geregistreerde namen en toegestane varianten worden geaccepteerd.

Buttons · Acties

Gebruik één primaire actie per context. Gebruik secondary voor aanvullende acties en subtle voor minder prominente acties.

Varianten: 3 stijlen · 3 groottes

{% fw_component "buttons" %}

Template: templates/components/buttons.html

Icon buttons · Acties

Geef elke knop zonder tekst een toegankelijke naam via aria-label.

Varianten: Primary · Secondary

{% fw_component "icon-buttons" %}

Template: templates/components/icon-buttons.html

Split buttons · Acties

Gebruik een split button voor een standaardactie met gerelateerde alternatieven.

Varianten: Interactief

{% fw_component "split-buttons" %}

Template: templates/components/split-buttons.html

Toggle buttons · Acties

Gebruik aria-pressed voor de actuele toestand.

Varianten: Interactief

{% fw_component "toggle-buttons" %}

Template: templates/components/toggle-buttons.html

Button groups · Acties

Groepeer verwante acties. Gebruik een duidelijke geselecteerde toestand.

Varianten: Interactief

{% fw_component "button-groups" %}

Template: templates/components/button-groups.html

Floating actions · Acties

Gebruik een opvallende zwevende actie spaarzaam en behoud voldoende afstand tot de inhoud.

Varianten: Interactief

{% fw_component "floating-actions" %}

Template: templates/components/floating-actions.html

Text input & select · Formulieren

Plaats een zichtbaar label boven het veld. Een placeholder vervangt het label niet.

Varianten: Text · Select

{% fw_component "inputs" %}

Template: templates/components/inputs.html

Textarea · Formulieren

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "textarea" %}

Template: templates/components/textarea.html

Select · Formulieren

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "select" %}

Template: templates/components/select.html

Combobox · Formulieren

Gebruik een combobox wanneer gebruikers mogen kiezen én een eigen waarde kunnen invoeren.

Varianten: Interactief

{% fw_component "combobox" %}

Template: templates/components/combobox.html

Autocomplete · Formulieren

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "autocomplete" %}

Template: templates/components/autocomplete.html

Selectie & switches · Formulieren

Checkboxes staan meerdere keuzes toe. Radio buttons delen één groepsnaam. Switches passen een instelling direct toe.

Varianten: Checkbox · Radio · Switch

{% fw_component "selection" %}

Template: templates/components/selection.html

Checkbox · Formulieren

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "checkbox" %}

Template: templates/components/checkbox.html

Radio button · Formulieren

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "radio" %}

Template: templates/components/radio.html

Switch · Formulieren

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "switch" %}

Template: templates/components/switch.html

Slider · Formulieren

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "slider" %}

Template: templates/components/slider.html

Datepicker · Formulieren

Native datumvelden volgen de locale en toetsenbordbediening van de browser.

Varianten: Interactief

{% fw_component "datepicker" %}

Template: templates/components/datepicker.html

Timepicker · Formulieren

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "timepicker" %}

Template: templates/components/timepicker.html

Bestanden kiezen · Formulieren

Kies bestanden met de native bestandskiezer. Namen, groottes, verwijderen en controle op aantal, type en grootte. Het native file-veld past in een multipart-formulier.

Varianten: Bestandsknop · meerdere bestanden

{% fw_component "file-upload" %}

Template: templates/components/file-upload.html

Validatie · Formulieren

Combineer een foutmelding met een programmatische relatie via aria-describedby. Laat de gebruiker de fout herstellen.

Varianten: Interactief

{% fw_component "validation" %}

Template: templates/components/validation.html

Inklapbare linkerzijbalk · Navigatie

De knop buiten de zijbalk blijft bereikbaar. De herbruikbare fw-shell past de inhoudsbreedte aan en kan de desktopkeuze lokaal bewaren.

Varianten: Zichtbaar · ingeklapt

{% fw_component "sidebar" %}

Template: templates/components/sidebar.html

Menubar · Navigatie

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "menubar" %}

Template: templates/components/menubar.html

Commandbar · Navigatie

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "commandbar" %}

Template: templates/components/commandbar.html

Tabs · Navigatie

Gebruik tabs voor verwante inhoud binnen dezelfde context. Pijltjestoetsen verplaatsen de selectie.

Varianten: 3 tabbladen

{% fw_component "tabs" %}

Template: templates/components/tabs.html

Breadcrumbs · Navigatie

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "breadcrumbs" %}

Template: templates/components/breadcrumbs.html

Treeview · Navigatie

Deze compacte boomstructuur gebruikt native details en summary; Enter en spatie openen of sluiten een tak.

Varianten: Interactief

{% fw_component "treeview" %}

Template: templates/components/treeview.html

Contextmenu · Navigatie

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "contextmenu" %}

Template: templates/components/contextmenu.html

Dropdownmenu · Navigatie

Menu’s sluiten met Escape, een klik buiten het menu of na een keuze.

Varianten: Interactief

{% fw_component "dropdown" %}

Template: templates/components/dropdown.html

Pagination · Navigatie

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "pagination" %}

Template: templates/components/pagination.html

Data table · Gegevens

Sorteer via de kolomkoppen, filter op actieve projecten en selecteer rijen. Klik op een projectnaam om deze inline te bewerken.

Varianten: Sorteren · Filteren · Selecteren

{% fw_component "data-table" %}

Template: templates/components/data-table.html

Data grid · Gegevens

Een bewerkbare tabel voor kleine datasets. Projectnamen zijn inline bewerkbaar. Gebruik voor grote datasets aanvullende serverpaginering.

Varianten: Interactief

{% fw_component "data-grid" %}

Template: templates/components/data-grid.html

Kolomselectie · Gegevens

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "column-selection" %}

Template: templates/components/column-selection.html

Status badges · Gegevens

Kleur ondersteunt de betekenis. Het tekstlabel blijft altijd zichtbaar.

Varianten: 5 semantische rollen

{% fw_component "badges" %}

Template: templates/components/badges.html

Statistiekkaartjes · Gegevens

Maak kaarten voor 128 projecten, 94% afgerond en andere statistieken. Kies achtergrondstijl, kleur, icoon en onafhankelijke horizontale en verticale uitlijning.

Varianten: Vier stijlen · eigen kleur · uitlijning

{% fw_component "kpi" %}

Template: templates/components/kpi.html

Grafieken · Gegevens

Grafieken gebruiken de lokaal meegeleverde Chart.js. De canvas heeft een tekstueel label met de data; gebruik tabellen voor exacte waarden.

Varianten: Chart.js · Lijngrafiek

{% fw_component "charts" %}

Template: templates/components/charts.html

Dashboard · Gegevens

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "dashboard" %}

Template: templates/components/dashboard.html

Dialog · Vensters

Native dialog beheert de focus, Escape en de modale achtergrond. Sluiten herstelt de focus naar de opener.

Varianten: Interactief

{% fw_component "dialog" %}

Template: templates/components/dialog.html

Modal · Vensters

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "modal" %}

Template: templates/components/modal.html

Drawer · Vensters

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "drawer" %}

Template: templates/components/drawer.html

Flyout · Vensters

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "flyout" %}

Template: templates/components/flyout.html

Popover · Vensters

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "popover" %}

Template: templates/components/popover.html

Tooltip · Vensters

Een tooltip licht een control toe en verschijnt ook bij toetsenbordfocus. Plaats essentiële instructies in de gewone inhoud.

Varianten: Interactief

{% fw_component "tooltip" %}

Template: templates/components/tooltip.html

Confirm dialog · Vensters

Gebruik een bevestiging voor acties met gevolgen. Deze demo verandert alleen de voorbeeldweergave.

Varianten: Interactief

{% fw_component "confirm-dialog" %}

Template: templates/components/confirm-dialog.html

Notification panel · Vensters

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "notification-panel" %}

Template: templates/components/notification-panel.html

Meldingen · Feedback

Meld duidelijk wat er is gebeurd en wat de gebruiker kan doen. Reserveer alerts voor relevante feedback.

Varianten: Success · Info · Warning · Error

{% fw_component "alerts" %}

Template: templates/components/alerts.html

Toast · Feedback

Een toast bevestigt een niet-blokkerende actie. Berichten worden aangekondigd via een live region.

Varianten: Interactief

{% fw_component "toast" %}

Template: templates/components/toast.html

Progress bar · Feedback

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "progress" %}

Template: templates/components/progress.html

Spinners · Feedback

Kies uit tien moderne CSS-spinners. Pas kleur, grootte en snelheid aan. De animatie is decoratief; een zichtbare statusnaam blijft beschikbaar. Verminderde beweging wordt gerespecteerd.

Varianten: 10 varianten

{% fw_component "spinner" %}

Template: templates/components/spinner.html

Skeleton loading · Feedback

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "skeleton" %}

Template: templates/components/skeleton.html

Empty state · Feedback

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "empty-state" %}

Template: templates/components/empty-state.html

Success, warning & error · Feedback

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "semantic-states" %}

Template: templates/components/semantic-states.html

Cards · Layout

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "cards" %}

Template: templates/components/cards.html

Panels · Layout

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "panels" %}

Template: templates/components/panels.html

Accordion · Layout

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "accordion" %}

Template: templates/components/accordion.html

Split view · Layout

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "split-view" %}

Template: templates/components/split-view.html

Resizable panels · Layout

Pas de breedte aan met de slider, ook via pijltjestoetsen. Het eerste paneel heeft ook een native CSS resize-handle.

Varianten: Interactief

{% fw_component "resizable" %}

Template: templates/components/resizable.html

Dashboard layout · Layout

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "dashboard-layout" %}

Template: templates/components/dashboard-layout.html

Toolbar · Layout

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "toolbar" %}

Template: templates/components/toolbar.html

Details panel · Layout

Gebruik dit component consequent met de centrale designtokens. Geef bedieningselementen duidelijke labels en behoud zichtbare toetsenbordfocus.

Varianten: Interactief

{% fw_component "details-panel" %}

Template: templates/components/details-panel.html

Bestanden slepen & neerzetten · Formulieren

Sleep bestanden in het vak of open de bestandskiezer. Dezelfde validatie en geselecteerde bestanden zijn beschikbaar voor je eigen formulier; de demo verstuurt geen bestanden.

Varianten: Sleepvak · klik of sleep

{% fw_component "file-dropzone" %}

Template: templates/components/file-dropzone.html

HTML-teksteditor · Formulieren

Lettertype, tekststijl, grootte in pixels, tekst- en markeringskleur, vet, cursief, lijsten, uitlijnen, inspringen, links en HTML-bron. Kies een vaste of meescrollende toolbar.

Varianten: Volledige toolbar · vast of zwevend

{% fw_component "rich-text" %}

Template: templates/components/rich-text.html

Wachtwoordveld · Formulieren

Een wachtwoord is standaard verborgen. Gebruik het oogje om de invoer te tonen of opnieuw te verbergen. De waarde en cursor blijven behouden. Werkt met alle labelposities en een optioneel wis-kruisje.

Varianten: Verborgen · tonen/verbergen · optioneel wissen

{% fw_component "password" %}

Template: templates/components/password.html

In de live catalogus kun je HTML, CSS, JavaScript en Django/Django-templates bekijken en kopiëren. De CSS-weergave bevat ook de centrale focusregels.

Zijbalk, bestanden, statistiekkaartjes en teksteditor

De navigatieknop linksboven klapt de linkerzijbalk in of uit. De knop blijft bereikbaar en de desktopkeuze wordt per apparaat bewaard. In Instellingen staat ook Linkerzijbalk zichtbaar. Gebruik .fw-shell met data-fw-sidebar op het paneel en een knop buiten het paneel met data-fw-sidebar-toggle en het bijbehorende aria-controls.

Bestanden kiezen of slepen

{% fw_component "file-upload" label="Bijlagen" name="files" multiple=True accept=".pdf,.png" max_files=5 max_size=5242880 %}
{% fw_component "file-dropzone" label="Documenten" name="files" multiple=True %}

Beide componenten tonen namen en groottes, laten bestanden verwijderen en controleren type, aantal en grootte. De demo selecteert bestanden lokaal; jouw multipart-formulier verstuurt ze naar je eigen Django-view via request.FILES.getlist('files').

Statistieken inkleuren en centreren

{% fw_component "kpi" value="128" label="Projecten" color="blue" card_style="soft" align="center" valign="center" %}
{% fw_component "kpi" value="94%" label="Afgerond" color="#007568" card_style="solid" align="center" valign="center" size="large" %}

Kaartstijlen: surface, soft, solid, outline. Kleuren: theme, blue, purple, green, rose, orange, neutral of #rrggbb. Horizontaal en verticaal: start, center, end. De galerij Statistiekkaartjes toont zes voorbeelden; Kaartje aanpassen werkt de gekopieerde code bij.

Wachtwoordveld met oogje

{% fw_component "inputs" input_type="password" label="Wachtwoord" name="password" %}
{% fw_component "password" label="Nieuw wachtwoord" autocomplete="new-password" clearable=True label_position="inside" %}

Open Wachtwoorden in de demo. Een wachtwoord is standaard gemaskeerd; het oogje toont of verbergt de invoer zonder de waarde te wijzigen. Een gewoon invoerveld krijgt deze functie via Veldtype → Wachtwoord in de componentpreview. De knop heeft een toegankelijke naam en werkt via het toetsenbord. Labelposities en het optionele wis-kruisje worden ondersteund; de fijne focusrand blijft behouden. Autocomplete is standaard current-password, of new-password voor een nieuw wachtwoord.

Wis-kruisje in een veld

{% fw_component "inputs" label="Projectnaam" clearable=True label_position="inside" %}

De knop verschijnt wanneer het veld inhoud heeft en wist met één klik. De focus keert terug naar het veld. Werkt met labels boven, links en in het veld, met dezelfde enkele focusrand.

HTML-toolbar met pixels en een zwevende stand

{% fw_component "rich-text" label="Omschrijving" name="description" toolbar="static" %}
{% fw_component "rich-text" label="Notities" name="notes" toolbar="sticky" %}

Lettertype, tekststijl, exacte grootte in pixels, tekstkleur, markering, vet/cursief/onderstrepen/doorhalen, subscript/superscript, uitlijnen, lijsten, inspringen, links, undo/redo, opmaak wissen en HTML-bron. Selecteer tekst en kies de opmaak. Kies in de componentpreview bij Toolbar tussen Vast boven het veld en Zwevend bij scrollen. De sticky-stand blijft binnen de editor; de bovenmarge is instelbaar via --fw-editor-sticky-top.

Een verborgen textarea levert de HTML aan je formulier. Geplakte HTML en broninvoer worden lokaal gefilterd. Filter HTML ook op de server voordat je deze opgemaakt weergeeft. Alles werkt met lokale assets. Zie docs/COMPONENT_EXTRAS.md voor de complete componenthandleiding.

Tien spinners om uit te kiezen

Open Spinners links in de catalogus. Vergelijk de tien live animaties, kies kleur, grootte en snelheid, en klik op een variant voor de eigen kleurkiezer en kopieerbare code. Beschikbaar: Fluent ring, Dubbele boog, Kleurenring, Springende bolletjes, Orbit, Pulserende ringen, Golfbalkjes, Kometenstaart, Dansende tegels en Elastische bol.

{% load fluent_ui %}
{% fw_component "spinner" variant="orbit" color="multi" size="large" speed="normal" label="Gegevens laden…" %}
{% fw_component "spinner" variant="dots" color="#007568" paused=True %}

Varianten: ring, dual, gradient, dots, orbit, ripple, bars, comet, tiles, blob. Kleuren: theme, multi, blue, purple, green, rose, orange of een volledige hexkleur. Grootte: small, normal, large. Snelheid: slow, normal, fast. paused=True pauzeert de animatie. Een zichtbare statusnaam blijft beschikbaar; de animatie is decoratief. Verminderde beweging schakelt animatie uit. Laad spinners.css na de componentstyles; de assettag doet dat automatisch. De animaties vereisen geen JavaScript. Zie ook docs/SPINNERS.md.

4. Thema’s en een eigen kleurenpalet

Basisthema’s: Fluent Default, Lavender, Sky Blue, Sage Green, Peach, Soft Rose en Dark. Activeer ze op het HTML-element met data-theme. Licht/donker gebruikt data-mode.

<html data-theme="lavender" data-mode="light">

Klik op Eigen palet samenstellen om accent, achtergrond, panelen en tekst te kiezen. Kleurkiezers en hexvelden werken samen. De preview toont je ontwerp voordat je het toepast. Hover, randen en ondersteunende tekstkleuren worden afgeleid.

Toepassen en CSS-export vereisen minimaal 4,5:1 voor tekst op de gekozen achtergrond en panelen. Dit is een gerichte tekstcontrastcontrole, geen volledige toegankelijkheidscertificering. De keuze wordt lokaal in de browser bewaard, ook voor de projectpagina. Annuleren laat het actieve palet staan.

Exporteer het palet als CSS en laad het na tokens.css. Gebruik de HTML-attributen die in het geëxporteerde bestand staan. De focuskleur volgt de nieuwe accentkleur automatisch; de rand blijft 1 px. Compacte bediening: data-density="compact".

5. Django, SQLite en je gegevens

Draai python manage.py migrate om de SQLite-tabellen in db.sqlite3 te maken. Je hoeft geen databasebestand te downloaden of handmatig te importeren. fluent_web/migrations/ definieert de initiële migratie. Voorbeelddata voeg je afzonderlijk toe.

python manage.py migrate   # Controleert/maakt schema; wist geen gegevens
python manage.py seed_projects   # Voegt vier voorbeelden toe; mag opnieuw

Een project heeft id, name (1–80 tekens, uniek), owner (maximaal 100 tekens), status, created_at en updated_at. Status: Concept, Actief, In review of Afgerond. De projectpagina bewaart echte wijzigingen; de componentpreviews blijven geïsoleerde voorbeelden.

Voor een backup: stop de app en kopieer db.sqlite3. Plaats het bestand in dezelfde map van een andere installatie. Initialisatie behoudt bestaande data. Controleer je migraties bij het overzetten van een bestaande database.

6. JSON-API en JavaScript

MethodeRouteGedrag
GET/api/projectsLijst, zoeken, statusfilter en sortering
POST/api/projectsAanmaken, 201 bij succes
PATCH/api/projects/<id>Naam, eigenaar of status bijwerken
DELETE/api/projects/<id>Verwijderen, 204 bij succes

Zoekparameters: q, status, sort (name, owner, status, created_at, updated_at) en direction (asc of desc). Mutaties gebruiken JSON en het X-CSRFToken en de bijbehorende CSRF-cookie. Ongeldige invoer: 400; ontbrekende CSRF: 403; niet gevonden: 404; dubbele naam: 409.

fluent.js gebruikt gedelegeerde data-fw-*-events. Publieke JavaScript-helpers: FW.toast(message), FW.copy(text), FW.openDialog(id), FW.mount(container) en FW.updateCharts(). Laad Chart.js vóór fluent.js wanneer je grafieken gebruikt. Normale HTML-controls hebben geen extra initialisatie nodig.

7. Integratie en projectstructuur

manage.py                      Django-commando’s
demo/settings.py               Voorbeeldinstellingen, inclusief SQLite
fluent_web/models.py           Projectmodel
fluent_web/migrations/         Django-migraties
fluent_web/views.py            Catalogus, documentatie en JSON-API
fluent_web/templatetags/        Herbruikbare componenttags
fluent_web/templates/           Django-templates en 63 componenten
fluent_web/static/fluent_web/   CSS, JavaScript en lokale iconen
docs/                          Offline HTML- en Markdown-handleidingen
build_docs.py                  Documentatie opnieuw genereren
tests/                         Django-tests
CHANGELOG.md                   Wijzigingen en versies
QUALITY.md                     Uitgevoerde controles en beperkingen

De meegeleverde Django-app kan in een eigen Django-project worden opgenomen. Neem de fw-klassen en Django-templates over of gebruik de template tag. Laat catalogus-CSS weg wanneer je een eigen shell hebt. Voeg eigen pagina-CSS toe in het Django-templates-block styles; de basislayout laadt focus.css daarna als laatste. Gebruik servervalidatie, CSRF en applicatieautorisatie voor je eigen data-acties.

De voorbeeldapp bindt standaard op localhost en bevat geen inlogmodule. Gebruik een gedeelde DJANGO_SECRET_KEY en een geschikte WSGI-server voor je eigen productieomgeving. De meegeleverde ontwikkelsleutel is alleen bedoeld voor localhost. Runtimegegevens en sleutels zitten niet in de download.

Updates: pak een nieuwe versie naast je bestaande installatie uit en kopieer de database bewust over wanneer je die wilt behouden. Bewaar je bestaande database en eigen instellingen bij een update.

8. Controle, toegankelijkheid en licenties

python manage.py test tests

De focusstijl is gecontroleerd op één rand, gelijke afmetingen en zichtbare toetsenbordbediening in lichte, donkere en eigen paletten. Zie QUALITY.md voor de exacte uitgevoerde controles en beperkingen. Edge/Firefox en handmatige schermlezertests zijn niet volledig uitgevoerd.

De eigen code gebruikt MIT. Microsoft Fluent System Icons en Chart.js zijn lokaal meegeleverd onder MIT. Zie LICENSE en THIRD_PARTY_NOTICES.md. Dibos CSS-project is een zelfstandige implementatie.