@hgdc/ui 0.72.0 → 0.72.1

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/README.md CHANGED
@@ -53,7 +53,7 @@ Primitives déjà là : `avatar` `badge` `button` `dialog` `drawer` `dropdown-me
53
53
  | `project-switcher` | `<ProjectSwitcher projects={projects} activeId={project?.id} activeName={params.project} allHref="/o/acme" createHref="/o/acme/new" renderLink={(href) => <Link to={href} />} />` : projet actif ou « Tous les projets », marque du projet (`ProjectMark`), « Nouveau projet » |
54
54
  | `account-menu` | `<AccountMenu user={user} onProfile={…} onSecurity={…} onSignOut={signOut} product="Mail" />` : Account et les produits ouverts du catalogue, Mail coché. Dans l'ordre : identité, Profil, Sécurité, Thème (Système, Clair, Sombre, `ThemeSwitch`), entrées du produit, Se déconnecter. Ni « État du service » ni raccourcis : la coque pose le premier au-dessus du compte, l'aide garde sa touche `?` |
55
55
  | `command-menu` | `<CommandMenu groups={[{ label: "Aller à", items }, { label: "Créer", items }, { label: "Changer", items }]} />` (`Ctrl+K`), `<CommandMenuButton compact="mobile" …/>` |
56
- | `products` | `HGDC_PRODUCTS` (mot, nom, sous-domaine, phrase, pastille `badge`, icône, état, `entryHref`), `HGDC_ACCOUNT`, `productMenuEntries({ current: "Mail" })` : chaque produit du menu pointe vers son entrée `/auth/hgdc` (ADR 0010), sauf ID (`https://id.hgdc.ch`, sa racine) |
56
+ | `products` | `HGDC_PRODUCTS` (mot, nom, sous-domaine, phrase, pastille `badge`, icône, état, `entryHref`), `HGDC_ACCOUNT`, `productMenuEntries({ current: "Mail" })` : chaque produit du menu pointe vers son entrée `/auth/hgdc` (ADR 0010), sauf ID (`https://id.hgdc.ch`, sa racine). `productEntryHref("mail", PRODUCT_ORIGINS, "acme")` et `shellProductEntries(…, { organization })` mènent droit à `/o/acme` (slug vérifié, sauf Manager) |
57
57
  | `addresses` | Adresses d'un produit déduites de son mot, sans React (lisible par `vite.config.ts` et Convex) : `productAddresses("mail", import.meta.env)` rend `basePath`, `appOrigin`, `appUrl` (`https://app.hgdc.ch/mail`), `convexUrl` (`https://convex.mail.hgdc.ch`), `convexSiteUrl`, `withBase`. `productBasePath("mail", { override: process.env.HGDC_BASE_PATH, command })` donne la base du build : `/mail` pour `vite build`, la racine pour `vite dev` et Vitest. `APP_PRODUCTS` : produits servis sous `app.hgdc.ch` (d'où `PRODUCT_ORIGINS`). Surcharges : `HGDC_BASE_PATH` (`/` : racine), `VITE_CONVEX_URL`, `VITE_CONVEX_SITE_URL` |
58
58
  | `service-status` | Bandeau d'incident ou de maintenance posé par `AppShell` en tête du contenu (ADR 0018) : `useServiceStatus(pageUrl)`, `ServiceStatusBanner`. `statusPage={false}` pour ne rien lire |
59
59
  | `kbd` | `<KbdGroup><Kbd>Ctrl</Kbd><Kbd>K</Kbd></KbdGroup>` |
@@ -74,6 +74,8 @@ Pendant le passage (0.39) :
74
74
  - **Barre latérale, contenu** : le nom du module et sa navigation passent en fondu de 200 ms. Une page qui attend hors de la coque (`PagePending` sous `FamilyLoaderRoot`) dessine la coque entière : organisation retenue, Manager, retour aux modules, nom du module de l'adresse, navigation en squelette à la hauteur retenue pour ce module, barre du haut.
75
75
  - **H** : un seul nom de transition (`hgdc-loader`), sans fondu, calé sur l'horloge : celui de l'arrivée reprend à la même phase.
76
76
  - **Contenu** : fondu de 150 ms.
77
+ - **Organisation** : la barre ouvre le produit sur la dernière organisation affichée (`next=/o/<slug>`), sans passer par l'accueil.
78
+ - **Relecture des organisations** (ADR 0016) : au plus une fois toutes les 10 minutes par produit (`BACKGROUND_REFRESH_INTERVAL_MS`). Un passage rapide d'un produit à l'autre ne recharge plus de cadre caché.
77
79
 
