@alveole/components 2.0.0-alpha.27 → 2.0.0-alpha.29

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.
Files changed (84) hide show
  1. package/dist/core/Box/Box.js +1 -1
  2. package/dist/core/Section/Section.stories.d.ts.map +1 -1
  3. package/dist/core/Section/Section.stories.js +13 -3
  4. package/dist/core/Section/Section.stories.sources.d.ts.map +1 -1
  5. package/dist/core/Section/Section.stories.sources.js +2 -2
  6. package/dist/generated/version.d.ts +1 -1
  7. package/dist/generated/version.js +1 -1
  8. package/dist/stories/index.d.ts +3 -0
  9. package/dist/stories/index.d.ts.map +1 -1
  10. package/dist/stories/index.js +3 -0
  11. package/dist/ui/DateRangeInput/Calendrier.d.ts +19 -0
  12. package/dist/ui/DateRangeInput/Calendrier.d.ts.map +1 -0
  13. package/dist/ui/DateRangeInput/Calendrier.js +44 -0
  14. package/dist/ui/DateRangeInput/Calendrier.styles.d.ts +54 -0
  15. package/dist/ui/DateRangeInput/Calendrier.styles.d.ts.map +1 -0
  16. package/dist/ui/DateRangeInput/Calendrier.styles.js +46 -0
  17. package/dist/ui/DateRangeInput/DateRangeInput.d.ts +26 -0
  18. package/dist/ui/DateRangeInput/DateRangeInput.d.ts.map +1 -0
  19. package/dist/ui/DateRangeInput/DateRangeInput.js +36 -0
  20. package/dist/ui/DateRangeInput/DateRangeInput.stories.d.ts +34 -0
  21. package/dist/ui/DateRangeInput/DateRangeInput.stories.d.ts.map +1 -0
  22. package/dist/ui/DateRangeInput/DateRangeInput.stories.js +24 -0
  23. package/dist/ui/DateRangeInput/DateRangeInput.stories.sources.d.ts +8 -0
  24. package/dist/ui/DateRangeInput/DateRangeInput.stories.sources.d.ts.map +1 -0
  25. package/dist/ui/DateRangeInput/DateRangeInput.stories.sources.js +8 -0
  26. package/dist/ui/DateRangeInput/DateRangeInput.styles.d.ts +22 -0
  27. package/dist/ui/DateRangeInput/DateRangeInput.styles.d.ts.map +1 -0
  28. package/dist/ui/DateRangeInput/DateRangeInput.styles.js +18 -0
  29. package/dist/ui/DateRangeInput/index.d.ts +4 -0
  30. package/dist/ui/DateRangeInput/index.d.ts.map +1 -0
  31. package/dist/ui/DateRangeInput/index.js +2 -0
  32. package/dist/ui/DateRangeInput/plage.d.ts +39 -0
  33. package/dist/ui/DateRangeInput/plage.d.ts.map +1 -0
  34. package/dist/ui/DateRangeInput/plage.js +55 -0
  35. package/dist/ui/FilterTimeRange/FilterTimeRange.d.ts +6 -0
  36. package/dist/ui/FilterTimeRange/FilterTimeRange.d.ts.map +1 -0
  37. package/dist/ui/FilterTimeRange/FilterTimeRange.js +9 -0
  38. package/dist/ui/FilterTimeRange/FilterTimeRange.shared.d.ts +24 -0
  39. package/dist/ui/FilterTimeRange/FilterTimeRange.shared.d.ts.map +1 -0
  40. package/dist/ui/FilterTimeRange/FilterTimeRange.shared.js +63 -0
  41. package/dist/ui/FilterTimeRange/FilterTimeRange.stories.d.ts +34 -0
  42. package/dist/ui/FilterTimeRange/FilterTimeRange.stories.d.ts.map +1 -0
  43. package/dist/ui/FilterTimeRange/FilterTimeRange.stories.js +22 -0
  44. package/dist/ui/FilterTimeRange/FilterTimeRange.stories.sources.d.ts +8 -0
  45. package/dist/ui/FilterTimeRange/FilterTimeRange.stories.sources.d.ts.map +1 -0
  46. package/dist/ui/FilterTimeRange/FilterTimeRange.stories.sources.js +8 -0
  47. package/dist/ui/FilterTimeRange/FilterTimeRange.styles.d.ts +22 -0
  48. package/dist/ui/FilterTimeRange/FilterTimeRange.styles.d.ts.map +1 -0
  49. package/dist/ui/FilterTimeRange/FilterTimeRange.styles.js +18 -0
  50. package/dist/ui/FilterTimeRange/FilterTimeRange.web.d.ts +9 -0
  51. package/dist/ui/FilterTimeRange/FilterTimeRange.web.d.ts.map +1 -0
  52. package/dist/ui/FilterTimeRange/FilterTimeRange.web.js +18 -0
  53. package/dist/ui/FilterTimeRange/index.d.ts +2 -0
  54. package/dist/ui/FilterTimeRange/index.d.ts.map +1 -0
  55. package/dist/ui/FilterTimeRange/index.js +1 -0
  56. package/dist/ui/FormControl/textInputStyles.d.ts +0 -4
  57. package/dist/ui/FormControl/textInputStyles.d.ts.map +1 -1
  58. package/dist/ui/FormControl/textInputStyles.js +0 -1
  59. package/dist/ui/LucideIcon/catalogueLucide.d.ts +75 -0
  60. package/dist/ui/LucideIcon/catalogueLucide.d.ts.map +1 -1
  61. package/dist/ui/LucideIcon/vendor/lab.js +1 -1
  62. package/dist/ui/LucideIcon/vendor/lucide.d.ts +1750 -1633
  63. package/dist/ui/LucideIcon/vendor/lucide.js +3 -3
  64. package/dist/ui/Select/Select.web.d.ts.map +1 -1
  65. package/dist/ui/Select/Select.web.js +3 -1
  66. package/dist/ui/TimeRangeInput/TimeRangeInput.d.ts +16 -0
  67. package/dist/ui/TimeRangeInput/TimeRangeInput.d.ts.map +1 -0
  68. package/dist/ui/TimeRangeInput/TimeRangeInput.js +57 -0
  69. package/dist/ui/TimeRangeInput/TimeRangeInput.stories.d.ts +45 -0
  70. package/dist/ui/TimeRangeInput/TimeRangeInput.stories.d.ts.map +1 -0
  71. package/dist/ui/TimeRangeInput/TimeRangeInput.stories.js +29 -0
  72. package/dist/ui/TimeRangeInput/TimeRangeInput.stories.sources.d.ts +8 -0
  73. package/dist/ui/TimeRangeInput/TimeRangeInput.stories.sources.d.ts.map +1 -0
  74. package/dist/ui/TimeRangeInput/TimeRangeInput.stories.sources.js +8 -0
  75. package/dist/ui/TimeRangeInput/TimeRangeInput.styles.d.ts +33 -0
  76. package/dist/ui/TimeRangeInput/TimeRangeInput.styles.d.ts.map +1 -0
  77. package/dist/ui/TimeRangeInput/TimeRangeInput.styles.js +29 -0
  78. package/dist/ui/TimeRangeInput/index.d.ts +2 -0
  79. package/dist/ui/TimeRangeInput/index.d.ts.map +1 -0
  80. package/dist/ui/TimeRangeInput/index.js +1 -0
  81. package/dist/ui/index.d.ts +3 -0
  82. package/dist/ui/index.d.ts.map +1 -1
  83. package/dist/ui/index.js +3 -0
  84. package/package.json +9 -9
