@alveole/components 1.0.0 → 1.1.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/dist/core/A/A.stories.d.ts +1 -0
- package/dist/core/A/A.stories.d.ts.map +1 -1
- package/dist/core/A/A.stories.js +2 -1
- package/dist/core/Box/Box.stories.d.ts +1 -0
- package/dist/core/Box/Box.stories.d.ts.map +1 -1
- package/dist/core/Box/Box.stories.js +2 -1
- package/dist/core/Code/Code.d.ts +5 -0
- package/dist/core/Code/Code.d.ts.map +1 -0
- package/dist/core/Code/Code.js +9 -0
- package/dist/core/Code/Code.stories.d.ts +24 -0
- package/dist/core/Code/Code.stories.d.ts.map +1 -0
- package/dist/core/Code/Code.stories.js +16 -0
- package/dist/core/Code/Code.stories.sources.d.ts +8 -0
- package/dist/core/Code/Code.stories.sources.d.ts.map +1 -0
- package/dist/core/Code/Code.stories.sources.js +8 -0
- package/dist/core/Code/Code.styles.d.ts +13 -0
- package/dist/core/Code/Code.styles.d.ts.map +1 -0
- package/dist/core/Code/Code.styles.js +13 -0
- package/dist/core/Code/index.d.ts +2 -0
- package/dist/core/Code/index.d.ts.map +1 -0
- package/dist/core/Code/index.js +1 -0
- package/dist/core/Form/Form.stories.d.ts +2 -0
- package/dist/core/Form/Form.stories.d.ts.map +1 -1
- package/dist/core/Form/Form.stories.js +4 -3
- package/dist/core/Form/Form.stories.sources.d.ts +1 -0
- package/dist/core/Form/Form.stories.sources.d.ts.map +1 -1
- package/dist/core/Form/Form.stories.sources.js +4 -1
- package/dist/core/Image/Image.stories.d.ts +1 -0
- package/dist/core/Image/Image.stories.d.ts.map +1 -1
- package/dist/core/Image/Image.stories.js +2 -1
- package/dist/core/MarkdownDescription/MarkdownDescription.d.ts +6 -0
- package/dist/core/MarkdownDescription/MarkdownDescription.d.ts.map +1 -0
- package/dist/core/MarkdownDescription/MarkdownDescription.js +59 -0
- package/dist/core/MarkdownDescription/index.d.ts +2 -0
- package/dist/core/MarkdownDescription/index.d.ts.map +1 -0
- package/dist/core/MarkdownDescription/index.js +1 -0
- package/dist/core/Metabase/Metabase.stories.d.ts +1 -1
- package/dist/core/Metabase/Metabase.styles.d.ts +1 -1
- package/dist/core/Page/Page.stories.d.ts +38 -1
- package/dist/core/Page/Page.stories.d.ts.map +1 -1
- package/dist/core/Page/Page.stories.js +38 -11
- package/dist/core/Page/Page.stories.sources.d.ts +3 -0
- package/dist/core/Page/Page.stories.sources.d.ts.map +1 -1
- package/dist/core/Page/Page.stories.sources.js +7 -1
- package/dist/core/Page/PageContentScrollable.d.ts.map +1 -1
- package/dist/core/Page/PageContentScrollable.js +1 -1
- package/dist/core/Page/PageMetaContext.d.ts +13 -0
- package/dist/core/Page/PageMetaContext.d.ts.map +1 -1
- package/dist/core/Page/PageMetaContext.js +13 -0
- package/dist/core/Section/Section.stories.d.ts +5 -5
- package/dist/core/Section/Section.stories.js +1 -1
- package/dist/core/Section/Section.stories.sources.d.ts.map +1 -1
- package/dist/core/Section/Section.stories.sources.js +1 -1
- package/dist/core/Section/Section.styles.d.ts +5 -5
- package/dist/core/ThemeProvider/ThemeProvider.stories.d.ts +64 -0
- package/dist/core/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
- package/dist/core/ThemeProvider/ThemeProvider.stories.js +109 -0
- package/dist/core/ThemeProvider/ThemeProvider.stories.sources.d.ts +9 -0
- package/dist/core/ThemeProvider/ThemeProvider.stories.sources.d.ts.map +1 -0
- package/dist/core/ThemeProvider/ThemeProvider.stories.sources.js +12 -0
- package/dist/core/Version/Version.stories.d.ts +1 -1
- package/dist/core/Version/Version.styles.d.ts +1 -1
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/stories/index.d.ts +6 -0
- package/dist/stories/index.d.ts.map +1 -1
- package/dist/stories/index.js +6 -0
- package/dist/type/Story.d.ts +1 -0
- package/dist/type/Story.d.ts.map +1 -1
- package/dist/ui/Accordion/Accordion.stories.d.ts +17 -17
- package/dist/ui/Accordion/Accordion.styles.d.ts +17 -17
- package/dist/ui/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/dist/ui/Autocomplete/Autocomplete.js +1 -1
- package/dist/ui/Autocomplete/Autocomplete.stories.d.ts +30 -30
- package/dist/ui/Autocomplete/Autocomplete.styles.d.ts +30 -30
- package/dist/ui/Autocomplete/Autocomplete.web.d.ts.map +1 -1
- package/dist/ui/Avatar/Avatar.js +5 -5
- package/dist/ui/Avatar/Avatar.stories.d.ts +1 -1
- package/dist/ui/Avatar/Avatar.styles.d.ts +1 -1
- package/dist/ui/Badge/Badge.d.ts.map +1 -1
- package/dist/ui/Badge/Badge.stories.d.ts +7 -7
- package/dist/ui/Badge/Badge.styles.d.ts +7 -7
- package/dist/ui/Breadcrumbs/Breadcrumbs.stories.d.ts +1 -1
- package/dist/ui/Breadcrumbs/Breadcrumbs.styles.d.ts +1 -1
- package/dist/ui/Button/Button.stories.d.ts +38 -36
- package/dist/ui/Button/Button.stories.d.ts.map +1 -1
- package/dist/ui/Button/Button.stories.js +5 -3
- package/dist/ui/Button/Button.stories.sources.d.ts +1 -0
- package/dist/ui/Button/Button.stories.sources.d.ts.map +1 -1
- package/dist/ui/Button/Button.stories.sources.js +6 -2
- package/dist/ui/Button/Button.styles.d.ts +36 -36
- package/dist/ui/Button/Button.styles.js +2 -2
- package/dist/ui/Card/Card.stories.d.ts +4 -3
- package/dist/ui/Card/Card.stories.d.ts.map +1 -1
- package/dist/ui/Card/Card.stories.js +3 -2
- package/dist/ui/Card/Card.stories.sources.d.ts +1 -0
- package/dist/ui/Card/Card.stories.sources.d.ts.map +1 -1
- package/dist/ui/Card/Card.stories.sources.js +4 -1
- package/dist/ui/Card/Card.styles.d.ts +3 -3
- package/dist/ui/Card/CardActions.styles.d.ts +1 -1
- package/dist/ui/Card/CardHeader.styles.d.ts +1 -1
- package/dist/ui/Card/CardSection.styles.d.ts +3 -3
- package/dist/ui/Checkbox/Checkbox.js +2 -2
- package/dist/ui/Checkbox/Checkbox.stories.d.ts +1 -1
- package/dist/ui/Checkbox/Checkbox.styles.d.ts +1 -1
- package/dist/ui/Checkbox/Checkbox.styles.js +7 -7
- package/dist/ui/Counter/Counter.stories.d.ts +3 -3
- package/dist/ui/Counter/Counter.styles.d.ts +3 -3
- package/dist/ui/DateInput/DateInput.d.ts +36 -0
- package/dist/ui/DateInput/DateInput.d.ts.map +1 -0
- package/dist/ui/DateInput/DateInput.ios.d.ts +23 -0
- package/dist/ui/DateInput/DateInput.ios.d.ts.map +1 -0
- package/dist/ui/DateInput/DateInput.ios.js +45 -0
- package/dist/ui/DateInput/DateInput.js +70 -0
- package/dist/ui/DateInput/DateInput.stories.d.ts +36 -0
- package/dist/ui/DateInput/DateInput.stories.d.ts.map +1 -0
- package/dist/ui/DateInput/DateInput.stories.js +21 -0
- package/dist/ui/DateInput/DateInput.stories.sources.d.ts +8 -0
- package/dist/ui/DateInput/DateInput.stories.sources.d.ts.map +1 -0
- package/dist/ui/DateInput/DateInput.stories.sources.js +8 -0
- package/dist/ui/DateInput/DateInput.styles.d.ts +4 -0
- package/dist/ui/DateInput/DateInput.styles.d.ts.map +1 -0
- package/dist/ui/DateInput/DateInput.styles.js +4 -0
- package/dist/ui/DateInput/DateInput.web.d.ts +23 -0
- package/dist/ui/DateInput/DateInput.web.d.ts.map +1 -0
- package/dist/ui/DateInput/DateInput.web.js +9 -0
- package/dist/ui/DateInput/dateUtils.d.ts +23 -0
- package/dist/ui/DateInput/dateUtils.d.ts.map +1 -0
- package/dist/ui/DateInput/dateUtils.js +47 -0
- package/dist/ui/DateInput/index.d.ts +2 -0
- package/dist/ui/DateInput/index.d.ts.map +1 -0
- package/dist/ui/DateInput/index.js +1 -0
- package/dist/ui/Divider/Divider.stories.d.ts +1 -0
- package/dist/ui/Divider/Divider.stories.d.ts.map +1 -1
- package/dist/ui/Divider/Divider.stories.js +2 -1
- package/dist/ui/DocumentViewer/DocumentViewer.stories.d.ts +12 -12
- package/dist/ui/DocumentViewer/DocumentViewer.styles.d.ts +12 -12
- package/dist/ui/DocumentViewer/DocumentViewer.styles.js +1 -1
- package/dist/ui/DragAndDropFile/DragAndDropFile.stories.d.ts +10 -10
- package/dist/ui/DragAndDropFile/DragAndDropFile.styles.d.ts +10 -10
- package/dist/ui/DragAndDropFile/DragAndDropFile.styles.js +3 -3
- package/dist/ui/DurationInput/DurationInput.d.ts +19 -0
- package/dist/ui/DurationInput/DurationInput.d.ts.map +1 -0
- package/dist/ui/DurationInput/DurationInput.js +22 -0
- package/dist/ui/DurationInput/DurationInput.stories.d.ts +23 -0
- package/dist/ui/DurationInput/DurationInput.stories.d.ts.map +1 -0
- package/dist/ui/DurationInput/DurationInput.stories.js +29 -0
- package/dist/ui/DurationInput/DurationInput.stories.sources.d.ts +8 -0
- package/dist/ui/DurationInput/DurationInput.stories.sources.d.ts.map +1 -0
- package/dist/ui/DurationInput/DurationInput.stories.sources.js +8 -0
- package/dist/ui/DurationInput/index.d.ts +2 -0
- package/dist/ui/DurationInput/index.d.ts.map +1 -0
- package/dist/ui/DurationInput/index.js +1 -0
- package/dist/ui/EmptyState/EmptyState.stories.d.ts +10 -10
- package/dist/ui/EmptyState/EmptyState.styles.d.ts +10 -10
- package/dist/ui/FormControl/FormControl.stories.d.ts +17 -17
- package/dist/ui/FormControl/FormControl.styles.d.ts +17 -17
- package/dist/ui/FormControl/FormControlFileInput.styles.d.ts +5 -5
- package/dist/ui/FormControl/TextInput.d.ts.map +1 -1
- package/dist/ui/Grid/Grid.d.ts +17 -0
- package/dist/ui/Grid/Grid.d.ts.map +1 -0
- package/dist/ui/Grid/Grid.js +40 -0
- package/dist/ui/Grid/Grid.stories.d.ts +24 -0
- package/dist/ui/Grid/Grid.stories.d.ts.map +1 -0
- package/dist/ui/Grid/Grid.stories.js +24 -0
- package/dist/ui/Grid/Grid.stories.sources.d.ts +8 -0
- package/dist/ui/Grid/Grid.stories.sources.d.ts.map +1 -0
- package/dist/ui/Grid/Grid.stories.sources.js +8 -0
- package/dist/ui/Grid/Grid.styles.d.ts +10 -0
- package/dist/ui/Grid/Grid.styles.d.ts.map +1 -0
- package/dist/ui/Grid/Grid.styles.js +10 -0
- package/dist/ui/Grid/index.d.ts +2 -0
- package/dist/ui/Grid/index.d.ts.map +1 -0
- package/dist/ui/Grid/index.js +1 -0
- package/dist/ui/Header/Header.stories.d.ts +6 -6
- package/dist/ui/Header/Header.styles.d.ts +6 -6
- package/dist/ui/InputHeading/InputHeading.stories.d.ts +1 -1
- package/dist/ui/InputHeading/InputHeading.styles.d.ts +1 -1
- package/dist/ui/ListItem/ListItem.stories.d.ts +10 -9
- package/dist/ui/ListItem/ListItem.stories.d.ts.map +1 -1
- package/dist/ui/ListItem/ListItem.stories.js +3 -3
- package/dist/ui/ListItem/ListItem.stories.sources.d.ts +1 -0
- package/dist/ui/ListItem/ListItem.stories.sources.d.ts.map +1 -1
- package/dist/ui/ListItem/ListItem.stories.sources.js +4 -1
- package/dist/ui/ListItem/ListItem.styles.d.ts +9 -9
- package/dist/ui/LucideIcon/LucideIcon.props.d.ts +2 -2
- package/dist/ui/LucideIcon/LucideIcon.stories.d.ts +6 -1
- package/dist/ui/LucideIcon/LucideIcon.stories.d.ts.map +1 -1
- package/dist/ui/LucideIcon/LucideIcon.stories.js +8 -4
- package/dist/ui/LucideIcon/LucideIcon.stories.sources.d.ts +1 -0
- package/dist/ui/LucideIcon/LucideIcon.stories.sources.d.ts.map +1 -1
- package/dist/ui/LucideIcon/LucideIcon.stories.sources.js +4 -1
- package/dist/ui/OtpField/OtpField.d.ts.map +1 -1
- package/dist/ui/OtpField/OtpField.stories.d.ts +2 -2
- package/dist/ui/OtpField/OtpField.styles.d.ts +2 -2
- package/dist/ui/OtpField/OtpField.styles.js +3 -3
- package/dist/ui/PageHeader/PageHeader.stories.d.ts +3 -3
- package/dist/ui/PageHeader/PageHeader.styles.d.ts +3 -3
- package/dist/ui/Popover/Popover.js +2 -2
- package/dist/ui/Popover/Popover.stories.d.ts +15 -15
- package/dist/ui/Popover/Popover.styles.d.ts +15 -15
- package/dist/ui/PriceInput/PriceInput.stories.d.ts +1 -1
- package/dist/ui/PriceInput/PriceInput.styles.d.ts +1 -1
- package/dist/ui/ProgressBar/ProgressBar.stories.d.ts +7 -7
- package/dist/ui/ProgressBar/ProgressBar.styles.d.ts +7 -7
- package/dist/ui/RadioGroup/RadioGroup.stories.d.ts +15 -15
- package/dist/ui/RadioGroup/RadioGroup.styles.d.ts +15 -15
- package/dist/ui/RadioGroup/RadioGroup.styles.js +7 -7
- package/dist/ui/RadioGroup/RadioGroupItem.styles.d.ts +1 -1
- package/dist/ui/ResourceList/ResourceList.stories.d.ts +5 -5
- package/dist/ui/ResourceList/ResourceList.styles.d.ts +5 -5
- package/dist/ui/Select/Select.stories.d.ts +7 -7
- package/dist/ui/Select/Select.styles.d.ts +7 -7
- package/dist/ui/SelectMultiple/SelectMultiple.stories.d.ts +9 -9
- package/dist/ui/SelectMultiple/SelectMultiple.styles.d.ts +9 -9
- package/dist/ui/Sidebar/Sidebar.stories.d.ts +53 -33
- package/dist/ui/Sidebar/Sidebar.stories.d.ts.map +1 -1
- package/dist/ui/Sidebar/Sidebar.stories.js +22 -17
- package/dist/ui/Sidebar/Sidebar.stories.sources.d.ts +1 -0
- package/dist/ui/Sidebar/Sidebar.stories.sources.d.ts.map +1 -1
- package/dist/ui/Sidebar/Sidebar.stories.sources.js +4 -1
- package/dist/ui/Sidebar/Sidebar.styles.d.ts +32 -32
- package/dist/ui/Sidebar/Sidebar.styles.js +3 -3
- package/dist/ui/Signature/Signature.js +2 -2
- package/dist/ui/Signature/Signature.stories.d.ts +1 -1
- package/dist/ui/Signature/Signature.styles.d.ts +1 -1
- package/dist/ui/Switch/Switch.js +2 -2
- package/dist/ui/Switch/Switch.stories.d.ts +3 -3
- package/dist/ui/Switch/Switch.styles.d.ts +3 -3
- package/dist/ui/Tabs/Tabs.stories.d.ts +13 -13
- package/dist/ui/Tabs/Tabs.styles.d.ts +13 -13
- package/dist/ui/Tag/Tag.d.ts.map +1 -1
- package/dist/ui/Tag/Tag.stories.d.ts +7 -7
- package/dist/ui/Tag/Tag.styles.d.ts +7 -7
- package/dist/ui/TimeInput/TimeInput.d.ts +19 -0
- package/dist/ui/TimeInput/TimeInput.d.ts.map +1 -0
- package/dist/ui/TimeInput/TimeInput.js +32 -0
- package/dist/ui/TimeInput/TimeInput.stories.d.ts +25 -0
- package/dist/ui/TimeInput/TimeInput.stories.d.ts.map +1 -0
- package/dist/ui/TimeInput/TimeInput.stories.js +26 -0
- package/dist/ui/TimeInput/TimeInput.stories.sources.d.ts +8 -0
- package/dist/ui/TimeInput/TimeInput.stories.sources.d.ts.map +1 -0
- package/dist/ui/TimeInput/TimeInput.stories.sources.js +8 -0
- package/dist/ui/TimeInput/TimeInput.styles.d.ts +4 -0
- package/dist/ui/TimeInput/TimeInput.styles.d.ts.map +1 -0
- package/dist/ui/TimeInput/TimeInput.styles.js +4 -0
- package/dist/ui/TimeInput/TimeInput.web.d.ts +12 -0
- package/dist/ui/TimeInput/TimeInput.web.d.ts.map +1 -0
- package/dist/ui/TimeInput/TimeInput.web.js +9 -0
- package/dist/ui/TimeInput/index.d.ts +2 -0
- package/dist/ui/TimeInput/index.d.ts.map +1 -0
- package/dist/ui/TimeInput/index.js +1 -0
- package/dist/ui/Toast/Toast.stories.d.ts +36 -12
- package/dist/ui/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/ui/Toast/Toast.stories.js +27 -22
- package/dist/ui/Toast/Toast.stories.sources.d.ts +1 -0
- package/dist/ui/Toast/Toast.stories.sources.d.ts.map +1 -1
- package/dist/ui/Toast/Toast.stories.sources.js +4 -1
- package/dist/ui/Toast/Toast.styles.d.ts +12 -12
- package/dist/ui/ToolbarBottomNav/ToolbarBottomNav.stories.d.ts +18 -1
- package/dist/ui/ToolbarBottomNav/ToolbarBottomNav.stories.d.ts.map +1 -1
- package/dist/ui/ToolbarBottomNav/ToolbarBottomNav.stories.js +19 -8
- package/dist/ui/ToolbarBottomNav/ToolbarBottomNav.stories.sources.d.ts +1 -0
- package/dist/ui/ToolbarBottomNav/ToolbarBottomNav.stories.sources.d.ts.map +1 -1
- package/dist/ui/ToolbarBottomNav/ToolbarBottomNav.stories.sources.js +4 -1
- package/dist/ui/ToolbarTop/ToolbarTop.stories.d.ts +14 -10
- package/dist/ui/ToolbarTop/ToolbarTop.stories.d.ts.map +1 -1
- package/dist/ui/ToolbarTop/ToolbarTop.stories.js +5 -2
- package/dist/ui/ToolbarTop/ToolbarTop.stories.sources.d.ts +1 -0
- package/dist/ui/ToolbarTop/ToolbarTop.stories.sources.d.ts.map +1 -1
- package/dist/ui/ToolbarTop/ToolbarTop.stories.sources.js +4 -1
- package/dist/ui/ToolbarTop/ToolbarTop.styles.d.ts +10 -10
- package/dist/ui/index.d.ts +4 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +4 -0
- package/package.json +12 -6
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box } from '../../core';
|
|
3
|
+
import { Grid } from '../Grid';
|
|
4
|
+
import { TimeInput } from './TimeInput';
|
|
5
|
+
import { useStyles } from './TimeInput.styles';
|
|
6
|
+
export default {
|
|
7
|
+
title: 'TimeInput',
|
|
8
|
+
tags: ['ui'],
|
|
9
|
+
experimental: false,
|
|
10
|
+
shortDescription: "Saisie d'une heure d'horloge au format HH:MM (ex. 09:30 pour 9h30 du matin).",
|
|
11
|
+
description: `Saisie d'une **heure d'horloge** au format HH:MM (ex. \`09:30\` pour 9h30 du matin).
|
|
12
|
+
|
|
13
|
+
À ne pas confondre avec **DurationInput**, qui représente une **durée écoulée** (ex. \`06:15\` pour 6 heures 15 minutes).
|
|
14
|
+
|
|
15
|
+
| | TimeInput |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Sémantique | Heure du jour |
|
|
18
|
+
| Exemple | \`09:30\` (9h30 le matin) |
|
|
19
|
+
| Heures valides | 00–23 |
|
|
20
|
+
| HTML web | \`<input type="time">\` |`,
|
|
21
|
+
component: TimeInput,
|
|
22
|
+
styleFn: useStyles,
|
|
23
|
+
};
|
|
24
|
+
export const Default = () => (_jsx(Box, { width: "100%", p: 8, children: _jsxs(Grid, { gap: 8, children: [_jsx(Grid.Column, { size: { mobile: 12, desktop: 4 }, children: _jsx(TimeInput, { label: "Heure" }) }), _jsx(Grid.Column, { size: { mobile: 12, desktop: 4 }, children: _jsx(TimeInput, { label: "Heure", value: "09:30" }) }), _jsx(Grid.Column, { size: { mobile: 12, desktop: 4 }, children: _jsx(TimeInput, { label: "Heure", value: "14:00", hint: "Heure de d\u00E9but de mission" }) })] }) }));
|
|
25
|
+
export const States = () => (_jsx(Box, { width: "100%", p: 8, children: _jsxs(Grid, { gap: 8, children: [_jsx(Grid.Column, { size: { mobile: 12, desktop: 4 }, children: _jsx(TimeInput, { label: "Erreur", value: "25:70", error: "Heure invalide (00:00\u201323:59)" }) }), _jsx(Grid.Column, { size: { mobile: 12, desktop: 4 }, children: _jsx(TimeInput, { label: "Succ\u00E8s", value: "09:30", success: "Enregistr\u00E9" }) }), _jsx(Grid.Column, { size: { mobile: 12, desktop: 4 }, children: _jsx(TimeInput, { label: "D\u00E9sactiv\u00E9", value: "09:30", disabled: true }) })] }) }));
|
|
26
|
+
export * as Sources from './TimeInput.stories.sources';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const Default: () => string;
|
|
2
|
+
export declare const States: () => string;
|
|
3
|
+
export declare const storySources: {
|
|
4
|
+
readonly Default: () => string;
|
|
5
|
+
readonly States: () => string;
|
|
6
|
+
};
|
|
7
|
+
export type StorySourceName = keyof typeof storySources;
|
|
8
|
+
//# sourceMappingURL=TimeInput.stories.sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeInput.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/TimeInput/TimeInput.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,cAAqhB,CAAC;AAE1iB,eAAO,MAAM,MAAM,cAA8kB,CAAC;AAElmB,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/TimeInput/TimeInput.stories.tsx
|
|
3
|
+
export const Default = () => "export const Default = () => (\n <Box width=\"100%\" p={8}>\n <Grid gap={8}>\n <Grid.Column size={{ mobile: 12, desktop: 4 }}>\n <TimeInput label=\"Heure\" />\n </Grid.Column>\n <Grid.Column size={{ mobile: 12, desktop: 4 }}>\n <TimeInput label=\"Heure\" value=\"09:30\" />\n </Grid.Column>\n <Grid.Column size={{ mobile: 12, desktop: 4 }}>\n <TimeInput label=\"Heure\" value=\"14:00\" hint=\"Heure de début de mission\" />\n </Grid.Column>\n </Grid>\n </Box>\n);";
|
|
4
|
+
export const States = () => "export const States = () => (\n <Box width=\"100%\" p={8}>\n <Grid gap={8}>\n <Grid.Column size={{ mobile: 12, desktop: 4 }}>\n <TimeInput label=\"Erreur\" value=\"25:70\" error=\"Heure invalide (00:00–23:59)\" />\n </Grid.Column>\n <Grid.Column size={{ mobile: 12, desktop: 4 }}>\n <TimeInput label=\"Succès\" value=\"09:30\" success=\"Enregistré\" />\n </Grid.Column>\n <Grid.Column size={{ mobile: 12, desktop: 4 }}>\n <TimeInput label=\"Désactivé\" value=\"09:30\" disabled />\n </Grid.Column>\n </Grid>\n </Box>\n);";
|
|
5
|
+
export const storySources = {
|
|
6
|
+
Default,
|
|
7
|
+
States,
|
|
8
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeInput.styles.d.ts","sourceRoot":"","sources":["../../../src/ui/TimeInput/TimeInput.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;CAEnB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const TimeInput: React.ForwardRefExoticComponent<{
|
|
3
|
+
label: string;
|
|
4
|
+
labelRight?: React.ReactNode;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
} & import("@alveole/components").FormControlCaptionProps & import("@alveole/components").FormControlHintProps & {
|
|
7
|
+
value?: string;
|
|
8
|
+
onChange?: (value: string) => void;
|
|
9
|
+
onBlur?: () => void;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
} & React.RefAttributes<HTMLInputElement>>;
|
|
12
|
+
//# sourceMappingURL=TimeInput.web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeInput.web.d.ts","sourceRoot":"","sources":["../../../src/ui/TimeInput/TimeInput.web.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,eAAO,MAAM,SAAS;;;;;;;;;0CAmBpB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FormControl, FormControlCaption, FormControlDateInput, FormControlHint, FormControlLabel, InputHeading, } from '@alveole/components';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { useStyles } from './TimeInput.styles';
|
|
5
|
+
export const TimeInput = React.forwardRef(function TimeInput(props, ref) {
|
|
6
|
+
const { label, labelRight, hint, disabled, error, success } = props;
|
|
7
|
+
const styles = useStyles();
|
|
8
|
+
return (_jsxs(FormControl, { style: styles.timeInput, children: [_jsxs(InputHeading, { children: [label && (_jsx(FormControlLabel, { labelRight: labelRight, label: label, disabled: disabled, error: error, success: success })), hint && _jsx(FormControlHint, { hint: hint, disabled: disabled })] }), _jsx(FormControlDateInput, { ref: ref, ...props, type: "time" }), (error || success) && _jsx(FormControlCaption, { error: error, success: success })] }));
|
|
9
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/TimeInput/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './TimeInput';
|
|
@@ -5,15 +5,16 @@ declare const _default: {
|
|
|
5
5
|
experimental: false;
|
|
6
6
|
figmaURL: string;
|
|
7
7
|
description: string;
|
|
8
|
+
shortDescription: string;
|
|
8
9
|
component: typeof Toast;
|
|
9
10
|
styleFn: () => {
|
|
10
11
|
container: {
|
|
11
12
|
backgroundColor: string;
|
|
12
13
|
width: number;
|
|
13
|
-
borderRadius: import("@alveole/theme
|
|
14
|
+
borderRadius: import("@alveole/theme").Radius;
|
|
14
15
|
display: "flex";
|
|
15
16
|
flexDirection: "row";
|
|
16
|
-
gap:
|
|
17
|
+
gap: string | number;
|
|
17
18
|
overflow: "hidden";
|
|
18
19
|
padding: number;
|
|
19
20
|
} | {
|
|
@@ -27,20 +28,20 @@ declare const _default: {
|
|
|
27
28
|
elevation: number;
|
|
28
29
|
backgroundColor: string;
|
|
29
30
|
width: number;
|
|
30
|
-
borderRadius: import("@alveole/theme
|
|
31
|
+
borderRadius: import("@alveole/theme").Radius;
|
|
31
32
|
display: "flex";
|
|
32
33
|
flexDirection: "row";
|
|
33
|
-
gap:
|
|
34
|
+
gap: string | number;
|
|
34
35
|
overflow: "hidden";
|
|
35
36
|
padding: number;
|
|
36
37
|
} | {
|
|
37
38
|
boxShadow: string;
|
|
38
39
|
backgroundColor: string;
|
|
39
40
|
width: number;
|
|
40
|
-
borderRadius: import("@alveole/theme
|
|
41
|
+
borderRadius: import("@alveole/theme").Radius;
|
|
41
42
|
display: "flex";
|
|
42
43
|
flexDirection: "row";
|
|
43
|
-
gap:
|
|
44
|
+
gap: string | number;
|
|
44
45
|
overflow: "hidden";
|
|
45
46
|
padding: number;
|
|
46
47
|
};
|
|
@@ -48,8 +49,8 @@ declare const _default: {
|
|
|
48
49
|
display: "flex";
|
|
49
50
|
flex: number;
|
|
50
51
|
flexDirection: "column";
|
|
51
|
-
gap:
|
|
52
|
-
padding:
|
|
52
|
+
gap: string | number;
|
|
53
|
+
padding: string | number;
|
|
53
54
|
};
|
|
54
55
|
titleContainer: {
|
|
55
56
|
display: "flex";
|
|
@@ -70,10 +71,10 @@ declare const _default: {
|
|
|
70
71
|
alignSelf: "stretch";
|
|
71
72
|
justifyContent: "flex-start";
|
|
72
73
|
alignItems: "center";
|
|
73
|
-
paddingLeft:
|
|
74
|
-
paddingRight:
|
|
75
|
-
paddingTop:
|
|
76
|
-
paddingBottom:
|
|
74
|
+
paddingLeft: string | number;
|
|
75
|
+
paddingRight: string | number;
|
|
76
|
+
paddingTop: string | number;
|
|
77
|
+
paddingBottom: string | number;
|
|
77
78
|
};
|
|
78
79
|
iconBlockDefault: {
|
|
79
80
|
backgroundColor: string;
|
|
@@ -101,6 +102,29 @@ declare const _default: {
|
|
|
101
102
|
};
|
|
102
103
|
};
|
|
103
104
|
export default _default;
|
|
105
|
+
/**
|
|
106
|
+
* Le fichier `_layout.tsx` doit inclure la balise `<Toasts>` pour fonctionner.
|
|
107
|
+
*
|
|
108
|
+
* ```tsx
|
|
109
|
+
* import { Toasts } from '@alveole/components';
|
|
110
|
+
* import { ThemeProvider } from '@alveole/theme';
|
|
111
|
+
* import { Stack } from 'expo-router';
|
|
112
|
+
* import { TamaguiProvider } from 'tamagui';
|
|
113
|
+
* import { tamaguiConfig } from '../tamagui.config';
|
|
114
|
+
*
|
|
115
|
+
* export default function RootLayout() {
|
|
116
|
+
* return (
|
|
117
|
+
* <TamaguiProvider config={tamaguiConfig} defaultTheme="light">
|
|
118
|
+
* <ThemeProvider loader={false}>
|
|
119
|
+
* <Toasts>
|
|
120
|
+
* <Stack screenOptions={{ headerShown: false }} />
|
|
121
|
+
* </Toasts>
|
|
122
|
+
* </ThemeProvider>
|
|
123
|
+
* </TamaguiProvider>
|
|
124
|
+
* );
|
|
125
|
+
* }
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
104
128
|
export declare const All: () => import("react").JSX.Element;
|
|
105
129
|
export declare const PreviewInfo: () => import("react").JSX.Element;
|
|
106
130
|
export declare const PreviewSuccess: () => import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/Toast/Toast.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAa,MAAM,SAAS,CAAC
|
|
1
|
+
{"version":3,"file":"Toast.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/Toast/Toast.stories.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAa,MAAM,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAM3C,wBASkB;AAElB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,GAAG,mCA+Bf,CAAC;AAEF,eAAO,MAAM,WAAW,mCAEvB,CAAC;AAEF,eAAO,MAAM,cAAc,mCAE1B,CAAC;AAEF,eAAO,MAAM,YAAY,mCAExB,CAAC;AAEF,eAAO,MAAM,cAAc,mCAE1B,CAAC;AAEF,eAAO,MAAM,cAAc,mCAE1B,CAAC;AAEF,eAAO,MAAM,0BAA0B,mCAA2E,CAAC;AAEnH,eAAO,MAAM,6BAA6B,mCAEzC,CAAC;AAEF,eAAO,MAAM,WAAW,mCAOvB,CAAC;AAEF,OAAO,KAAK,OAAO,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Button } from '@alveole/components';
|
|
3
|
-
import { Box
|
|
3
|
+
import { Box } from '../../core';
|
|
4
4
|
import { Toast, ToastView } from './Toast';
|
|
5
5
|
import { useStyles } from './Toast.styles';
|
|
6
6
|
import { defaultDuration } from './ToastBridge';
|
|
@@ -11,10 +11,34 @@ export default {
|
|
|
11
11
|
tags: ['ui'],
|
|
12
12
|
experimental: false,
|
|
13
13
|
figmaURL: 'https://www.figma.com/design/xJz8Z6vfrnZPKTtRbuT2W8/Alveole---Composants?node-id=2084-1372',
|
|
14
|
-
description: `Toaster Tamagui. Contient le provider global et le hook useToast
|
|
14
|
+
description: `Toaster Tamagui. Contient le provider global et le hook \`useToast\`. Par défaut un toast reste affiché pendant ${defaultDuration / 1000} secondes`,
|
|
15
|
+
shortDescription: 'Toaster Tamagui. Fournit le provider global et le hook useToast.',
|
|
15
16
|
component: Toast,
|
|
16
17
|
styleFn: useStyles,
|
|
17
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* Le fichier `_layout.tsx` doit inclure la balise `<Toasts>` pour fonctionner.
|
|
21
|
+
*
|
|
22
|
+
* ```tsx
|
|
23
|
+
* import { Toasts } from '@alveole/components';
|
|
24
|
+
* import { ThemeProvider } from '@alveole/theme';
|
|
25
|
+
* import { Stack } from 'expo-router';
|
|
26
|
+
* import { TamaguiProvider } from 'tamagui';
|
|
27
|
+
* import { tamaguiConfig } from '../tamagui.config';
|
|
28
|
+
*
|
|
29
|
+
* export default function RootLayout() {
|
|
30
|
+
* return (
|
|
31
|
+
* <TamaguiProvider config={tamaguiConfig} defaultTheme="light">
|
|
32
|
+
* <ThemeProvider loader={false}>
|
|
33
|
+
* <Toasts>
|
|
34
|
+
* <Stack screenOptions={{ headerShown: false }} />
|
|
35
|
+
* </Toasts>
|
|
36
|
+
* </ThemeProvider>
|
|
37
|
+
* </TamaguiProvider>
|
|
38
|
+
* );
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
18
42
|
export const All = () => {
|
|
19
43
|
const toast = useToast();
|
|
20
44
|
const defaultToast = () => toast.present('Default', 'Message');
|
|
@@ -28,26 +52,7 @@ export const All = () => {
|
|
|
28
52
|
const withoutMessageToast = () => toast.present('Sans message');
|
|
29
53
|
const withoutMessageToastError = () => toast.present('Sans message', undefined, { variant: 'error' });
|
|
30
54
|
const withCustomIcon = () => toast.present('Avec icon custom', undefined, { icon: 'Worm' });
|
|
31
|
-
return (
|
|
32
|
-
import { Toasts } from '@alveole/components';
|
|
33
|
-
import { ThemeProvider } from '@alveole/theme';
|
|
34
|
-
import { Stack } from 'expo-router';
|
|
35
|
-
import React from 'react';
|
|
36
|
-
import { TamaguiProvider } from 'tamagui';
|
|
37
|
-
import { tamaguiConfig } from '../tamagui.config';
|
|
38
|
-
|
|
39
|
-
export default function RootLayout() {
|
|
40
|
-
return (
|
|
41
|
-
<TamaguiProvider config={tamaguiConfig} defaultTheme="light">
|
|
42
|
-
<ThemeProvider loader={false}>
|
|
43
|
-
<Toasts>
|
|
44
|
-
<Stack screenOptions={{ headerShown: false }} />
|
|
45
|
-
</Toasts>
|
|
46
|
-
</ThemeProvider>
|
|
47
|
-
</TamaguiProvider>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
` })] })] }));
|
|
55
|
+
return (_jsx(Box, { display: "flex", flexDirection: "column", gap: 8, children: _jsxs(Box, { display: "flex", flexDirection: "row", gap: 4, flexWrap: "wrap", children: [_jsx(Button, { title: "Default toast", variant: "secondary", onPress: defaultToast }), _jsx(Button, { title: "Success toast", variant: "secondary", onPress: successToast }), _jsx(Button, { title: "Error toast", variant: "secondary", onPress: errorToast }), _jsx(Button, { title: "Info toast", variant: "secondary", onPress: infoToast }), _jsx(Button, { title: "Warning toast", variant: "secondary", onPress: warningToast }), _jsx(Button, { title: "Message long", variant: "secondary", onPress: infoToastMultiLine }), _jsx(Button, { title: "Without message toast", variant: "secondary", onPress: withoutMessageToast }), _jsx(Button, { title: "Without message toast error", variant: "secondary", onPress: withoutMessageToastError }), _jsx(Button, { title: "WithCustomIcon", variant: "secondary", onPress: withCustomIcon })] }) }));
|
|
51
56
|
};
|
|
52
57
|
export const PreviewInfo = () => (_jsx(ToastView, { variant: "info", title: "Information", message: "Description additionnelle du toast." }));
|
|
53
58
|
export const PreviewSuccess = () => (_jsx(ToastView, { variant: "success", title: "Succ\u00E8s", message: "Description additionnelle du toast." }));
|
|
@@ -19,4 +19,5 @@ export declare const storySources: {
|
|
|
19
19
|
readonly ToastsTypes: () => string;
|
|
20
20
|
};
|
|
21
21
|
export type StorySourceName = keyof typeof storySources;
|
|
22
|
+
export declare const storyDescriptions: Partial<Record<StorySourceName, string>>;
|
|
22
23
|
//# sourceMappingURL=Toast.stories.sources.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/Toast/Toast.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"Toast.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/Toast/Toast.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,GAAG,cAAm8D,CAAC;AAEp9D,eAAO,MAAM,WAAW,cAAyJ,CAAC;AAElL,eAAO,MAAM,cAAc,cAA0J,CAAC;AAEtL,eAAO,MAAM,YAAY,cAAsJ,CAAC;AAEhL,eAAO,MAAM,cAAc,cAA2J,CAAC;AAEvL,eAAO,MAAM,cAAc,cAA6J,CAAC;AAEzL,eAAO,MAAM,0BAA0B,cAAkI,CAAC;AAE1K,eAAO,MAAM,6BAA6B,cAAgJ,CAAC;AAE3L,eAAO,MAAM,WAAW,cAA0Q,CAAC;AAEnS,eAAO,MAAM,YAAY;;;;;;;;;;CAUf,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,YAAY,CAAC;AAExD,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAEtE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// This file is generated. Do not edit manually.
|
|
2
2
|
// Source: src/ui/Toast/Toast.stories.tsx
|
|
3
|
-
export const All = () => "export const All = () => {\n const toast = useToast();\n\n const defaultToast = () => toast.present('Default', 'Message');\n const successToast = () => toast.present('Success', 'Message', { variant: 'success' });\n const errorToast = () => toast.present('Error', 'Message beaucoup plus long', { variant: 'error' });\n const infoToast = () => toast.present('Information', 'Message', { variant: 'info' });\n const infoToastMultiLine = () =>\n toast.present('Information', 'Message beaucoup plus long avec retour à la ligne.\\nDeuxième ligne', {\n variant: 'info',\n });\n const warningToast = () => toast.present('Attention', 'Message', { variant: 'warning' });\n const withoutMessageToast = () => toast.present('Sans message');\n const withoutMessageToastError = () => toast.present('Sans message', undefined, { variant: 'error' });\n const withCustomIcon = () => toast.present('Avec icon custom', undefined, { icon: 'Worm' });\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" gap={8}>\n <Box display=\"flex\" flexDirection=\"row\" gap={4} flexWrap=\"wrap\">\n <Button title=\"Default toast\" variant=\"secondary\" onPress={defaultToast} />\n <Button title=\"Success toast\" variant=\"secondary\" onPress={successToast} />\n <Button title=\"Error toast\" variant=\"secondary\" onPress={errorToast} />\n <Button title=\"Info toast\" variant=\"secondary\" onPress={infoToast} />\n <Button title=\"Warning toast\" variant=\"secondary\" onPress={warningToast} />\n <Button title=\"Message long\" variant=\"secondary\" onPress={infoToastMultiLine} />\n <Button title=\"Without message toast\" variant=\"secondary\" onPress={withoutMessageToast} />\n <Button title=\"Without message toast error\" variant=\"secondary\" onPress={withoutMessageToastError} />\n <Button title=\"WithCustomIcon\" variant=\"secondary\" onPress={withCustomIcon} />\n </Box>\n
|
|
3
|
+
export const All = () => "export const All = () => {\n const toast = useToast();\n\n const defaultToast = () => toast.present('Default', 'Message');\n const successToast = () => toast.present('Success', 'Message', { variant: 'success' });\n const errorToast = () => toast.present('Error', 'Message beaucoup plus long', { variant: 'error' });\n const infoToast = () => toast.present('Information', 'Message', { variant: 'info' });\n const infoToastMultiLine = () =>\n toast.present('Information', 'Message beaucoup plus long avec retour à la ligne.\\nDeuxième ligne', {\n variant: 'info',\n });\n const warningToast = () => toast.present('Attention', 'Message', { variant: 'warning' });\n const withoutMessageToast = () => toast.present('Sans message');\n const withoutMessageToastError = () => toast.present('Sans message', undefined, { variant: 'error' });\n const withCustomIcon = () => toast.present('Avec icon custom', undefined, { icon: 'Worm' });\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" gap={8}>\n <Box display=\"flex\" flexDirection=\"row\" gap={4} flexWrap=\"wrap\">\n <Button title=\"Default toast\" variant=\"secondary\" onPress={defaultToast} />\n <Button title=\"Success toast\" variant=\"secondary\" onPress={successToast} />\n <Button title=\"Error toast\" variant=\"secondary\" onPress={errorToast} />\n <Button title=\"Info toast\" variant=\"secondary\" onPress={infoToast} />\n <Button title=\"Warning toast\" variant=\"secondary\" onPress={warningToast} />\n <Button title=\"Message long\" variant=\"secondary\" onPress={infoToastMultiLine} />\n <Button title=\"Without message toast\" variant=\"secondary\" onPress={withoutMessageToast} />\n <Button title=\"Without message toast error\" variant=\"secondary\" onPress={withoutMessageToastError} />\n <Button title=\"WithCustomIcon\" variant=\"secondary\" onPress={withCustomIcon} />\n </Box>\n </Box>\n );\n};";
|
|
4
4
|
export const PreviewInfo = () => "export const PreviewInfo = () => (\n <ToastView variant=\"info\" title=\"Information\" message=\"Description additionnelle du toast.\" />\n);";
|
|
5
5
|
export const PreviewSuccess = () => "export const PreviewSuccess = () => (\n <ToastView variant=\"success\" title=\"Succès\" message=\"Description additionnelle du toast.\" />\n);";
|
|
6
6
|
export const PreviewError = () => "export const PreviewError = () => (\n <ToastView variant=\"error\" title=\"Erreur\" message=\"Description additionnelle du toast.\" />\n);";
|
|
@@ -20,3 +20,6 @@ export const storySources = {
|
|
|
20
20
|
PreviewSuccessSansDescription,
|
|
21
21
|
ToastsTypes,
|
|
22
22
|
};
|
|
23
|
+
export const storyDescriptions = {
|
|
24
|
+
All: "Le fichier `_layout.tsx` doit inclure la balise `<Toasts>` pour fonctionner.\n\n```tsx\nimport { Toasts } from '@alveole/components';\nimport { ThemeProvider } from '@alveole/theme';\nimport { Stack } from 'expo-router';\nimport { TamaguiProvider } from 'tamagui';\nimport { tamaguiConfig } from '../tamagui.config';\n\nexport default function RootLayout() {\n return (\n <TamaguiProvider config={tamaguiConfig} defaultTheme=\"light\">\n <ThemeProvider loader={false}>\n <Toasts>\n <Stack screenOptions={{ headerShown: false }} />\n </Toasts>\n </ThemeProvider>\n </TamaguiProvider>\n );\n}\n```",
|
|
25
|
+
};
|
|
@@ -2,10 +2,10 @@ export declare const useStyles: () => {
|
|
|
2
2
|
container: {
|
|
3
3
|
backgroundColor: string;
|
|
4
4
|
width: number;
|
|
5
|
-
borderRadius: import("@alveole/theme
|
|
5
|
+
borderRadius: import("@alveole/theme").Radius;
|
|
6
6
|
display: "flex";
|
|
7
7
|
flexDirection: "row";
|
|
8
|
-
gap:
|
|
8
|
+
gap: string | number;
|
|
9
9
|
overflow: "hidden";
|
|
10
10
|
padding: number;
|
|
11
11
|
} | {
|
|
@@ -19,20 +19,20 @@ export declare const useStyles: () => {
|
|
|
19
19
|
elevation: number;
|
|
20
20
|
backgroundColor: string;
|
|
21
21
|
width: number;
|
|
22
|
-
borderRadius: import("@alveole/theme
|
|
22
|
+
borderRadius: import("@alveole/theme").Radius;
|
|
23
23
|
display: "flex";
|
|
24
24
|
flexDirection: "row";
|
|
25
|
-
gap:
|
|
25
|
+
gap: string | number;
|
|
26
26
|
overflow: "hidden";
|
|
27
27
|
padding: number;
|
|
28
28
|
} | {
|
|
29
29
|
boxShadow: string;
|
|
30
30
|
backgroundColor: string;
|
|
31
31
|
width: number;
|
|
32
|
-
borderRadius: import("@alveole/theme
|
|
32
|
+
borderRadius: import("@alveole/theme").Radius;
|
|
33
33
|
display: "flex";
|
|
34
34
|
flexDirection: "row";
|
|
35
|
-
gap:
|
|
35
|
+
gap: string | number;
|
|
36
36
|
overflow: "hidden";
|
|
37
37
|
padding: number;
|
|
38
38
|
};
|
|
@@ -40,8 +40,8 @@ export declare const useStyles: () => {
|
|
|
40
40
|
display: "flex";
|
|
41
41
|
flex: number;
|
|
42
42
|
flexDirection: "column";
|
|
43
|
-
gap:
|
|
44
|
-
padding:
|
|
43
|
+
gap: string | number;
|
|
44
|
+
padding: string | number;
|
|
45
45
|
};
|
|
46
46
|
titleContainer: {
|
|
47
47
|
display: "flex";
|
|
@@ -62,10 +62,10 @@ export declare const useStyles: () => {
|
|
|
62
62
|
alignSelf: "stretch";
|
|
63
63
|
justifyContent: "flex-start";
|
|
64
64
|
alignItems: "center";
|
|
65
|
-
paddingLeft:
|
|
66
|
-
paddingRight:
|
|
67
|
-
paddingTop:
|
|
68
|
-
paddingBottom:
|
|
65
|
+
paddingLeft: string | number;
|
|
66
|
+
paddingRight: string | number;
|
|
67
|
+
paddingTop: string | number;
|
|
68
|
+
paddingBottom: string | number;
|
|
69
69
|
};
|
|
70
70
|
iconBlockDefault: {
|
|
71
71
|
backgroundColor: string;
|
|
@@ -3,6 +3,7 @@ declare const _default: {
|
|
|
3
3
|
tags: "ui"[];
|
|
4
4
|
experimental: false;
|
|
5
5
|
description: string;
|
|
6
|
+
shortDescription: string;
|
|
6
7
|
figmaURL: string;
|
|
7
8
|
component: any;
|
|
8
9
|
styleFn: () => {
|
|
@@ -30,6 +31,22 @@ declare const _default: {
|
|
|
30
31
|
};
|
|
31
32
|
};
|
|
32
33
|
export default _default;
|
|
33
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Exemple d'intégration dans un fichier `_layout.tsx`.
|
|
36
|
+
*
|
|
37
|
+
* ```tsx
|
|
38
|
+
* <ToolbarBottomNav>
|
|
39
|
+
* <ToolbarBottomNav.Screen
|
|
40
|
+
* name="home"
|
|
41
|
+
* options={{ tabBarLabel: 'Home', tabBarIcon: ToolbarBottomNav.Icon('home') }}
|
|
42
|
+
* />
|
|
43
|
+
* <ToolbarBottomNav.Screen
|
|
44
|
+
* name="list"
|
|
45
|
+
* options={{ tabBarLabel: 'Liste', tabBarIcon: ToolbarBottomNav.Icon('all-inbox') }}
|
|
46
|
+
* />
|
|
47
|
+
* </ToolbarBottomNav>
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare const ExampleUsage: () => null;
|
|
34
51
|
export * as Sources from './ToolbarBottomNav.stories.sources';
|
|
35
52
|
//# sourceMappingURL=ToolbarBottomNav.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarBottomNav.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/ToolbarBottomNav/ToolbarBottomNav.stories.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ToolbarBottomNav.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/ToolbarBottomNav/ToolbarBottomNav.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wBAUkB;AAElB;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,YAAY,YAAa,CAAC;AAEvC,OAAO,KAAK,OAAO,MAAM,oCAAoC,CAAC"}
|
|
@@ -4,16 +4,27 @@ export default {
|
|
|
4
4
|
title: 'ToolbarBottomNav',
|
|
5
5
|
tags: ['ui'],
|
|
6
6
|
experimental: false,
|
|
7
|
-
description: 'Navigation bottom de type TabsExpo. A utiliser dans les _layout
|
|
7
|
+
description: 'Navigation bottom de type TabsExpo. A utiliser dans les `_layout`.',
|
|
8
|
+
shortDescription: 'Navigation bottom de type TabsExpo. À utiliser dans les layouts de navigation.',
|
|
8
9
|
figmaURL: 'https://www.figma.com/design/xJz8Z6vfrnZPKTtRbuT2W8/Alveole---Composants?node-id=1880-852&t=baZKFA9BpkeQGeZm-4',
|
|
9
10
|
component: ToolbarBottomNav,
|
|
10
11
|
styleFn: useStyles,
|
|
11
12
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Exemple d'intégration dans un fichier `_layout.tsx`.
|
|
15
|
+
*
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <ToolbarBottomNav>
|
|
18
|
+
* <ToolbarBottomNav.Screen
|
|
19
|
+
* name="home"
|
|
20
|
+
* options={{ tabBarLabel: 'Home', tabBarIcon: ToolbarBottomNav.Icon('home') }}
|
|
21
|
+
* />
|
|
22
|
+
* <ToolbarBottomNav.Screen
|
|
23
|
+
* name="list"
|
|
24
|
+
* options={{ tabBarLabel: 'Liste', tabBarIcon: ToolbarBottomNav.Icon('all-inbox') }}
|
|
25
|
+
* />
|
|
26
|
+
* </ToolbarBottomNav>
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export const ExampleUsage = () => null;
|
|
19
30
|
export * as Sources from './ToolbarBottomNav.stories.sources';
|
|
@@ -3,4 +3,5 @@ export declare const storySources: {
|
|
|
3
3
|
readonly ExampleUsage: () => string;
|
|
4
4
|
};
|
|
5
5
|
export type StorySourceName = keyof typeof storySources;
|
|
6
|
+
export declare const storyDescriptions: Partial<Record<StorySourceName, string>>;
|
|
6
7
|
//# sourceMappingURL=ToolbarBottomNav.stories.sources.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarBottomNav.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/ToolbarBottomNav/ToolbarBottomNav.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"ToolbarBottomNav.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/ToolbarBottomNav/ToolbarBottomNav.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,cAAkD,CAAC;AAE5E,eAAO,MAAM,YAAY;;CAEf,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,YAAY,CAAC;AAExD,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAEtE,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// This file is generated. Do not edit manually.
|
|
2
2
|
// Source: src/ui/ToolbarBottomNav/ToolbarBottomNav.stories.tsx
|
|
3
|
-
export const ExampleUsage = () => "export const ExampleUsage = () =>
|
|
3
|
+
export const ExampleUsage = () => "export const ExampleUsage = () => null;";
|
|
4
4
|
export const storySources = {
|
|
5
5
|
ExampleUsage,
|
|
6
6
|
};
|
|
7
|
+
export const storyDescriptions = {
|
|
8
|
+
ExampleUsage: "Exemple d'intégration dans un fichier `_layout.tsx`.\n\n```tsx\n<ToolbarBottomNav>\n <ToolbarBottomNav.Screen\n name=\"home\"\n options={{ tabBarLabel: 'Home', tabBarIcon: ToolbarBottomNav.Icon('home') }}\n />\n <ToolbarBottomNav.Screen\n name=\"list\"\n options={{ tabBarLabel: 'Liste', tabBarIcon: ToolbarBottomNav.Icon('all-inbox') }}\n />\n</ToolbarBottomNav>\n```",
|
|
9
|
+
};
|
|
@@ -12,16 +12,16 @@ declare const _default: {
|
|
|
12
12
|
display: "flex";
|
|
13
13
|
flexDirection: "row";
|
|
14
14
|
alignItems: "center";
|
|
15
|
-
paddingLeft:
|
|
16
|
-
paddingRight:
|
|
17
|
-
paddingTop:
|
|
18
|
-
paddingBottom:
|
|
15
|
+
paddingLeft: string | number;
|
|
16
|
+
paddingRight: string | number;
|
|
17
|
+
paddingTop: string | number;
|
|
18
|
+
paddingBottom: string | number;
|
|
19
19
|
};
|
|
20
20
|
compactLargetoolbarContainer: {
|
|
21
|
-
paddingTop:
|
|
22
|
-
paddingBottom:
|
|
23
|
-
paddingLeft:
|
|
24
|
-
paddingRight:
|
|
21
|
+
paddingTop: string | number;
|
|
22
|
+
paddingBottom: string | number;
|
|
23
|
+
paddingLeft: string | number;
|
|
24
|
+
paddingRight: string | number;
|
|
25
25
|
};
|
|
26
26
|
largeToolbarContainer: {
|
|
27
27
|
paddingTop: number;
|
|
@@ -42,13 +42,13 @@ declare const _default: {
|
|
|
42
42
|
toolbarNavigation: {
|
|
43
43
|
display: "flex";
|
|
44
44
|
justifyContent: "center";
|
|
45
|
-
gap:
|
|
45
|
+
gap: string | number;
|
|
46
46
|
};
|
|
47
47
|
toolbarInformation: {
|
|
48
48
|
display: "flex";
|
|
49
49
|
flexDirection: "row";
|
|
50
50
|
alignItems: "center";
|
|
51
|
-
gap:
|
|
51
|
+
gap: string | number;
|
|
52
52
|
flex: number;
|
|
53
53
|
};
|
|
54
54
|
toolbarInformationTitle: {
|
|
@@ -115,6 +115,10 @@ export declare const AvecAvatarSansActions: () => import("react").JSX.Element;
|
|
|
115
115
|
export declare const AvecAvatarEtActions: () => import("react").JSX.Element;
|
|
116
116
|
export declare const AvecPlusieursActions: () => import("react").JSX.Element;
|
|
117
117
|
export declare const AvecTitreEtSansSousTitre: () => import("react").JSX.Element;
|
|
118
|
+
/**
|
|
119
|
+
* En règle générale, `withBorder` est appliqué dynamiquement au scroll :
|
|
120
|
+
* la bordure apparaît quand on a scrollé et disparaît en haut de la page.
|
|
121
|
+
*/
|
|
118
122
|
export declare const AvecBorder: () => import("react").JSX.Element;
|
|
119
123
|
export declare const CompactLarge: () => import("react").JSX.Element;
|
|
120
124
|
export declare const Large: () => import("react").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarTop.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/ToolbarTop/ToolbarTop.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ToolbarTop.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/ToolbarTop/ToolbarTop.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,wBAWkB;AAElB,eAAO,MAAM,OAAO,mCAA4D,CAAC;AAEjF,eAAO,MAAM,iBAAiB,mCAE7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,mCAOnC,CAAC;AAEF,eAAO,MAAM,qBAAqB,mCAEjC,CAAC;AAEF,eAAO,MAAM,mBAAmB,mCAQ/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,mCAahC,CAAC;AAEF,eAAO,MAAM,wBAAwB,mCAYpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,mCAAuE,CAAC;AAE/F,eAAO,MAAM,YAAY,mCAA0E,CAAC;AAEpG,eAAO,MAAM,KAAK,mCAEjB,CAAC;AAEF,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { router } from 'expo-router';
|
|
3
|
-
import { Typography } from '../../core';
|
|
4
3
|
import { ButtonIcon } from '../Button/ButtonIcon';
|
|
5
4
|
import { ToolbarTop } from './ToolbarTop';
|
|
6
5
|
import { useStyles } from './ToolbarTop.styles';
|
|
@@ -21,7 +20,11 @@ export const AvecAvatarSansActions = () => (_jsx(ToolbarTop, { title: "Titre", s
|
|
|
21
20
|
export const AvecAvatarEtActions = () => (_jsx(ToolbarTop, { title: "Titre", sousTitre: "Sous-titre", onNavigate: console.log, AvatarProps: { src: 'https://picsum.photos/100/200' }, actions: _jsx(ButtonIcon, { variant: "tertiary", size: "lg", iconSize: "md", icon: 'Plus', onPress: console.log }) }));
|
|
22
21
|
export const AvecPlusieursActions = () => (_jsx(ToolbarTop, { title: "Titre", sousTitre: "Sous-titre", onNavigate: console.log, AvatarProps: { src: 'https://picsum.photos/100/200' }, actions: _jsxs(_Fragment, { children: [_jsx(ButtonIcon, { variant: "tertiary", size: "lg", iconSize: "md", icon: 'Plus', onPress: console.log }), _jsx(ButtonIcon, { variant: "tertiary", size: "lg", iconSize: "md", icon: 'Download', onPress: console.log })] }) }));
|
|
23
22
|
export const AvecTitreEtSansSousTitre = () => (_jsx(ToolbarTop, { title: "Titre", onNavigate: console.log, AvatarProps: { src: 'https://picsum.photos/100/200' }, actions: _jsxs(_Fragment, { children: [_jsx(ButtonIcon, { variant: "tertiary", size: "lg", iconSize: "md", icon: 'Plus', onPress: console.log }), _jsx(ButtonIcon, { variant: "tertiary", size: "lg", iconSize: "md", icon: 'Download', onPress: console.log })] }) }));
|
|
24
|
-
|
|
23
|
+
/**
|
|
24
|
+
* En règle générale, `withBorder` est appliqué dynamiquement au scroll :
|
|
25
|
+
* la bordure apparaît quand on a scrollé et disparaît en haut de la page.
|
|
26
|
+
*/
|
|
27
|
+
export const AvecBorder = () => _jsx(ToolbarTop, { title: "Titre", sousTitre: "Sous-titre", withBorder: true });
|
|
25
28
|
export const CompactLarge = () => _jsx(ToolbarTop, { title: "Titre compact large", variant: "compactLarge" });
|
|
26
29
|
export const Large = () => (_jsx(ToolbarTop, { title: "Titre large", variant: "large", onNavigate: console.log, sousTitre: "Sous-titre" }));
|
|
27
30
|
export * as Sources from './ToolbarTop.stories.sources';
|
|
@@ -21,4 +21,5 @@ export declare const storySources: {
|
|
|
21
21
|
readonly Large: () => string;
|
|
22
22
|
};
|
|
23
23
|
export type StorySourceName = keyof typeof storySources;
|
|
24
|
+
export declare const storyDescriptions: Partial<Record<StorySourceName, string>>;
|
|
24
25
|
//# sourceMappingURL=ToolbarTop.stories.sources.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarTop.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/ToolbarTop/ToolbarTop.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,cAAgG,CAAC;AAErH,eAAO,MAAM,iBAAiB,cAAmJ,CAAC;AAElL,eAAO,MAAM,uBAAuB,cAAsR,CAAC;AAE3T,eAAO,MAAM,qBAAqB,cAA6K,CAAC;AAEhN,eAAO,MAAM,mBAAmB,cAA8U,CAAC;AAE/W,eAAO,MAAM,oBAAoB,cAAqe,CAAC;AAEvgB,eAAO,MAAM,wBAAwB,cAA2c,CAAC;AAEjf,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"ToolbarTop.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/ToolbarTop/ToolbarTop.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,cAAgG,CAAC;AAErH,eAAO,MAAM,iBAAiB,cAAmJ,CAAC;AAElL,eAAO,MAAM,uBAAuB,cAAsR,CAAC;AAE3T,eAAO,MAAM,qBAAqB,cAA6K,CAAC;AAEhN,eAAO,MAAM,mBAAmB,cAA8U,CAAC;AAE/W,eAAO,MAAM,oBAAoB,cAAqe,CAAC;AAEvgB,eAAO,MAAM,wBAAwB,cAA2c,CAAC;AAEjf,eAAO,MAAM,UAAU,cAA8G,CAAC;AAEtI,eAAO,MAAM,YAAY,cAAmH,CAAC;AAE7I,eAAO,MAAM,KAAK,cAAuJ,CAAC;AAE1K,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,YAAY,CAAC;AAExD,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAEtE,CAAC"}
|
|
@@ -7,7 +7,7 @@ export const AvecAvatarSansActions = () => "export const AvecAvatarSansActions =
|
|
|
7
7
|
export const AvecAvatarEtActions = () => "export const AvecAvatarEtActions = () => (\n <ToolbarTop\n title=\"Titre\"\n sousTitre=\"Sous-titre\"\n onNavigate={console.log}\n AvatarProps={{ src: 'https://picsum.photos/100/200' }}\n actions={<ButtonIcon variant=\"tertiary\" size=\"lg\" iconSize=\"md\" icon={'Plus'} onPress={console.log} />}\n />\n);";
|
|
8
8
|
export const AvecPlusieursActions = () => "export const AvecPlusieursActions = () => (\n <ToolbarTop\n title=\"Titre\"\n sousTitre=\"Sous-titre\"\n onNavigate={console.log}\n AvatarProps={{ src: 'https://picsum.photos/100/200' }}\n actions={\n <>\n <ButtonIcon variant=\"tertiary\" size=\"lg\" iconSize=\"md\" icon={'Plus'} onPress={console.log} />\n <ButtonIcon variant=\"tertiary\" size=\"lg\" iconSize=\"md\" icon={'Download'} onPress={console.log} />\n </>\n }\n />\n);";
|
|
9
9
|
export const AvecTitreEtSansSousTitre = () => "export const AvecTitreEtSansSousTitre = () => (\n <ToolbarTop\n title=\"Titre\"\n onNavigate={console.log}\n AvatarProps={{ src: 'https://picsum.photos/100/200' }}\n actions={\n <>\n <ButtonIcon variant=\"tertiary\" size=\"lg\" iconSize=\"md\" icon={'Plus'} onPress={console.log} />\n <ButtonIcon variant=\"tertiary\" size=\"lg\" iconSize=\"md\" icon={'Download'} onPress={console.log} />\n </>\n }\n />\n);";
|
|
10
|
-
export const AvecBorder = () => "export const AvecBorder = () =>
|
|
10
|
+
export const AvecBorder = () => "export const AvecBorder = () => <ToolbarTop title=\"Titre\" sousTitre=\"Sous-titre\" withBorder />;";
|
|
11
11
|
export const CompactLarge = () => "export const CompactLarge = () => <ToolbarTop title=\"Titre compact large\" variant=\"compactLarge\" />;";
|
|
12
12
|
export const Large = () => "export const Large = () => (\n <ToolbarTop title=\"Titre large\" variant=\"large\" onNavigate={console.log} sousTitre=\"Sous-titre\" />\n);";
|
|
13
13
|
export const storySources = {
|
|
@@ -22,3 +22,6 @@ export const storySources = {
|
|
|
22
22
|
CompactLarge,
|
|
23
23
|
Large,
|
|
24
24
|
};
|
|
25
|
+
export const storyDescriptions = {
|
|
26
|
+
AvecBorder: "En règle générale, `withBorder` est appliqué dynamiquement au scroll :\nla bordure apparaît quand on a scrollé et disparaît en haut de la page.",
|
|
27
|
+
};
|