@hgdc/ui 0.22.1 → 0.24.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 +8 -8
- package/dist/app-shell.d.ts +7 -1
- package/dist/app-shell.js +3 -2
- package/dist/family-svg.d.ts +3 -5
- package/dist/family-svg.js +9 -30
- package/dist/product-badge.d.ts +5 -6
- package/dist/product-badge.js +6 -6
- package/dist/service-status.d.ts +54 -0
- package/dist/service-status.js +199 -0
- package/email-icons/account.png +0 -0
- package/email-icons/analytics.png +0 -0
- package/email-icons/docs.png +0 -0
- package/email-icons/host.png +0 -0
- package/email-icons/mail.png +0 -0
- package/email-icons/portal.png +0 -0
- package/email-icons/status.png +0 -0
- package/family/app/account/apple-touch-icon.png +0 -0
- package/family/app/account/favicon.ico +0 -0
- package/family/app/account/favicon.svg +1 -1
- package/family/app/account/icon-192.png +0 -0
- package/family/app/account/icon-512.png +0 -0
- package/family/app/account/icon-maskable-512.png +0 -0
- package/family/app/analytics/apple-touch-icon.png +0 -0
- package/family/app/analytics/favicon.ico +0 -0
- package/family/app/analytics/favicon.svg +1 -1
- package/family/app/analytics/icon-192.png +0 -0
- package/family/app/analytics/icon-512.png +0 -0
- package/family/app/analytics/icon-maskable-512.png +0 -0
- package/family/app/docs/apple-touch-icon.png +0 -0
- package/family/app/docs/favicon.ico +0 -0
- package/family/app/docs/favicon.svg +1 -1
- package/family/app/docs/icon-192.png +0 -0
- package/family/app/docs/icon-512.png +0 -0
- package/family/app/docs/icon-maskable-512.png +0 -0
- package/family/app/host/apple-touch-icon.png +0 -0
- package/family/app/host/favicon.ico +0 -0
- package/family/app/host/favicon.svg +1 -1
- package/family/app/host/icon-192.png +0 -0
- package/family/app/host/icon-512.png +0 -0
- package/family/app/host/icon-maskable-512.png +0 -0
- package/family/app/mail/apple-touch-icon.png +0 -0
- package/family/app/mail/favicon.ico +0 -0
- package/family/app/mail/favicon.svg +1 -1
- package/family/app/mail/icon-192.png +0 -0
- package/family/app/mail/icon-512.png +0 -0
- package/family/app/mail/icon-maskable-512.png +0 -0
- package/family/app/portal/apple-touch-icon.png +0 -0
- package/family/app/portal/favicon.ico +0 -0
- package/family/app/portal/favicon.svg +1 -1
- package/family/app/portal/icon-192.png +0 -0
- package/family/app/portal/icon-512.png +0 -0
- package/family/app/portal/icon-maskable-512.png +0 -0
- package/family/app/status/apple-touch-icon.png +0 -0
- package/family/app/status/favicon.ico +0 -0
- package/family/app/status/favicon.svg +1 -1
- package/family/app/status/icon-192.png +0 -0
- package/family/app/status/icon-512.png +0 -0
- package/family/app/status/icon-maskable-512.png +0 -0
- package/family/tile/account.svg +1 -1
- package/family/tile/analytics.svg +1 -1
- package/family/tile/docs.svg +1 -1
- package/family/tile/host.svg +1 -1
- package/family/tile/mail.svg +1 -1
- package/family/tile/portal.svg +1 -1
- package/family/tile/status.svg +1 -1
- package/package.json +1 -1
- package/family/tile/account-favicon.svg +0 -1
- package/family/tile/account-round.svg +0 -1
- package/family/tile/analytics-favicon.svg +0 -1
- package/family/tile/analytics-round.svg +0 -1
- package/family/tile/docs-favicon.svg +0 -1
- package/family/tile/docs-round.svg +0 -1
- package/family/tile/host-favicon.svg +0 -1
- package/family/tile/host-round.svg +0 -1
- package/family/tile/mail-favicon.svg +0 -1
- package/family/tile/mail-round.svg +0 -1
- package/family/tile/portal-favicon.svg +0 -1
- package/family/tile/portal-round.svg +0 -1
- package/family/tile/status-favicon.svg +0 -1
- package/family/tile/status-round.svg +0 -1
package/README.md
CHANGED
|
@@ -67,14 +67,14 @@ Une seule règle dans les sept produits, posée par la coque :
|
|
|
67
67
|
|
|
68
68
|
## Identité H Collection
|
|
69
69
|
|
|
70
|
-
| Import | Rôle
|
|
71
|
-
| --------------------------------------- |
|
|
72
|
-
| `product-badge` | `<ProductBadge product="host" className="size-8" />` (
|
|
73
|
-
| `@hgdc/ui/family/<mot>.svg` | Pictogrammes des produits (`account`, `host`, `mail`, `portal`, `status`, `analytics`, `docs`), originaux du site ; `family/tile/<mot>.svg` (
|
|
74
|
-
| `@hgdc/ui/family/hcollection-icon*.svg` | Le H « Double », marque de la H Collection, sur fond clair (`hcollection-icon.svg`) ou sombre (`-dark`), jamais recoloré
|
|
75
|
-
| `styles.css` | `--product-<mot>-from` / `--product-<mot>-to` (dégradé de chaque icône sur fond clair), `--glow-blue`, `--glow-violet`, `--glow-pink`, `--glow-orange`
|
|
76
|
-
|
|
77
|
-
Couleurs pleines ; pour éclaircir, mélanger au blanc `color-mix(in oklab, …)`, jamais `in oklch`. Une icône de produit se pose toujours sur son fond blanc, en clair comme en sombre, sans bordure ni ombre :
|
|
70
|
+
| Import | Rôle |
|
|
71
|
+
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
72
|
+
| `product-badge` | `<ProductBadge product="host" className="size-8" />` (carré blanc arrondi, la même forme partout), `<FamilyMark />` (le H « Double », clair et sombre selon le thème), `PRODUCT_GRADIENT` |
|
|
73
|
+
| `@hgdc/ui/family/<mot>.svg` | Pictogrammes des produits (`account`, `host`, `mail`, `portal`, `status`, `analytics`, `docs`), originaux du site ; `family/tile/<mot>.svg` (carré blanc arrondi) ; `family/app/<mot>/` : favicon.svg, favicon.ico, apple-touch-icon.png, icon-192/512.png, icon-maskable-512.png, à copier dans `public/` |
|
|
74
|
+
| `@hgdc/ui/family/hcollection-icon*.svg` | Le H « Double », marque de la H Collection, sur fond clair (`hcollection-icon.svg`) ou sombre (`-dark`), jamais recoloré |
|
|
75
|
+
| `styles.css` | `--product-<mot>-from` / `--product-<mot>-to` (dégradé de chaque icône sur fond clair), `--glow-blue`, `--glow-violet`, `--glow-pink`, `--glow-orange` |
|
|
76
|
+
|
|
77
|
+
Couleurs pleines ; pour éclaircir, mélanger au blanc `color-mix(in oklab, …)`, jamais `in oklch`. Une icône de produit se pose toujours sur son fond blanc, en clair comme en sombre, sans bordure ni ombre : carré arrondi 22 % partout, pictogramme à 12 % de marge (barre, menu, « Propulsé par », e-mails, icône d'app), plein cadre pour apple-touch et maskable. Le favicon est sans fond et suit le thème du système (ADR 0017). Le H reste sans fond. Les originaux vivent dans le dépôt du site hgdc.ch : les recopier dans `packages/ui/family/`, puis `bun scripts/family.ts && bun run format` (SVG embarqués et PNG des e-mails).
|
|
78
78
|
|
|
79
79
|
Sur ordinateur, la coque ouvre sur la barre des produits (ADR 0011) : organisation en haut, pastilles des produits ouverts, Account en bas, chacun par son entrée `/auth/hgdc?next=/`, le produit courant en teinte. Au survol (150 ms d'intention) ou au focus clavier, elle s'élargit par-dessus la page et écrit les noms. `productRail={false}` la coupe ; `accountHref` pointe vers un Account local. La barre latérale porte la marque du produit et se réduit en rail (`Ctrl+B`, mémorisé) : poser `sidebarInitScript` dans le `<head>`. En rail, la pastille du produit devient le bouton « Déplier » au survol. Le kit ne connaît ni routeur ni authentification : liens par `render={<Link />}`, actions par callbacks. Rôles d'organisation : `owner`, `admin`, `member` (Propriétaire, Admin, Membre).
|
|
80
80
|
|
package/dist/app-shell.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export declare function SidebarNavItem({ icon, label, active, href, render, }: {
|
|
|
33
33
|
/** Lien du routeur : `render={<Link to="…" />}`. */
|
|
34
34
|
render?: React.ReactElement;
|
|
35
35
|
}): React.JSX.Element;
|
|
36
|
-
export declare function AppShell({ product, organization, productRail, accountHref, nav, sidebarFooter, header, onSearch, searchLabel, children, contentKey, navigating, mainClassName, }: {
|
|
36
|
+
export declare function AppShell({ product, organization, productRail, accountHref, nav, sidebarFooter, header, onSearch, searchLabel, children, contentKey, navigating, mainClassName, statusPage, }: {
|
|
37
37
|
/** Le produit affiché (`"host"`) : sa marque en haut de la barre, « vous êtes ici » dans la barre des produits. */
|
|
38
38
|
product: FamilyProduct;
|
|
39
39
|
/** `OrgSwitcher` : en haut de la barre des produits, en haut du tiroir sur téléphone. */
|
|
@@ -81,4 +81,10 @@ export declare function AppShell({ product, organization, productRail, accountHr
|
|
|
81
81
|
* une page étroite passe par `Page` (`@hgdc/ui/page-header`), pas par la coque.
|
|
82
82
|
*/
|
|
83
83
|
mainClassName?: string;
|
|
84
|
+
/**
|
|
85
|
+
* Page de statut du produit, dont le bandeau d'état se pose en tête du contenu (ADR 0018) :
|
|
86
|
+
* `https://status.hgdc.ch/<produit>` par défaut, une autre adresse (prévisualisation sur une page
|
|
87
|
+
* de test), ou `false` pour ne rien lire.
|
|
88
|
+
*/
|
|
89
|
+
statusPage?: string | false | undefined;
|
|
84
90
|
}): React.JSX.Element;
|
package/dist/app-shell.js
CHANGED
|
@@ -17,6 +17,7 @@ import { HGDC_ACCOUNT, HGDC_PRODUCTS } from "./products.js";
|
|
|
17
17
|
import { ProductRailShownContext, ShellLeaveContext } from "./shell-placement.js";
|
|
18
18
|
import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
|
|
19
19
|
import { cn } from "./cn.js";
|
|
20
|
+
import { ServiceStatus, statusPageUrlFor } from "./service-status.js";
|
|
20
21
|
// ── Rail : la barre latérale réduite aux icônes, mémorisée par navigateur ──────────────
|
|
21
22
|
const RAIL_KEY = "sidebar";
|
|
22
23
|
const RAIL_EVENT = "sidebarchange";
|
|
@@ -173,7 +174,7 @@ function useContentLoading({ navigating, pending }) {
|
|
|
173
174
|
}, [active, visible]);
|
|
174
175
|
return visible;
|
|
175
176
|
}
|
|
176
|
-
export function AppShell({ product, organization, productRail = true, accountHref, nav, sidebarFooter, header, onSearch, searchLabel, children, contentKey, navigating = false, mainClassName, }) {
|
|
177
|
+
export function AppShell({ product, organization, productRail = true, accountHref, nav, sidebarFooter, header, onSearch, searchLabel, children, contentKey, navigating = false, mainClassName, statusPage, }) {
|
|
177
178
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
178
179
|
// Barre des produits élargie : la barre latérale se plie le temps du survol (ADR 0011).
|
|
179
180
|
const [railPeek, setRailPeek] = useState(false);
|
|
@@ -211,5 +212,5 @@ export function AppShell({ product, organization, productRail = true, accountHre
|
|
|
211
212
|
if (loading && contentRef.current)
|
|
212
213
|
contentRef.current.scrollTop = 0;
|
|
213
214
|
}, [loading]);
|
|
214
|
-
return (_jsx(ShellContext.Provider, { value: { closeMobileNav: () => setMenuOpen(false) }, children: _jsx(ProductRailShownContext, { value: productRail, children: _jsx(ShellLeaveContext, { value: leave, children: _jsxs("div", { "data-slot": "app-shell", "data-rail-peek": railPeek ? "" : undefined, "data-product-rail": productRail ? "" : undefined, "data-loading": loading ? "" : undefined, "data-hydrated": hydrated ? "" : undefined, className: cn("min-h-dvh lg:grid lg:h-dvh lg:bg-shell", productRail ? "lg:grid-cols-[auto_auto_minmax(0,1fr)]" : "lg:grid-cols-[auto_minmax(0,1fr)]"), children: [_jsx("a", { href: "#contenu", className: "sr-only z-50 rounded-xl bg-background px-4 py-2 text-sm font-medium focus:not-sr-only focus:fixed focus:top-3 focus:left-3 focus:ring-2 focus:ring-ring", children: "Aller au contenu" }), productRail ? (_jsx(ProductRail, { current: product, organization: organization, accountHref: accountHref, onExpandedChange: setRailPeek })) : null, _jsxs("aside", { "aria-label": "Barre lat\u00E9rale", className: "group/sidebar hidden overflow-hidden text-shell-foreground transition-[width] duration-(--duration-base) ease-ios motion-reduce:transition-none lg:flex lg:w-64 lg:flex-col lg:rail:w-16", children: [_jsx(SidebarHead, { product: product }), !productRail && organization ? _jsx("div", { className: "shrink-0 px-3 pb-1", children: organization }) : null, nav, sidebarFooter ? _jsx("div", { className: "grid gap-0.5 px-3 pt-1 pb-3", children: sidebarFooter }) : null] }), _jsx("div", { className: "flex min-h-dvh flex-col lg:min-h-0 lg:p-2 lg:pl-0", children: _jsxs("div", { ref: contentRef, className: "relative flex flex-1 flex-col lg:min-h-0 lg:overflow-y-auto lg:rounded-xl lg:bg-background lg:[scrollbar-gutter:stable]", children: [_jsxs("header", { className: "sticky top-[env(safe-area-inset-top,0px)] z-30 flex min-h-14 shrink-0 flex-wrap items-center gap-x-1 gap-y-1 border-b border-foreground/5 bg-background px-2 py-1.5 sm:px-4 lg:top-0", children: [_jsx("button", { type: "button", onClick: () => setMenuOpen(true), "aria-label": "Ouvrir le menu", className: "touch-target grid size-10 shrink-0 place-items-center rounded-xl text-muted-foreground outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 lg:hidden", children: _jsx(HugeiconsIcon, { icon: Menu01Icon, "aria-hidden": true, className: "size-5" }) }), _jsxs("div", { "data-slot": "app-shell-brand", className: "flex shrink-0 items-center gap-2 pr-1 lg:hidden", children: [_jsx(ProductBadge, { product: product, className: "size-6" }), _jsx("span", { className: "font-heading text-[0.9375rem] font-semibold", children: productName(product) })] }), _jsx("div", { className: cn("flex min-w-0 items-center gap-2", header ? "flex-[1_1_7rem]" : "flex-1"), children: header }), onSearch ? (_jsx(CommandMenuButton, { onClick: onSearch, compact: "mobile", className: "shrink-0 lg:w-96 lg:max-w-none", ...(searchLabel !== undefined ? { label: searchLabel } : {}) })) : null] }), _jsx("div", { "data-slot": "app-shell-loading", "aria-hidden": !loading, className: CONTENT_LOADING_LAYER, children: loading ? (_jsx("span", { role: "status", className: "sr-only", children: "Chargement\u2026" })) : null }),
|
|
215
|
+
return (_jsx(ShellContext.Provider, { value: { closeMobileNav: () => setMenuOpen(false) }, children: _jsx(ProductRailShownContext, { value: productRail, children: _jsx(ShellLeaveContext, { value: leave, children: _jsxs("div", { "data-slot": "app-shell", "data-rail-peek": railPeek ? "" : undefined, "data-product-rail": productRail ? "" : undefined, "data-loading": loading ? "" : undefined, "data-hydrated": hydrated ? "" : undefined, className: cn("min-h-dvh lg:grid lg:h-dvh lg:bg-shell", productRail ? "lg:grid-cols-[auto_auto_minmax(0,1fr)]" : "lg:grid-cols-[auto_minmax(0,1fr)]"), children: [_jsx("a", { href: "#contenu", className: "sr-only z-50 rounded-xl bg-background px-4 py-2 text-sm font-medium focus:not-sr-only focus:fixed focus:top-3 focus:left-3 focus:ring-2 focus:ring-ring", children: "Aller au contenu" }), productRail ? (_jsx(ProductRail, { current: product, organization: organization, accountHref: accountHref, onExpandedChange: setRailPeek })) : null, _jsxs("aside", { "aria-label": "Barre lat\u00E9rale", className: "group/sidebar hidden overflow-hidden text-shell-foreground transition-[width] duration-(--duration-base) ease-ios motion-reduce:transition-none lg:flex lg:w-64 lg:flex-col lg:rail:w-16", children: [_jsx(SidebarHead, { product: product }), !productRail && organization ? _jsx("div", { className: "shrink-0 px-3 pb-1", children: organization }) : null, nav, sidebarFooter ? _jsx("div", { className: "grid gap-0.5 px-3 pt-1 pb-3", children: sidebarFooter }) : null] }), _jsx("div", { className: "flex min-h-dvh flex-col lg:min-h-0 lg:p-2 lg:pl-0", children: _jsxs("div", { ref: contentRef, className: "relative flex flex-1 flex-col lg:min-h-0 lg:overflow-y-auto lg:rounded-xl lg:bg-background lg:[scrollbar-gutter:stable]", children: [_jsxs("header", { className: "sticky top-[env(safe-area-inset-top,0px)] z-30 flex min-h-14 shrink-0 flex-wrap items-center gap-x-1 gap-y-1 border-b border-foreground/5 bg-background px-2 py-1.5 sm:px-4 lg:top-0", children: [_jsx("button", { type: "button", onClick: () => setMenuOpen(true), "aria-label": "Ouvrir le menu", className: "touch-target grid size-10 shrink-0 place-items-center rounded-xl text-muted-foreground outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 lg:hidden", children: _jsx(HugeiconsIcon, { icon: Menu01Icon, "aria-hidden": true, className: "size-5" }) }), _jsxs("div", { "data-slot": "app-shell-brand", className: "flex shrink-0 items-center gap-2 pr-1 lg:hidden", children: [_jsx(ProductBadge, { product: product, className: "size-6" }), _jsx("span", { className: "font-heading text-[0.9375rem] font-semibold", children: productName(product) })] }), _jsx("div", { className: cn("flex min-w-0 items-center gap-2", header ? "flex-[1_1_7rem]" : "flex-1"), children: header }), onSearch ? (_jsx(CommandMenuButton, { onClick: onSearch, compact: "mobile", className: "shrink-0 lg:w-96 lg:max-w-none", ...(searchLabel !== undefined ? { label: searchLabel } : {}) })) : null] }), _jsx("div", { "data-slot": "app-shell-loading", "aria-hidden": !loading, className: CONTENT_LOADING_LAYER, children: loading ? (_jsx("span", { role: "status", className: "sr-only", children: "Chargement\u2026" })) : null }), _jsxs("main", { id: "contenu", tabIndex: -1, "aria-busy": loading ? true : undefined, inert: loading || undefined, className: cn("mx-auto w-full max-w-6xl flex-1 px-4 pt-6 pb-16 outline-none sm:px-6 lg:px-10 lg:pt-8", mainClassName), children: [_jsx(ServiceStatus, { pageUrl: statusPage === false ? null : (statusPage ?? statusPageUrlFor(product)), className: "mb-6" }), _jsx(ContentLoadingContext, { value: registerPagePending, children: contentKey === undefined ? (children) : (_jsx(Suspense, { fallback: _jsx(PagePending, {}), children: children }, contentKey)) })] })] }) }), hasRoot ? null : _jsx(FamilyLoaderHost, {}), _jsx(Drawer, { side: "bottom", open: menuOpen, onOpenChange: setMenuOpen, children: _jsxs(DrawerContent, { className: "lg:hidden", children: [_jsx(DrawerTitle, { className: "sr-only", children: "Menu" }), organization ? _jsx("div", { className: "px-3 pt-1", children: organization }) : null, nav, sidebarFooter ? (_jsx("div", { className: "grid gap-0.5 border-t border-foreground/5 px-3 pt-2 pb-[max(env(safe-area-inset-bottom),0.75rem)]", children: sidebarFooter })) : null] }) })] }) }) }) }));
|
|
215
216
|
}
|
package/dist/family-svg.d.ts
CHANGED
|
@@ -3,17 +3,15 @@ export declare const FAMILY_PRODUCTS: readonly ["account", "host", "mail", "port
|
|
|
3
3
|
export type FamilyProduct = (typeof FAMILY_PRODUCTS)[number];
|
|
4
4
|
/** Vrai si le mot en minuscules (« host ») désigne un produit qui a une icône. */
|
|
5
5
|
export declare function isFamilyProduct(word: string): word is FamilyProduct;
|
|
6
|
-
/** Forme du fond blanc d'une icône : squircle (barre, menu, e-mails) ou rond (« Propulsé par »). */
|
|
7
|
-
export type BadgeShape = "squircle" | "round";
|
|
8
6
|
/** Un dessin en deux variantes : sur fond clair et sur fond sombre. */
|
|
9
7
|
export type ThemedSvg = Readonly<{
|
|
10
8
|
light: string;
|
|
11
9
|
dark: string;
|
|
12
10
|
}>;
|
|
13
11
|
/**
|
|
14
|
-
* SVG de l'icône de chaque produit sur son
|
|
15
|
-
* (`family/tile/<mot>.svg
|
|
12
|
+
* SVG de l'icône de chaque produit sur son carré blanc arrondi, toujours le même en clair et en
|
|
13
|
+
* sombre (`family/tile/<mot>.svg`).
|
|
16
14
|
*/
|
|
17
|
-
export declare const PRODUCT_BADGE_SVG: Readonly<Record<FamilyProduct,
|
|
15
|
+
export declare const PRODUCT_BADGE_SVG: Readonly<Record<FamilyProduct, string>>;
|
|
18
16
|
/** SVG du H « Double », la marque de la H Collection, sans fond (`family/hcollection-icon(-dark).svg`). */
|
|
19
17
|
export declare const FAMILY_MARK_SVG: ThemedSvg;
|
package/dist/family-svg.js
CHANGED
|
@@ -6,38 +6,17 @@ export function isFamilyProduct(word) {
|
|
|
6
6
|
return FAMILY_PRODUCTS.includes(word);
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* SVG de l'icône de chaque produit sur son
|
|
10
|
-
* (`family/tile/<mot>.svg
|
|
9
|
+
* SVG de l'icône de chaque produit sur son carré blanc arrondi, toujours le même en clair et en
|
|
10
|
+
* sombre (`family/tile/<mot>.svg`).
|
|
11
11
|
*/
|
|
12
12
|
export const PRODUCT_BADGE_SVG = {
|
|
13
|
-
account:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
},
|
|
21
|
-
mail: {
|
|
22
|
-
squircle: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M32 0C48.6 0 56.9 0 60.5 3.5C64 7.1 64 15.4 64 32C64 48.6 64 56.9 60.5 60.5C56.9 64 48.6 64 32 64C15.4 64 7.1 64 3.5 60.5C0 56.9 0 48.6 0 32C0 15.4 0 7.1 3.5 3.5C7.1 0 15.4 0 32 0Z" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fa3a58"/><stop offset="1" stop-color="#ec3052"/></linearGradient></defs><path d="M17.5 25H46.5A3.5 3.5 0 0 1 50 28.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5V28.5A3.5 3.5 0 0 1 17.5 25Z" fill="url(#g)" fill-opacity="0.25" fill-rule="evenodd"/><path d="M22.5 13H41.5A2.5 2.5 0 0 1 44 15.5V44.5A2.5 2.5 0 0 1 41.5 47H22.5A2.5 2.5 0 0 1 20 44.5V15.5A2.5 2.5 0 0 1 22.5 13ZM25.2 18H38.8A1.2 1.2 0 0 1 40 19.2V19.2A1.2 1.2 0 0 1 38.8 20.4H25.2A1.2 1.2 0 0 1 24 19.2V19.2A1.2 1.2 0 0 1 25.2 18ZM25.2 23H33.8A1.2 1.2 0 0 1 35 24.2V24.2A1.2 1.2 0 0 1 33.8 25.4H25.2A1.2 1.2 0 0 1 24 24.2V24.2A1.2 1.2 0 0 1 25.2 23Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M14 29.5L32 40.5L50 29.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
23
|
-
round: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fa3a58"/><stop offset="1" stop-color="#ec3052"/></linearGradient></defs><path d="M17.5 25H46.5A3.5 3.5 0 0 1 50 28.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5V28.5A3.5 3.5 0 0 1 17.5 25Z" fill="url(#g)" fill-opacity="0.25" fill-rule="evenodd"/><path d="M22.5 13H41.5A2.5 2.5 0 0 1 44 15.5V44.5A2.5 2.5 0 0 1 41.5 47H22.5A2.5 2.5 0 0 1 20 44.5V15.5A2.5 2.5 0 0 1 22.5 13ZM25.2 18H38.8A1.2 1.2 0 0 1 40 19.2V19.2A1.2 1.2 0 0 1 38.8 20.4H25.2A1.2 1.2 0 0 1 24 19.2V19.2A1.2 1.2 0 0 1 25.2 18ZM25.2 23H33.8A1.2 1.2 0 0 1 35 24.2V24.2A1.2 1.2 0 0 1 33.8 25.4H25.2A1.2 1.2 0 0 1 24 24.2V24.2A1.2 1.2 0 0 1 25.2 23Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M14 29.5L32 40.5L50 29.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
24
|
-
},
|
|
25
|
-
portal: {
|
|
26
|
-
squircle: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M32 0C48.6 0 56.9 0 60.5 3.5C64 7.1 64 15.4 64 32C64 48.6 64 56.9 60.5 60.5C56.9 64 48.6 64 32 64C15.4 64 7.1 64 3.5 60.5C0 56.9 0 48.6 0 32C0 15.4 0 7.1 3.5 3.5C7.1 0 15.4 0 32 0Z" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b5cff"/><stop offset="1" stop-color="#7b4bf7"/></linearGradient></defs><path d="M21 13H43A3 3 0 0 1 46 16V47A3 3 0 0 1 43 50H21A3 3 0 0 1 18 47V16A3 3 0 0 1 21 13Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M20.6 13.3L32.6 16.5A2 2 0 0 1 34 18.4V45.6A2 2 0 0 1 32.6 47.5L20.6 50.7A2 2 0 0 1 18 48.8V15.2A2 2 0 0 1 20.6 13.3ZM28.2 32A1.8 1.8 0 1 0 31.8 32A1.8 1.8 0 1 0 28.2 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
27
|
-
round: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b5cff"/><stop offset="1" stop-color="#7b4bf7"/></linearGradient></defs><path d="M21 13H43A3 3 0 0 1 46 16V47A3 3 0 0 1 43 50H21A3 3 0 0 1 18 47V16A3 3 0 0 1 21 13Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M20.6 13.3L32.6 16.5A2 2 0 0 1 34 18.4V45.6A2 2 0 0 1 32.6 47.5L20.6 50.7A2 2 0 0 1 18 48.8V15.2A2 2 0 0 1 20.6 13.3ZM28.2 32A1.8 1.8 0 1 0 31.8 32A1.8 1.8 0 1 0 28.2 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
28
|
-
},
|
|
29
|
-
status: {
|
|
30
|
-
squircle: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M32 0C48.6 0 56.9 0 60.5 3.5C64 7.1 64 15.4 64 32C64 48.6 64 56.9 60.5 60.5C56.9 64 48.6 64 32 64C15.4 64 7.1 64 3.5 60.5C0 56.9 0 48.6 0 32C0 15.4 0 7.1 3.5 3.5C7.1 0 15.4 0 32 0Z" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11ce8b"/><stop offset="1" stop-color="#09b077"/></linearGradient></defs><path d="M14 32A18 18 0 1 0 50 32A18 18 0 1 0 14 32Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M19.5 32A12.5 12.5 0 1 0 44.5 32A12.5 12.5 0 1 0 19.5 32Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
31
|
-
round: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11ce8b"/><stop offset="1" stop-color="#09b077"/></linearGradient></defs><path d="M14 32A18 18 0 1 0 50 32A18 18 0 1 0 14 32Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M19.5 32A12.5 12.5 0 1 0 44.5 32A12.5 12.5 0 1 0 19.5 32Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
32
|
-
},
|
|
33
|
-
analytics: {
|
|
34
|
-
squircle: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M32 0C48.6 0 56.9 0 60.5 3.5C64 7.1 64 15.4 64 32C64 48.6 64 56.9 60.5 60.5C56.9 64 48.6 64 32 64C15.4 64 7.1 64 3.5 60.5C0 56.9 0 48.6 0 32C0 15.4 0 7.1 3.5 3.5C7.1 0 15.4 0 32 0Z" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffb020"/><stop offset="1" stop-color="#e58309"/></linearGradient></defs><path d="M18.3 34H21.7A2.8 2.8 0 0 1 24.5 36.8V46.2A2.8 2.8 0 0 1 21.7 49H18.3A2.8 2.8 0 0 1 15.5 46.2V36.8A2.8 2.8 0 0 1 18.3 34Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M30.3 25H33.7A2.8 2.8 0 0 1 36.5 27.8V46.2A2.8 2.8 0 0 1 33.7 49H30.3A2.8 2.8 0 0 1 27.5 46.2V27.8A2.8 2.8 0 0 1 30.3 25Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M42.3 15H45.7A2.8 2.8 0 0 1 48.5 17.8V46.2A2.8 2.8 0 0 1 45.7 49H42.3A2.8 2.8 0 0 1 39.5 46.2V17.8A2.8 2.8 0 0 1 42.3 15Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
35
|
-
round: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffb020"/><stop offset="1" stop-color="#e58309"/></linearGradient></defs><path d="M18.3 34H21.7A2.8 2.8 0 0 1 24.5 36.8V46.2A2.8 2.8 0 0 1 21.7 49H18.3A2.8 2.8 0 0 1 15.5 46.2V36.8A2.8 2.8 0 0 1 18.3 34Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M30.3 25H33.7A2.8 2.8 0 0 1 36.5 27.8V46.2A2.8 2.8 0 0 1 33.7 49H30.3A2.8 2.8 0 0 1 27.5 46.2V27.8A2.8 2.8 0 0 1 30.3 25Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M42.3 15H45.7A2.8 2.8 0 0 1 48.5 17.8V46.2A2.8 2.8 0 0 1 45.7 49H42.3A2.8 2.8 0 0 1 39.5 46.2V17.8A2.8 2.8 0 0 1 42.3 15Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
36
|
-
},
|
|
37
|
-
docs: {
|
|
38
|
-
squircle: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><path d="M32 0C48.6 0 56.9 0 60.5 3.5C64 7.1 64 15.4 64 32C64 48.6 64 56.9 60.5 60.5C56.9 64 48.6 64 32 64C15.4 64 7.1 64 3.5 60.5C0 56.9 0 48.6 0 32C0 15.4 0 7.1 3.5 3.5C7.1 0 15.4 0 32 0Z" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ec1dc"/><stop offset="1" stop-color="#0aa3c1"/></linearGradient></defs><path d="M26 13H46A3 3 0 0 1 49 16V43A3 3 0 0 1 46 46H26A3 3 0 0 1 23 43V16A3 3 0 0 1 26 13Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M18 18H32V24.5A2.5 2.5 0 0 0 34.5 27H41V46A3 3 0 0 1 38 49H18A3 3 0 0 1 15 46V21A3 3 0 0 1 18 18ZM21.3 33H34.7A1.3 1.3 0 0 1 36 34.3V34.300000000000004A1.3 1.3 0 0 1 34.7 35.6H21.3A1.3 1.3 0 0 1 20 34.300000000000004V34.3A1.3 1.3 0 0 1 21.3 33ZM21.3 39H29.7A1.3 1.3 0 0 1 31 40.3V40.300000000000004A1.3 1.3 0 0 1 29.7 41.6H21.3A1.3 1.3 0 0 1 20 40.300000000000004V40.3A1.3 1.3 0 0 1 21.3 39Z" fill="url(#g)" fill-rule="evenodd"/><path d="M32 18L41 27H34.5A2.5 2.5 0 0 1 32 24.5Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/></svg></svg>',
|
|
39
|
-
round: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ec1dc"/><stop offset="1" stop-color="#0aa3c1"/></linearGradient></defs><path d="M26 13H46A3 3 0 0 1 49 16V43A3 3 0 0 1 46 46H26A3 3 0 0 1 23 43V16A3 3 0 0 1 26 13Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M18 18H32V24.5A2.5 2.5 0 0 0 34.5 27H41V46A3 3 0 0 1 38 49H18A3 3 0 0 1 15 46V21A3 3 0 0 1 18 18ZM21.3 33H34.7A1.3 1.3 0 0 1 36 34.3V34.300000000000004A1.3 1.3 0 0 1 34.7 35.6H21.3A1.3 1.3 0 0 1 20 34.300000000000004V34.3A1.3 1.3 0 0 1 21.3 33ZM21.3 39H29.7A1.3 1.3 0 0 1 31 40.3V40.300000000000004A1.3 1.3 0 0 1 29.7 41.6H21.3A1.3 1.3 0 0 1 20 40.300000000000004V40.3A1.3 1.3 0 0 1 21.3 39Z" fill="url(#g)" fill-rule="evenodd"/><path d="M32 18L41 27H34.5A2.5 2.5 0 0 1 32 24.5Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/></svg></svg>',
|
|
40
|
-
},
|
|
13
|
+
account: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="12 12.5 40 40"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff6a3d"/><stop offset="1" stop-color="#fc582e"/></linearGradient></defs><path d="M22 17H42A5 5 0 0 1 47 22V40A5 5 0 0 1 42 45H22A5 5 0 0 1 17 40V22A5 5 0 0 1 22 17Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M17.5 21H46.5A5.5 5.5 0 0 1 52 26.5V42.5A5.5 5.5 0 0 1 46.5 48H17.5A5.5 5.5 0 0 1 12 42.5V26.5A5.5 5.5 0 0 1 17.5 21ZM20.5 30.9A3.5 3.5 0 1 0 27.5 30.9A3.5 3.5 0 1 0 20.5 30.9ZM17.6 40.6C17.6 37.6 20.5 35.6 24 35.6C27.5 35.6 30.4 37.6 30.4 40.6ZM35.5 30H44.5A1.5 1.5 0 0 1 46 31.5V31.5A1.5 1.5 0 0 1 44.5 33H35.5A1.5 1.5 0 0 1 34 31.5V31.5A1.5 1.5 0 0 1 35.5 30ZM35.5 36H40.5A1.5 1.5 0 0 1 42 37.5V37.5A1.5 1.5 0 0 1 40.5 39H35.5A1.5 1.5 0 0 1 34 37.5V37.5A1.5 1.5 0 0 1 35.5 36Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
14
|
+
host: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="14 14 36 36"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3b7bff"/><stop offset="1" stop-color="#2b63f2"/></linearGradient></defs><path d="M20 14H44A3 3 0 0 1 47 17V20A3 3 0 0 1 44 23H20A3 3 0 0 1 17 20V17A3 3 0 0 1 20 14ZM39.8 18.5A1.7 1.7 0 1 0 43.2 18.5A1.7 1.7 0 1 0 39.8 18.5Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M20 26.5H44A3 3 0 0 1 47 29.5V32.5A3 3 0 0 1 44 35.5H20A3 3 0 0 1 17 32.5V29.5A3 3 0 0 1 20 26.5ZM39.8 31A1.7 1.7 0 1 0 43.2 31A1.7 1.7 0 1 0 39.8 31Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M20.5 39H43.5A3.5 3.5 0 0 1 47 42.5V46.5A3.5 3.5 0 0 1 43.5 50H20.5A3.5 3.5 0 0 1 17 46.5V42.5A3.5 3.5 0 0 1 20.5 39ZM39.6 44.5A1.9 1.9 0 1 0 43.4 44.5A1.9 1.9 0 1 0 39.6 44.5ZM22.7 43.3H29.3A1.2 1.2 0 0 1 30.5 44.5V44.49999999999999A1.2 1.2 0 0 1 29.3 45.699999999999996H22.7A1.2 1.2 0 0 1 21.5 44.49999999999999V44.5A1.2 1.2 0 0 1 22.7 43.3Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
15
|
+
mail: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="14 13 36 36"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fa3a58"/><stop offset="1" stop-color="#ec3052"/></linearGradient></defs><path d="M17.5 25H46.5A3.5 3.5 0 0 1 50 28.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5V28.5A3.5 3.5 0 0 1 17.5 25Z" fill="url(#g)" fill-opacity="0.25" fill-rule="evenodd"/><path d="M22.5 13H41.5A2.5 2.5 0 0 1 44 15.5V44.5A2.5 2.5 0 0 1 41.5 47H22.5A2.5 2.5 0 0 1 20 44.5V15.5A2.5 2.5 0 0 1 22.5 13ZM25.2 18H38.8A1.2 1.2 0 0 1 40 19.2V19.2A1.2 1.2 0 0 1 38.8 20.4H25.2A1.2 1.2 0 0 1 24 19.2V19.2A1.2 1.2 0 0 1 25.2 18ZM25.2 23H33.8A1.2 1.2 0 0 1 35 24.2V24.2A1.2 1.2 0 0 1 33.8 25.4H25.2A1.2 1.2 0 0 1 24 24.2V24.2A1.2 1.2 0 0 1 25.2 23Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M14 29.5L32 40.5L50 29.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
16
|
+
portal: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="13 13 38 38"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b5cff"/><stop offset="1" stop-color="#7b4bf7"/></linearGradient></defs><path d="M21 13H43A3 3 0 0 1 46 16V47A3 3 0 0 1 43 50H21A3 3 0 0 1 18 47V16A3 3 0 0 1 21 13Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M20.6 13.3L32.6 16.5A2 2 0 0 1 34 18.4V45.6A2 2 0 0 1 32.6 47.5L20.6 50.7A2 2 0 0 1 18 48.8V15.2A2 2 0 0 1 20.6 13.3ZM28.2 32A1.8 1.8 0 1 0 31.8 32A1.8 1.8 0 1 0 28.2 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
17
|
+
status: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="14 14 36 36"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11ce8b"/><stop offset="1" stop-color="#09b077"/></linearGradient></defs><path d="M14 32A18 18 0 1 0 50 32A18 18 0 1 0 14 32Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M19.5 32A12.5 12.5 0 1 0 44.5 32A12.5 12.5 0 1 0 19.5 32Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
18
|
+
analytics: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="15 15 34 34"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffb020"/><stop offset="1" stop-color="#e58309"/></linearGradient></defs><path d="M18.3 34H21.7A2.8 2.8 0 0 1 24.5 36.8V46.2A2.8 2.8 0 0 1 21.7 49H18.3A2.8 2.8 0 0 1 15.5 46.2V36.8A2.8 2.8 0 0 1 18.3 34Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M30.3 25H33.7A2.8 2.8 0 0 1 36.5 27.8V46.2A2.8 2.8 0 0 1 33.7 49H30.3A2.8 2.8 0 0 1 27.5 46.2V27.8A2.8 2.8 0 0 1 30.3 25Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M42.3 15H45.7A2.8 2.8 0 0 1 48.5 17.8V46.2A2.8 2.8 0 0 1 45.7 49H42.3A2.8 2.8 0 0 1 39.5 46.2V17.8A2.8 2.8 0 0 1 42.3 15Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>',
|
|
19
|
+
docs: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="14 13 36 36"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ec1dc"/><stop offset="1" stop-color="#0aa3c1"/></linearGradient></defs><path d="M26 13H46A3 3 0 0 1 49 16V43A3 3 0 0 1 46 46H26A3 3 0 0 1 23 43V16A3 3 0 0 1 26 13Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M18 18H32V24.5A2.5 2.5 0 0 0 34.5 27H41V46A3 3 0 0 1 38 49H18A3 3 0 0 1 15 46V21A3 3 0 0 1 18 18ZM21.3 33H34.7A1.3 1.3 0 0 1 36 34.3V34.300000000000004A1.3 1.3 0 0 1 34.7 35.6H21.3A1.3 1.3 0 0 1 20 34.300000000000004V34.3A1.3 1.3 0 0 1 21.3 33ZM21.3 39H29.7A1.3 1.3 0 0 1 31 40.3V40.300000000000004A1.3 1.3 0 0 1 29.7 41.6H21.3A1.3 1.3 0 0 1 20 40.300000000000004V40.3A1.3 1.3 0 0 1 21.3 39Z" fill="url(#g)" fill-rule="evenodd"/><path d="M32 18L41 27H34.5A2.5 2.5 0 0 1 32 24.5Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/></svg></svg>',
|
|
41
20
|
};
|
|
42
21
|
/** SVG du H « Double », la marque de la H Collection, sans fond (`family/hcollection-icon(-dark).svg`). */
|
|
43
22
|
export const FAMILY_MARK_SVG = {
|
package/dist/product-badge.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type FamilyProduct } from "./family-svg.ts";
|
|
2
2
|
/**
|
|
3
3
|
* Dégradé de chaque icône sur fond clair, de la teinte vive (haut gauche) à la teinte profonde (bas
|
|
4
4
|
* droit). Mêmes valeurs que les jetons `--product-<mot>-from` / `--product-<mot>-to` de `styles.css`
|
|
@@ -14,13 +14,12 @@ type MarkProps = {
|
|
|
14
14
|
label?: string;
|
|
15
15
|
};
|
|
16
16
|
/**
|
|
17
|
-
* Icône d'un produit : le pictogramme dans le dégradé du produit, sur son
|
|
18
|
-
* clair et en sombre, sans bordure ni ombre.
|
|
19
|
-
*
|
|
17
|
+
* Icône d'un produit : le pictogramme dans le dégradé du produit, sur son carré blanc arrondi, le
|
|
18
|
+
* même en clair et en sombre et dans tous les contextes, sans bordure ni ombre. `size-4` par
|
|
19
|
+
* défaut, à agrandir par `className`.
|
|
20
20
|
*/
|
|
21
|
-
export declare function ProductBadge({ product,
|
|
21
|
+
export declare function ProductBadge({ product, className, label }: MarkProps & {
|
|
22
22
|
product: FamilyProduct;
|
|
23
|
-
shape?: BadgeShape;
|
|
24
23
|
}): React.JSX.Element;
|
|
25
24
|
/** Le H « Double », marque de la H Collection (« Propulsé par », hub). `size-4` par défaut. */
|
|
26
25
|
export declare function FamilyMark({ className, label }: MarkProps): React.JSX.Element;
|
package/dist/product-badge.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "./cn.js";
|
|
3
|
-
import { FAMILY_MARK_SVG, PRODUCT_BADGE_SVG
|
|
3
|
+
import { FAMILY_MARK_SVG, PRODUCT_BADGE_SVG } from "./family-svg.js";
|
|
4
4
|
/**
|
|
5
5
|
* Dégradé de chaque icône sur fond clair, de la teinte vive (haut gauche) à la teinte profonde (bas
|
|
6
6
|
* droit). Mêmes valeurs que les jetons `--product-<mot>-from` / `--product-<mot>-to` de `styles.css`
|
|
@@ -28,12 +28,12 @@ function ThemedMark({ svg, slot, className, label }) {
|
|
|
28
28
|
return (_jsxs("span", { "data-slot": slot, ...(label ? { role: "img", "aria-label": label } : { "aria-hidden": true }), className: cn("inline-block size-4 shrink-0 select-none", className), children: [_jsx("img", { src: dataUri(svg.light), alt: "", width: 16, height: 16, draggable: false, "data-mark-theme": "light", className: "block size-full" }), _jsx("img", { src: dataUri(svg.dark), alt: "", width: 16, height: 16, draggable: false, "data-mark-theme": "dark", className: "block size-full" })] }));
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* Icône d'un produit : le pictogramme dans le dégradé du produit, sur son
|
|
32
|
-
* clair et en sombre, sans bordure ni ombre.
|
|
33
|
-
*
|
|
31
|
+
* Icône d'un produit : le pictogramme dans le dégradé du produit, sur son carré blanc arrondi, le
|
|
32
|
+
* même en clair et en sombre et dans tous les contextes, sans bordure ni ombre. `size-4` par
|
|
33
|
+
* défaut, à agrandir par `className`.
|
|
34
34
|
*/
|
|
35
|
-
export function ProductBadge({ product,
|
|
36
|
-
return (_jsx("img", { src: dataUri(PRODUCT_BADGE_SVG[product]
|
|
35
|
+
export function ProductBadge({ product, className, label }) {
|
|
36
|
+
return (_jsx("img", { src: dataUri(PRODUCT_BADGE_SVG[product]), alt: label ?? "", "aria-hidden": label ? undefined : true, width: 16, height: 16, draggable: false, "data-slot": "product-badge", className: cn("size-4 shrink-0 select-none", className) }));
|
|
37
37
|
}
|
|
38
38
|
/** Le H « Double », marque de la H Collection (« Propulsé par », hub). `size-4` par défaut. */
|
|
39
39
|
export function FamilyMark({ className, label }) {
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { FamilyProduct } from "./family-svg.ts";
|
|
2
|
+
import { type ServiceStatus } from "./status.tsx";
|
|
3
|
+
/**
|
|
4
|
+
* Bandeau d'état d'un produit (ADR 0018) : lit `summary.json` de sa page de statut (format
|
|
5
|
+
* Statuspage, CORS ouvert) depuis le navigateur, après le premier rendu, puis toutes les
|
|
6
|
+
* 2 minutes quand l'onglet est visible. Il ne retarde jamais le produit, et une lecture qui
|
|
7
|
+
* échoue n'affiche rien : jamais de fausse alerte. Pas de liseré : le point et les mots portent l'état.
|
|
8
|
+
*/
|
|
9
|
+
/** Page de statut d'un produit de la famille. Docs vit à `/documentation` (`/docs` sert l'aide de Status). */
|
|
10
|
+
export declare function statusPageUrlFor(product: FamilyProduct): string;
|
|
11
|
+
export type ServiceEvent = {
|
|
12
|
+
id: string;
|
|
13
|
+
kind: "incident" | "maintenance" | "upcoming";
|
|
14
|
+
status: ServiceStatus;
|
|
15
|
+
title: string;
|
|
16
|
+
/** « Cause identifiée · mis à jour à 14:15 », « mardi 21 octobre, de 22:00 à 23:30 ». */
|
|
17
|
+
detail: string;
|
|
18
|
+
href: string;
|
|
19
|
+
/** Change à chaque mise à jour : un bandeau fermé revient avec la suivante. */
|
|
20
|
+
version: string;
|
|
21
|
+
};
|
|
22
|
+
/** Une maintenance annoncée s'affiche 24 h avant son début. */
|
|
23
|
+
export declare const UPCOMING_NOTICE_MS: number;
|
|
24
|
+
/**
|
|
25
|
+
* Lien d'un événement, lu dans `summary.json` : jamais rendu tel quel. Seule une adresse `https:`
|
|
26
|
+
* de la même origine que la page de statut est gardée ; sinon, la page elle-même.
|
|
27
|
+
*/
|
|
28
|
+
export declare function safeEventHref(candidate: unknown, pageUrl: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Événements à montrer, d'après un `summary.json` : incidents ouverts, maintenances en cours,
|
|
31
|
+
* maintenances qui commencent dans les 24 h. Pannes d'abord. Les liens restent sur `pageUrl` (`safeEventHref`) :
|
|
32
|
+
* l'adresse annoncée par le fichier lui-même n'est jamais crue. Tout champ manquant ou d'une autre
|
|
33
|
+
* forme écarte l'événement, jamais le bandeau entier.
|
|
34
|
+
*/
|
|
35
|
+
export declare function eventsFromSummary(summary: unknown, now: number, pageUrl: string): ServiceEvent[];
|
|
36
|
+
/**
|
|
37
|
+
* Événements en cours d'une page de statut, lus après le premier rendu puis toutes les
|
|
38
|
+
* 2 minutes, onglet visible. `pageUrl` nul : rien n'est lu. Une lecture ratée vide la liste.
|
|
39
|
+
*/
|
|
40
|
+
export declare function useServiceStatus(pageUrl: string | null): {
|
|
41
|
+
events: ServiceEvent[];
|
|
42
|
+
dismiss: (event: ServiceEvent) => void;
|
|
43
|
+
};
|
|
44
|
+
/** Une ligne : point de couleur, nature et titre de l'événement, lien vers la page, fermeture. */
|
|
45
|
+
export declare function ServiceStatusBanner({ event, onDismiss, className, }: {
|
|
46
|
+
event: ServiceEvent;
|
|
47
|
+
onDismiss?: () => void;
|
|
48
|
+
className?: string;
|
|
49
|
+
}): React.JSX.Element;
|
|
50
|
+
/** Bandeaux d'un produit, posés par `AppShell` en tête du contenu. Rien tant que tout va bien. */
|
|
51
|
+
export declare function ServiceStatus({ pageUrl, className, }: {
|
|
52
|
+
pageUrl: string | null;
|
|
53
|
+
className?: string;
|
|
54
|
+
}): React.JSX.Element | null;
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import ArrowRight01Icon from "@hugeicons/core-free-icons/ArrowRight01Icon";
|
|
3
|
+
import Cancel01Icon from "@hugeicons/core-free-icons/Cancel01Icon";
|
|
4
|
+
import { HugeiconsIcon } from "@hugeicons/react";
|
|
5
|
+
import { useCallback, useEffect, useState } from "react";
|
|
6
|
+
import { cn } from "./cn.js";
|
|
7
|
+
import { StatusDot } from "./status.js";
|
|
8
|
+
/**
|
|
9
|
+
* Bandeau d'état d'un produit (ADR 0018) : lit `summary.json` de sa page de statut (format
|
|
10
|
+
* Statuspage, CORS ouvert) depuis le navigateur, après le premier rendu, puis toutes les
|
|
11
|
+
* 2 minutes quand l'onglet est visible. Il ne retarde jamais le produit, et une lecture qui
|
|
12
|
+
* échoue n'affiche rien : jamais de fausse alerte. Pas de liseré : le point et les mots portent l'état.
|
|
13
|
+
*/
|
|
14
|
+
/** Page de statut d'un produit de la famille. Docs vit à `/documentation` (`/docs` sert l'aide de Status). */
|
|
15
|
+
export function statusPageUrlFor(product) {
|
|
16
|
+
return `https://status.hgdc.ch/${product === "docs" ? "documentation" : product}`;
|
|
17
|
+
}
|
|
18
|
+
/** Une maintenance annoncée s'affiche 24 h avant son début. */
|
|
19
|
+
export const UPCOMING_NOTICE_MS = 24 * 3_600_000;
|
|
20
|
+
const STATUS_WORDS = {
|
|
21
|
+
investigating: "Analyse en cours",
|
|
22
|
+
identified: "Cause identifiée",
|
|
23
|
+
monitoring: "Sous surveillance",
|
|
24
|
+
in_progress: "En cours",
|
|
25
|
+
verifying: "Vérification",
|
|
26
|
+
};
|
|
27
|
+
const time = new Intl.DateTimeFormat("fr-CH", { timeZone: "Europe/Zurich", hour: "2-digit", minute: "2-digit" });
|
|
28
|
+
const dayMonth = new Intl.DateTimeFormat("fr-CH", {
|
|
29
|
+
timeZone: "Europe/Zurich",
|
|
30
|
+
weekday: "long",
|
|
31
|
+
day: "numeric",
|
|
32
|
+
month: "long",
|
|
33
|
+
});
|
|
34
|
+
const text = (v) => (typeof v === "string" ? v : "");
|
|
35
|
+
/**
|
|
36
|
+
* Lien d'un événement, lu dans `summary.json` : jamais rendu tel quel. Seule une adresse `https:`
|
|
37
|
+
* de la même origine que la page de statut est gardée ; sinon, la page elle-même.
|
|
38
|
+
*/
|
|
39
|
+
export function safeEventHref(candidate, pageUrl) {
|
|
40
|
+
try {
|
|
41
|
+
const page = new URL(pageUrl);
|
|
42
|
+
const url = new URL(text(candidate), page);
|
|
43
|
+
if (url.protocol === "https:" && url.origin === page.origin)
|
|
44
|
+
return url.href;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Adresse illisible : la page.
|
|
48
|
+
}
|
|
49
|
+
return pageUrl;
|
|
50
|
+
}
|
|
51
|
+
const instant = (v) => (typeof v === "string" ? Date.parse(v) : Number.NaN);
|
|
52
|
+
function incidentTone(impact) {
|
|
53
|
+
return impact === "critical" ? "outage" : "degraded";
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Événements à montrer, d'après un `summary.json` : incidents ouverts, maintenances en cours,
|
|
57
|
+
* maintenances qui commencent dans les 24 h. Pannes d'abord. Les liens restent sur `pageUrl` (`safeEventHref`) :
|
|
58
|
+
* l'adresse annoncée par le fichier lui-même n'est jamais crue. Tout champ manquant ou d'une autre
|
|
59
|
+
* forme écarte l'événement, jamais le bandeau entier.
|
|
60
|
+
*/
|
|
61
|
+
export function eventsFromSummary(summary, now, pageUrl) {
|
|
62
|
+
if (!summary || typeof summary !== "object")
|
|
63
|
+
return [];
|
|
64
|
+
const root = summary;
|
|
65
|
+
const out = [];
|
|
66
|
+
const list = (v) => (Array.isArray(v) ? v : []);
|
|
67
|
+
for (const incident of list(root.incidents)) {
|
|
68
|
+
const id = text(incident.id);
|
|
69
|
+
const status = text(incident.status);
|
|
70
|
+
if (!id || !text(incident.name) || status === "resolved" || status === "postmortem")
|
|
71
|
+
continue;
|
|
72
|
+
const updatedAt = instant(incident.updated_at);
|
|
73
|
+
out.push({
|
|
74
|
+
id,
|
|
75
|
+
kind: "incident",
|
|
76
|
+
status: incidentTone(text(incident.impact)),
|
|
77
|
+
title: text(incident.name),
|
|
78
|
+
detail: [STATUS_WORDS[status], Number.isNaN(updatedAt) ? null : `mis à jour à ${time.format(updatedAt)}`]
|
|
79
|
+
.filter(Boolean)
|
|
80
|
+
.join(" · "),
|
|
81
|
+
href: safeEventHref(incident.shortlink, pageUrl),
|
|
82
|
+
version: `${status}:${text(incident.updated_at)}`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
for (const m of list(root.scheduled_maintenances)) {
|
|
86
|
+
const id = text(m.id);
|
|
87
|
+
const status = text(m.status);
|
|
88
|
+
const from = instant(m.scheduled_for);
|
|
89
|
+
const until = instant(m.scheduled_until);
|
|
90
|
+
if (!id || !text(m.name) || Number.isNaN(from) || Number.isNaN(until))
|
|
91
|
+
continue;
|
|
92
|
+
const inProgress = status === "in_progress" || status === "verifying";
|
|
93
|
+
const upcoming = status === "scheduled" && from > now && from - now <= UPCOMING_NOTICE_MS;
|
|
94
|
+
if (!inProgress && !upcoming)
|
|
95
|
+
continue;
|
|
96
|
+
const sameDay = dayMonth.format(from) === dayMonth.format(until);
|
|
97
|
+
out.push({
|
|
98
|
+
id,
|
|
99
|
+
kind: inProgress ? "maintenance" : "upcoming",
|
|
100
|
+
status: "maintenance",
|
|
101
|
+
title: text(m.name),
|
|
102
|
+
detail: inProgress
|
|
103
|
+
? `jusqu'à ${time.format(until)}`
|
|
104
|
+
: sameDay
|
|
105
|
+
? `${dayMonth.format(from)}, de ${time.format(from)} à ${time.format(until)}`
|
|
106
|
+
: `du ${dayMonth.format(from)}, ${time.format(from)}, au ${dayMonth.format(until)}, ${time.format(until)}`,
|
|
107
|
+
href: safeEventHref(m.shortlink, pageUrl),
|
|
108
|
+
version: `${status}:${text(m.updated_at)}`,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const order = { incident: 0, maintenance: 1, upcoming: 2 };
|
|
112
|
+
return out.sort((a, b) => order[a.kind] - order[b.kind]);
|
|
113
|
+
}
|
|
114
|
+
const REFRESH_MS = 2 * 60_000;
|
|
115
|
+
const DISMISSED = "hgdc-service-status:";
|
|
116
|
+
function dismissedKey(event) {
|
|
117
|
+
return `${DISMISSED}${event.id}:${event.version}`;
|
|
118
|
+
}
|
|
119
|
+
function isDismissed(event) {
|
|
120
|
+
try {
|
|
121
|
+
return window.sessionStorage.getItem(dismissedKey(event)) === "1";
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Événements en cours d'une page de statut, lus après le premier rendu puis toutes les
|
|
129
|
+
* 2 minutes, onglet visible. `pageUrl` nul : rien n'est lu. Une lecture ratée vide la liste.
|
|
130
|
+
*/
|
|
131
|
+
export function useServiceStatus(pageUrl) {
|
|
132
|
+
const [events, setEvents] = useState([]);
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
if (!pageUrl)
|
|
135
|
+
return;
|
|
136
|
+
let cancelled = false;
|
|
137
|
+
const controller = new AbortController();
|
|
138
|
+
const read = async () => {
|
|
139
|
+
try {
|
|
140
|
+
const response = await fetch(`${pageUrl}/api/v2/summary.json`, {
|
|
141
|
+
signal: controller.signal,
|
|
142
|
+
headers: { accept: "application/json" },
|
|
143
|
+
});
|
|
144
|
+
if (!response.ok)
|
|
145
|
+
throw new Error(String(response.status));
|
|
146
|
+
const next = eventsFromSummary(await response.json(), Date.now(), pageUrl);
|
|
147
|
+
if (!cancelled)
|
|
148
|
+
setEvents(next);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
if (!cancelled)
|
|
152
|
+
setEvents([]);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
void read();
|
|
156
|
+
const id = window.setInterval(() => {
|
|
157
|
+
if (document.visibilityState === "visible")
|
|
158
|
+
void read();
|
|
159
|
+
}, REFRESH_MS);
|
|
160
|
+
return () => {
|
|
161
|
+
cancelled = true;
|
|
162
|
+
controller.abort();
|
|
163
|
+
window.clearInterval(id);
|
|
164
|
+
};
|
|
165
|
+
}, [pageUrl]);
|
|
166
|
+
const dismiss = useCallback((event) => {
|
|
167
|
+
try {
|
|
168
|
+
window.sessionStorage.setItem(dismissedKey(event), "1");
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// Stockage indisponible (navigation privée) : fermé pour cette page seulement.
|
|
172
|
+
}
|
|
173
|
+
setEvents((list) => list.filter((e) => e.id !== event.id));
|
|
174
|
+
}, []);
|
|
175
|
+
return { events: events.filter((e) => !isDismissed(e)), dismiss };
|
|
176
|
+
}
|
|
177
|
+
const LEAD = {
|
|
178
|
+
incident: "Incident en cours",
|
|
179
|
+
maintenance: "Maintenance en cours",
|
|
180
|
+
upcoming: "Maintenance prévue",
|
|
181
|
+
};
|
|
182
|
+
const TINT = {
|
|
183
|
+
outage: "bg-status-outage/8",
|
|
184
|
+
degraded: "bg-status-degraded/12",
|
|
185
|
+
maintenance: "bg-status-maintenance/10",
|
|
186
|
+
operational: "bg-status-operational/10",
|
|
187
|
+
unknown: "bg-foreground/5",
|
|
188
|
+
};
|
|
189
|
+
/** Une ligne : point de couleur, nature et titre de l'événement, lien vers la page, fermeture. */
|
|
190
|
+
export function ServiceStatusBanner({ event, onDismiss, className, }) {
|
|
191
|
+
return (_jsxs("div", { role: "status", "data-slot": "service-status", className: cn("flex items-start gap-3 rounded-2xl px-4 py-2.5 text-sm sm:items-center", TINT[event.status], className), children: [_jsx(StatusDot, { status: event.status, live: event.kind !== "upcoming", className: "mt-1.5 size-2 shrink-0 sm:mt-0" }), _jsxs("p", { className: "min-w-0 flex-1 text-pretty", children: [_jsx("span", { className: "font-medium", children: LEAD[event.kind] }), _jsx("span", { className: "text-muted-foreground", children: " \u00B7 " }), event.title, event.detail ? (_jsx("span", { className: "block text-xs text-muted-foreground sm:ml-2 sm:inline", children: event.detail })) : null] }), _jsxs("a", { href: event.href, target: "_blank", rel: "noopener", className: "inline-flex shrink-0 items-center gap-1 rounded-lg font-medium underline-offset-4 outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring", children: [_jsx("span", { className: "max-sm:sr-only", children: "\u00C9tat du service" }), _jsx(HugeiconsIcon, { icon: ArrowRight01Icon, className: "size-4", "aria-hidden": true })] }), onDismiss ? (_jsx("button", { type: "button", onClick: onDismiss, "aria-label": "Masquer jusqu'\u00E0 la prochaine mise \u00E0 jour", className: "-my-1 -mr-1.5 grid size-7 shrink-0 place-items-center rounded-lg text-muted-foreground outline-none hover:bg-foreground/5 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring", children: _jsx(HugeiconsIcon, { icon: Cancel01Icon, className: "size-4", "aria-hidden": true }) })) : null] }));
|
|
192
|
+
}
|
|
193
|
+
/** Bandeaux d'un produit, posés par `AppShell` en tête du contenu. Rien tant que tout va bien. */
|
|
194
|
+
export function ServiceStatus({ pageUrl, className, }) {
|
|
195
|
+
const { events, dismiss } = useServiceStatus(pageUrl);
|
|
196
|
+
if (!events.length)
|
|
197
|
+
return null;
|
|
198
|
+
return (_jsx("div", { "data-slot": "service-status-list", className: cn("grid gap-2", className), children: events.map((event) => (_jsx(ServiceStatusBanner, { event: event, onDismiss: () => dismiss(event) }, event.id))) }));
|
|
199
|
+
}
|
package/email-icons/account.png
CHANGED
|
Binary file
|
|
Binary file
|
package/email-icons/docs.png
CHANGED
|
Binary file
|
package/email-icons/host.png
CHANGED
|
Binary file
|
package/email-icons/mail.png
CHANGED
|
Binary file
|
package/email-icons/portal.png
CHANGED
|
Binary file
|
package/email-icons/status.png
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.d{display:none}@media (prefers-color-scheme:dark){.l{display:none}.d{display:inline}}</style><g class="l"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="12 12.5 40 40"><defs><linearGradient id="lg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff6a3d"/><stop offset="1" stop-color="#fc582e"/></linearGradient></defs><path d="M22 17H42A5 5 0 0 1 47 22V40A5 5 0 0 1 42 45H22A5 5 0 0 1 17 40V22A5 5 0 0 1 22 17Z" fill="url(#lg)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M17.5 21H46.5A5.5 5.5 0 0 1 52 26.5V42.5A5.5 5.5 0 0 1 46.5 48H17.5A5.5 5.5 0 0 1 12 42.5V26.5A5.5 5.5 0 0 1 17.5 21ZM20.5 30.9A3.5 3.5 0 1 0 27.5 30.9A3.5 3.5 0 1 0 20.5 30.9ZM17.6 40.6C17.6 37.6 20.5 35.6 24 35.6C27.5 35.6 30.4 37.6 30.4 40.6ZM35.5 30H44.5A1.5 1.5 0 0 1 46 31.5V31.5A1.5 1.5 0 0 1 44.5 33H35.5A1.5 1.5 0 0 1 34 31.5V31.5A1.5 1.5 0 0 1 35.5 30ZM35.5 36H40.5A1.5 1.5 0 0 1 42 37.5V37.5A1.5 1.5 0 0 1 40.5 39H35.5A1.5 1.5 0 0 1 34 37.5V37.5A1.5 1.5 0 0 1 35.5 36Z" fill="url(#lg)" fill-rule="evenodd"/></svg></g><g class="d"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="12 12.5 40 40"><defs><linearGradient id="dg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff9777"/><stop offset="1" stop-color="#ff6a3d"/></linearGradient></defs><path d="M22 17H42A5 5 0 0 1 47 22V40A5 5 0 0 1 42 45H22A5 5 0 0 1 17 40V22A5 5 0 0 1 22 17Z" fill="url(#dg)" fill-opacity="0.53" fill-rule="evenodd"/><path d="M17.5 21H46.5A5.5 5.5 0 0 1 52 26.5V42.5A5.5 5.5 0 0 1 46.5 48H17.5A5.5 5.5 0 0 1 12 42.5V26.5A5.5 5.5 0 0 1 17.5 21ZM20.5 30.9A3.5 3.5 0 1 0 27.5 30.9A3.5 3.5 0 1 0 20.5 30.9ZM17.6 40.6C17.6 37.6 20.5 35.6 24 35.6C27.5 35.6 30.4 37.6 30.4 40.6ZM35.5 30H44.5A1.5 1.5 0 0 1 46 31.5V31.5A1.5 1.5 0 0 1 44.5 33H35.5A1.5 1.5 0 0 1 34 31.5V31.5A1.5 1.5 0 0 1 35.5 30ZM35.5 36H40.5A1.5 1.5 0 0 1 42 37.5V37.5A1.5 1.5 0 0 1 40.5 39H35.5A1.5 1.5 0 0 1 34 37.5V37.5A1.5 1.5 0 0 1 35.5 36Z" fill="url(#dg)" fill-rule="evenodd"/></svg></g></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.d{display:none}@media (prefers-color-scheme:dark){.l{display:none}.d{display:inline}}</style><g class="l"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="15 15 34 34"><defs><linearGradient id="lg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffb020"/><stop offset="1" stop-color="#e58309"/></linearGradient></defs><path d="M18.3 34H21.7A2.8 2.8 0 0 1 24.5 36.8V46.2A2.8 2.8 0 0 1 21.7 49H18.3A2.8 2.8 0 0 1 15.5 46.2V36.8A2.8 2.8 0 0 1 18.3 34Z" fill="url(#lg)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M30.3 25H33.7A2.8 2.8 0 0 1 36.5 27.8V46.2A2.8 2.8 0 0 1 33.7 49H30.3A2.8 2.8 0 0 1 27.5 46.2V27.8A2.8 2.8 0 0 1 30.3 25Z" fill="url(#lg)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M42.3 15H45.7A2.8 2.8 0 0 1 48.5 17.8V46.2A2.8 2.8 0 0 1 45.7 49H42.3A2.8 2.8 0 0 1 39.5 46.2V17.8A2.8 2.8 0 0 1 42.3 15Z" fill="url(#lg)" fill-rule="evenodd"/></svg></g><g class="d"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="15 15 34 34"><defs><linearGradient id="dg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffc863"/><stop offset="1" stop-color="#ffb020"/></linearGradient></defs><path d="M18.3 34H21.7A2.8 2.8 0 0 1 24.5 36.8V46.2A2.8 2.8 0 0 1 21.7 49H18.3A2.8 2.8 0 0 1 15.5 46.2V36.8A2.8 2.8 0 0 1 18.3 34Z" fill="url(#dg)" fill-opacity="0.61" fill-rule="evenodd"/><path d="M30.3 25H33.7A2.8 2.8 0 0 1 36.5 27.8V46.2A2.8 2.8 0 0 1 33.7 49H30.3A2.8 2.8 0 0 1 27.5 46.2V27.8A2.8 2.8 0 0 1 30.3 25Z" fill="url(#dg)" fill-opacity="0.8" fill-rule="evenodd"/><path d="M42.3 15H45.7A2.8 2.8 0 0 1 48.5 17.8V46.2A2.8 2.8 0 0 1 45.7 49H42.3A2.8 2.8 0 0 1 39.5 46.2V17.8A2.8 2.8 0 0 1 42.3 15Z" fill="url(#dg)" fill-rule="evenodd"/></svg></g></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.d{display:none}@media (prefers-color-scheme:dark){.l{display:none}.d{display:inline}}</style><g class="l"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="14 13 36 36"><defs><linearGradient id="lg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ec1dc"/><stop offset="1" stop-color="#0aa3c1"/></linearGradient></defs><path d="M26 13H46A3 3 0 0 1 49 16V43A3 3 0 0 1 46 46H26A3 3 0 0 1 23 43V16A3 3 0 0 1 26 13Z" fill="url(#lg)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M18 18H32V24.5A2.5 2.5 0 0 0 34.5 27H41V46A3 3 0 0 1 38 49H18A3 3 0 0 1 15 46V21A3 3 0 0 1 18 18ZM21.3 33H34.7A1.3 1.3 0 0 1 36 34.3V34.300000000000004A1.3 1.3 0 0 1 34.7 35.6H21.3A1.3 1.3 0 0 1 20 34.300000000000004V34.3A1.3 1.3 0 0 1 21.3 33ZM21.3 39H29.7A1.3 1.3 0 0 1 31 40.3V40.300000000000004A1.3 1.3 0 0 1 29.7 41.6H21.3A1.3 1.3 0 0 1 20 40.300000000000004V40.3A1.3 1.3 0 0 1 21.3 39Z" fill="url(#lg)" fill-rule="evenodd"/><path d="M32 18L41 27H34.5A2.5 2.5 0 0 1 32 24.5Z" fill="url(#lg)" fill-opacity="0.45" fill-rule="evenodd"/></svg></g><g class="d"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="14 13 36 36"><defs><linearGradient id="dg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#56d4e7"/><stop offset="1" stop-color="#0ec1dc"/></linearGradient></defs><path d="M26 13H46A3 3 0 0 1 49 16V43A3 3 0 0 1 46 46H26A3 3 0 0 1 23 43V16A3 3 0 0 1 26 13Z" fill="url(#dg)" fill-opacity="0.49" fill-rule="evenodd"/><path d="M18 18H32V24.5A2.5 2.5 0 0 0 34.5 27H41V46A3 3 0 0 1 38 49H18A3 3 0 0 1 15 46V21A3 3 0 0 1 18 18ZM21.3 33H34.7A1.3 1.3 0 0 1 36 34.3V34.300000000000004A1.3 1.3 0 0 1 34.7 35.6H21.3A1.3 1.3 0 0 1 20 34.300000000000004V34.3A1.3 1.3 0 0 1 21.3 33ZM21.3 39H29.7A1.3 1.3 0 0 1 31 40.3V40.300000000000004A1.3 1.3 0 0 1 29.7 41.6H21.3A1.3 1.3 0 0 1 20 40.300000000000004V40.3A1.3 1.3 0 0 1 21.3 39Z" fill="url(#dg)" fill-rule="evenodd"/><path d="M32 18L41 27H34.5A2.5 2.5 0 0 1 32 24.5Z" fill="url(#dg)" fill-opacity="0.64" fill-rule="evenodd"/></svg></g></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.d{display:none}@media (prefers-color-scheme:dark){.l{display:none}.d{display:inline}}</style><g class="l"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="14 14 36 36"><defs><linearGradient id="lg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3b7bff"/><stop offset="1" stop-color="#2b63f2"/></linearGradient></defs><path d="M20 14H44A3 3 0 0 1 47 17V20A3 3 0 0 1 44 23H20A3 3 0 0 1 17 20V17A3 3 0 0 1 20 14ZM39.8 18.5A1.7 1.7 0 1 0 43.2 18.5A1.7 1.7 0 1 0 39.8 18.5Z" fill="url(#lg)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M20 26.5H44A3 3 0 0 1 47 29.5V32.5A3 3 0 0 1 44 35.5H20A3 3 0 0 1 17 32.5V29.5A3 3 0 0 1 20 26.5ZM39.8 31A1.7 1.7 0 1 0 43.2 31A1.7 1.7 0 1 0 39.8 31Z" fill="url(#lg)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M20.5 39H43.5A3.5 3.5 0 0 1 47 42.5V46.5A3.5 3.5 0 0 1 43.5 50H20.5A3.5 3.5 0 0 1 17 46.5V42.5A3.5 3.5 0 0 1 20.5 39ZM39.6 44.5A1.9 1.9 0 1 0 43.4 44.5A1.9 1.9 0 1 0 39.6 44.5ZM22.7 43.3H29.3A1.2 1.2 0 0 1 30.5 44.5V44.49999999999999A1.2 1.2 0 0 1 29.3 45.699999999999996H22.7A1.2 1.2 0 0 1 21.5 44.49999999999999V44.5A1.2 1.2 0 0 1 22.7 43.3Z" fill="url(#lg)" fill-rule="evenodd"/></svg></g><g class="d"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="14 14 36 36"><defs><linearGradient id="dg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#76a3ff"/><stop offset="1" stop-color="#3b7bff"/></linearGradient></defs><path d="M20 14H44A3 3 0 0 1 47 17V20A3 3 0 0 1 44 23H20A3 3 0 0 1 17 20V17A3 3 0 0 1 20 14ZM39.8 18.5A1.7 1.7 0 1 0 43.2 18.5A1.7 1.7 0 1 0 39.8 18.5Z" fill="url(#dg)" fill-opacity="0.61" fill-rule="evenodd"/><path d="M20 26.5H44A3 3 0 0 1 47 29.5V32.5A3 3 0 0 1 44 35.5H20A3 3 0 0 1 17 32.5V29.5A3 3 0 0 1 20 26.5ZM39.8 31A1.7 1.7 0 1 0 43.2 31A1.7 1.7 0 1 0 39.8 31Z" fill="url(#dg)" fill-opacity="0.8" fill-rule="evenodd"/><path d="M20.5 39H43.5A3.5 3.5 0 0 1 47 42.5V46.5A3.5 3.5 0 0 1 43.5 50H20.5A3.5 3.5 0 0 1 17 46.5V42.5A3.5 3.5 0 0 1 20.5 39ZM39.6 44.5A1.9 1.9 0 1 0 43.4 44.5A1.9 1.9 0 1 0 39.6 44.5ZM22.7 43.3H29.3A1.2 1.2 0 0 1 30.5 44.5V44.49999999999999A1.2 1.2 0 0 1 29.3 45.699999999999996H22.7A1.2 1.2 0 0 1 21.5 44.49999999999999V44.5A1.2 1.2 0 0 1 22.7 43.3Z" fill="url(#dg)" fill-rule="evenodd"/></svg></g></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.d{display:none}@media (prefers-color-scheme:dark){.l{display:none}.d{display:inline}}</style><g class="l"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="14 13 36 36"><defs><linearGradient id="lg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fa3a58"/><stop offset="1" stop-color="#ec3052"/></linearGradient></defs><path d="M17.5 25H46.5A3.5 3.5 0 0 1 50 28.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5V28.5A3.5 3.5 0 0 1 17.5 25Z" fill="url(#lg)" fill-opacity="0.25" fill-rule="evenodd"/><path d="M22.5 13H41.5A2.5 2.5 0 0 1 44 15.5V44.5A2.5 2.5 0 0 1 41.5 47H22.5A2.5 2.5 0 0 1 20 44.5V15.5A2.5 2.5 0 0 1 22.5 13ZM25.2 18H38.8A1.2 1.2 0 0 1 40 19.2V19.2A1.2 1.2 0 0 1 38.8 20.4H25.2A1.2 1.2 0 0 1 24 19.2V19.2A1.2 1.2 0 0 1 25.2 18ZM25.2 23H33.8A1.2 1.2 0 0 1 35 24.2V24.2A1.2 1.2 0 0 1 33.8 25.4H25.2A1.2 1.2 0 0 1 24 24.2V24.2A1.2 1.2 0 0 1 25.2 23Z" fill="url(#lg)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M14 29.5L32 40.5L50 29.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5Z" fill="url(#lg)" fill-rule="evenodd"/></svg></g><g class="d"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="14 13 36 36"><defs><linearGradient id="dg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fc758a"/><stop offset="1" stop-color="#fa3a58"/></linearGradient></defs><path d="M17.5 25H46.5A3.5 3.5 0 0 1 50 28.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5V28.5A3.5 3.5 0 0 1 17.5 25Z" fill="url(#dg)" fill-opacity="0.51" fill-rule="evenodd"/><path d="M22.5 13H41.5A2.5 2.5 0 0 1 44 15.5V44.5A2.5 2.5 0 0 1 41.5 47H22.5A2.5 2.5 0 0 1 20 44.5V15.5A2.5 2.5 0 0 1 22.5 13ZM25.2 18H38.8A1.2 1.2 0 0 1 40 19.2V19.2A1.2 1.2 0 0 1 38.8 20.4H25.2A1.2 1.2 0 0 1 24 19.2V19.2A1.2 1.2 0 0 1 25.2 18ZM25.2 23H33.8A1.2 1.2 0 0 1 35 24.2V24.2A1.2 1.2 0 0 1 33.8 25.4H25.2A1.2 1.2 0 0 1 24 24.2V24.2A1.2 1.2 0 0 1 25.2 23Z" fill="url(#dg)" fill-opacity="0.8" fill-rule="evenodd"/><path d="M14 29.5L32 40.5L50 29.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5Z" fill="url(#dg)" fill-rule="evenodd"/></svg></g></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.d{display:none}@media (prefers-color-scheme:dark){.l{display:none}.d{display:inline}}</style><g class="l"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="13 13 38 38"><defs><linearGradient id="lg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b5cff"/><stop offset="1" stop-color="#7b4bf7"/></linearGradient></defs><path d="M21 13H43A3 3 0 0 1 46 16V47A3 3 0 0 1 43 50H21A3 3 0 0 1 18 47V16A3 3 0 0 1 21 13Z" fill="url(#lg)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M20.6 13.3L32.6 16.5A2 2 0 0 1 34 18.4V45.6A2 2 0 0 1 32.6 47.5L20.6 50.7A2 2 0 0 1 18 48.8V15.2A2 2 0 0 1 20.6 13.3ZM28.2 32A1.8 1.8 0 1 0 31.8 32A1.8 1.8 0 1 0 28.2 32Z" fill="url(#lg)" fill-rule="evenodd"/></svg></g><g class="d"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="13 13 38 38"><defs><linearGradient id="dg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ae8dff"/><stop offset="1" stop-color="#8b5cff"/></linearGradient></defs><path d="M21 13H43A3 3 0 0 1 46 16V47A3 3 0 0 1 43 50H21A3 3 0 0 1 18 47V16A3 3 0 0 1 21 13Z" fill="url(#dg)" fill-opacity="0.53" fill-rule="evenodd"/><path d="M20.6 13.3L32.6 16.5A2 2 0 0 1 34 18.4V45.6A2 2 0 0 1 32.6 47.5L20.6 50.7A2 2 0 0 1 18 48.8V15.2A2 2 0 0 1 20.6 13.3ZM28.2 32A1.8 1.8 0 1 0 31.8 32A1.8 1.8 0 1 0 28.2 32Z" fill="url(#dg)" fill-rule="evenodd"/></svg></g></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><style>.d{display:none}@media (prefers-color-scheme:dark){.l{display:none}.d{display:inline}}</style><g class="l"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="14 14 36 36"><defs><linearGradient id="lg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11ce8b"/><stop offset="1" stop-color="#09b077"/></linearGradient></defs><path d="M14 32A18 18 0 1 0 50 32A18 18 0 1 0 14 32Z" fill="url(#lg)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M19.5 32A12.5 12.5 0 1 0 44.5 32A12.5 12.5 0 1 0 19.5 32Z" fill="url(#lg)" fill-opacity="0.45" fill-rule="evenodd"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="url(#lg)" fill-rule="evenodd"/></svg></g><g class="d"><svg x="2.56" y="2.56" width="58.88" height="58.88" viewBox="14 14 36 36"><defs><linearGradient id="dg" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#58ddae"/><stop offset="1" stop-color="#11ce8b"/></linearGradient></defs><path d="M14 32A18 18 0 1 0 50 32A18 18 0 1 0 14 32Z" fill="url(#dg)" fill-opacity="0.49" fill-rule="evenodd"/><path d="M19.5 32A12.5 12.5 0 1 0 44.5 32A12.5 12.5 0 1 0 19.5 32Z" fill="url(#dg)" fill-opacity="0.64" fill-rule="evenodd"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="url(#dg)" fill-rule="evenodd"/></svg></g></svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/family/tile/account.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="12 12.5 40 40"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff6a3d"/><stop offset="1" stop-color="#fc582e"/></linearGradient></defs><path d="M22 17H42A5 5 0 0 1 47 22V40A5 5 0 0 1 42 45H22A5 5 0 0 1 17 40V22A5 5 0 0 1 22 17Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M17.5 21H46.5A5.5 5.5 0 0 1 52 26.5V42.5A5.5 5.5 0 0 1 46.5 48H17.5A5.5 5.5 0 0 1 12 42.5V26.5A5.5 5.5 0 0 1 17.5 21ZM20.5 30.9A3.5 3.5 0 1 0 27.5 30.9A3.5 3.5 0 1 0 20.5 30.9ZM17.6 40.6C17.6 37.6 20.5 35.6 24 35.6C27.5 35.6 30.4 37.6 30.4 40.6ZM35.5 30H44.5A1.5 1.5 0 0 1 46 31.5V31.5A1.5 1.5 0 0 1 44.5 33H35.5A1.5 1.5 0 0 1 34 31.5V31.5A1.5 1.5 0 0 1 35.5 30ZM35.5 36H40.5A1.5 1.5 0 0 1 42 37.5V37.5A1.5 1.5 0 0 1 40.5 39H35.5A1.5 1.5 0 0 1 34 37.5V37.5A1.5 1.5 0 0 1 35.5 36Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="15 15 34 34"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffb020"/><stop offset="1" stop-color="#e58309"/></linearGradient></defs><path d="M18.3 34H21.7A2.8 2.8 0 0 1 24.5 36.8V46.2A2.8 2.8 0 0 1 21.7 49H18.3A2.8 2.8 0 0 1 15.5 46.2V36.8A2.8 2.8 0 0 1 18.3 34Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M30.3 25H33.7A2.8 2.8 0 0 1 36.5 27.8V46.2A2.8 2.8 0 0 1 33.7 49H30.3A2.8 2.8 0 0 1 27.5 46.2V27.8A2.8 2.8 0 0 1 30.3 25Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M42.3 15H45.7A2.8 2.8 0 0 1 48.5 17.8V46.2A2.8 2.8 0 0 1 45.7 49H42.3A2.8 2.8 0 0 1 39.5 46.2V17.8A2.8 2.8 0 0 1 42.3 15Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
package/family/tile/docs.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="14 13 36 36"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ec1dc"/><stop offset="1" stop-color="#0aa3c1"/></linearGradient></defs><path d="M26 13H46A3 3 0 0 1 49 16V43A3 3 0 0 1 46 46H26A3 3 0 0 1 23 43V16A3 3 0 0 1 26 13Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M18 18H32V24.5A2.5 2.5 0 0 0 34.5 27H41V46A3 3 0 0 1 38 49H18A3 3 0 0 1 15 46V21A3 3 0 0 1 18 18ZM21.3 33H34.7A1.3 1.3 0 0 1 36 34.3V34.300000000000004A1.3 1.3 0 0 1 34.7 35.6H21.3A1.3 1.3 0 0 1 20 34.300000000000004V34.3A1.3 1.3 0 0 1 21.3 33ZM21.3 39H29.7A1.3 1.3 0 0 1 31 40.3V40.300000000000004A1.3 1.3 0 0 1 29.7 41.6H21.3A1.3 1.3 0 0 1 20 40.300000000000004V40.3A1.3 1.3 0 0 1 21.3 39Z" fill="url(#g)" fill-rule="evenodd"/><path d="M32 18L41 27H34.5A2.5 2.5 0 0 1 32 24.5Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/></svg></svg>
|
package/family/tile/host.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="14 14 36 36"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3b7bff"/><stop offset="1" stop-color="#2b63f2"/></linearGradient></defs><path d="M20 14H44A3 3 0 0 1 47 17V20A3 3 0 0 1 44 23H20A3 3 0 0 1 17 20V17A3 3 0 0 1 20 14ZM39.8 18.5A1.7 1.7 0 1 0 43.2 18.5A1.7 1.7 0 1 0 39.8 18.5Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M20 26.5H44A3 3 0 0 1 47 29.5V32.5A3 3 0 0 1 44 35.5H20A3 3 0 0 1 17 32.5V29.5A3 3 0 0 1 20 26.5ZM39.8 31A1.7 1.7 0 1 0 43.2 31A1.7 1.7 0 1 0 39.8 31Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M20.5 39H43.5A3.5 3.5 0 0 1 47 42.5V46.5A3.5 3.5 0 0 1 43.5 50H20.5A3.5 3.5 0 0 1 17 46.5V42.5A3.5 3.5 0 0 1 20.5 39ZM39.6 44.5A1.9 1.9 0 1 0 43.4 44.5A1.9 1.9 0 1 0 39.6 44.5ZM22.7 43.3H29.3A1.2 1.2 0 0 1 30.5 44.5V44.49999999999999A1.2 1.2 0 0 1 29.3 45.699999999999996H22.7A1.2 1.2 0 0 1 21.5 44.49999999999999V44.5A1.2 1.2 0 0 1 22.7 43.3Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
package/family/tile/mail.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="14 13 36 36"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fa3a58"/><stop offset="1" stop-color="#ec3052"/></linearGradient></defs><path d="M17.5 25H46.5A3.5 3.5 0 0 1 50 28.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5V28.5A3.5 3.5 0 0 1 17.5 25Z" fill="url(#g)" fill-opacity="0.25" fill-rule="evenodd"/><path d="M22.5 13H41.5A2.5 2.5 0 0 1 44 15.5V44.5A2.5 2.5 0 0 1 41.5 47H22.5A2.5 2.5 0 0 1 20 44.5V15.5A2.5 2.5 0 0 1 22.5 13ZM25.2 18H38.8A1.2 1.2 0 0 1 40 19.2V19.2A1.2 1.2 0 0 1 38.8 20.4H25.2A1.2 1.2 0 0 1 24 19.2V19.2A1.2 1.2 0 0 1 25.2 18ZM25.2 23H33.8A1.2 1.2 0 0 1 35 24.2V24.2A1.2 1.2 0 0 1 33.8 25.4H25.2A1.2 1.2 0 0 1 24 24.2V24.2A1.2 1.2 0 0 1 25.2 23Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M14 29.5L32 40.5L50 29.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
package/family/tile/portal.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="13 13 38 38"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b5cff"/><stop offset="1" stop-color="#7b4bf7"/></linearGradient></defs><path d="M21 13H43A3 3 0 0 1 46 16V47A3 3 0 0 1 43 50H21A3 3 0 0 1 18 47V16A3 3 0 0 1 21 13Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M20.6 13.3L32.6 16.5A2 2 0 0 1 34 18.4V45.6A2 2 0 0 1 32.6 47.5L20.6 50.7A2 2 0 0 1 18 48.8V15.2A2 2 0 0 1 20.6 13.3ZM28.2 32A1.8 1.8 0 1 0 31.8 32A1.8 1.8 0 1 0 28.2 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
package/family/tile/status.svg
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="7.68" y="7.68" width="48.64" height="48.64" viewBox="14 14 36 36"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11ce8b"/><stop offset="1" stop-color="#09b077"/></linearGradient></defs><path d="M14 32A18 18 0 1 0 50 32A18 18 0 1 0 14 32Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M19.5 32A12.5 12.5 0 1 0 44.5 32A12.5 12.5 0 1 0 19.5 32Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hgdc/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.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",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff6a3d"/><stop offset="1" stop-color="#fc582e"/></linearGradient></defs><path d="M22 17H42A5 5 0 0 1 47 22V40A5 5 0 0 1 42 45H22A5 5 0 0 1 17 40V22A5 5 0 0 1 22 17Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M17.5 21H46.5A5.5 5.5 0 0 1 52 26.5V42.5A5.5 5.5 0 0 1 46.5 48H17.5A5.5 5.5 0 0 1 12 42.5V26.5A5.5 5.5 0 0 1 17.5 21ZM20.5 30.9A3.5 3.5 0 1 0 27.5 30.9A3.5 3.5 0 1 0 20.5 30.9ZM17.6 40.6C17.6 37.6 20.5 35.6 24 35.6C27.5 35.6 30.4 37.6 30.4 40.6ZM35.5 30H44.5A1.5 1.5 0 0 1 46 31.5V31.5A1.5 1.5 0 0 1 44.5 33H35.5A1.5 1.5 0 0 1 34 31.5V31.5A1.5 1.5 0 0 1 35.5 30ZM35.5 36H40.5A1.5 1.5 0 0 1 42 37.5V37.5A1.5 1.5 0 0 1 40.5 39H35.5A1.5 1.5 0 0 1 34 37.5V37.5A1.5 1.5 0 0 1 35.5 36Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff6a3d"/><stop offset="1" stop-color="#fc582e"/></linearGradient></defs><path d="M22 17H42A5 5 0 0 1 47 22V40A5 5 0 0 1 42 45H22A5 5 0 0 1 17 40V22A5 5 0 0 1 22 17Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M17.5 21H46.5A5.5 5.5 0 0 1 52 26.5V42.5A5.5 5.5 0 0 1 46.5 48H17.5A5.5 5.5 0 0 1 12 42.5V26.5A5.5 5.5 0 0 1 17.5 21ZM20.5 30.9A3.5 3.5 0 1 0 27.5 30.9A3.5 3.5 0 1 0 20.5 30.9ZM17.6 40.6C17.6 37.6 20.5 35.6 24 35.6C27.5 35.6 30.4 37.6 30.4 40.6ZM35.5 30H44.5A1.5 1.5 0 0 1 46 31.5V31.5A1.5 1.5 0 0 1 44.5 33H35.5A1.5 1.5 0 0 1 34 31.5V31.5A1.5 1.5 0 0 1 35.5 30ZM35.5 36H40.5A1.5 1.5 0 0 1 42 37.5V37.5A1.5 1.5 0 0 1 40.5 39H35.5A1.5 1.5 0 0 1 34 37.5V37.5A1.5 1.5 0 0 1 35.5 36Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffb020"/><stop offset="1" stop-color="#e58309"/></linearGradient></defs><path d="M18.3 34H21.7A2.8 2.8 0 0 1 24.5 36.8V46.2A2.8 2.8 0 0 1 21.7 49H18.3A2.8 2.8 0 0 1 15.5 46.2V36.8A2.8 2.8 0 0 1 18.3 34Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M30.3 25H33.7A2.8 2.8 0 0 1 36.5 27.8V46.2A2.8 2.8 0 0 1 33.7 49H30.3A2.8 2.8 0 0 1 27.5 46.2V27.8A2.8 2.8 0 0 1 30.3 25Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M42.3 15H45.7A2.8 2.8 0 0 1 48.5 17.8V46.2A2.8 2.8 0 0 1 45.7 49H42.3A2.8 2.8 0 0 1 39.5 46.2V17.8A2.8 2.8 0 0 1 42.3 15Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffb020"/><stop offset="1" stop-color="#e58309"/></linearGradient></defs><path d="M18.3 34H21.7A2.8 2.8 0 0 1 24.5 36.8V46.2A2.8 2.8 0 0 1 21.7 49H18.3A2.8 2.8 0 0 1 15.5 46.2V36.8A2.8 2.8 0 0 1 18.3 34Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M30.3 25H33.7A2.8 2.8 0 0 1 36.5 27.8V46.2A2.8 2.8 0 0 1 33.7 49H30.3A2.8 2.8 0 0 1 27.5 46.2V27.8A2.8 2.8 0 0 1 30.3 25Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M42.3 15H45.7A2.8 2.8 0 0 1 48.5 17.8V46.2A2.8 2.8 0 0 1 45.7 49H42.3A2.8 2.8 0 0 1 39.5 46.2V17.8A2.8 2.8 0 0 1 42.3 15Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ec1dc"/><stop offset="1" stop-color="#0aa3c1"/></linearGradient></defs><path d="M26 13H46A3 3 0 0 1 49 16V43A3 3 0 0 1 46 46H26A3 3 0 0 1 23 43V16A3 3 0 0 1 26 13Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M18 18H32V24.5A2.5 2.5 0 0 0 34.5 27H41V46A3 3 0 0 1 38 49H18A3 3 0 0 1 15 46V21A3 3 0 0 1 18 18ZM21.3 33H34.7A1.3 1.3 0 0 1 36 34.3V34.300000000000004A1.3 1.3 0 0 1 34.7 35.6H21.3A1.3 1.3 0 0 1 20 34.300000000000004V34.3A1.3 1.3 0 0 1 21.3 33ZM21.3 39H29.7A1.3 1.3 0 0 1 31 40.3V40.300000000000004A1.3 1.3 0 0 1 29.7 41.6H21.3A1.3 1.3 0 0 1 20 40.300000000000004V40.3A1.3 1.3 0 0 1 21.3 39Z" fill="url(#g)" fill-rule="evenodd"/><path d="M32 18L41 27H34.5A2.5 2.5 0 0 1 32 24.5Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ec1dc"/><stop offset="1" stop-color="#0aa3c1"/></linearGradient></defs><path d="M26 13H46A3 3 0 0 1 49 16V43A3 3 0 0 1 46 46H26A3 3 0 0 1 23 43V16A3 3 0 0 1 26 13Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M18 18H32V24.5A2.5 2.5 0 0 0 34.5 27H41V46A3 3 0 0 1 38 49H18A3 3 0 0 1 15 46V21A3 3 0 0 1 18 18ZM21.3 33H34.7A1.3 1.3 0 0 1 36 34.3V34.300000000000004A1.3 1.3 0 0 1 34.7 35.6H21.3A1.3 1.3 0 0 1 20 34.300000000000004V34.3A1.3 1.3 0 0 1 21.3 33ZM21.3 39H29.7A1.3 1.3 0 0 1 31 40.3V40.300000000000004A1.3 1.3 0 0 1 29.7 41.6H21.3A1.3 1.3 0 0 1 20 40.300000000000004V40.3A1.3 1.3 0 0 1 21.3 39Z" fill="url(#g)" fill-rule="evenodd"/><path d="M32 18L41 27H34.5A2.5 2.5 0 0 1 32 24.5Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3b7bff"/><stop offset="1" stop-color="#2b63f2"/></linearGradient></defs><path d="M20 14H44A3 3 0 0 1 47 17V20A3 3 0 0 1 44 23H20A3 3 0 0 1 17 20V17A3 3 0 0 1 20 14ZM39.8 18.5A1.7 1.7 0 1 0 43.2 18.5A1.7 1.7 0 1 0 39.8 18.5Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M20 26.5H44A3 3 0 0 1 47 29.5V32.5A3 3 0 0 1 44 35.5H20A3 3 0 0 1 17 32.5V29.5A3 3 0 0 1 20 26.5ZM39.8 31A1.7 1.7 0 1 0 43.2 31A1.7 1.7 0 1 0 39.8 31Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M20.5 39H43.5A3.5 3.5 0 0 1 47 42.5V46.5A3.5 3.5 0 0 1 43.5 50H20.5A3.5 3.5 0 0 1 17 46.5V42.5A3.5 3.5 0 0 1 20.5 39ZM39.6 44.5A1.9 1.9 0 1 0 43.4 44.5A1.9 1.9 0 1 0 39.6 44.5ZM22.7 43.3H29.3A1.2 1.2 0 0 1 30.5 44.5V44.49999999999999A1.2 1.2 0 0 1 29.3 45.699999999999996H22.7A1.2 1.2 0 0 1 21.5 44.49999999999999V44.5A1.2 1.2 0 0 1 22.7 43.3Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#3b7bff"/><stop offset="1" stop-color="#2b63f2"/></linearGradient></defs><path d="M20 14H44A3 3 0 0 1 47 17V20A3 3 0 0 1 44 23H20A3 3 0 0 1 17 20V17A3 3 0 0 1 20 14ZM39.8 18.5A1.7 1.7 0 1 0 43.2 18.5A1.7 1.7 0 1 0 39.8 18.5Z" fill="url(#g)" fill-opacity="0.4" fill-rule="evenodd"/><path d="M20 26.5H44A3 3 0 0 1 47 29.5V32.5A3 3 0 0 1 44 35.5H20A3 3 0 0 1 17 32.5V29.5A3 3 0 0 1 20 26.5ZM39.8 31A1.7 1.7 0 1 0 43.2 31A1.7 1.7 0 1 0 39.8 31Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M20.5 39H43.5A3.5 3.5 0 0 1 47 42.5V46.5A3.5 3.5 0 0 1 43.5 50H20.5A3.5 3.5 0 0 1 17 46.5V42.5A3.5 3.5 0 0 1 20.5 39ZM39.6 44.5A1.9 1.9 0 1 0 43.4 44.5A1.9 1.9 0 1 0 39.6 44.5ZM22.7 43.3H29.3A1.2 1.2 0 0 1 30.5 44.5V44.49999999999999A1.2 1.2 0 0 1 29.3 45.699999999999996H22.7A1.2 1.2 0 0 1 21.5 44.49999999999999V44.5A1.2 1.2 0 0 1 22.7 43.3Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fa3a58"/><stop offset="1" stop-color="#ec3052"/></linearGradient></defs><path d="M17.5 25H46.5A3.5 3.5 0 0 1 50 28.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5V28.5A3.5 3.5 0 0 1 17.5 25Z" fill="url(#g)" fill-opacity="0.25" fill-rule="evenodd"/><path d="M22.5 13H41.5A2.5 2.5 0 0 1 44 15.5V44.5A2.5 2.5 0 0 1 41.5 47H22.5A2.5 2.5 0 0 1 20 44.5V15.5A2.5 2.5 0 0 1 22.5 13ZM25.2 18H38.8A1.2 1.2 0 0 1 40 19.2V19.2A1.2 1.2 0 0 1 38.8 20.4H25.2A1.2 1.2 0 0 1 24 19.2V19.2A1.2 1.2 0 0 1 25.2 18ZM25.2 23H33.8A1.2 1.2 0 0 1 35 24.2V24.2A1.2 1.2 0 0 1 33.8 25.4H25.2A1.2 1.2 0 0 1 24 24.2V24.2A1.2 1.2 0 0 1 25.2 23Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M14 29.5L32 40.5L50 29.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fa3a58"/><stop offset="1" stop-color="#ec3052"/></linearGradient></defs><path d="M17.5 25H46.5A3.5 3.5 0 0 1 50 28.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5V28.5A3.5 3.5 0 0 1 17.5 25Z" fill="url(#g)" fill-opacity="0.25" fill-rule="evenodd"/><path d="M22.5 13H41.5A2.5 2.5 0 0 1 44 15.5V44.5A2.5 2.5 0 0 1 41.5 47H22.5A2.5 2.5 0 0 1 20 44.5V15.5A2.5 2.5 0 0 1 22.5 13ZM25.2 18H38.8A1.2 1.2 0 0 1 40 19.2V19.2A1.2 1.2 0 0 1 38.8 20.4H25.2A1.2 1.2 0 0 1 24 19.2V19.2A1.2 1.2 0 0 1 25.2 18ZM25.2 23H33.8A1.2 1.2 0 0 1 35 24.2V24.2A1.2 1.2 0 0 1 33.8 25.4H25.2A1.2 1.2 0 0 1 24 24.2V24.2A1.2 1.2 0 0 1 25.2 23Z" fill="url(#g)" fill-opacity="0.7" fill-rule="evenodd"/><path d="M14 29.5L32 40.5L50 29.5V45.5A3.5 3.5 0 0 1 46.5 49H17.5A3.5 3.5 0 0 1 14 45.5Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b5cff"/><stop offset="1" stop-color="#7b4bf7"/></linearGradient></defs><path d="M21 13H43A3 3 0 0 1 46 16V47A3 3 0 0 1 43 50H21A3 3 0 0 1 18 47V16A3 3 0 0 1 21 13Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M20.6 13.3L32.6 16.5A2 2 0 0 1 34 18.4V45.6A2 2 0 0 1 32.6 47.5L20.6 50.7A2 2 0 0 1 18 48.8V15.2A2 2 0 0 1 20.6 13.3ZM28.2 32A1.8 1.8 0 1 0 31.8 32A1.8 1.8 0 1 0 28.2 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b5cff"/><stop offset="1" stop-color="#7b4bf7"/></linearGradient></defs><path d="M21 13H43A3 3 0 0 1 46 16V47A3 3 0 0 1 43 50H21A3 3 0 0 1 18 47V16A3 3 0 0 1 21 13Z" fill="url(#g)" fill-opacity="0.28" fill-rule="evenodd"/><path d="M20.6 13.3L32.6 16.5A2 2 0 0 1 34 18.4V45.6A2 2 0 0 1 32.6 47.5L20.6 50.7A2 2 0 0 1 18 48.8V15.2A2 2 0 0 1 20.6 13.3ZM28.2 32A1.8 1.8 0 1 0 31.8 32A1.8 1.8 0 1 0 28.2 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><rect width="64" height="64" rx="14" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11ce8b"/><stop offset="1" stop-color="#09b077"/></linearGradient></defs><path d="M14 32A18 18 0 1 0 50 32A18 18 0 1 0 14 32Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M19.5 32A12.5 12.5 0 1 0 44.5 32A12.5 12.5 0 1 0 19.5 32Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64"><circle cx="32" cy="32" r="32" fill="#fff"/><svg x="11.52" y="11.52" width="40.96" height="40.96" viewBox="11 11 42 42"><defs><linearGradient id="g" x1="14" y1="14" x2="50" y2="50" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11ce8b"/><stop offset="1" stop-color="#09b077"/></linearGradient></defs><path d="M14 32A18 18 0 1 0 50 32A18 18 0 1 0 14 32Z" fill="url(#g)" fill-opacity="0.22" fill-rule="evenodd"/><path d="M19.5 32A12.5 12.5 0 1 0 44.5 32A12.5 12.5 0 1 0 19.5 32Z" fill="url(#g)" fill-opacity="0.45" fill-rule="evenodd"/><path d="M25 32A7 7 0 1 0 39 32A7 7 0 1 0 25 32Z" fill="url(#g)" fill-rule="evenodd"/></svg></svg>
|