@hgdc/ui 0.29.0 → 0.30.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.
|
@@ -28,7 +28,7 @@ export declare function ProjectMark({ project, className, }: {
|
|
|
28
28
|
* pendant le chargement : le déclencheur montre déjà `activeName` (le segment de l'URL), le menu
|
|
29
29
|
* reste utilisable pour « Tous les projets » et « Nouveau projet ».
|
|
30
30
|
*/
|
|
31
|
-
export declare function ProjectSwitcher({ projects, activeId, activeName, onSelect, allHref, createHref, onCreate, renderLink, createLabel, className, }: {
|
|
31
|
+
export declare function ProjectSwitcher({ projects, activeId, activeName, onSelect, allHref, createHref, onCreate, renderLink, noun, createLabel, className, }: {
|
|
32
32
|
projects: ReadonlyArray<SwitcherProject> | undefined;
|
|
33
33
|
/** Le projet ouvert ; `null` ou absent : « Tous les projets ». */
|
|
34
34
|
activeId?: string | null;
|
|
@@ -43,6 +43,11 @@ export declare function ProjectSwitcher({ projects, activeId, activeName, onSele
|
|
|
43
43
|
onCreate?: () => void;
|
|
44
44
|
/** Rend un lien du routeur du produit ; par défaut un `<a href>`. */
|
|
45
45
|
renderLink?: (href: string) => ReactElement;
|
|
46
|
+
/** Ce que l'on choisit, nom masculin : `{ one: "site", many: "sites" }` pour Analytics. */
|
|
47
|
+
noun?: {
|
|
48
|
+
one: string;
|
|
49
|
+
many: string;
|
|
50
|
+
};
|
|
46
51
|
createLabel?: string;
|
|
47
52
|
className?: string;
|
|
48
53
|
}): React.JSX.Element;
|
package/dist/project-switcher.js
CHANGED
|
@@ -39,10 +39,12 @@ function SwitcherEntry({ href, onSelect, renderLink, children, }) {
|
|
|
39
39
|
* pendant le chargement : le déclencheur montre déjà `activeName` (le segment de l'URL), le menu
|
|
40
40
|
* reste utilisable pour « Tous les projets » et « Nouveau projet ».
|
|
41
41
|
*/
|
|
42
|
-
export function ProjectSwitcher({ projects, activeId, activeName, onSelect, allHref, createHref, onCreate, renderLink,
|
|
42
|
+
export function ProjectSwitcher({ projects, activeId, activeName, onSelect, allHref, createHref, onCreate, renderLink, noun = { one: "projet", many: "projets" }, createLabel = `Nouveau ${noun.one}`, className, }) {
|
|
43
|
+
const capitalized = (word) => word.charAt(0).toUpperCase() + word.slice(1);
|
|
44
|
+
const all = `Tous les ${noun.many}`;
|
|
43
45
|
const hasActive = activeId !== undefined && activeId !== null;
|
|
44
46
|
const current = hasActive ? projects?.find((p) => p.id === activeId) : undefined;
|
|
45
|
-
const label = hasActive ? (current?.name ?? activeName ?? "") :
|
|
47
|
+
const label = hasActive ? (current?.name ?? activeName ?? "") : all;
|
|
46
48
|
const canCreate = createHref !== undefined || onCreate !== undefined;
|
|
47
|
-
return (_jsxs(DropdownMenu, { children: [_jsxs(DropdownMenuTrigger, { render: _jsx("button", { type: "button", "aria-label": hasActive ?
|
|
49
|
+
return (_jsxs(DropdownMenu, { children: [_jsxs(DropdownMenuTrigger, { render: _jsx("button", { type: "button", "aria-label": hasActive ? `${capitalized(noun.one)} ${label}, changer de ${noun.one}` : `${all}, changer de ${noun.one}`, className: cn("flex h-10 max-w-full min-w-0 items-center gap-2 rounded-xl px-2.5 text-sm font-medium outline-none transition-colors duration-(--duration-fast) ease-out hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring/50 aria-expanded:bg-muted coarse:h-11", className) }), children: [hasActive ? (current ? (_jsx(ProjectMark, { project: current })) : (_jsx("span", { "aria-hidden": true, className: "size-6 shrink-0 rounded-md bg-muted skeleton-pulse" }))) : (_jsx(HugeiconsIcon, { icon: DashboardSquare01Icon, "aria-hidden": true, className: "size-4.5 shrink-0 text-muted-foreground" })), _jsx("span", { className: "min-w-0 truncate", children: label }), _jsx(HugeiconsIcon, { icon: UnfoldMoreIcon, "aria-hidden": true, className: "size-4 shrink-0 text-muted-foreground" })] }), _jsxs(DropdownMenuContent, { align: "start", className: "w-72 max-w-[calc(100vw-2rem)]", children: [_jsxs(SwitcherEntry, { href: allHref, onSelect: () => onSelect?.(null), renderLink: renderLink, children: [_jsx(HugeiconsIcon, { icon: DashboardSquare01Icon, "aria-hidden": true, className: "size-4" }), _jsx("span", { className: "flex-1", children: all }), hasActive ? null : _jsx(HugeiconsIcon, { icon: Tick02Icon, "aria-label": "Vue active", className: "size-4" })] }), projects?.length ? (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuGroup, { children: [_jsx(DropdownMenuLabel, { children: capitalized(noun.many) }), projects.map((project) => (_jsxs(SwitcherEntry, { href: project.href, onSelect: () => onSelect?.(project.id), renderLink: renderLink, children: [_jsx(ProjectMark, { project: project }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: project.name }), project.id === activeId ? (_jsx(HugeiconsIcon, { icon: Tick02Icon, "aria-label": `${capitalized(noun.one)} actif`, className: "size-4" })) : null] }, project.id)))] })] })) : null, canCreate ? (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, {}), _jsxs(SwitcherEntry, { href: createHref, onSelect: onCreate, renderLink: renderLink, children: [_jsx(HugeiconsIcon, { icon: PlusSignIcon, "aria-hidden": true, className: "size-4" }), createLabel] })] })) : null] })] }));
|
|
48
50
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hgdc/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.30.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",
|