humalis 1.0.4 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/guide.md CHANGED
@@ -93,6 +93,14 @@ Un texte qui s'affiche s'écrit entre guillemets : `titre "Bienvenue"`. Sans
93
93
  guillemets, c'est un nom de variable : `texte prenom` affiche ce que contient
94
94
  la variable `prenom`.
95
95
 
96
+ Pour mettre un guillemet dans un texte, écris `\"` :
97
+
98
+ ```humalis
99
+ page "citation" :
100
+ titre "Une citation"
101
+ texte "Elle a dit \"bonjour\" en entrant."
102
+ ```
103
+
96
104
  ### Les accents sont permis, jamais obligatoires
97
105
 
98
106
  `si age est supérieur ou égal à 18` et `si age est superieur ou egal a 18` se
@@ -167,6 +175,96 @@ page "carte" :
167
175
  l'ordre des niveaux, sans en sauter : les lecteurs d'écran s'en servent pour
168
176
  parcourir la page.
169
177
 
178
+ Dans un bloc placé sous un sous-titre, un `soustitre` descend d'un niveau tout
179
+ seul : la carte d'une section devient un niveau 3. Dans une `section`, le premier
180
+ sous-titre est le titre de la section, même rangé dans son propre bloc ; tous les
181
+ autres sous-titres de la section descendent d'un niveau. `avec niveau` reste
182
+ possible pour choisir soi-même.
183
+
184
+ ```humalis
185
+ page "accueil" :
186
+ titre "Accueil"
187
+ section :
188
+ soustitre "Nos pages"
189
+ grille :
190
+ bloc :
191
+ soustitre "Exemples"
192
+ texte "Six applications à essayer."
193
+ ```
194
+
195
+ Dans un `titre`, un `soustitre` ou un `texte`, `{accent "…"}` met quelques mots
196
+ en valeur avec la couleur de marque. Le texte reste lisible normalement par les
197
+ lecteurs d'écran et dans le titre de l'onglet.
198
+
199
+ ```humalis
200
+ page "offre" :
201
+ titre "Une offre {accent "simple"}"
202
+ texte "Prix : {accent "gratuit"} pour toujours"
203
+ ```
204
+
205
+ ### Listes
206
+
207
+ `liste :` crée des puces ; `liste numerotee :` numérote chaque élément. Chaque instruction du bloc devient une entrée.
208
+
209
+ ```humalis
210
+ page "guide" :
211
+ liste :
212
+ texte "Installer Node.js"
213
+ texte "Créer le projet"
214
+ liste numerotee :
215
+ texte "Écrire le fichier"
216
+ texte "Compiler"
217
+ ```
218
+
219
+ ### Code dans une phrase
220
+
221
+ Dans un texte, `{code "…"}` affiche un court morceau de code à chasse fixe.
222
+
223
+ ```humalis
224
+ page "guide" :
225
+ texte "Écris {code "titre"} pour donner un titre."
226
+ ```
227
+
228
+ ### Bloc de code
229
+
230
+ `code langage :` recopie les lignes indentées sans les interpréter ; le langage est facultatif.
231
+
232
+ ```humalis
233
+ page "guide" :
234
+ code humalis :
235
+ page "accueil" :
236
+ titre "Bienvenue"
237
+ ```
238
+
239
+ `avec animation frappe` écrit le code lettre par lettre, avec un curseur ;
240
+ `avec animation frappe au defilement` attend que le bloc arrive à l'écran. Le
241
+ vrai code reste en place pendant la frappe (lecteurs d'écran, bouton Copier), et
242
+ il s'affiche tout de suite si la personne a demandé de réduire les animations.
243
+ Sur le téléphone, le code s'affiche entier.
244
+
245
+ ```humalis
246
+ page "accueil" :
247
+ code humalis avec animation frappe :
248
+ page "boutique" :
249
+ titre "Nos produits"
250
+ bouton "Commander"
251
+ ```
252
+
253
+ ### Tableau
254
+
255
+ Un tableau a une légende, des colonnes et des rangées de même largeur. Une traduction peut suivre chaque cellule.
256
+
257
+ ```humalis
258
+ langues :
259
+ francais
260
+ anglais
261
+
262
+ page "guide" :
263
+ tableau "Les commandes" en anglais "Commands" :
264
+ colonnes "Commande", "Rôle" en anglais "Role"
265
+ rangee "humalis compile", "produit le projet" en anglais "builds the project"
266
+ ```
267
+
170
268
  ### Image
171
269
 
172
270
  ```humalis
@@ -363,10 +461,35 @@ page "accueil" :
363
461
  Humalis vérifie le contraste : une couleur de texte trop pâle sur le fond est
364
462
  signalée à la compilation.
365
463
 
464
+ Une police peut être livrée avec le site, sans dépendre d'un service extérieur :
465
+ `police titres "Space Grotesk" depuis "./polices/space-grotesk.woff2"` (fichiers
466
+ `.woff2`, `.woff`, `.ttf` ou `.otf`).
467
+
468
+ Le visiteur peut aussi passer d'un thème à l'autre. `basculer theme` passe au
469
+ thème inverse de celui qu'on voit, et `si theme est sombre :` (ou `clair`)
470
+ réagit au thème affiché :
471
+
472
+ ```humalis
473
+ theme :
474
+ mode automatique
475
+
476
+ page "accueil" :
477
+ titre "Accueil"
478
+ bouton "Changer de thème"
479
+ quand l'utilisateur clique sur "Changer de thème" :
480
+ basculer theme
481
+ si theme est sombre :
482
+ texte "Bonne soirée"
483
+ sinon :
484
+ texte "Bonne journée"
485
+ ```
486
+
366
487
  ### L'en-tête et le pied communs
367
488
 
368
489
  `entete :` et `pied :` s'affichent sur toutes les pages. Une page peut s'en
369
- passer avec `sans entete` ou `sans pied`.
490
+ passer avec `sans entete` ou `sans pied`. Avec un en-tête, Humalis ajoute seul
491
+ un lien « Aller au contenu », caché tant que le clavier ne l'atteint pas : il
492
+ permet de sauter l'en-tête.
370
493
 
371
494
  ```humalis
372
495
  entete avec colle :
@@ -452,6 +575,32 @@ page "carte" :
452
575
  ```
453
576
 
454
577
  Dans un `menu`, le lien de la page où l'on est est marqué comme actif.
578
+ Les liens d'un menu passent à la ligne quand la place manque. Un `menu
579
+ vertical :` range ses liens en colonne, sans jamais ouvrir une deuxième colonne :
580
+ un sommaire de hauteur limitée défile. Il se combine avec `repliable`
581
+ (`menu vertical repliable :`).
582
+
583
+ ```humalis
584
+ page "guide" :
585
+ titre "Le guide"
586
+ menu vertical :
587
+ lien "Installer" vers "guide"
588
+ lien "Les pages" vers "guide"
589
+ ```
590
+
591
+ Un `menu repliable :` se range derrière un bouton burger (nommé « Menu » pour les
592
+ lecteurs d'écran) sur un petit écran (téléphone) ; l'icône devient une croix
593
+ quand le menu est ouvert. Un lien choisi, un toucher à côté ou la touche Échap
594
+ referment le menu. Sur grand écran, il reste ouvert :
595
+
596
+ ```humalis
597
+ page "accueil" :
598
+ menu repliable :
599
+ lien "Accueil" vers "accueil"
600
+ lien "La carte" vers "accueil"
601
+ lien "Réserver" vers "accueil"
602
+ titre "Accueil"
603
+ ```
455
604
 
456
605
  ---
457
606
 
@@ -497,6 +646,17 @@ Les animations : `apparition`, `montee`, `agrandissement`. Les effets au
497
646
  survol : `agrandi`, `leve`. Humalis respecte le réglage « réduire les
498
647
  animations » de la personne.
499
648
 
649
+ Sur un bloc, `et en cascade` fait apparaître ses enfants l'un après l'autre :
650
+
651
+ ```humalis
652
+ page "accueil" :
653
+ titre "Nos plats"
654
+ grille avec animation montee au defilement et en cascade :
655
+ texte "Soupe du jour"
656
+ texte "Risotto"
657
+ texte "Tarte aux pommes"
658
+ ```
659
+
500
660
  ---
501
661
 
502
662
  ## 9. Les variables et les calculs
@@ -893,8 +1053,10 @@ Les actions s'écrivent dans un événement.
893
1053
  | `afficher erreur "…"` | un message d'erreur |
894
1054
  | `montrer "nom"`, `cacher "nom"` | fait apparaître ou disparaître un élément |
895
1055
  | `changer x par …` | change une variable |
1056
+ | `changer x par champ "Libellé"` | prend la valeur actuelle d'un champ |
896
1057
  | `changer texte de "nom" par "…"` | change le texte d'un élément |
897
1058
  | `ajouter … à liste`, `retirer … de liste` | modifie une liste |
1059
+ | `ajouter champ "Libellé" à liste` | ajoute la valeur actuelle d'un champ |
898
1060
  | `rediriger vers "page"` | va à une page |
899
1061
  | `revenir vers "page"` | revient en arrière, ou va à cette page |
900
1062
  | `envoyer requete vers "…"` | appelle un serveur (voir [le serveur](#22-relier-les-pages-au-serveur)) |
@@ -915,6 +1077,22 @@ page "merci" :
915
1077
  titre "Merci !"
916
1078
  ```
917
1079
 
1080
+ Dans une action, `champ "Libellé"` lit ce que la personne a saisi au moment du clic. Un champ nombre donne un nombre, une case à cocher donne vrai ou faux, et les autres champs donnent du texte. Le libellé est celui de la langue de base, même si le champ a une traduction.
1081
+
1082
+ ```humalis
1083
+ page "taches" :
1084
+ variable taches = ["Acheter du pain"]
1085
+ variable dernier = ""
1086
+ champ "Nouvelle tâche"
1087
+ bouton "Ajouter"
1088
+ quand l'utilisateur clique sur "Ajouter" :
1089
+ ajouter champ "Nouvelle tâche" à taches
1090
+ changer dernier par champ "Nouvelle tâche"
1091
+ texte "Dernière ajoutée : {dernier}"
1092
+ pour chaque t dans taches :
1093
+ texte t
1094
+ ```
1095
+
918
1096
  ---
919
1097
 
920
1098
  ## 16. Les messages, les fenêtres et les questions
@@ -1534,9 +1712,13 @@ page "catalogue" :
1534
1712
  ```
1535
1713
 
1536
1714
  - `en anglais "…"` donne la version d'un texte.
1715
+ - `sans traduction` garde le même texte dans toutes les langues, pour un nom
1716
+ propre : `lien "GitHub" sans traduction vers "https://github.com"`.
1537
1717
  - `traductions anglais :` traduit une seule fois un texte répété.
1538
1718
  - `selecteur de langue` affiche le choix de la langue ; `changer langue par
1539
1719
  anglais` et `si langue est anglais :` s'utilisent dans les événements.
1720
+ - Le message de `copier` se traduit comme les autres textes :
1721
+ `copier code avec message "Copié" en anglais "Copied"`.
1540
1722
  - Humalis signale à la compilation tout texte qui n'a pas sa traduction. Les
1541
1723
  messages de Humalis (champ obligatoire, chargement…) suivent la langue.
1542
1724
 
package/llms.txt CHANGED
@@ -5,7 +5,7 @@ Humalis est un langage en français. Un fichier .humalis décrit des pages, des
5
5
  ## Grammaire en une page
6
6
 
7
7
  - Une page commence par `page "nom" :`. Son contenu est indenté de 4 espaces ; chaque bloc ajoute 4 espaces.
8
- - Les éléments d’écran pris en charge : titre, texte, image, bouton, lien, champ, formulaire, section, bloc, ligne, colonne, grille, sous-titre, fenêtre, menu, icône, badge, avatar, progression, chargement, étoiles, compteur, code QR, onglets, onglet, déroulant, accordéon, carrousel, fil d’Ariane, audio, fichier, carte, marqueur, graphique, série, sélecteur. Leur texte s’écrit entre guillemets.
8
+ - Les éléments d’écran pris en charge : titre, texte, image, bouton, lien, champ, formulaire, section, bloc, ligne, colonne, grille, sous-titre, liste, tableau, fenêtre, menu, icône, badge, avatar, progression, chargement, étoiles, compteur, code QR, onglets, onglet, déroulant, accordéon, carrousel, fil d’Ariane, audio, fichier, carte, marqueur, graphique, série, sélecteur. Leur texte s’écrit entre guillemets.
9
9
  - Déclare une valeur avec `variable nom = valeur` ; une condition commence par `si ... :`.
10
10
  - Les événements pris en charge : quand, utilisateur, clique, sur, survole, charge, soumis, ecrit, arrête d’écrire, appuie, arrive en bas de, l’ordre de … change. Écris l’événement sous l’élément visé, puis l’action dans son bloc.
11
11
  - Les actions prises en charge : afficher, erreur, montrer, cacher, changer, rediriger, ajouter, retirer, envoyer, requête, connecter, déconnecter, revenir, réussite, avertissement, pendant, disparaître, action, après, toutes, copier, partager, confirmer.
@@ -27,6 +27,15 @@ page "accueil" :
27
27
 
28
28
  ## Messages d’erreur
29
29
 
30
+ - Code dans une phrase sans guillemets : code attend un texte entre guillemets
31
+ - Une ligne inconnue dans un tableau : un tableau contient « colonnes » et « rangee »
32
+ - Deux-points après un tableau : deux-points après la légende du tableau
33
+ - Bloc de code dans un événement : un bloc de code se place dans une page
34
+ - Tableau sans légende : un tableau attend une légende
35
+ - Tableau sans colonnes : un tableau attend une ligne « colonnes »
36
+ - Rangée de mauvaise largeur : la rangée a 1 cellules
37
+ - Texte accentué sans guillemets : accent attend un texte entre guillemets
38
+ - Accent hors d’un texte de page : accent s’emploie seulement
30
39
  - Un élément sans texte : n'a pas de texte
31
40
  - Un libellé sans lettre : ne contient aucune lettre
32
41
  - Deux champs de même nom : deux champs du même formulaire
@@ -224,6 +233,8 @@ page "accueil" :
224
233
  - Un nom d’ancre qui n’est pas valable : n'est pas valable
225
234
  - Deux ancres de même nom : est déjà utilisée dans la page
226
235
  - Un lien vers une ancre qui n’existe pas : n'existe pas dans la page « carte »
236
+ - Un lien de l’en-tête ou du pied vers une ancre qui n’existe nulle part : n'existe dans aucune page
237
+ - Une page et un composant qui auraient le même nom : auraient le même nom dans le code produit
227
238
  - Une adresse qui peut exécuter du code : est refusée
228
239
  - Des paramètres de page sur une adresse externe : n'a pas de paramètres de page
229
240
  - « nouvel onglet » sur autre chose qu’un lien : s'applique à un lien
@@ -257,6 +268,8 @@ page "accueil" :
257
268
  - Une animation sans nom : il manque le nom de l’animation
258
269
  - « duree » ou « delai » sans animation : donne l’attente d’une animation
259
270
  - « au defilement » sans animation : « au defilement » suit le nom d’une animation
271
+ - « en cascade » sur un simple élément : il s’écrit sur un bloc
272
+ - Un texte traduit et « sans traduction » : gardez l’un ou l’autre
260
273
  - Une animation sur un champ : pas d’animation sur un champ
261
274
  - Trop d’éléments animés au défilement : trop de mouvement
262
275
  - Une image sans description : décrivez l’image pour les personnes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "humalis",
3
- "version": "1.0.4",
3
+ "version": "1.2.0",
4
4
  "description": "Un seul langage, en français, pour créer une application complète : web, mobile, desktop et serveur",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,7 +22,7 @@
22
22
  "node": ">=24"
23
23
  },
24
24
  "scripts": {
25
- "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc",
25
+ "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc && rolldown dist/navigateur.js --format esm --minify --file dist/navigateur.js",
26
26
  "test": "vitest run",
27
27
  "typecheck": "tsc --noEmit",
28
28
  "essai:web": "node scripts/essai-web.mjs",
@@ -40,6 +40,7 @@
40
40
  "essai:desktop": "node scripts/essai-desktop.mjs",
41
41
  "essai:formulaire": "node scripts/essai-formulaire.mjs",
42
42
  "essai:vitrine": "node scripts/essai-vitrine.mjs",
43
+ "site:doc": "node scripts/doc-site.mjs",
43
44
  "llms": "node --disable-warning=ExperimentalWarning --experimental-loader ./scripts/charger-typescript.mjs scripts/generer-llms.mjs",
44
45
  "essai:medias": "node scripts/essai-medias.mjs",
45
46
  "essai:interactions": "node scripts/essai-interactions.mjs",
@@ -74,6 +75,7 @@
74
75
  },
75
76
  "devDependencies": {
76
77
  "@types/node": "^26.2.0",
78
+ "rolldown": "1.2.4",
77
79
  "typescript": "^7.0.2",
78
80
  "vitest": "^4.1.10"
79
81
  }