Skip to content

alsacreations/KNACSS

Repository files navigation

KNACSS

Bibliothèque de composants natifs HTML stylés, accessibles et personnalisables.

Fonctionnalités

  • Composants natifs : Tous les éléments HTML essentiels (button, input, textarea, select, checkbox, radio, range, switch, details, dialog, table, list…) avec des styles modernes et accessibles.
  • CSS vanilla moderne : Custom properties, nesting, Grid/Flexbox, media queries modernes. Aucune dépendance à un framework CSS.
  • Styleguide interactif : Prévisualisez tous les composants en direct, affichez le code source et copiez-le facilement.
  • Personnalisation complète : Adaptez couleurs, espacements, rayons et typographie via des variables CSS, sans toucher au HTML.
  • Performance et accessibilité : Code léger, faible spécificité CSS, JavaScript minimal, navigation clavier complète.
  • Éco-conception : Assets optimisés, rendu efficace, compatible avec les approches sobres.

Comment s'en servir ?

Deux usages possibles selon votre contexte.

  1. Copier-coller le HTML depuis le styleguide
  • Ouvrir le styleguide, choisir un composant, cliquer sur « Afficher le code » puis copier le bloc fourni.
  • Inclure la feuille de styles du projet:
    • Avec Vite: importer assets/app.css dans votre entrée JS.
    • En statique: utiliser les CSS générées dans public/css/ (ou le répertoire de build) dans vos pages HTML.
  • Personnaliser le rendu en surchargeant les variables CSS (dans :root ou un wrapper):
:root {
  /* Couleurs */
  --color-primary-500: #2563eb;
  --color-gray-900: #0f172a;
  /* Typo et rythmes */
  --text-m: 1rem;
  --leading-28: 1.75rem;
  /* Rayons et espacements */
  --radius-8: 8px;
  --spacing-16: 1rem;
}
  1. Travailler localement avec le dépôt
  • Prérequis: Node 20+ (ou récent), un gestionnaire de paquets (pnpm recommandé).
  • Installer et lancer:
pnpm install
pnpm dev      # serveur de dev
pnpm build    # build de production
pnpm preview  # prévisualisation du build

Notes d’usage

  • La plupart des composants fonctionnent sans JavaScript. Certains proposent un JS optionnel (ex: dialog, textarea avec compteur). Référez‑vous au dossier du composant pour l’activer si besoin.
  • Accessibilité: conservez la sémantique native (labels, attributs requis, aria‑* le cas échéant). Les styles n’entravent pas la navigation clavier.
  • Theming: modifiez vos tokens via vos propres variables CSS; aucune dépendance à un framework CSS.

Styleguide

Le styleguide adopte un layout modulaire rendu via templates (build-time):

  • Dossiers: templates/ (Handlebars), templates/partials/ (header, sidebar, footer), templates/context.json (métadonnées de page), assets/data/components.json (liste des composants de nav)
  • L'injection des démos reste côté client via assets/js/router.js et import.meta.glob("/natives/**/*.html").

Intégration plugin (à valider): ajout d'un plugin Handlebars dans Vite pour compiler les templates au build; aucune dépendance ajoutée tant que non validée.

Coloration syntaxique du code (Custom Highlight API)

La coloration du code affiché dans le styleguide repose sur l’API CSS Custom Highlight et le web component <syntax-highlight> (package syntax-highlight-element).

Installation

  • Dépendance npm:
    • syntax-highlight-element (v1.x)
    • Déjà ajouté dans package.json.

Configuration Vite (target ES2022)

syntax-highlight-element utilise un top‑level await. Pour éviter une erreur de build, le projet est configuré pour cibler ES2022 côté esbuild et build:

  • Dans vite.config.js:
    • esbuild.target = "es2022"
    • optimizeDeps.esbuildOptions.target = "es2022"
    • build.target = "es2022"

Imports globaux

  • Fichier: assets/main.js
    • import "syntax-highlight-element"
    • import "syntax-highlight-element/themes/prettylights.css"

Le thème prettylights applique les couleurs via ::highlight(); vous pouvez changer de thème ou créer le vôtre.

Marquage HTML

  • Le bloc de code du styleguide utilise le web component:
    • <syntax-highlight language="html" class="code-highlight"> </syntax-highlight>
    • Un nœud texte initial est présent (espace) pour garantir que l’API crée des Range sur un firstChild.

Injection du code et mise à jour

  • Fichier: assets/js/router.js
    • Lors du clic sur "Afficher le code", le HTML du composant est sérialisé, formaté, puis injecté:
      • she.textContent = formattedHtml
      • she.update() est appelé si disponible pour déclencher (ou re‑déclencher) la coloration.
    • Fallback: si le web component n’est pas disponible, le code est inséré dans <code class="language-html">.

Accessibilité

  • Le conteneur de code reste un region ARIA avec aria-label.
  • Le web component expose un rôle code via ElementInternals.

Personnalisation

  • Thème: surchargez les variables CSS du thème (ex. couleurs --prettylights-*) ou importez un autre thème.
  • Langage: ajustez l’attribut language (html|css|js).
  • Compaction d’affichage: le formateur compactera certains éléments en une ligne (ex: li, a, button, titres…) si leur contenu est un texte simple.

About

Styles CSS sur-vitaminés pour éléments HTML natifs

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 31