@@ -0,0 +1,55 @@
1
+ import { format } from 'date-fns/format';
2
+ import { enUS } from 'date-fns/locale/en-US';
3
+ import { fr } from 'date-fns/locale/fr';
4
+ /** Les douze mois dans la langue du calendrier, la valeur étant le numéro de mois JavaScript (0 à 11). */
5
+ export const optionsDesMois = (locale) => Array.from({ length: 12 }, (_, numero) => {
6
+ const nom = format(new Date(2026, numero, 1), 'MMMM', { locale });
7
+ return { value: String(numero), label: nom.charAt(0).toUpperCase() + nom.slice(1) };
8
+ });
9
+ // shortcut: fenêtre glissante de dix ans de part et d'autre, à ouvrir en props si un usage demande des bornes.
10
+ export const optionsDesAnnees = (annee) => Array.from({ length: 21 }, (_, i) => ({ value: String(annee - 10 + i), label: String(annee - 10 + i) }));
11
+ /** Les jours du mois, précédés d'une case vide par jour de semaine avant le 1er (semaine du lundi). */
12
+ export const joursDuMois = (annee, mois) => {
13
+ const decalage = (new Date(annee, mois, 1).getDay() + 6) % 7;
14
+ const nombre = new Date(annee, mois + 1, 0).getDate();
15
+ return [...Array(decalage).fill(null), ...Array.from({ length: nombre }, (_, i) => i + 1)];
16
+ };
17
+ export const choisirJour = (plage, jour) => {
18
+ if (!plage.debut || plage.fin)
19
+ return { debut: jour };
20
+ return jour < plage.debut ? { debut: jour, fin: plage.debut } : { debut: plage.debut, fin: jour };
21
+ };
22
+ const memeJour = (a, b) => !!a && !!b && a.toDateString() === b.toDateString();
23
+ /** Place d'une case du calendrier dans la plage : la pastille s'arrondit aux bornes et aux bords de semaine. */
24
+ export const formeDuJour = (jour, colonne, plage) => {
25
+ const fin = plage.fin ?? plage.debut;
26
+ const dansPlage = !!plage.debut && !!fin && jour >= plage.debut && jour <= fin;
27
+ return {
28
+ dansPlage,
29
+ debut: dansPlage && (memeJour(jour, plage.debut) || colonne === 0),
30
+ fin: dansPlage && (memeJour(jour, fin) || colonne === 6),
31
+ };
32
+ };
33
+ /** Le jour choisi au calendrier, à l'heure saisie `HH:MM`, lue en UTC ou en heure locale. */
34
+ export const composerDate = (jour, heure, utc) => {
35
+ const [h = 0, m = 0] = heure.split(':').map(Number);
36
+ return utc
37
+ ? new Date(Date.UTC(jour.getFullYear(), jour.getMonth(), jour.getDate(), h, m))
38
+ : new Date(jour.getFullYear(), jour.getMonth(), jour.getDate(), h, m);
39
+ };
40
+ const estDureeRelative = (texte) => /^[1-9]\d*[hdw]$/.test(texte);
41
+ export const dureeRelative = (saisie) => {
42
+ const duree = saisie.trim().toLowerCase();
43
+ return estDureeRelative(duree) ? duree : undefined;
44
+ };
45
+ // date-fns formate en heure locale : on recopie les champs UTC dans une date locale.
46
+ const enUTC = (date) => new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes());
47
+ const formatDate = (date, utc, local) => {
48
+ const texte = local === 'en'
49
+ ? format(utc ? enUTC(date) : date, 'MMM d, h:mm a', { locale: enUS })
50
+ : format(utc ? enUTC(date) : date, 'd MMM HH:mm', { locale: fr });
51
+ return utc ? `${texte} UTC` : texte;
52
+ };
53
+ export const libelleDePlage = (plage, local = 'fr') => plage.type === 'relative'
54
+ ? plage.duree.toUpperCase()
55
+ : `${formatDate(plage.debut, plage.utc, local)}–${formatDate(plage.fin, plage.utc, local)}`;
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { FilterTimeRangeProps } from './FilterTimeRange.shared';
3
+ export type { FilterTimeRangeProps } from './FilterTimeRange.shared';
4
+ /** Sur mobile, le choix s'ouvre en BottomSheet plutôt qu'en Popover, comme Select et FilterDate. */
5
+ export declare const FilterTimeRange: (props: FilterTimeRangeProps) => React.JSX.Element;
6
+ //# sourceMappingURL=FilterTimeRange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTimeRange.d.ts","sourceRoot":"","sources":["../../../src/ui/FilterTimeRange/FilterTimeRange.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAsB,MAAM,0BAA0B,CAAC;AAEpF,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,oGAAoG;AACpG,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,sBAW1D,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { BottomSheet } from '../BottomSheet';
4
+ import { useFilterTimeRange } from './FilterTimeRange.shared';
5
+ /** Sur mobile, le choix s'ouvre en BottomSheet plutôt qu'en Popover, comme Select et FilterDate. */
6
+ export const FilterTimeRange = (props) => {
7
+ const { open, changerOuverture, declencheur, contenu } = useFilterTimeRange(props);
8
+ return (_jsxs(React.Fragment, { children: [declencheur, _jsx(BottomSheet, { fitContent: true, title: props.title, open: open, setOpen: changerOuverture, children: contenu() })] }));
9
+ };
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { PlageDeTemps } from '../DateRangeInput';
3
+ export type FilterTimeRangeProps = {
4
+ title: string;
5
+ local?: 'fr' | 'en';
6
+ value?: PlageDeTemps;
7
+ onChange: (plage: PlageDeTemps) => void;
8
+ };
9
+ type ListeDesPlagesProps = Pick<FilterTimeRangeProps, 'value'> & {
10
+ /** Absent dans un BottomSheet, qui porte déjà le titre. */
11
+ title?: string;
12
+ local: 'fr' | 'en';
13
+ onChoisir: (plage: PlageDeTemps) => void;
14
+ onAbsolue: () => void;
15
+ };
16
+ export declare const ListeDesPlages: ({ title, local, value, onChoisir, onAbsolue }: ListeDesPlagesProps) => React.JSX.Element;
17
+ export declare const useFilterTimeRange: ({ value, local, title, onChange }: FilterTimeRangeProps) => {
18
+ open: boolean;
19
+ changerOuverture: (ouvert: boolean) => void;
20
+ declencheur: React.JSX.Element;
21
+ contenu: (titre?: string) => React.JSX.Element;
22
+ };
23
+ export {};
24
+ //# sourceMappingURL=FilterTimeRange.shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTimeRange.shared.d.ts","sourceRoot":"","sources":["../../../src/ui/FilterTimeRange/FilterTimeRange.shared.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAgD,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAM/F,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CACzC,CAAC;AA0BF,KAAK,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,GAAG;IAC/D,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,+CAA+C,mBAAmB,sBAsDhG,CAAC;AAGF,eAAO,MAAM,kBAAkB,GAAI,mCAA0C,oBAAoB;;+BAI7D,OAAO;;sBAuBhB,MAAM;CAoBhC,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Box } from '../../core/Box';
4
+ import { Typography } from '../../core/Typography';
5
+ import { Button } from '../Button';
6
+ import { dureeRelative, libelleDePlage } from '../DateRangeInput';
7
+ import { TextInput } from '../FormControl';
8
+ import { LucideIcon } from '../LucideIcon';
9
+ import { TimeRangeInput } from '../TimeRangeInput';
10
+ import { useStyles } from './FilterTimeRange.styles';
11
+ const presets = {
12
+ fr: [
13
+ { duree: '1h', label: 'Dernière heure' },
14
+ { duree: '24h', label: 'Dernières 24 heures' },
15
+ { duree: '7d', label: '7 derniers jours' },
16
+ { duree: '14d', label: '14 derniers jours' },
17
+ { duree: '30d', label: '30 derniers jours' },
18
+ { duree: '90d', label: '90 derniers jours' },
19
+ ],
20
+ en: [
21
+ { duree: '1h', label: 'Last hour' },
22
+ { duree: '24h', label: 'Last 24 hours' },
23
+ { duree: '7d', label: 'Last 7 days' },
24
+ { duree: '14d', label: 'Last 14 days' },
25
+ { duree: '30d', label: 'Last 30 days' },
26
+ { duree: '90d', label: 'Last 90 days' },
27
+ ],
28
+ };
29
+ const libelles = (local) => local === 'fr'
30
+ ? { absolue: 'Date absolue', saisie: 'Plage libre : 2h, 4d, 8w…' }
31
+ : { absolue: 'Absolute date', saisie: 'Custom range: 2h, 4d, 8w…' };
32
+ export const ListeDesPlages = ({ title, local, value, onChoisir, onAbsolue }) => {
33
+ const styles = useStyles();
34
+ const mots = libelles(local);
35
+ const [saisie, setSaisie] = React.useState('');
36
+ const validerSaisie = () => {
37
+ const duree = dureeRelative(saisie);
38
+ if (duree)
39
+ onChoisir({ type: 'relative', duree });
40
+ };
41
+ return (_jsxs(Box, { tag: "filter-time-range-container", style: styles.container, children: [title && (_jsx(Typography, { tag: "filter-time-range-titre", style: styles.titre, children: title })), _jsx(TextInput, { value: saisie, placeholder: mots.saisie, onChangeText: setSaisie, onSubmitEditing: validerSaisie, startAdornment: _jsx(Box, { tag: "filter-time-range-adornment", style: styles.adornment, children: _jsx(LucideIcon, { name: "Search", size: "sm" }) }) }), presets[local].map(preset => {
42
+ const choisi = value?.type === 'relative' && value.duree === preset.duree;
43
+ return (_jsx(Button, { title: preset.label, variant: "tertiary", contentAlign: "start", fullWidth: true, selected: choisi, leading: choisi ? 'Check' : undefined, onPress: () => onChoisir({ type: 'relative', duree: preset.duree }) }, preset.duree));
44
+ }), _jsx(Button, { title: mots.absolue, variant: "tertiary", contentAlign: "start", fullWidth: true, selected: value?.type === 'absolue', trailing: "ArrowRight", onPress: onAbsolue })] }));
45
+ };
46
+ // Ouverture, bascule vers la date absolue et choix : identiques dans le Popover web et le BottomSheet natif.
47
+ export const useFilterTimeRange = ({ value, local = 'fr', title, onChange }) => {
48
+ const [open, setOpen] = React.useState(false);
49
+ const [absolue, setAbsolue] = React.useState(false);
50
+ const changerOuverture = (ouvert) => {
51
+ setOpen(ouvert);
52
+ if (!ouvert)
53
+ setAbsolue(false);
54
+ };
55
+ const choisir = (plage) => {
56
+ onChange(plage);
57
+ changerOuverture(false);
58
+ };
59
+ const declencheur = (_jsx(Button, { variant: "secondary", size: "sm", title: value ? libelleDePlage(value, local) : title, trailing: "ChevronDown", selected: !!value, expanded: open, onPress: () => changerOuverture(!open) }));
60
+ // `titre` absent dans le BottomSheet, qui l'affiche lui-même.
61
+ const contenu = (titre) => absolue ? (_jsx(TimeRangeInput, { title: titre, local: local, value: value?.type === 'absolue' ? value : undefined, onApply: choisir, onCancel: () => setAbsolue(false) })) : (_jsx(ListeDesPlages, { title: titre, local: local, value: value, onChoisir: choisir, onAbsolue: () => setAbsolue(true) }));
62
+ return { open, changerOuverture, declencheur, contenu };
63
+ };
@@ -0,0 +1,34 @@
1
+ import React from 'react';
2
+ declare const _default: {
3
+ title: string;
4
+ tags: "ui"[];
5
+ experimental: true;
6
+ description: string;
7
+ component: (props: import("./FilterTimeRange.shared").FilterTimeRangeProps) => React.JSX.Element;
8
+ styleFn: () => {
9
+ container: {
10
+ display: "flex";
11
+ flexDirection: "column";
12
+ gap: string | number;
13
+ padding: string | number;
14
+ width: number;
15
+ };
16
+ titre: {
17
+ color: import("@alveole/theme").ThemeColor;
18
+ paddingBottom: string | number;
19
+ fontSize: 14;
20
+ lineHeight: 20;
21
+ letterSpacing: 0;
22
+ fontFamily: string;
23
+ fontWeight?: import("react-native").TextStyle["fontWeight"];
24
+ };
25
+ adornment: {
26
+ paddingLeft: string | number;
27
+ };
28
+ };
29
+ };
30
+ export default _default;
31
+ export declare const Default: () => React.JSX.Element;
32
+ export declare const EnAnglaisSansValeur: () => React.JSX.Element;
33
+ export * as Sources from './FilterTimeRange.stories.sources';
34
+ //# sourceMappingURL=FilterTimeRange.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTimeRange.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/FilterTimeRange/FilterTimeRange.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAO1B,wBAQkB;AAElB,eAAO,MAAM,OAAO,yBAQnB,CAAC;AAEF,eAAO,MAAM,mBAAmB,yBAQ/B,CAAC;AAEF,OAAO,KAAK,OAAO,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Box } from '../../core/Box';
4
+ import { FilterTimeRange } from './FilterTimeRange';
5
+ import { useStyles } from './FilterTimeRange.styles';
6
+ export default {
7
+ title: 'FilterTimeRange',
8
+ tags: ['ui'],
9
+ experimental: true,
10
+ description: 'Filtre sur une plage de temps : plages relatives prédéfinies, plage libre saisie (`2h`, `4d`, `8w`) ou « Date absolue » qui ouvre le TimeRangeInput.',
11
+ component: FilterTimeRange,
12
+ styleFn: useStyles,
13
+ };
14
+ export const Default = () => {
15
+ const [value, setValue] = React.useState({ type: 'relative', duree: '14d' });
16
+ return (_jsx(Box, { display: "flex", flexDirection: "row", justify: "flex-start", children: _jsx(FilterTimeRange, { title: "Filtrer la p\u00E9riode", value: value, onChange: setValue }) }));
17
+ };
18
+ export const EnAnglaisSansValeur = () => {
19
+ const [value, setValue] = React.useState();
20
+ return (_jsx(Box, { display: "flex", flexDirection: "row", justify: "flex-start", children: _jsx(FilterTimeRange, { title: "Filter Time Range", local: "en", value: value, onChange: setValue }) }));
21
+ };
22
+ export * as Sources from './FilterTimeRange.stories.sources';
@@ -0,0 +1,8 @@
1
+ export declare const Default: () => string;
2
+ export declare const EnAnglaisSansValeur: () => string;
3
+ export declare const storySources: {
4
+ readonly Default: () => string;
5
+ readonly EnAnglaisSansValeur: () => string;
6
+ };
7
+ export type StorySourceName = keyof typeof storySources;
8
+ //# sourceMappingURL=FilterTimeRange.stories.sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTimeRange.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/FilterTimeRange/FilterTimeRange.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,cAA+U,CAAC;AAEpW,eAAO,MAAM,mBAAmB,cAAqU,CAAC;AAEtW,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ // This file is generated. Do not edit manually.
2
+ // Source: src/ui/FilterTimeRange/FilterTimeRange.stories.tsx
3
+ export const Default = () => "export const Default = () => {\n const [value, setValue] = React.useState<PlageDeTemps>({ type: 'relative', duree: '14d' });\n\n return (\n <Box display=\"flex\" flexDirection=\"row\" justify=\"flex-start\">\n <FilterTimeRange title=\"Filtrer la période\" value={value} onChange={setValue} />\n </Box>\n );\n};";
4
+ export const EnAnglaisSansValeur = () => "export const EnAnglaisSansValeur = () => {\n const [value, setValue] = React.useState<PlageDeTemps>();\n\n return (\n <Box display=\"flex\" flexDirection=\"row\" justify=\"flex-start\">\n <FilterTimeRange title=\"Filter Time Range\" local=\"en\" value={value} onChange={setValue} />\n </Box>\n );\n};";
5
+ export const storySources = {
6
+ Default,
7
+ EnAnglaisSansValeur,
8
+ };
@@ -0,0 +1,22 @@
1
+ export declare const useStyles: () => {
2
+ container: {
3
+ display: "flex";
4
+ flexDirection: "column";
5
+ gap: string | number;
6
+ padding: string | number;
7
+ width: number;
8
+ };
9
+ titre: {
10
+ color: import("@alveole/theme").ThemeColor;
11
+ paddingBottom: string | number;
12
+ fontSize: 14;
13
+ lineHeight: 20;
14
+ letterSpacing: 0;
15
+ fontFamily: string;
16
+ fontWeight?: import("react-native").TextStyle["fontWeight"];
17
+ };
18
+ adornment: {
19
+ paddingLeft: string | number;
20
+ };
21
+ };
22
+ //# sourceMappingURL=FilterTimeRange.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTimeRange.styles.d.ts","sourceRoot":"","sources":["../../../src/ui/FilterTimeRange/FilterTimeRange.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;CAgBnB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { makeStyles } from '@alveole/theme';
2
+ export const useStyles = makeStyles(({ spacing, spacingValue, color, text }) => ({
3
+ container: {
4
+ display: 'flex',
5
+ flexDirection: 'column',
6
+ gap: spacing('1V'),
7
+ padding: spacing('1W'),
8
+ width: spacingValue('12W') * 3,
9
+ },
10
+ titre: {
11
+ ...text['Corps de texte'].SM.Medium,
12
+ color: color.light.text['title-grey'],
13
+ paddingBottom: spacing('1V'),
14
+ },
15
+ adornment: {
16
+ paddingLeft: spacing('1W'),
17
+ },
18
+ }));
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { FilterTimeRangeProps } from './FilterTimeRange.shared';
3
+ export type { FilterTimeRangeProps } from './FilterTimeRange.shared';
4
+ /**
5
+ * Filtre sur une plage de temps : plages relatives prédéfinies ou saisies, ou plage absolue au calendrier.
6
+ * Sur un écran mobile, le choix s'ouvre en BottomSheet : un Popover y déborde de l'écran sans défiler.
7
+ */
8
+ export declare const FilterTimeRange: (props: FilterTimeRangeProps) => React.JSX.Element;
9
+ //# sourceMappingURL=FilterTimeRange.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterTimeRange.web.d.ts","sourceRoot":"","sources":["../../../src/ui/FilterTimeRange/FilterTimeRange.web.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,oBAAoB,EAAsB,MAAM,0BAA0B,CAAC;AACpF,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,oBAAoB,sBA0B1D,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useTheme } from '@alveole/theme';
3
+ import React from 'react';
4
+ import { BottomSheet } from '../BottomSheet';
5
+ import { Popover } from '../Popover';
6
+ import { useFilterTimeRange } from './FilterTimeRange.shared';
7
+ /**
8
+ * Filtre sur une plage de temps : plages relatives prédéfinies ou saisies, ou plage absolue au calendrier.
9
+ * Sur un écran mobile, le choix s'ouvre en BottomSheet : un Popover y déborde de l'écran sans défiler.
10
+ */
11
+ export const FilterTimeRange = (props) => {
12
+ const { open, changerOuverture, declencheur, contenu } = useFilterTimeRange(props);
13
+ const { isVariant } = useTheme();
14
+ if (isVariant('mobile')) {
15
+ return (_jsxs(React.Fragment, { children: [declencheur, _jsx(BottomSheet, { fitContent: true, title: props.title, open: open, setOpen: changerOuverture, children: contenu() })] }));
16
+ }
17
+ return (_jsx(Popover, { placement: "bottom-start", scrollable: false, open: open, setOpen: changerOuverture, renderTrigger: () => declencheur, children: contenu(props.title) }));
18
+ };
@@ -0,0 +1,2 @@
1
+ export * from './FilterTimeRange';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/FilterTimeRange/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './FilterTimeRange';
@@ -23,7 +23,6 @@ export type InputFrameState = FieldBorderState & {
23
23
  * deplacerait le texte de tous les champs a ornement. Cf. le test qui fige ce constat.
24
24
  */
25
25
  export declare const inputFrameStyle: (styles: Styles, state: InputFrameState) => {
26
- paddingTop?: number | undefined;
27
26
  paddingLeft?: number | undefined;
28
27
  paddingRight?: number | undefined;
29
28
  borderWidth: number;
@@ -43,7 +42,6 @@ export declare const inputFrameStyle: (styles: Styles, state: InputFrameState) =
43
42
  width: "100%";
44
43
  minHeight: number;
45
44
  } | {
46
- paddingTop?: number | undefined;
47
45
  paddingLeft?: number | undefined;
48
46
  paddingRight?: number | undefined;
49
47
  borderColor: import("@alveole/theme").ThemeColor;
@@ -59,7 +57,6 @@ export declare const inputFrameStyle: (styles: Styles, state: InputFrameState) =
59
57
  width: "100%";
60
58
  minHeight: number;
61
59
  } | {
62
- paddingTop?: number | undefined;
63
60
  paddingLeft?: number | undefined;
64
61
  paddingRight?: number | undefined;
65
62
  borderColor: import("@alveole/theme").ThemeColor;
@@ -75,7 +72,6 @@ export declare const inputFrameStyle: (styles: Styles, state: InputFrameState) =
75
72
  width: "100%";
76
73
  minHeight: number;
77
74
  } | {
78
- paddingTop?: number | undefined;
79
75
  paddingLeft?: number | undefined;
80
76
  paddingRight?: number | undefined;
81
77
  backgroundColor: import("@alveole/theme").ThemeColor | "#FFFFFF";
@@ -1 +1 @@
1
- {"version":3,"file":"textInputStyles.d.ts","sourceRoot":"","sources":["../../../src/ui/FormControl/textInputStyles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAE/C,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,OAAO,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOpE,CAAC;AAEH,6FAA6F;AAC7F,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,2CAIG,IAAI,CAAC,eAAe,EAAE,gBAAgB,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,yBAM1F,CAAC"}
1
+ {"version":3,"file":"textInputStyles.d.ts","sourceRoot":"","sources":["../../../src/ui/FormControl/textInputStyles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAE/C,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,OAAO,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMpE,CAAC;AAEH,6FAA6F;AAC7F,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,2CAIG,IAAI,CAAC,eAAe,EAAE,gBAAgB,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,yBAM1F,CAAC"}
@@ -18,7 +18,6 @@ export const inputFrameStyle = (styles, state) => ({
18
18
  ...fieldBorderState(styles, state),
19
19
  ...(state.endAdornment ? { paddingRight: 0 } : {}),
20
20
  ...(state.startAdornment ? { paddingLeft: 0 } : {}),
21
- ...(state.multiline ? { paddingTop: 8 } : {}),
22
21
  });
23
22
  /** Centrer le texte n'a de sens qu'encadre des deux cotes, sinon il fuit vers l'ornement. */
24
23
  export const inputTextStyle = (styles, { startAdornment, endAdornment, resize, }) => versStyleNatif({