@hgdc/ui 0.56.0 → 0.58.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/README.md CHANGED
@@ -120,6 +120,7 @@ Sur ordinateur, la coque ouvre sur la barre des produits (ADR 0011) : organisati
120
120
  | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
121
121
  | `card` | `<Card><CardHeader><CardTitle>Domaines</CardTitle><CardAction>…</CardAction></CardHeader><CardContent>…</CardContent><CardFooter>…</CardFooter></Card>` |
122
122
  | `alert` | `<Alert tone="warning" title="Quota presque atteint" action={<Button size="sm">Voir</Button>}>90 % utilisés.</Alert>` |
123
+ | `demo-notice` | `<DemoNotice signIn={<Button size="sm" variant="outline" render={<Link to="/connexion" reloadDocument />}>Se connecter</Button>} />` : bandeau de la démo d'une console. |
123
124
  | `table` | `<TableHead sort="descending" onSort={…}>Date</TableHead>`, `<TableRowLink render={<Link … />}>Production</TableRowLink>`, `<TableEmpty colSpan={4}>…</TableEmpty>`, `<TableSkeleton columns={4} />` |
124
125
  | `resource-list` | `<ResourceList><ResourceItem icon={…} title="Site vitrine" meta="acme.ch" badge={…} actions={…} href="/p/site" /></ResourceList>` |
125
126
  | `stat` | `<StatGrid><StatTile label="Erreurs" value="12" delta={{ value: "8 %", direction: "up", good: "down" }} /></StatGrid>` |
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from "react";
2
+ /**
3
+ * Bandeau permanent de la démo d'une console (organisation `~demo`, lue sans compte) : ce que le
4
+ * visiteur regarde, et comment essayer pour de vrai. Posé en tête du contenu de la console, au-dessus
5
+ * de chaque page. `signIn` : le bouton « Se connecter » du produit (un lien de son routeur, qui
6
+ * repart par une page neuve pour ouvrir une vraie session).
7
+ */
8
+ export declare function DemoNotice({ signIn, children, className, }: {
9
+ signIn: ReactNode;
10
+ /** Ce que montre la démo, en une phrase. */
11
+ children?: ReactNode;
12
+ className?: string;
13
+ }): React.JSX.Element;
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Alert } from "./alert.js";
3
+ import { cn } from "./cn.js";
4
+ /**
5
+ * Bandeau permanent de la démo d'une console (organisation `~demo`, lue sans compte) : ce que le
6
+ * visiteur regarde, et comment essayer pour de vrai. Posé en tête du contenu de la console, au-dessus
7
+ * de chaque page. `signIn` : le bouton « Se connecter » du produit (un lien de son routeur, qui
8
+ * repart par une page neuve pour ouvrir une vraie session).
9
+ */
10
+ export function DemoNotice({ signIn, children = "Une entreprise inventée, avec des données fictives. Tu peux tout regarder, rien n'est enregistré.", className, }) {
11
+ return (_jsx(Alert, { "data-demo-notice": "", className: cn("mb-6", className), title: "D\u00E9mo", action: signIn, children: children }));
12
+ }
@@ -0,0 +1,28 @@
1
+ import { type ReactElement, type ReactNode } from "react";
2
+ /** Texte de l'infobulle d'un bouton d'écriture dans la démo. */
3
+ export declare const DEMO_READ_ONLY_HINT = "Lecture seule dans la d\u00E9mo";
4
+ /**
5
+ * Posé une fois autour de la console, `value` vrai sur la démo (organisation `~demo`) : chaque
6
+ * `DemoReadOnly` en dessous désactive son bouton. Le serveur refuse de toute façon (`refuseDemo`) ;
7
+ * ceci évite au visiteur un clic qui échoue.
8
+ */
9
+ export declare function DemoReadOnlyProvider({ value, children }: {
10
+ value: boolean;
11
+ children: ReactNode;
12
+ }): React.JSX.Element;
13
+ /** Vrai dans la démo : pour masquer ce qui n'a pas de sens en lecture seule (formulaire, zone de dépôt). */
14
+ export declare function useDemoReadOnly(): boolean;
15
+ type Disableable = {
16
+ disabled?: boolean;
17
+ "aria-disabled"?: boolean | "true" | "false";
18
+ };
19
+ /**
20
+ * Autour d'un bouton d'écriture (créer, envoyer, supprimer…). Hors de la démo : le bouton tel quel.
21
+ * Dans la démo : le bouton désactivé, et l'infobulle « Lecture seule dans la démo » sur une enveloppe
22
+ * focalisable, puisqu'un bouton désactivé ne reçoit ni survol ni focus.
23
+ */
24
+ export declare function DemoReadOnly({ children, hint, }: {
25
+ children: ReactElement<Disableable>;
26
+ hint?: string;
27
+ }): React.JSX.Element;
28
+ export {};
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cloneElement, createContext, isValidElement, useContext } from "react";
3
+ import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
4
+ /** Texte de l'infobulle d'un bouton d'écriture dans la démo. */
5
+ export const DEMO_READ_ONLY_HINT = "Lecture seule dans la démo";
6
+ const DemoReadOnlyContext = createContext(false);
7
+ /**
8
+ * Posé une fois autour de la console, `value` vrai sur la démo (organisation `~demo`) : chaque
9
+ * `DemoReadOnly` en dessous désactive son bouton. Le serveur refuse de toute façon (`refuseDemo`) ;
10
+ * ceci évite au visiteur un clic qui échoue.
11
+ */
12
+ export function DemoReadOnlyProvider({ value, children }) {
13
+ return _jsx(DemoReadOnlyContext.Provider, { value: value, children: children });
14
+ }
15
+ /** Vrai dans la démo : pour masquer ce qui n'a pas de sens en lecture seule (formulaire, zone de dépôt). */
16
+ export function useDemoReadOnly() {
17
+ return useContext(DemoReadOnlyContext);
18
+ }
19
+ /**
20
+ * Autour d'un bouton d'écriture (créer, envoyer, supprimer…). Hors de la démo : le bouton tel quel.
21
+ * Dans la démo : le bouton désactivé, et l'infobulle « Lecture seule dans la démo » sur une enveloppe
22
+ * focalisable, puisqu'un bouton désactivé ne reçoit ni survol ni focus.
23
+ */
24
+ export function DemoReadOnly({ children, hint = DEMO_READ_ONLY_HINT, }) {
25
+ const demo = useDemoReadOnly();
26
+ if (!demo || !isValidElement(children))
27
+ return children;
28
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger
29
+ // oxlint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- un bouton désactivé ne prend pas le focus : l'enveloppe le prend pour que le clavier lise la raison.
30
+ , {
31
+ // oxlint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- un bouton désactivé ne prend pas le focus : l'enveloppe le prend pour que le clavier lise la raison.
32
+ render: _jsx("span", { tabIndex: 0, "aria-label": hint, "data-demo-read-only": "", className: "inline-flex w-fit" }), children: cloneElement(children, { disabled: true, "aria-disabled": true }) }), _jsx(TooltipContent, { children: hint })] }));
33
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hgdc/ui",
3
- "version": "0.56.0",
3
+ "version": "0.58.0",
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",