78
80
  `sidebarInitScript` (dans le `<head>`, déjà posé par tous les produits) applique cette mémoire sur `<html>` avant la première peinture : `data-hgdc-product`, `data-hgdc-org`, `--hgdc-org-initials`, `--hgdc-org-logo` (adresse `https:` seulement), `--hgdc-nav-height`. Elle vit dans `localStorage` (`hgdc-shell:org`, `hgdc-shell:nav:<produit>`) et `sessionStorage` (`hgdc-shell:switch`) ; rien d'autre que des initiales, un logo et une hauteur.
79
81
 
@@ -6,7 +6,7 @@ export declare const EDGE_GLOW: {
6
6
  readonly width: 47;
7
7
  readonly swell: 0.32;
8
8
  readonly speed: 0.68;
9
- readonly pulse: 0.56;
9
+ readonly pulse: 0.9;
10
10
  readonly pulsePeriodMs: 3000;
11
11
  };
12
12
  /** Temps des vagues (s) et phase de la pulsation (0 à 1) sur l'horloge : même image partout au même instant. */
package/dist/edge-glow.js CHANGED
@@ -4,7 +4,7 @@ import { useEffect, useRef } from "react";
4
4
  * Réglages de la lueur, choisis par Hugo le 2026-11-11 : épaisseur 47 px, houle 32 %, vitesse
5
5
  * 68 %, pulsation 56 % sur 3 s.
6
6
  */
7
- export const EDGE_GLOW = { width: 47, swell: 0.32, speed: 0.68, pulse: 0.56, pulsePeriodMs: 3000 };
7
+ export const EDGE_GLOW = { width: 47, swell: 0.32, speed: 0.68, pulse: 0.9, pulsePeriodMs: 3000 };
8
8
  const VERTEX = "attribute vec2 p;void main(){gl_Position=vec4(p,0.,1.);}";
9
9
  /**
10
10
  * Une seule bande le long du bord : opaque contre le bord, effacée vers l'intérieur. Son bord
@@ -21,9 +21,9 @@ float k=14.;float d=-k*log(exp(-p.x/k)+exp(-p.y/k)+exp(-(s.x-p.x)/k)+exp(-(s.y-p
21
21
  vec2 c=p-s*.5;float a=atan(c.y/s.y,c.x/s.x);
22
22
  float w=.55+A*(.22*sin(2.*a+1.1*T)+.16*sin(3.*a-1.7*T+1.3)+.12*sin(5.*a+2.3*T+.4)+.08*sin(8.*a-3.1*T+2.)+.05*sin(13.*a+4.2*T));
23
23
  float br=.5-.5*cos(6.2832*Q);br=br*br*(3.-2.*br);
24
- float th=max(W*w,W*.12)*I*(1.+P*(br*1.2-.4));
24
+ float th=max(W*w,W*.12)*I*(1.+P*(br*1.6-.5));
25
25
  float f=pow(1.-smoothstep(0.,th,d),1.5);
26
- float al=f*.92*min(I*1.5,1.)*(.88+.12*br);
26
+ float al=f*.92*min(I*1.5,1.)*(.7+.3*br);
27
27
  gl_FragColor=vec4(pal(a/6.2832+T*.06)*al,al);}`;
28
28
  /** Temps des vagues (s) et phase de la pulsation (0 à 1) sur l'horloge : même image partout au même instant. */
29
29
  export function edgeGlowClock(epochMs) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hgdc/ui",
3
- "version": "0.72.0",
3
+ "version": "0.72.1",
4
4
  "description": "Interface de la H Collection : jetons de la DA, thèmes, polices et composants.",
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://github.com/hugogebel-boop/hgdc-kit/tree/main/packages/ui#readme",
package/styles.css CHANGED
@@ -837,14 +837,14 @@
837
837
  }
838
838
 
839
839
  /* Le chargeur du document (`FamilyLoaderRoot`) : une seule lueur par page, en position fixe sur la
840
- carte du contenu. Visible quand une page attend (`PagePending`) hors de la coque, ou quand la
840
+ carte du contenu, au-dessus de la barre du haut (`z-30`) pour en faire tout le tour. Visible quand une page attend (`PagePending`) hors de la coque, ou quand la
841
841
  coque part vers un autre module (`data-loading`). Dans la coque, une page qui attend montre son
842
842
  squelette, jamais la lueur (ADR 0025). Masqué avec 80 ms de retenue : un `PagePending` qui laisse
843
843
  la place à un autre ne fait pas clignoter la lueur. */
844
844
  [data-slot="family-loader-root"] {
845
845
  position: fixed;
846
846
  inset: 0;
847
- z-index: 25;
847
+ z-index: 35;
848
848
  pointer-events: none;
849
849
  opacity: 0;
850
850
  visibility: hidden;