@zevra/ui 0.3.2 → 0.5.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/DECISIONS.md +25 -0
- package/README.md +83 -11
- package/dist/actions.d.ts +41 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +24 -0
- package/dist/actions.js.map +1 -0
- package/dist/catalogue.d.ts +30 -0
- package/dist/catalogue.d.ts.map +1 -0
- package/dist/catalogue.js +830 -0
- package/dist/catalogue.js.map +1 -0
- package/dist/content.d.ts +135 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +85 -0
- package/dist/content.js.map +1 -0
- package/dist/css-inline.d.ts +11 -0
- package/dist/css-inline.d.ts.map +1 -0
- package/dist/css-inline.js +13 -0
- package/dist/css-inline.js.map +1 -0
- package/dist/cx.d.ts +16 -0
- package/dist/cx.d.ts.map +1 -0
- package/dist/cx.js +20 -0
- package/dist/cx.js.map +1 -0
- package/dist/data.d.ts +136 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +98 -0
- package/dist/data.js.map +1 -0
- package/dist/feedback.d.ts +88 -0
- package/dist/feedback.d.ts.map +1 -0
- package/dist/feedback.js +38 -0
- package/dist/feedback.js.map +1 -0
- package/dist/forms.d.ts +120 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +60 -0
- package/dist/forms.js.map +1 -0
- package/dist/icon-data.d.ts +6 -0
- package/dist/icon-data.d.ts.map +1 -0
- package/dist/icon-data.js +77 -0
- package/dist/icon-data.js.map +1 -0
- package/dist/icon.d.ts +33 -0
- package/dist/icon.d.ts.map +1 -0
- package/dist/icon.js +13 -0
- package/dist/icon.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +166 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +120 -0
- package/dist/layout.js.map +1 -0
- package/dist/navigation.d.ts +150 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +104 -0
- package/dist/navigation.js.map +1 -0
- package/dist/overlays.d.ts +68 -0
- package/dist/overlays.d.ts.map +1 -0
- package/dist/overlays.js +114 -0
- package/dist/overlays.js.map +1 -0
- package/dist/surfaces.d.ts +61 -0
- package/dist/surfaces.d.ts.map +1 -0
- package/dist/surfaces.js +54 -0
- package/dist/surfaces.js.map +1 -0
- package/dist/typography.d.ts +89 -0
- package/dist/typography.d.ts.map +1 -0
- package/dist/typography.js +76 -0
- package/dist/typography.js.map +1 -0
- package/logos/index.json +10 -500
- package/package.json +36 -4
- package/react/actions.tsx +138 -0
- package/react/catalogue.tsx +1644 -0
- package/react/content.tsx +313 -0
- package/react/css-inline.ts +14 -0
- package/react/cx.ts +20 -0
- package/react/data.tsx +300 -0
- package/react/feedback.tsx +229 -0
- package/react/forms.tsx +383 -0
- package/react/icon-data.ts +114 -0
- package/react/icon.tsx +84 -0
- package/react/index.ts +42 -0
- package/react/layout.tsx +347 -0
- package/react/navigation.tsx +329 -0
- package/react/overlays.tsx +237 -0
- package/react/surfaces.tsx +161 -0
- package/react/typography.tsx +220 -0
- package/logos/png/campus-glyph-ink.png +0 -0
- package/logos/png/campus-glyph-white.png +0 -0
- package/logos/png/campus-lockup.png +0 -0
- package/logos/png/lexform-glyph-ink.png +0 -0
- package/logos/png/lexform-glyph-white.png +0 -0
- package/logos/png/lexform-lockup.png +0 -0
- package/logos/png/mcp-glyph-ink.png +0 -0
- package/logos/png/mcp-glyph-white.png +0 -0
- package/logos/png/mcp-lockup.png +0 -0
- package/logos/png/memoire-dark.png +0 -0
- package/logos/png/memoire-glyph-ink.png +0 -0
- package/logos/png/memoire-glyph-white.png +0 -0
- package/logos/png/memoire-lockup.png +0 -0
- package/logos/png/zevra-lockup-ink.png +0 -0
- package/logos/png/zevra-lockup-white.png +0 -0
- package/logos/png/zevra-lockup.png +0 -0
- package/logos/png/zevra-mark-ink.png +0 -0
- package/logos/png/zevra-mark-white.png +0 -0
- package/logos/png/zevra-mark.png +0 -0
- package/logos/svg/campus-glyph-ink.svg +0 -1
- package/logos/svg/campus-glyph-navy.svg +0 -1
- package/logos/svg/campus-glyph-orig.svg +0 -1
- package/logos/svg/campus-glyph-white.svg +0 -1
- package/logos/svg/campus-lockup-ink.svg +0 -1
- package/logos/svg/campus-lockup-navy.svg +0 -1
- package/logos/svg/campus-lockup-orig.svg +0 -1
- package/logos/svg/campus-lockup-white.svg +0 -1
- package/logos/svg/lexform-glyph-ink.svg +0 -1
- package/logos/svg/lexform-glyph-navy.svg +0 -1
- package/logos/svg/lexform-glyph-orig.svg +0 -1
- package/logos/svg/lexform-glyph-white.svg +0 -1
- package/logos/svg/lexform-lockup-ink.svg +0 -1
- package/logos/svg/lexform-lockup-navy.svg +0 -1
- package/logos/svg/lexform-lockup-orig.svg +0 -1
- package/logos/svg/lexform-lockup-white.svg +0 -1
- package/logos/svg/mcp-glyph-ink.svg +0 -1
- package/logos/svg/mcp-glyph-navy.svg +0 -1
- package/logos/svg/mcp-glyph-orig.svg +0 -1
- package/logos/svg/mcp-glyph-white.svg +0 -1
- package/logos/svg/mcp-lockup-ink.svg +0 -1
- package/logos/svg/mcp-lockup-navy.svg +0 -1
- package/logos/svg/mcp-lockup-orig.svg +0 -1
- package/logos/svg/mcp-lockup-white.svg +0 -1
- package/logos/svg/memoire-glyph-ink.svg +0 -1
- package/logos/svg/memoire-glyph-navy.svg +0 -1
- package/logos/svg/memoire-glyph-orig.svg +0 -1
- package/logos/svg/memoire-glyph-white.svg +0 -1
- package/logos/svg/memoire-lockup-ink.svg +0 -1
- package/logos/svg/memoire-lockup-navy.svg +0 -1
- package/logos/svg/memoire-lockup-orig.svg +0 -1
- package/logos/svg/memoire-lockup-white.svg +0 -1
- package/logos/svg/zevra-lockup-ink.svg +0 -1
- package/logos/svg/zevra-lockup-navy.svg +0 -1
- package/logos/svg/zevra-lockup-orig.svg +0 -1
- package/logos/svg/zevra-lockup-white.svg +0 -1
- package/logos/svg/zevra-mark-ink.svg +0 -1
- package/logos/svg/zevra-mark-navy.svg +0 -1
- package/logos/svg/zevra-mark-orig.svg +0 -1
- package/logos/svg/zevra-mark-white.svg +0 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Actions — boutons et liens.
|
|
2
|
+
//
|
|
3
|
+
// AUCUN « use client » : ce ne sont que des <button> et des <a> habillés. Le
|
|
4
|
+
// déclarer en ferait des composants client chez tous les consommateurs Next,
|
|
5
|
+
// et leurs pages perdraient le rendu serveur pour rien.
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
AnchorHTMLAttributes,
|
|
9
|
+
ButtonHTMLAttributes,
|
|
10
|
+
HTMLAttributes,
|
|
11
|
+
ReactNode,
|
|
12
|
+
} from 'react'
|
|
13
|
+
import { cx } from './cx.js'
|
|
14
|
+
|
|
15
|
+
/** Variantes de bouton. Une seule pleine par écran — c'est la règle de charte. */
|
|
16
|
+
export type BoutonVariante = 'plein' | 'fantome' | 'encre'
|
|
17
|
+
|
|
18
|
+
const VARIANTE_BOUTON: Record<BoutonVariante, string> = {
|
|
19
|
+
plein: 'zv-btn',
|
|
20
|
+
fantome: 'zv-btn--ghost',
|
|
21
|
+
encre: 'zv-btn--ink',
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface ButtonProps
|
|
25
|
+
extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className'> {
|
|
26
|
+
variante?: BoutonVariante
|
|
27
|
+
/** Hauteur réduite, pour une barre de navigation. */
|
|
28
|
+
compact?: boolean
|
|
29
|
+
/** Pleine largeur — l'appel à l'action d'un écran mobile. */
|
|
30
|
+
bloc?: boolean
|
|
31
|
+
/** Échappatoire assumée. À employer pour un ajustement de position, jamais
|
|
32
|
+
* pour redéfinir une couleur ou une taille : c'est par là que les apps
|
|
33
|
+
* recommencent à écrire leur propre charte. */
|
|
34
|
+
className?: string
|
|
35
|
+
children?: ReactNode
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function Button({
|
|
39
|
+
variante = 'plein',
|
|
40
|
+
compact,
|
|
41
|
+
bloc,
|
|
42
|
+
className,
|
|
43
|
+
type = 'button',
|
|
44
|
+
...reste
|
|
45
|
+
}: ButtonProps) {
|
|
46
|
+
return (
|
|
47
|
+
<button
|
|
48
|
+
type={type}
|
|
49
|
+
className={cx(
|
|
50
|
+
VARIANTE_BOUTON[variante],
|
|
51
|
+
compact && 'zv-btn--sm',
|
|
52
|
+
bloc && 'zv-btn--block',
|
|
53
|
+
className,
|
|
54
|
+
)}
|
|
55
|
+
{...reste}
|
|
56
|
+
/>
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface ButtonLinkProps
|
|
61
|
+
extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className'> {
|
|
62
|
+
variante?: BoutonVariante
|
|
63
|
+
compact?: boolean
|
|
64
|
+
bloc?: boolean
|
|
65
|
+
className?: string
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Le même bouton, mais qui navigue. Un <a> et un <button> ne s'échangent pas :
|
|
69
|
+
* l'un ouvre dans un onglet, se copie et s'indexe, l'autre non. */
|
|
70
|
+
export function ButtonLink({
|
|
71
|
+
variante = 'plein',
|
|
72
|
+
compact,
|
|
73
|
+
bloc,
|
|
74
|
+
className,
|
|
75
|
+
...reste
|
|
76
|
+
}: ButtonLinkProps) {
|
|
77
|
+
return (
|
|
78
|
+
<a
|
|
79
|
+
className={cx(
|
|
80
|
+
VARIANTE_BOUTON[variante],
|
|
81
|
+
compact && 'zv-btn--sm',
|
|
82
|
+
bloc && 'zv-btn--block',
|
|
83
|
+
className,
|
|
84
|
+
)}
|
|
85
|
+
{...reste}
|
|
86
|
+
/>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface ButtonRowProps
|
|
91
|
+
extends Omit<HTMLAttributes<HTMLDivElement>, 'className'> {
|
|
92
|
+
/** Empile les boutons et les étire — la disposition mobile. */
|
|
93
|
+
empile?: boolean
|
|
94
|
+
className?: string
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function ButtonRow({ empile, className, ...reste }: ButtonRowProps) {
|
|
98
|
+
return (
|
|
99
|
+
<div
|
|
100
|
+
className={cx('zv-btn-row', empile && 'zv-btn-row--stack', className)}
|
|
101
|
+
{...reste}
|
|
102
|
+
/>
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface LinkArrowProps
|
|
107
|
+
extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className'> {
|
|
108
|
+
/** Sur la bande manifeste, où le lien passe en blanc. */
|
|
109
|
+
surSombre?: boolean
|
|
110
|
+
className?: string
|
|
111
|
+
children?: ReactNode
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Lien fléché. La flèche est fournie : elle fait partie du composant, pas du
|
|
115
|
+
* contenu — la recopier à la main a produit trois tracés différents. */
|
|
116
|
+
export function LinkArrow({
|
|
117
|
+
surSombre,
|
|
118
|
+
className,
|
|
119
|
+
children,
|
|
120
|
+
...reste
|
|
121
|
+
}: LinkArrowProps) {
|
|
122
|
+
return (
|
|
123
|
+
<a
|
|
124
|
+
className={cx(
|
|
125
|
+
'zv-link-arrow',
|
|
126
|
+
surSombre && 'zv-link-arrow--on-dark',
|
|
127
|
+
className,
|
|
128
|
+
)}
|
|
129
|
+
{...reste}
|
|
130
|
+
>
|
|
131
|
+
{children}
|
|
132
|
+
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
133
|
+
<path d="M5 12h14" />
|
|
134
|
+
<path d="M13 6l6 6-6 6" />
|
|
135
|
+
</svg>
|
|
136
|
+
</a>
|
|
137
|
+
)
|
|
138
|
+
}
|