humalis 1.0.3 → 1.1.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.
Files changed (47) hide show
  1. package/LICENSE +85 -201
  2. package/LICENSE.en.md +86 -0
  3. package/NOTICE +6 -3
  4. package/README.en.md +1 -1
  5. package/README.md +1 -1
  6. package/dist/analyse/accessibilite.js +13 -5
  7. package/dist/analyse/analyse.js +43 -3
  8. package/dist/analyse/ecran.js +1 -1
  9. package/dist/analyse/langues.js +30 -10
  10. package/dist/analyse/medias.js +4 -1
  11. package/dist/analyse/navigation.js +35 -0
  12. package/dist/analyse/niveaux.js +33 -0
  13. package/dist/analyse/noms.js +1 -1
  14. package/dist/analyse/site.js +30 -8
  15. package/dist/cibles/commun/colorerCode.js +59 -0
  16. package/dist/cibles/commun/mouvement.js +110 -4
  17. package/dist/cibles/mobile/projet.js +7 -2
  18. package/dist/cibles/mobile/rendu.js +6 -3
  19. package/dist/cibles/statique/elements-js.js +1 -1
  20. package/dist/cibles/statique/page.js +99 -6
  21. package/dist/cibles/statique/projet.js +31 -0
  22. package/dist/cibles/statique/valeurs.js +5 -1
  23. package/dist/cibles/statique/widgets.js +1 -1
  24. package/dist/cibles/web/css-ecran.js +22 -1
  25. package/dist/cibles/web/ecran.js +161 -16
  26. package/dist/cibles/web/interactions.js +50 -3
  27. package/dist/cibles/web/projet.js +29 -2
  28. package/dist/cibles/web/theme.js +11 -2
  29. package/dist/cibles/web/valeurs.js +17 -0
  30. package/dist/cibles/web/widgets.js +1 -1
  31. package/dist/i18n/messages.js +2 -0
  32. package/dist/lexer/lexer.js +106 -3
  33. package/dist/navigateur.js +5274 -0
  34. package/dist/parser/interactions.js +6 -2
  35. package/dist/parser/langues.js +1 -1
  36. package/dist/parser/medias.js +6 -1
  37. package/dist/parser/miseEnPage.js +1 -1
  38. package/dist/parser/parser.js +85 -3
  39. package/dist/parser/theme.js +10 -1
  40. package/dist/ri/construire.js +24 -1
  41. package/dist/vocabulaire/table-ecran.js +3 -3
  42. package/dist/vocabulaire/table-interactions.js +16 -1
  43. package/dist/vocabulaire/table.js +4 -4
  44. package/docs/guide.en.md +170 -2
  45. package/docs/guide.md +171 -1
  46. package/llms.txt +14 -1
  47. package/package.json +7 -4
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,94 @@ 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. `avec niveau` reste possible
180
+ pour choisir soi-même.
181
+
182
+ ```humalis
183
+ page "accueil" :
184
+ titre "Accueil"
185
+ section :
186
+ soustitre "Nos pages"
187
+ grille :
188
+ bloc :
189
+ soustitre "Exemples"
190
+ texte "Six applications à essayer."
191
+ ```
192
+
193
+ Dans un `titre`, un `soustitre` ou un `texte`, `{accent "…"}` met quelques mots
194
+ en valeur avec la couleur de marque. Le texte reste lisible normalement par les
195
+ lecteurs d'écran et dans le titre de l'onglet.
196
+
197
+ ```humalis
198
+ page "offre" :
199
+ titre "Une offre {accent "simple"}"
200
+ texte "Prix : {accent "gratuit"} pour toujours"
201
+ ```
202
+
203
+ ### Listes
204
+
205
+ `liste :` crée des puces ; `liste numerotee :` numérote chaque élément. Chaque instruction du bloc devient une entrée.
206
+
207
+ ```humalis
208
+ page "guide" :
209
+ liste :
210
+ texte "Installer Node.js"
211
+ texte "Créer le projet"
212
+ liste numerotee :
213
+ texte "Écrire le fichier"
214
+ texte "Compiler"
215
+ ```
216
+
217
+ ### Code dans une phrase
218
+
219
+ Dans un texte, `{code "…"}` affiche un court morceau de code à chasse fixe.
220
+
221
+ ```humalis
222
+ page "guide" :
223
+ texte "Écris {code "titre"} pour donner un titre."
224
+ ```
225
+
226
+ ### Bloc de code
227
+
228
+ `code langage :` recopie les lignes indentées sans les interpréter ; le langage est facultatif.
229
+
230
+ ```humalis
231
+ page "guide" :
232
+ code humalis :
233
+ page "accueil" :
234
+ titre "Bienvenue"
235
+ ```
236
+
237
+ `avec animation frappe` écrit le code lettre par lettre, avec un curseur ;
238
+ `avec animation frappe au defilement` attend que le bloc arrive à l'écran. Le
239
+ vrai code reste en place pendant la frappe (lecteurs d'écran, bouton Copier), et
240
+ il s'affiche tout de suite si la personne a demandé de réduire les animations.
241
+ Sur le téléphone, le code s'affiche entier.
242
+
243
+ ```humalis
244
+ page "accueil" :
245
+ code humalis avec animation frappe :
246
+ page "boutique" :
247
+ titre "Nos produits"
248
+ bouton "Commander"
249
+ ```
250
+
251
+ ### Tableau
252
+
253
+ Un tableau a une légende, des colonnes et des rangées de même largeur. Une traduction peut suivre chaque cellule.
254
+
255
+ ```humalis
256
+ langues :
257
+ francais
258
+ anglais
259
+
260
+ page "guide" :
261
+ tableau "Les commandes" en anglais "Commands" :
262
+ colonnes "Commande", "Rôle" en anglais "Role"
263
+ rangee "humalis compile", "produit le projet" en anglais "builds the project"
264
+ ```
265
+
170
266
  ### Image
171
267
 
172
268
  ```humalis
@@ -363,10 +459,35 @@ page "accueil" :
363
459
  Humalis vérifie le contraste : une couleur de texte trop pâle sur le fond est
364
460
  signalée à la compilation.
365
461
 
462
+ Une police peut être livrée avec le site, sans dépendre d'un service extérieur :
463
+ `police titres "Space Grotesk" depuis "./polices/space-grotesk.woff2"` (fichiers
464
+ `.woff2`, `.woff`, `.ttf` ou `.otf`).
465
+
466
+ Le visiteur peut aussi passer d'un thème à l'autre. `basculer theme` passe au
467
+ thème inverse de celui qu'on voit, et `si theme est sombre :` (ou `clair`)
468
+ réagit au thème affiché :
469
+
470
+ ```humalis
471
+ theme :
472
+ mode automatique
473
+
474
+ page "accueil" :
475
+ titre "Accueil"
476
+ bouton "Changer de thème"
477
+ quand l'utilisateur clique sur "Changer de thème" :
478
+ basculer theme
479
+ si theme est sombre :
480
+ texte "Bonne soirée"
481
+ sinon :
482
+ texte "Bonne journée"
483
+ ```
484
+
366
485
  ### L'en-tête et le pied communs
367
486
 
368
487
  `entete :` et `pied :` s'affichent sur toutes les pages. Une page peut s'en
369
- passer avec `sans entete` ou `sans pied`.
488
+ passer avec `sans entete` ou `sans pied`. Avec un en-tête, Humalis ajoute seul
489
+ un lien « Aller au contenu », caché tant que le clavier ne l'atteint pas : il
490
+ permet de sauter l'en-tête.
370
491
 
371
492
  ```humalis
372
493
  entete avec colle :
@@ -452,6 +573,22 @@ page "carte" :
452
573
  ```
453
574
 
454
575
  Dans un `menu`, le lien de la page où l'on est est marqué comme actif.
576
+ Les liens d'un menu passent à la ligne quand la place manque. Un menu que ton
577
+ CSS met en colonne (`flex-direction: column`) garde ce retour à la ligne :
578
+ ajoute `flex-wrap: nowrap` pour qu'il défile au lieu d'ouvrir une deuxième
579
+ colonne.
580
+
581
+ Un `menu repliable :` se range derrière un bouton « Menu » sur un petit écran
582
+ (téléphone) ; un lien choisi referme le menu. Sur grand écran, il reste ouvert :
583
+
584
+ ```humalis
585
+ page "accueil" :
586
+ menu repliable :
587
+ lien "Accueil" vers "accueil"
588
+ lien "La carte" vers "accueil"
589
+ lien "Réserver" vers "accueil"
590
+ titre "Accueil"
591
+ ```
455
592
 
456
593
  ---
457
594
 
@@ -497,6 +634,17 @@ Les animations : `apparition`, `montee`, `agrandissement`. Les effets au
497
634
  survol : `agrandi`, `leve`. Humalis respecte le réglage « réduire les
498
635
  animations » de la personne.
499
636
 
637
+ Sur un bloc, `et en cascade` fait apparaître ses enfants l'un après l'autre :
638
+
639
+ ```humalis
640
+ page "accueil" :
641
+ titre "Nos plats"
642
+ grille avec animation montee au defilement et en cascade :
643
+ texte "Soupe du jour"
644
+ texte "Risotto"
645
+ texte "Tarte aux pommes"
646
+ ```
647
+
500
648
  ---
501
649
 
502
650
  ## 9. Les variables et les calculs
@@ -893,8 +1041,10 @@ Les actions s'écrivent dans un événement.
893
1041
  | `afficher erreur "…"` | un message d'erreur |
894
1042
  | `montrer "nom"`, `cacher "nom"` | fait apparaître ou disparaître un élément |
895
1043
  | `changer x par …` | change une variable |
1044
+ | `changer x par champ "Libellé"` | prend la valeur actuelle d'un champ |
896
1045
  | `changer texte de "nom" par "…"` | change le texte d'un élément |
897
1046
  | `ajouter … à liste`, `retirer … de liste` | modifie une liste |
1047
+ | `ajouter champ "Libellé" à liste` | ajoute la valeur actuelle d'un champ |
898
1048
  | `rediriger vers "page"` | va à une page |
899
1049
  | `revenir vers "page"` | revient en arrière, ou va à cette page |
900
1050
  | `envoyer requete vers "…"` | appelle un serveur (voir [le serveur](#22-relier-les-pages-au-serveur)) |
@@ -915,6 +1065,22 @@ page "merci" :
915
1065
  titre "Merci !"
916
1066
  ```
917
1067
 
1068
+ 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.
1069
+
1070
+ ```humalis
1071
+ page "taches" :
1072
+ variable taches = ["Acheter du pain"]
1073
+ variable dernier = ""
1074
+ champ "Nouvelle tâche"
1075
+ bouton "Ajouter"
1076
+ quand l'utilisateur clique sur "Ajouter" :
1077
+ ajouter champ "Nouvelle tâche" à taches
1078
+ changer dernier par champ "Nouvelle tâche"
1079
+ texte "Dernière ajoutée : {dernier}"
1080
+ pour chaque t dans taches :
1081
+ texte t
1082
+ ```
1083
+
918
1084
  ---
919
1085
 
920
1086
  ## 16. Les messages, les fenêtres et les questions
@@ -1534,9 +1700,13 @@ page "catalogue" :
1534
1700
  ```
1535
1701
 
1536
1702
  - `en anglais "…"` donne la version d'un texte.
1703
+ - `sans traduction` garde le même texte dans toutes les langues, pour un nom
1704
+ propre : `lien "GitHub" sans traduction vers "https://github.com"`.
1537
1705
  - `traductions anglais :` traduit une seule fois un texte répété.
1538
1706
  - `selecteur de langue` affiche le choix de la langue ; `changer langue par
1539
1707
  anglais` et `si langue est anglais :` s'utilisent dans les événements.
1708
+ - Le message de `copier` se traduit comme les autres textes :
1709
+ `copier code avec message "Copié" en anglais "Copied"`.
1540
1710
  - Humalis signale à la compilation tout texte qui n'a pas sa traduction. Les
1541
1711
  messages de Humalis (champ obligatoire, chargement…) suivent la langue.
1542
1712
 
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.3",
3
+ "version": "1.1.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": {
@@ -10,6 +10,7 @@
10
10
  "dist",
11
11
  "llms.txt",
12
12
  "NOTICE",
13
+ "LICENSE.en.md",
13
14
  "README.en.md",
14
15
  "docs/guide.md",
15
16
  "docs/guide.en.md",
@@ -21,7 +22,7 @@
21
22
  "node": ">=24"
22
23
  },
23
24
  "scripts": {
24
- "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",
25
26
  "test": "vitest run",
26
27
  "typecheck": "tsc --noEmit",
27
28
  "essai:web": "node scripts/essai-web.mjs",
@@ -39,6 +40,7 @@
39
40
  "essai:desktop": "node scripts/essai-desktop.mjs",
40
41
  "essai:formulaire": "node scripts/essai-formulaire.mjs",
41
42
  "essai:vitrine": "node scripts/essai-vitrine.mjs",
43
+ "site:doc": "node scripts/doc-site.mjs",
42
44
  "llms": "node --disable-warning=ExperimentalWarning --experimental-loader ./scripts/charger-typescript.mjs scripts/generer-llms.mjs",
43
45
  "essai:medias": "node scripts/essai-medias.mjs",
44
46
  "essai:interactions": "node scripts/essai-interactions.mjs",
@@ -61,8 +63,8 @@
61
63
  "compiler",
62
64
  "french"
63
65
  ],
64
- "license": "Apache-2.0",
65
- "author": "kongo bola emmanouch",
66
+ "license": "SEE LICENSE IN LICENSE",
67
+ "author": "emch04",
66
68
  "repository": {
67
69
  "type": "git",
68
70
  "url": "git+https://github.com/emch04/humalis.git"
@@ -73,6 +75,7 @@
73
75
  },
74
76
  "devDependencies": {
75
77
  "@types/node": "^26.2.0",
78
+ "rolldown": "1.2.4",
76
79
  "typescript": "^7.0.2",
77
80
  "vitest": "^4.1.10"
78
81
  }