@alveole/storybook 1.10.0 → 2.0.0-alpha
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/dist/components/BarreDeFiltres.d.ts +20 -0
- package/dist/components/BarreDeFiltres.d.ts.map +1 -0
- package/dist/components/BarreDeFiltres.js +28 -0
- package/dist/components/ColorSwatch.d.ts +10 -0
- package/dist/components/ColorSwatch.d.ts.map +1 -0
- package/dist/components/ColorSwatch.js +37 -0
- package/dist/components/DocFooter.d.ts.map +1 -1
- package/dist/components/DocFooter.js +1 -1
- package/dist/components/EcranDeCatalogue.d.ts +18 -0
- package/dist/components/EcranDeCatalogue.d.ts.map +1 -0
- package/dist/components/EcranDeCatalogue.js +16 -0
- package/dist/components/EnTeteDeFiche.d.ts +10 -0
- package/dist/components/EnTeteDeFiche.d.ts.map +1 -0
- package/dist/components/EnTeteDeFiche.js +13 -0
- package/dist/components/ExampleBlock.d.ts +12 -0
- package/dist/components/ExampleBlock.d.ts.map +1 -0
- package/dist/components/ExampleBlock.js +69 -0
- package/dist/components/ExemplesDeLaStory.d.ts +10 -0
- package/dist/components/ExemplesDeLaStory.d.ts.map +1 -0
- package/dist/components/ExemplesDeLaStory.js +27 -0
- package/dist/components/FiltreDeroulant.d.ts +22 -0
- package/dist/components/FiltreDeroulant.d.ts.map +1 -0
- package/dist/components/FiltreDeroulant.js +10 -0
- package/dist/components/GrilleDeFiches.d.ts +15 -0
- package/dist/components/GrilleDeFiches.d.ts.map +1 -0
- package/dist/components/GrilleDeFiches.js +14 -0
- package/dist/components/MenuCard.d.ts +9 -0
- package/dist/components/MenuCard.d.ts.map +1 -0
- package/dist/components/MenuCard.js +8 -0
- package/dist/components/PageTitle.d.ts +19 -0
- package/dist/components/PageTitle.d.ts.map +1 -0
- package/dist/components/PageTitle.js +16 -0
- package/dist/components/ScreenZone.d.ts +19 -0
- package/dist/components/ScreenZone.d.ts.map +1 -0
- package/dist/components/ScreenZone.js +35 -0
- package/dist/components/StoryCard.d.ts.map +1 -1
- package/dist/components/StoryCard.js +3 -1
- package/dist/components/StoryLayout.d.ts +14 -0
- package/dist/components/StoryLayout.d.ts.map +1 -0
- package/dist/components/StoryLayout.js +21 -0
- package/dist/components/StorySummary.d.ts +7 -0
- package/dist/components/StorySummary.d.ts.map +1 -0
- package/dist/components/StorySummary.js +8 -0
- package/dist/components/UIKitColumn.d.ts +25 -0
- package/dist/components/UIKitColumn.d.ts.map +1 -0
- package/dist/components/UIKitColumn.js +24 -0
- package/dist/components/UIKitTopBar.d.ts +11 -2
- package/dist/components/UIKitTopBar.d.ts.map +1 -1
- package/dist/components/UIKitTopBar.js +84 -27
- package/dist/components/choixDuFiltre.d.ts +14 -0
- package/dist/components/choixDuFiltre.d.ts.map +1 -0
- package/dist/components/choixDuFiltre.js +10 -0
- package/dist/components/hauteurDeCarte.d.ts +6 -0
- package/dist/components/hauteurDeCarte.d.ts.map +1 -0
- package/dist/components/hauteurDeCarte.js +5 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/navigation.d.ts +6 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +3 -0
- package/dist/pages/InstallationPage.d.ts +8 -0
- package/dist/pages/InstallationPage.d.ts.map +1 -0
- package/dist/pages/InstallationPage.js +13 -0
- package/dist/pages/PhilosophyPage.d.ts +2 -1
- package/dist/pages/PhilosophyPage.d.ts.map +1 -1
- package/dist/pages/PhilosophyPage.js +7 -7
- package/dist/pages/UIKitHomePage.d.ts.map +1 -1
- package/dist/pages/UIKitHomePage.js +3 -7
- package/dist/pages/UIKitPage.d.ts +3 -4
- package/dist/pages/UIKitPage.d.ts.map +1 -1
- package/dist/pages/UIKitPage.js +59 -36
- package/dist/pages/UIKitThemePage.d.ts +6 -1
- package/dist/pages/UIKitThemePage.d.ts.map +1 -1
- package/dist/pages/UIKitThemePage.js +4 -8
- package/dist/pages/ecransDuKit.d.ts +18 -0
- package/dist/pages/ecransDuKit.d.ts.map +1 -0
- package/dist/pages/ecransDuKit.js +11 -0
- package/dist/pages/installation.d.ts +18 -0
- package/dist/pages/installation.d.ts.map +1 -0
- package/dist/pages/installation.js +218 -0
- package/dist/pages/installationOutillage.d.ts +7 -0
- package/dist/pages/installationOutillage.d.ts.map +1 -0
- package/dist/pages/installationOutillage.js +152 -0
- package/dist/pages/philosophie.d.ts +10 -0
- package/dist/pages/philosophie.d.ts.map +1 -0
- package/dist/pages/philosophie.js +46 -0
- package/dist/pressePapiers.d.ts +10 -0
- package/dist/pressePapiers.d.ts.map +1 -0
- package/dist/pressePapiers.js +14 -0
- package/dist/screens/StoriesScreen.d.ts +2 -1
- package/dist/screens/StoriesScreen.d.ts.map +1 -1
- package/dist/screens/StoriesScreen.js +18 -35
- package/dist/screens/StoryDetailScreen.d.ts +2 -1
- package/dist/screens/StoryDetailScreen.d.ts.map +1 -1
- package/dist/screens/StoryDetailScreen.js +24 -74
- package/dist/screens/ThemeCSSVariablesScreen.d.ts +2 -1
- package/dist/screens/ThemeCSSVariablesScreen.d.ts.map +1 -1
- package/dist/screens/ThemeCSSVariablesScreen.js +7 -97
- package/dist/screens/ThemeConstantDetailScreen.d.ts +2 -1
- package/dist/screens/ThemeConstantDetailScreen.d.ts.map +1 -1
- package/dist/screens/ThemeConstantDetailScreen.js +4 -4
- package/dist/screens/ThemeConstantsScreen.d.ts +2 -1
- package/dist/screens/ThemeConstantsScreen.d.ts.map +1 -1
- package/dist/screens/ThemeConstantsScreen.js +7 -8
- package/dist/screens/ThemePaletteScreen.d.ts +2 -1
- package/dist/screens/ThemePaletteScreen.d.ts.map +1 -1
- package/dist/screens/ThemePaletteScreen.js +11 -92
- package/dist/screens/ThemeTypographyScreen.d.ts +2 -1
- package/dist/screens/ThemeTypographyScreen.d.ts.map +1 -1
- package/dist/screens/ThemeTypographyScreen.js +6 -6
- package/dist/screens/colonnesDeFiches.d.ts +6 -0
- package/dist/screens/colonnesDeFiches.d.ts.map +1 -0
- package/dist/screens/colonnesDeFiches.js +20 -0
- package/dist/screens/paletteSections.d.ts +30 -0
- package/dist/screens/paletteSections.d.ts.map +1 -0
- package/dist/screens/paletteSections.js +76 -0
- package/dist/screens/sourcesDExemples.d.ts +17 -0
- package/dist/screens/sourcesDExemples.d.ts.map +1 -0
- package/dist/screens/sourcesDExemples.js +27 -0
- package/dist/screens/variablesCSSDuTheme.d.ts +12 -0
- package/dist/screens/variablesCSSDuTheme.d.ts.map +1 -0
- package/dist/screens/variablesCSSDuTheme.js +77 -0
- package/dist/screens/variablesDeTypographie.d.ts +8 -0
- package/dist/screens/variablesDeTypographie.d.ts.map +1 -0
- package/dist/screens/variablesDeTypographie.js +23 -0
- package/dist/storySource.d.ts +7 -0
- package/dist/storySource.d.ts.map +1 -0
- package/dist/storySource.js +7 -0
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +11 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +20 -4
- package/package.json +19 -9
- package/dist/styles.d.ts +0 -7
- package/dist/styles.d.ts.map +0 -1
- package/dist/styles.js +0 -6
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type ColorEntry = {
|
|
2
|
+
path: string;
|
|
3
|
+
value: string;
|
|
4
|
+
};
|
|
5
|
+
export type ColorSection = {
|
|
6
|
+
title: string;
|
|
7
|
+
entries: ColorEntry[];
|
|
8
|
+
deprecated?: boolean;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Les couleurs d'un groupe, aplaties en chemins pointes. La palette imbrique ses familles a
|
|
12
|
+
* des profondeurs variables, et seule la feuille porte une valeur : tout ce qui n'est ni une
|
|
13
|
+
* chaine ni un objet n'a rien a montrer et disparait.
|
|
14
|
+
*/
|
|
15
|
+
export declare function flattenColors(obj: object, prefix?: string): ColorEntry[];
|
|
16
|
+
/**
|
|
17
|
+
* Les sections affichees : une par famille du mode clair, puis les cles historiques. Seul le
|
|
18
|
+
* mode clair est montre - le catalogue ne rend pas encore le mode sombre, et l'afficher
|
|
19
|
+
* laisserait croire qu'il est disponible. Une famille vide n'a pas de section : un accordeon
|
|
20
|
+
* qu'on deplie sur rien se lit comme une erreur.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildSections(palette: Record<string, unknown>): ColorSection[];
|
|
23
|
+
/** Le nombre de jetons d'une section, tel que son en-tete l'annonce. */
|
|
24
|
+
export declare function compteDeJetons({ entries: { length } }: ColorSection): string;
|
|
25
|
+
/**
|
|
26
|
+
* Les sections depliees a l'ouverture de l'ecran : les familles, et non l'historique, qui est
|
|
27
|
+
* ce qui reste a migrer, pas ce qu'on vient consulter.
|
|
28
|
+
*/
|
|
29
|
+
export declare function sectionsOuvertesAuDepart(sections: ColorSection[]): string[];
|
|
30
|
+
//# sourceMappingURL=paletteSections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paletteSections.d.ts","sourceRoot":"","sources":["../../src/screens/paletteSections.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1F;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,UAAU,EAAE,CAWpE;AA8BD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,CAc9E;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,GAAG,MAAM,CAE5E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAE3E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Les couleurs d'un groupe, aplaties en chemins pointes. La palette imbrique ses familles a
|
|
3
|
+
* des profondeurs variables, et seule la feuille porte une valeur : tout ce qui n'est ni une
|
|
4
|
+
* chaine ni un objet n'a rien a montrer et disparait.
|
|
5
|
+
*/
|
|
6
|
+
export function flattenColors(obj, prefix = '') {
|
|
7
|
+
const entries = [];
|
|
8
|
+
for (const [key, val] of Object.entries(obj)) {
|
|
9
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
10
|
+
if (typeof val === 'string') {
|
|
11
|
+
entries.push({ path, value: val });
|
|
12
|
+
}
|
|
13
|
+
else if (val && typeof val === 'object') {
|
|
14
|
+
entries.push(...flattenColors(val, path));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return entries;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Les cles de premier niveau qui precedent le rangement par mode. Elles ne sont plus alimentees,
|
|
21
|
+
* mais restent lues par du code existant : la palette les garde, et l'ecran les montre a part.
|
|
22
|
+
*/
|
|
23
|
+
const DEPRECATED_KEYS = [
|
|
24
|
+
'primary',
|
|
25
|
+
'transparent',
|
|
26
|
+
'danger',
|
|
27
|
+
'info',
|
|
28
|
+
'success',
|
|
29
|
+
'warning',
|
|
30
|
+
'link',
|
|
31
|
+
'text',
|
|
32
|
+
'border',
|
|
33
|
+
'background',
|
|
34
|
+
'system',
|
|
35
|
+
];
|
|
36
|
+
/** Les cles historiques encore presentes, rassemblees en une seule liste. */
|
|
37
|
+
function deprecatedEntries(palette) {
|
|
38
|
+
return DEPRECATED_KEYS.flatMap(key => {
|
|
39
|
+
const val = palette[key];
|
|
40
|
+
if (typeof val === 'string')
|
|
41
|
+
return [{ path: key, value: val }];
|
|
42
|
+
if (val && typeof val === 'object')
|
|
43
|
+
return flattenColors(val, key);
|
|
44
|
+
return [];
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Les sections affichees : une par famille du mode clair, puis les cles historiques. Seul le
|
|
49
|
+
* mode clair est montre - le catalogue ne rend pas encore le mode sombre, et l'afficher
|
|
50
|
+
* laisserait croire qu'il est disponible. Une famille vide n'a pas de section : un accordeon
|
|
51
|
+
* qu'on deplie sur rien se lit comme une erreur.
|
|
52
|
+
*/
|
|
53
|
+
export function buildSections(palette) {
|
|
54
|
+
const clair = typeof palette.light === 'object' && palette.light !== null ? palette.light : {};
|
|
55
|
+
const familles = Object.entries(clair)
|
|
56
|
+
.map(([groupKey, groupVal]) => ({
|
|
57
|
+
title: `light / ${groupKey}`,
|
|
58
|
+
entries: flattenColors({ [groupKey]: groupVal }, 'light'),
|
|
59
|
+
}))
|
|
60
|
+
.filter(section => section.entries.length > 0);
|
|
61
|
+
const historiques = deprecatedEntries(palette);
|
|
62
|
+
if (historiques.length === 0)
|
|
63
|
+
return familles;
|
|
64
|
+
return [...familles, { title: 'Deprecated', entries: historiques, deprecated: true }];
|
|
65
|
+
}
|
|
66
|
+
/** Le nombre de jetons d'une section, tel que son en-tete l'annonce. */
|
|
67
|
+
export function compteDeJetons({ entries: { length } }) {
|
|
68
|
+
return `${length} token${length > 1 ? 's' : ''}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Les sections depliees a l'ouverture de l'ecran : les familles, et non l'historique, qui est
|
|
72
|
+
* ce qui reste a migrer, pas ce qu'on vient consulter.
|
|
73
|
+
*/
|
|
74
|
+
export function sectionsOuvertesAuDepart(sections) {
|
|
75
|
+
return sections.filter(section => !section.deprecated).map(section => section.title);
|
|
76
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { StorybookMeta, StorybookModule } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Le code d'un exemple, ou `null` quand la fiche ne le publie pas : la demonstration se montre
|
|
4
|
+
* alors sans son code. Les premieres fiches posaient leurs sources a la racine du bloc, les
|
|
5
|
+
* suivantes les rangent sous `storySources` ; les deux se lisent. Une source publiee en
|
|
6
|
+
* fonction n'est construite qu'ici, a la demande.
|
|
7
|
+
*/
|
|
8
|
+
export declare const sourceDeLExemple: (story: StorybookModule, nomDeLExemple: string) => string | null;
|
|
9
|
+
/** Le texte qui accompagne un exemple, ou `null` quand la fiche n'en donne pas. */
|
|
10
|
+
export declare const descriptionDeLExemple: (story: StorybookModule, nomDeLExemple: string) => string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Ce que la fiche annonce hors de l'ecran : la balise `description` de la page, lue par les
|
|
13
|
+
* moteurs et les apercus de lien. Le resume court prime quand la fiche en donne un ; sinon la
|
|
14
|
+
* description longue sert, debarrassee de son balisage, qu'une balise `meta` afficherait tel quel.
|
|
15
|
+
*/
|
|
16
|
+
export declare const resumeDeLaFiche: (meta: StorybookMeta) => string;
|
|
17
|
+
//# sourceMappingURL=sourcesDExemples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcesDExemples.d.ts","sourceRoot":"","sources":["../../src/screens/sourcesDExemples.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG1D;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,eAAe,EAAE,eAAe,MAAM,KAAG,MAAM,GAAG,IAQzF,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,GAAI,OAAO,eAAe,EAAE,eAAe,MAAM,KAAG,MAAM,GAAG,IAI9F,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,aAAa,KAAG,MACI,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { stripMarkdown } from '../utils';
|
|
2
|
+
/**
|
|
3
|
+
* Le code d'un exemple, ou `null` quand la fiche ne le publie pas : la demonstration se montre
|
|
4
|
+
* alors sans son code. Les premieres fiches posaient leurs sources a la racine du bloc, les
|
|
5
|
+
* suivantes les rangent sous `storySources` ; les deux se lisent. Une source publiee en
|
|
6
|
+
* fonction n'est construite qu'ici, a la demande.
|
|
7
|
+
*/
|
|
8
|
+
export const sourceDeLExemple = (story, nomDeLExemple) => {
|
|
9
|
+
const sources = story.Sources;
|
|
10
|
+
const source = sources?.storySources?.[nomDeLExemple] ?? sources?.[nomDeLExemple];
|
|
11
|
+
if (typeof source === 'string')
|
|
12
|
+
return source;
|
|
13
|
+
if (typeof source === 'function')
|
|
14
|
+
return source();
|
|
15
|
+
return null;
|
|
16
|
+
};
|
|
17
|
+
/** Le texte qui accompagne un exemple, ou `null` quand la fiche n'en donne pas. */
|
|
18
|
+
export const descriptionDeLExemple = (story, nomDeLExemple) => {
|
|
19
|
+
const description = story.Sources?.storyDescriptions?.[nomDeLExemple];
|
|
20
|
+
return typeof description === 'string' ? description : null;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Ce que la fiche annonce hors de l'ecran : la balise `description` de la page, lue par les
|
|
24
|
+
* moteurs et les apercus de lien. Le resume court prime quand la fiche en donne un ; sinon la
|
|
25
|
+
* description longue sert, debarrassee de son balisage, qu'une balise `meta` afficherait tel quel.
|
|
26
|
+
*/
|
|
27
|
+
export const resumeDeLaFiche = (meta) => meta.shortDescription ?? stripMarkdown(meta.description);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type PreviewKind = 'color' | 'spacing' | 'elevation' | 'radius' | 'none';
|
|
2
|
+
export type CSSVarEntry = {
|
|
3
|
+
name: string;
|
|
4
|
+
rawValue: string;
|
|
5
|
+
preview: PreviewKind;
|
|
6
|
+
};
|
|
7
|
+
export type CSSVarGroup = {
|
|
8
|
+
title: string;
|
|
9
|
+
vars: CSSVarEntry[];
|
|
10
|
+
};
|
|
11
|
+
export declare function buildGroups(): CSSVarGroup[];
|
|
12
|
+
//# sourceMappingURL=variablesCSSDuTheme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variablesCSSDuTheme.d.ts","sourceRoot":"","sources":["../../src/screens/variablesCSSDuTheme.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB,CAAC;AA+EF,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAgB3C"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Le catalogue des variables CSS que le theme publie, groupe par famille. Construire ce catalogue
|
|
3
|
+
* est une responsabilite a part : l'ecran qui le montre n'a pas a savoir d'ou sort chaque famille.
|
|
4
|
+
*/
|
|
5
|
+
import { Colors, CustomPalette, CustomTypography, Elevations, FontWeightMap, RadiusList, Spacings, sanitizeCSSKey, } from '@alveole/theme';
|
|
6
|
+
import { variablesDeTypographie } from './variablesDeTypographie';
|
|
7
|
+
/** Les nuances brutes de la palette, une variable par cran. */
|
|
8
|
+
function groupeDesCouleurs() {
|
|
9
|
+
const vars = Object.entries(Colors).flatMap(([name, shades]) => Object.entries(shades).map(([variant, value]) => ({
|
|
10
|
+
name: `--color-${name}-${variant}`,
|
|
11
|
+
rawValue: value,
|
|
12
|
+
preview: 'color',
|
|
13
|
+
})));
|
|
14
|
+
return { title: 'Couleurs palette', vars };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Les jetons semantiques du theme clair, une categorie par groupe. Une categorie vide ne
|
|
18
|
+
* donne pas de groupe : un accordeon sans contenu n'apprend rien.
|
|
19
|
+
*/
|
|
20
|
+
const CATEGORIES_SEMANTIQUES = ['background', 'text', 'border', 'artwork', 'system'];
|
|
21
|
+
function groupesSemantiques() {
|
|
22
|
+
return CATEGORIES_SEMANTIQUES.map(category => {
|
|
23
|
+
const tokens = CustomPalette.light[category] ?? {};
|
|
24
|
+
const vars = Object.entries(tokens).flatMap(([token, value]) => typeof value === 'string' ? [{ name: `--${category}-${token}`, rawValue: value, preview: 'color' }] : []);
|
|
25
|
+
return { title: `Tokens — ${category}`, vars };
|
|
26
|
+
}).filter(groupe => groupe.vars.length > 0);
|
|
27
|
+
}
|
|
28
|
+
function groupeChiffre({ title, valeurs, prefixe, preview, nomDeCle = key => key }) {
|
|
29
|
+
return {
|
|
30
|
+
title,
|
|
31
|
+
vars: Object.entries(valeurs).map(([key, value]) => ({
|
|
32
|
+
name: `--${prefixe}-${nomDeCle(key)}`,
|
|
33
|
+
rawValue: `${value}px`,
|
|
34
|
+
preview,
|
|
35
|
+
})),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function groupeDesElevations() {
|
|
39
|
+
return {
|
|
40
|
+
title: 'Elevations',
|
|
41
|
+
vars: Object.entries(Elevations).map(([key, value]) => ({
|
|
42
|
+
name: `--elevation-${key}`,
|
|
43
|
+
rawValue: value.web,
|
|
44
|
+
preview: 'elevation',
|
|
45
|
+
})),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** Chaque graisse publie sa famille et son poids : deux variables pour une entree. */
|
|
49
|
+
function groupeDesFontes() {
|
|
50
|
+
return {
|
|
51
|
+
title: 'Fonts',
|
|
52
|
+
vars: Object.entries(FontWeightMap).flatMap(([key, { familyWithFallback, weight }]) => [
|
|
53
|
+
{ name: `--font-${key}-family`, rawValue: familyWithFallback, preview: 'none' },
|
|
54
|
+
{ name: `--font-${key}-weight`, rawValue: String(weight), preview: 'none' },
|
|
55
|
+
]),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function groupeDesTypographies() {
|
|
59
|
+
return { title: 'Typographies', vars: variablesDeTypographie(CustomTypography, sanitizeCSSKey) };
|
|
60
|
+
}
|
|
61
|
+
export function buildGroups() {
|
|
62
|
+
return [
|
|
63
|
+
groupeDesCouleurs(),
|
|
64
|
+
...groupesSemantiques(),
|
|
65
|
+
groupeChiffre({
|
|
66
|
+
title: 'Spacing',
|
|
67
|
+
valeurs: Spacings,
|
|
68
|
+
prefixe: 'spacing',
|
|
69
|
+
preview: 'spacing',
|
|
70
|
+
nomDeCle: sanitizeCSSKey,
|
|
71
|
+
}),
|
|
72
|
+
groupeChiffre({ title: 'Radius', valeurs: RadiusList, prefixe: 'radius', preview: 'radius' }),
|
|
73
|
+
groupeDesElevations(),
|
|
74
|
+
groupeDesFontes(),
|
|
75
|
+
groupeDesTypographies(),
|
|
76
|
+
];
|
|
77
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CSSVarEntry } from './variablesCSSDuTheme';
|
|
2
|
+
/**
|
|
3
|
+
* Les variables CSS d'un arbre de typographies : une feuille est reconnue a sa taille, et son
|
|
4
|
+
* chemin dans l'arbre donne le nom de ses variables. L'assainisseur de cle est injecte : il vient
|
|
5
|
+
* du theme, et cette collecte n'a pas a le charger pour etre testee.
|
|
6
|
+
*/
|
|
7
|
+
export declare function variablesDeTypographie(arbre: object, nommer: (cle: string) => string, chemin?: string[]): CSSVarEntry[];
|
|
8
|
+
//# sourceMappingURL=variablesDeTypographie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variablesDeTypographie.d.ts","sourceRoot":"","sources":["../../src/screens/variablesDeTypographie.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAC/B,MAAM,GAAE,MAAM,EAAO,GACpB,WAAW,EAAE,CAkBf"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Les variables CSS d'un arbre de typographies : une feuille est reconnue a sa taille, et son
|
|
3
|
+
* chemin dans l'arbre donne le nom de ses variables. L'assainisseur de cle est injecte : il vient
|
|
4
|
+
* du theme, et cette collecte n'a pas a le charger pour etre testee.
|
|
5
|
+
*/
|
|
6
|
+
export function variablesDeTypographie(arbre, nommer, chemin = []) {
|
|
7
|
+
const { fontSize, lineHeight, fontFamily, fontWeight } = Object.fromEntries(Object.entries(arbre));
|
|
8
|
+
if (typeof fontSize === 'number') {
|
|
9
|
+
const prefixe = `--typography-${chemin.map(nommer).join('-')}`;
|
|
10
|
+
const variable = (suffixe, rawValue) => ({
|
|
11
|
+
name: `${prefixe}-${suffixe}`,
|
|
12
|
+
rawValue,
|
|
13
|
+
preview: 'none',
|
|
14
|
+
});
|
|
15
|
+
const variables = [variable('font-size', `${fontSize}px`), variable('line-height', `${lineHeight}px`)];
|
|
16
|
+
if (typeof fontFamily === 'string')
|
|
17
|
+
variables.push(variable('font-family', fontFamily));
|
|
18
|
+
if (typeof fontWeight === 'string')
|
|
19
|
+
variables.push(variable('font-weight', fontWeight));
|
|
20
|
+
return variables;
|
|
21
|
+
}
|
|
22
|
+
return Object.entries(arbre).flatMap(([cle, valeur]) => typeof valeur === 'object' && valeur !== null ? variablesDeTypographie(valeur, nommer, [...chemin, cle]) : []);
|
|
23
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type SourceDecoupee = {
|
|
2
|
+
/** Ce qui est affiché tant que la source est repliée. */
|
|
3
|
+
visible: string;
|
|
4
|
+
tronque: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const decouperSource: (source: string, lignes: number) => SourceDecoupee;
|
|
7
|
+
//# sourceMappingURL=storySource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storySource.d.ts","sourceRoot":"","sources":["../src/storySource.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,cAO/D,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { Story, StoryModule, StoryTag } from '@alveole/components';
|
|
1
|
+
import type { Story, StoryExample, StoryModule, StoryTag } from '@alveole/components';
|
|
2
2
|
export type StorybookTag = StoryTag;
|
|
3
3
|
export type StorybookMeta = Story;
|
|
4
4
|
export type StorybookModule<TMeta extends StorybookMeta = StorybookMeta> = StoryModule<TMeta>;
|
|
5
|
+
export type Exemple = readonly [nom: string, Rendu: StoryExample];
|
|
5
6
|
export type StorybookFlagKey = 'figma' | 'experimental' | 'props' | 'webOnly' | 'mobileOnly';
|
|
6
7
|
export type StorybookFlag = {
|
|
7
8
|
key: StorybookFlagKey;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEtF,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;AAEpC,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC;AAElC,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,aAAa,GAAG,aAAa,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;AAE9F,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;AAE7F,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,gBAAgB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import { StorybookFlag, StorybookMeta, StorybookModule } from './types';
|
|
1
|
+
import { Exemple, StorybookFlag, StorybookMeta, StorybookModule } from './types';
|
|
2
2
|
export declare const normalizeText: (value: string) => string;
|
|
3
|
+
/**
|
|
4
|
+
* Tous les indicateurs qu'une fiche peut porter, dans l'ordre ou le catalogue les propose.
|
|
5
|
+
* Ils se deduisent des definitions plutot que d'etre recopies : un indicateur ajoute ici
|
|
6
|
+
* devient filtrable sans autre geste.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ALL_STORY_FLAGS: StorybookFlag[];
|
|
3
9
|
export declare const getStoryFlags: (meta: StorybookMeta) => StorybookFlag[];
|
|
4
10
|
export declare const getAllStoryTags: (stories: StorybookModule[]) => string[];
|
|
5
11
|
export declare const filterStories: (params: {
|
|
@@ -10,9 +16,11 @@ export declare const filterStories: (params: {
|
|
|
10
16
|
}) => StorybookModule[];
|
|
11
17
|
export declare const sortStoriesByTitle: (stories: StorybookModule[]) => StorybookModule[];
|
|
12
18
|
export declare const groupStoriesByTag: (stories: StorybookModule[], tags: string[]) => (readonly [string, StorybookModule[]])[];
|
|
13
|
-
export declare const getStoryExamples: (story: StorybookModule) => [
|
|
14
|
-
export declare const toStoryModules: (stories: Record<string,
|
|
19
|
+
export declare const getStoryExamples: (story: StorybookModule) => Exemple[];
|
|
20
|
+
export declare const toStoryModules: (stories: Record<string, StorybookModule>) => StorybookModule[];
|
|
15
21
|
export declare const findStoryByTitle: (stories: StorybookModule[], title: string | undefined | null) => StorybookModule | null;
|
|
22
|
+
export declare const getConstantEntries: (constants: Record<string, unknown>) => [string, unknown][];
|
|
16
23
|
export declare const findConstantByName: (constants: Record<string, unknown>, name: string | undefined | null) => [string, unknown] | null;
|
|
17
24
|
export declare const stripMarkdown: (markdown: string) => string;
|
|
25
|
+
export declare const groupTitleForTag: (tag: string) => string;
|
|
18
26
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAUjF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,WAIP,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EAA+D,CAAC;AAE3G,eAAO,MAAM,aAAa,GAAI,MAAM,aAAa,KAAG,aAAa,EAC+B,CAAC;AAEjG,eAAO,MAAM,eAAe,GAAI,SAAS,eAAe,EAAE,KAAG,MAAM,EAOlE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ;IACpC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;CAC3C,sBAoBA,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,SAAS,eAAe,EAAE,sBAC8B,CAAC;AAE5F,eAAO,MAAM,iBAAiB,GAAI,SAAS,eAAe,EAAE,EAAE,MAAM,MAAM,EAAE,6CAGd,CAAC;AAE/D,eAAO,MAAM,gBAAgB,GAAI,OAAO,eAAe,KAAG,OAAO,EAG9D,CAAC;AAEJ,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,sBAA2B,CAAC;AAEnG,eAAO,MAAM,gBAAgB,GAAI,SAAS,eAAe,EAAE,EAAE,OAAO,MAAM,GAAG,SAAS,GAAG,IAAI,2BAC/B,CAAC;AAI/D,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,wBAGV,CAAC;AAE5D,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,6BACrC,CAAC;AAElE,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,KAAG,MAWtC,CAAC;AAOZ,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,WAC6B,CAAC"}
|
package/dist/utils.js
CHANGED
|
@@ -9,6 +9,12 @@ export const normalizeText = (value) => value
|
|
|
9
9
|
.toLowerCase()
|
|
10
10
|
.normalize('NFD')
|
|
11
11
|
.replace(/[\u0300-\u036f]/g, '');
|
|
12
|
+
/**
|
|
13
|
+
* Tous les indicateurs qu'une fiche peut porter, dans l'ordre ou le catalogue les propose.
|
|
14
|
+
* Ils se deduisent des definitions plutot que d'etre recopies : un indicateur ajoute ici
|
|
15
|
+
* devient filtrable sans autre geste.
|
|
16
|
+
*/
|
|
17
|
+
export const ALL_STORY_FLAGS = FLAG_DEFINITIONS.map(({ key, label }) => ({ key, label }));
|
|
12
18
|
export const getStoryFlags = (meta) => FLAG_DEFINITIONS.filter(flag => flag.isActive(meta)).map(({ key, label }) => ({ key, label }));
|
|
13
19
|
export const getAllStoryTags = (stories) => {
|
|
14
20
|
const tags = new Set();
|
|
@@ -23,9 +29,9 @@ export const filterStories = (params) => {
|
|
|
23
29
|
const normalizedQuery = normalizeText(query.trim());
|
|
24
30
|
return stories.filter(story => {
|
|
25
31
|
const meta = story.default;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
// Une recherche vide n'a pas besoin d'etre traitee a part : toute chaine contient la
|
|
33
|
+
// chaine vide, donc le titre suffit a laisser passer la fiche.
|
|
34
|
+
const matchesQuery = normalizeText(meta.title).includes(normalizedQuery) || normalizeText(meta.description).includes(normalizedQuery);
|
|
29
35
|
if (!matchesQuery)
|
|
30
36
|
return false;
|
|
31
37
|
if (selectedTag && !meta.tags.includes(selectedTag))
|
|
@@ -42,9 +48,14 @@ export const sortStoriesByTitle = (stories) => [...stories].sort((left, right) =
|
|
|
42
48
|
export const groupStoriesByTag = (stories, tags) => tags
|
|
43
49
|
.map(tag => [tag, stories.filter(story => story.default.tags.includes(tag))])
|
|
44
50
|
.filter(([, groupedStories]) => groupedStories.length > 0);
|
|
45
|
-
export const getStoryExamples = (story) => Object.entries(story).
|
|
51
|
+
export const getStoryExamples = (story) => Object.entries(story).flatMap(([nom, valeur]) => nom !== 'default' && typeof valeur === 'function' ? [[nom, valeur]] : []);
|
|
46
52
|
export const toStoryModules = (stories) => Object.values(stories);
|
|
47
53
|
export const findStoryByTitle = (stories, title) => stories.find(story => story.default.title === title) ?? null;
|
|
54
|
+
// Une constante du thème n'est présentée que si elle est structurée : les scalaires exportés
|
|
55
|
+
// par `@alveole/theme` (numéro de version, drapeaux) ne sont pas des jetons à parcourir.
|
|
56
|
+
export const getConstantEntries = (constants) => Object.entries(constants)
|
|
57
|
+
.filter(([, value]) => typeof value === 'object' && value != null)
|
|
58
|
+
.sort((left, right) => left[0].localeCompare(right[0]));
|
|
48
59
|
export const findConstantByName = (constants, name) => Object.entries(constants).find(([key]) => key === name) ?? null;
|
|
49
60
|
export const stripMarkdown = (markdown) => markdown
|
|
50
61
|
.replace(/#{1,6}\s*/g, '')
|
|
@@ -57,3 +68,8 @@ export const stripMarkdown = (markdown) => markdown
|
|
|
57
68
|
.replace(/^\s*\d+\.\s+/gm, '')
|
|
58
69
|
.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1')
|
|
59
70
|
.trim();
|
|
71
|
+
// Les tags de fiches sont écrits comme les répertoires du dépôt (`core`, `ui`), mais servent de
|
|
72
|
+
// titre de groupe dans la colonne, où ils doivent se lire comme des mots. Un sigle n'obéit pas
|
|
73
|
+
// à la règle générale : `ui` donne `UI` et non `Ui`, d'où la table d'exceptions.
|
|
74
|
+
const ACRONYM_GROUP_TITLES = { ui: 'UI' };
|
|
75
|
+
export const groupTitleForTag = (tag) => ACRONYM_GROUP_TITLES[tag] ?? tag.charAt(0).toUpperCase() + tag.slice(1);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alveole/storybook",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-alpha",
|
|
4
4
|
"description": "Catalog screens and helpers for Alveole stories and theme tokens.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,19 +13,23 @@
|
|
|
13
13
|
},
|
|
14
14
|
"files": [
|
|
15
15
|
"dist",
|
|
16
|
+
"!dist/.tsbuildinfo",
|
|
16
17
|
"README.md"
|
|
17
18
|
],
|
|
18
19
|
"sideEffects": false,
|
|
19
|
-
"scripts": {
|
|
20
|
-
"build": "tsc -p tsconfig.build.json",
|
|
21
|
-
"lint": "eslint .",
|
|
22
|
-
"typecheck": "tsc -p tsconfig.typecheck.json --noEmit"
|
|
23
|
-
},
|
|
24
20
|
"devDependencies": {
|
|
25
21
|
"@alveole/eslint-config": "file:../eslint-config",
|
|
26
|
-
"
|
|
22
|
+
"@testing-library/react": "16.3.3",
|
|
23
|
+
"babel-preset-expo": "57.0.13",
|
|
24
|
+
"eslint": "10.10.0",
|
|
25
|
+
"jest": "29.7.0",
|
|
26
|
+
"jest-environment-jsdom": "30.5.2",
|
|
27
|
+
"jest-expo": "57.0.5",
|
|
27
28
|
"react": "19.2.3",
|
|
28
|
-
"react-
|
|
29
|
+
"react-dom": "19.2.3",
|
|
30
|
+
"react-native": "0.86.3",
|
|
31
|
+
"react-native-web": "0.21.3",
|
|
32
|
+
"tamagui": "1.144.4"
|
|
29
33
|
},
|
|
30
34
|
"peerDependencies": {
|
|
31
35
|
"@alveole/components": "*",
|
|
@@ -33,5 +37,11 @@
|
|
|
33
37
|
"@alveole/theme": "*",
|
|
34
38
|
"react": "*",
|
|
35
39
|
"react-native": "*"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsc -p tsconfig.build.json",
|
|
43
|
+
"lint": "eslint . --cache --cache-strategy content",
|
|
44
|
+
"typecheck": "tsc -p tsconfig.typecheck.json --noEmit",
|
|
45
|
+
"test:unit": "npx jest --coverage --maxWorkers=$(node ../../scripts/print-allocated-cpus.mjs) --ci"
|
|
36
46
|
}
|
|
37
|
-
}
|
|
47
|
+
}
|
package/dist/styles.d.ts
DELETED
package/dist/styles.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC"}
|