@pyreweb/fabric 1.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -0
- package/dist/fabric.cjs.js +18109 -0
- package/dist/fabric.css +2180 -0
- package/dist/fabric.esm.js +18062 -0
- package/dist/fabric.min.js +18112 -0
- package/dist/types/components/atoms/FAvatar/FAvatar.test.d.ts +1 -0
- package/dist/types/components/atoms/FBadge/FBadge.test.d.ts +1 -0
- package/dist/types/components/atoms/FButton/FButton.test.d.ts +1 -0
- package/dist/types/components/atoms/FCheckbox/FCheckbox.test.d.ts +1 -0
- package/dist/types/components/atoms/FDivider/FDivider.test.d.ts +1 -0
- package/dist/types/components/atoms/FIcon/FIcon.test.d.ts +1 -0
- package/dist/types/components/atoms/FInput/FInput.test.d.ts +1 -0
- package/dist/types/components/atoms/FLoader/FLoader.test.d.ts +1 -0
- package/dist/types/components/atoms/FRadio/FRadio.test.d.ts +1 -0
- package/dist/types/components/atoms/FTextarea/FTextarea.test.d.ts +1 -0
- package/dist/types/components/atoms/FToggle/FToggle.test.d.ts +1 -0
- package/dist/types/components/atoms/FTypography/FTypography.test.d.ts +1 -0
- package/dist/types/components/atoms/index.d.ts +13 -0
- package/dist/types/components/molecules/FAccordionItem/FAccordionItem.test.d.ts +1 -0
- package/dist/types/components/molecules/FAlert/FAlert.test.d.ts +1 -0
- package/dist/types/components/molecules/FBreadcrumb/FBreadcrumb.test.d.ts +1 -0
- package/dist/types/components/molecules/FButtonGroup/FButtonGroup.test.d.ts +1 -0
- package/dist/types/components/molecules/FCard/FCard.test.d.ts +1 -0
- package/dist/types/components/molecules/FDatePicker/FDatePicker.test.d.ts +1 -0
- package/dist/types/components/molecules/FEmptyState/FEmptyState.test.d.ts +1 -0
- package/dist/types/components/molecules/FFilePreview/FFilePreview.test.d.ts +1 -0
- package/dist/types/components/molecules/FFormField/FFormField.test.d.ts +1 -0
- package/dist/types/components/molecules/FListItem/FListItem.test.d.ts +1 -0
- package/dist/types/components/molecules/FPagination/FPagination.test.d.ts +1 -0
- package/dist/types/components/molecules/FSearchBar/FSearchBar.test.d.ts +1 -0
- package/dist/types/components/molecules/FSelect/FSelect.test.d.ts +1 -0
- package/dist/types/components/molecules/FStatCard/FStatCard.test.d.ts +1 -0
- package/dist/types/components/molecules/FTabs/FTabs.test.d.ts +1 -0
- package/dist/types/components/molecules/FToast/FToast.test.d.ts +1 -0
- package/dist/types/components/molecules/index.d.ts +18 -0
- package/dist/types/components/organisms/FActivityFeed/FActivityFeed.test.d.ts +1 -0
- package/dist/types/components/organisms/FDataTable/FDataTable.test.d.ts +1 -0
- package/dist/types/components/organisms/FDrawer/FDrawer.test.d.ts +1 -0
- package/dist/types/components/organisms/FFileUpload/FFileUpload.test.d.ts +1 -0
- package/dist/types/components/organisms/FFilterSidebar/FFilterSidebar.test.d.ts +1 -0
- package/dist/types/components/organisms/FForm/FForm.test.d.ts +1 -0
- package/dist/types/components/organisms/FModal/FModal.test.d.ts +1 -0
- package/dist/types/components/organisms/FNavigationSidebar/FNavigationSidebar.test.d.ts +1 -0
- package/dist/types/components/organisms/FOnboardingStepper/FOnboardingStepper.test.d.ts +1 -0
- package/dist/types/components/organisms/FOnboardingStepper/FStepperProgress.test.d.ts +1 -0
- package/dist/types/components/organisms/FPageHeader/FPageHeader.test.d.ts +1 -0
- package/dist/types/components/organisms/FProfileSection/FProfileSection.test.d.ts +1 -0
- package/dist/types/components/organisms/FToastProvider/FToastProvider.test.d.ts +1 -0
- package/dist/types/components/organisms/FUserMenu/FUserMenu.test.d.ts +1 -0
- package/dist/types/components/organisms/index.d.ts +14 -0
- package/dist/types/components/utils/FThemeProvider.test.d.ts +1 -0
- package/dist/types/components/utils/index.d.ts +2 -0
- package/dist/types/components.d.ts +602 -0
- package/dist/types/composables/index.d.ts +12 -0
- package/dist/types/composables/useDataTableState.d.ts +106 -0
- package/dist/types/composables/useDataTableState.test.d.ts +1 -0
- package/dist/types/composables/useFormValidation.d.ts +49 -0
- package/dist/types/composables/useFormValidation.test.d.ts +1 -0
- package/dist/types/composables/useSidebarState.d.ts +65 -0
- package/dist/types/composables/useSidebarState.test.d.ts +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/types.d.ts +529 -0
- package/package.json +100 -0
- package/src/components/atoms/FAvatar/FAvatar.stories.js +100 -0
- package/src/components/atoms/FAvatar/FAvatar.test.ts +95 -0
- package/src/components/atoms/FAvatar/FAvatar.vue +190 -0
- package/src/components/atoms/FBadge/FBadge.stories.js +129 -0
- package/src/components/atoms/FBadge/FBadge.test.ts +93 -0
- package/src/components/atoms/FBadge/FBadge.vue +103 -0
- package/src/components/atoms/FButton/FButton.stories.js +122 -0
- package/src/components/atoms/FButton/FButton.test.ts +98 -0
- package/src/components/atoms/FButton/FButton.vue +147 -0
- package/src/components/atoms/FCheckbox/FCheckbox.stories.js +96 -0
- package/src/components/atoms/FCheckbox/FCheckbox.test.ts +64 -0
- package/src/components/atoms/FCheckbox/FCheckbox.vue +76 -0
- package/src/components/atoms/FDivider/FDivider.stories.js +104 -0
- package/src/components/atoms/FDivider/FDivider.test.ts +80 -0
- package/src/components/atoms/FDivider/FDivider.vue +117 -0
- package/src/components/atoms/FIcon/FIcon.stories.js +189 -0
- package/src/components/atoms/FIcon/FIcon.test.ts +99 -0
- package/src/components/atoms/FIcon/FIcon.vue +192 -0
- package/src/components/atoms/FInput/FInput.stories.js +119 -0
- package/src/components/atoms/FInput/FInput.test.ts +79 -0
- package/src/components/atoms/FInput/FInput.vue +88 -0
- package/src/components/atoms/FLoader/FLoader.stories.js +109 -0
- package/src/components/atoms/FLoader/FLoader.test.ts +66 -0
- package/src/components/atoms/FLoader/FLoader.vue +97 -0
- package/src/components/atoms/FRadio/FRadio.stories.js +105 -0
- package/src/components/atoms/FRadio/FRadio.test.ts +75 -0
- package/src/components/atoms/FRadio/FRadio.vue +119 -0
- package/src/components/atoms/FTextarea/FTextarea.stories.js +126 -0
- package/src/components/atoms/FTextarea/FTextarea.test.ts +94 -0
- package/src/components/atoms/FTextarea/FTextarea.vue +156 -0
- package/src/components/atoms/FToggle/FToggle.stories.js +108 -0
- package/src/components/atoms/FToggle/FToggle.test.ts +96 -0
- package/src/components/atoms/FToggle/FToggle.vue +123 -0
- package/src/components/atoms/FTypography/FTypography.stories.js +127 -0
- package/src/components/atoms/FTypography/FTypography.test.ts +93 -0
- package/src/components/atoms/FTypography/FTypography.vue +78 -0
- package/src/components/atoms/index.ts +27 -0
- package/src/components/molecules/FAccordionItem/FAccordionItem.stories.js +71 -0
- package/src/components/molecules/FAccordionItem/FAccordionItem.test.ts +61 -0
- package/src/components/molecules/FAccordionItem/FAccordionItem.vue +105 -0
- package/src/components/molecules/FAlert/FAlert.stories.js +87 -0
- package/src/components/molecules/FAlert/FAlert.test.ts +59 -0
- package/src/components/molecules/FAlert/FAlert.vue +108 -0
- package/src/components/molecules/FBreadcrumb/FBreadcrumb.stories.js +90 -0
- package/src/components/molecules/FBreadcrumb/FBreadcrumb.test.ts +76 -0
- package/src/components/molecules/FBreadcrumb/FBreadcrumb.vue +117 -0
- package/src/components/molecules/FButtonGroup/FButtonGroup.stories.js +82 -0
- package/src/components/molecules/FButtonGroup/FButtonGroup.test.ts +44 -0
- package/src/components/molecules/FButtonGroup/FButtonGroup.vue +31 -0
- package/src/components/molecules/FCard/FCard.stories.js +136 -0
- package/src/components/molecules/FCard/FCard.test.ts +87 -0
- package/src/components/molecules/FCard/FCard.vue +75 -0
- package/src/components/molecules/FDatePicker/FDatePicker.stories.js +305 -0
- package/src/components/molecules/FDatePicker/FDatePicker.test.ts +282 -0
- package/src/components/molecules/FDatePicker/FDatePicker.vue +750 -0
- package/src/components/molecules/FEmptyState/FEmptyState.stories.js +98 -0
- package/src/components/molecules/FEmptyState/FEmptyState.test.ts +82 -0
- package/src/components/molecules/FEmptyState/FEmptyState.vue +89 -0
- package/src/components/molecules/FFilePreview/FFilePreview.stories.js +130 -0
- package/src/components/molecules/FFilePreview/FFilePreview.test.ts +70 -0
- package/src/components/molecules/FFilePreview/FFilePreview.vue +125 -0
- package/src/components/molecules/FFormField/FFormField.stories.js +149 -0
- package/src/components/molecules/FFormField/FFormField.test.ts +85 -0
- package/src/components/molecules/FFormField/FFormField.vue +107 -0
- package/src/components/molecules/FListItem/FListItem.stories.js +158 -0
- package/src/components/molecules/FListItem/FListItem.test.ts +93 -0
- package/src/components/molecules/FListItem/FListItem.vue +113 -0
- package/src/components/molecules/FPagination/FPagination.stories.js +132 -0
- package/src/components/molecules/FPagination/FPagination.test.ts +79 -0
- package/src/components/molecules/FPagination/FPagination.vue +206 -0
- package/src/components/molecules/FSearchBar/FSearchBar.stories.js +129 -0
- package/src/components/molecules/FSearchBar/FSearchBar.test.ts +81 -0
- package/src/components/molecules/FSearchBar/FSearchBar.vue +180 -0
- package/src/components/molecules/FSelect/FSelect.stories.js +333 -0
- package/src/components/molecules/FSelect/FSelect.test.ts +478 -0
- package/src/components/molecules/FSelect/FSelect.vue +551 -0
- package/src/components/molecules/FStatCard/FStatCard.stories.js +144 -0
- package/src/components/molecules/FStatCard/FStatCard.test.ts +78 -0
- package/src/components/molecules/FStatCard/FStatCard.vue +106 -0
- package/src/components/molecules/FTabs/FTab.vue +63 -0
- package/src/components/molecules/FTabs/FTabs.stories.js +277 -0
- package/src/components/molecules/FTabs/FTabs.test.ts +264 -0
- package/src/components/molecules/FTabs/FTabs.vue +273 -0
- package/src/components/molecules/FToast/FToast.stories.js +150 -0
- package/src/components/molecules/FToast/FToast.test.ts +157 -0
- package/src/components/molecules/FToast/FToast.vue +283 -0
- package/src/components/molecules/index.ts +37 -0
- package/src/components/organisms/FActivityFeed/FActivityFeed.stories.js +217 -0
- package/src/components/organisms/FActivityFeed/FActivityFeed.test.ts +134 -0
- package/src/components/organisms/FActivityFeed/FActivityFeed.vue +589 -0
- package/src/components/organisms/FDataTable/FDataTable.stories.js +370 -0
- package/src/components/organisms/FDataTable/FDataTable.test.ts +248 -0
- package/src/components/organisms/FDataTable/FDataTable.vue +808 -0
- package/src/components/organisms/FDrawer/FDrawer.stories.js +296 -0
- package/src/components/organisms/FDrawer/FDrawer.test.ts +142 -0
- package/src/components/organisms/FDrawer/FDrawer.vue +303 -0
- package/src/components/organisms/FFileUpload/FFileUpload.stories.js +162 -0
- package/src/components/organisms/FFileUpload/FFileUpload.test.ts +103 -0
- package/src/components/organisms/FFileUpload/FFileUpload.vue +616 -0
- package/src/components/organisms/FFilterSidebar/FFilterSidebar.stories.js +161 -0
- package/src/components/organisms/FFilterSidebar/FFilterSidebar.test.ts +92 -0
- package/src/components/organisms/FFilterSidebar/FFilterSidebar.vue +458 -0
- package/src/components/organisms/FForm/FForm.stories.js +270 -0
- package/src/components/organisms/FForm/FForm.test.ts +63 -0
- package/src/components/organisms/FForm/FForm.vue +19 -0
- package/src/components/organisms/FModal/FModal.stories.js +227 -0
- package/src/components/organisms/FModal/FModal.test.ts +181 -0
- package/src/components/organisms/FModal/FModal.vue +319 -0
- package/src/components/organisms/FNavigationSidebar/FNavigationSidebar.stories.js +176 -0
- package/src/components/organisms/FNavigationSidebar/FNavigationSidebar.test.ts +95 -0
- package/src/components/organisms/FNavigationSidebar/FNavigationSidebar.vue +577 -0
- package/src/components/organisms/FOnboardingStepper/FOnboardingStepper.stories.js +197 -0
- package/src/components/organisms/FOnboardingStepper/FOnboardingStepper.test.ts +114 -0
- package/src/components/organisms/FOnboardingStepper/FOnboardingStepper.vue +212 -0
- package/src/components/organisms/FOnboardingStepper/FStepperProgress.stories.js +122 -0
- package/src/components/organisms/FOnboardingStepper/FStepperProgress.test.ts +130 -0
- package/src/components/organisms/FOnboardingStepper/FStepperProgress.vue +146 -0
- package/src/components/organisms/FPageHeader/FPageHeader.stories.js +142 -0
- package/src/components/organisms/FPageHeader/FPageHeader.test.ts +83 -0
- package/src/components/organisms/FPageHeader/FPageHeader.vue +241 -0
- package/src/components/organisms/FProfileSection/FProfileSection.stories.js +190 -0
- package/src/components/organisms/FProfileSection/FProfileSection.test.ts +85 -0
- package/src/components/organisms/FProfileSection/FProfileSection.vue +562 -0
- package/src/components/organisms/FToastProvider/FToastProvider.stories.js +290 -0
- package/src/components/organisms/FToastProvider/FToastProvider.test.ts +215 -0
- package/src/components/organisms/FToastProvider/FToastProvider.vue +214 -0
- package/src/components/organisms/FUserMenu/FUserMenu.stories.js +170 -0
- package/src/components/organisms/FUserMenu/FUserMenu.test.ts +102 -0
- package/src/components/organisms/FUserMenu/FUserMenu.vue +407 -0
- package/src/components/organisms/index.ts +29 -0
- package/src/components/utils/FThemeProvider.stories.js +236 -0
- package/src/components/utils/FThemeProvider.test.ts +244 -0
- package/src/components/utils/FThemeProvider.vue +191 -0
- package/src/components/utils/index.ts +3 -0
- package/src/components.d.ts +602 -0
- package/src/composables/README.md +233 -0
- package/src/composables/index.ts +25 -0
- package/src/composables/useDataTableState.test.ts +378 -0
- package/src/composables/useDataTableState.ts +361 -0
- package/src/composables/useFormValidation.test.ts +198 -0
- package/src/composables/useFormValidation.ts +178 -0
- package/src/composables/useSidebarState.test.ts +307 -0
- package/src/composables/useSidebarState.ts +201 -0
- package/src/env.d.ts +14 -0
- package/src/index.ts +167 -0
- package/src/styles/tailwind.css +173 -0
- package/src/types.ts +740 -0
package/src/types.ts
ADDED
|
@@ -0,0 +1,740 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// FButton Types
|
|
3
|
+
// =============================================================================
|
|
4
|
+
|
|
5
|
+
/** Variants disponibles pour FButton */
|
|
6
|
+
export type FButtonVariant =
|
|
7
|
+
| 'primary'
|
|
8
|
+
| 'secondary'
|
|
9
|
+
| 'danger'
|
|
10
|
+
| 'success'
|
|
11
|
+
| 'outline'
|
|
12
|
+
| 'ghost'
|
|
13
|
+
| 'link';
|
|
14
|
+
|
|
15
|
+
/** Tailles disponibles pour FButton */
|
|
16
|
+
export type FButtonSize = 'xs' | 'small' | 'medium' | 'large' | 'xl';
|
|
17
|
+
|
|
18
|
+
/** Type de route pour router-link */
|
|
19
|
+
export interface RouteLocation {
|
|
20
|
+
name?: string;
|
|
21
|
+
path?: string;
|
|
22
|
+
params?: Record<string, string>;
|
|
23
|
+
query?: Record<string, string>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Props du composant FButton */
|
|
27
|
+
export interface FButtonProps {
|
|
28
|
+
variant?: FButtonVariant;
|
|
29
|
+
size?: FButtonSize;
|
|
30
|
+
type?: string;
|
|
31
|
+
disabled?: boolean;
|
|
32
|
+
loading?: boolean;
|
|
33
|
+
loadingText?: string;
|
|
34
|
+
block?: boolean;
|
|
35
|
+
to?: string | RouteLocation | null;
|
|
36
|
+
href?: string | null;
|
|
37
|
+
target?: string | null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// =============================================================================
|
|
41
|
+
// FDataTable Types
|
|
42
|
+
// =============================================================================
|
|
43
|
+
|
|
44
|
+
/** Tailles disponibles pour FDataTable */
|
|
45
|
+
export type FDataTableSize = 'small' | 'medium' | 'large';
|
|
46
|
+
|
|
47
|
+
/** Direction de tri */
|
|
48
|
+
export type SortDirection = 'asc' | 'desc';
|
|
49
|
+
|
|
50
|
+
/** Alignement des colonnes */
|
|
51
|
+
export type ColumnAlign = 'left' | 'center' | 'right';
|
|
52
|
+
|
|
53
|
+
/** Définition d'une colonne */
|
|
54
|
+
export interface FDataTableColumn {
|
|
55
|
+
key: string;
|
|
56
|
+
label: string;
|
|
57
|
+
sortable?: boolean;
|
|
58
|
+
align?: ColumnAlign;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Événement de tri émis */
|
|
62
|
+
export interface SortEvent {
|
|
63
|
+
key: string;
|
|
64
|
+
direction: SortDirection;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Événement de sélection émis */
|
|
68
|
+
export interface SelectEvent<T = Record<string, unknown>> {
|
|
69
|
+
row: T;
|
|
70
|
+
selected: boolean;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Type pour les clés de lignes */
|
|
74
|
+
export type RowKey = string | number;
|
|
75
|
+
|
|
76
|
+
/** Props du composant FDataTable */
|
|
77
|
+
export interface FDataTableProps<T = Record<string, unknown>> {
|
|
78
|
+
data?: T[];
|
|
79
|
+
columns: FDataTableColumn[];
|
|
80
|
+
rowKey?: string;
|
|
81
|
+
selectable?: boolean;
|
|
82
|
+
selected?: RowKey[];
|
|
83
|
+
searchable?: boolean;
|
|
84
|
+
searchPlaceholder?: string;
|
|
85
|
+
paginated?: boolean;
|
|
86
|
+
perPage?: number;
|
|
87
|
+
page?: number;
|
|
88
|
+
totalItems?: number | null;
|
|
89
|
+
serverMode?: boolean;
|
|
90
|
+
loading?: boolean;
|
|
91
|
+
defaultSortKey?: string | null;
|
|
92
|
+
defaultSortDirection?: SortDirection;
|
|
93
|
+
size?: FDataTableSize;
|
|
94
|
+
emptyIcon?: string;
|
|
95
|
+
emptyTitle?: string;
|
|
96
|
+
emptyDescription?: string;
|
|
97
|
+
emptyActionLabel?: string;
|
|
98
|
+
striped?: boolean;
|
|
99
|
+
hoverable?: boolean;
|
|
100
|
+
bordered?: boolean;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Événements émis par FDataTable */
|
|
104
|
+
export interface FDataTableEvents<T = Record<string, unknown>> {
|
|
105
|
+
'row-click': (row: T) => void;
|
|
106
|
+
sort: (event: SortEvent) => void;
|
|
107
|
+
search: (query: string) => void;
|
|
108
|
+
'page-change': (page: number) => void;
|
|
109
|
+
select: (event: SelectEvent<T>) => void;
|
|
110
|
+
'select-all': (checked: boolean) => void;
|
|
111
|
+
'empty-action': () => void;
|
|
112
|
+
'update:page': (page: number) => void;
|
|
113
|
+
'update:selected': (keys: RowKey[]) => void;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// =============================================================================
|
|
117
|
+
// FSelect Types
|
|
118
|
+
// =============================================================================
|
|
119
|
+
|
|
120
|
+
/** Tailles disponibles pour FSelect */
|
|
121
|
+
export type FSelectSize = 'small' | 'medium' | 'large';
|
|
122
|
+
|
|
123
|
+
/** Type pour une option de sélection */
|
|
124
|
+
export type FSelectOption = string | number | Record<string, unknown>;
|
|
125
|
+
|
|
126
|
+
/** Fonction de filtrage personnalisée pour FSelect */
|
|
127
|
+
export type FSelectFilterMethod = (
|
|
128
|
+
query: string,
|
|
129
|
+
options: FSelectOption[]
|
|
130
|
+
) => FSelectOption[];
|
|
131
|
+
|
|
132
|
+
/** Props du composant FSelect */
|
|
133
|
+
export interface FSelectProps {
|
|
134
|
+
value?: FSelectOption | FSelectOption[] | null;
|
|
135
|
+
options?: FSelectOption[];
|
|
136
|
+
optionKey?: string;
|
|
137
|
+
optionLabel?: string;
|
|
138
|
+
optionDisabled?: string;
|
|
139
|
+
placeholder?: string;
|
|
140
|
+
size?: FSelectSize;
|
|
141
|
+
multiple?: boolean;
|
|
142
|
+
searchable?: boolean;
|
|
143
|
+
searchPlaceholder?: string;
|
|
144
|
+
emptyText?: string;
|
|
145
|
+
loading?: boolean;
|
|
146
|
+
loadingText?: string;
|
|
147
|
+
disabled?: boolean;
|
|
148
|
+
error?: boolean;
|
|
149
|
+
labelId?: string | null;
|
|
150
|
+
filterMethod?: FSelectFilterMethod | null;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Événements émis par FSelect */
|
|
154
|
+
export interface FSelectEvents {
|
|
155
|
+
input: (value: FSelectOption | FSelectOption[]) => void;
|
|
156
|
+
change: (value: FSelectOption | FSelectOption[]) => void;
|
|
157
|
+
open: () => void;
|
|
158
|
+
close: () => void;
|
|
159
|
+
focus: (event: FocusEvent) => void;
|
|
160
|
+
blur: (event: FocusEvent) => void;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// =============================================================================
|
|
164
|
+
// FDatePicker Types
|
|
165
|
+
// =============================================================================
|
|
166
|
+
|
|
167
|
+
/** Modes disponibles pour FDatePicker */
|
|
168
|
+
export type FDatePickerMode = 'single' | 'range';
|
|
169
|
+
|
|
170
|
+
/** Tailles disponibles pour FDatePicker */
|
|
171
|
+
export type FDatePickerSize = 'small' | 'medium' | 'large';
|
|
172
|
+
|
|
173
|
+
/** Props du composant FDatePicker */
|
|
174
|
+
export interface FDatePickerProps {
|
|
175
|
+
value?: string | Date | Array<string | Date> | null;
|
|
176
|
+
mode?: FDatePickerMode;
|
|
177
|
+
placeholder?: string;
|
|
178
|
+
format?: string;
|
|
179
|
+
size?: FDatePickerSize;
|
|
180
|
+
disabled?: boolean;
|
|
181
|
+
readonly?: boolean;
|
|
182
|
+
error?: boolean;
|
|
183
|
+
showTimePicker?: boolean;
|
|
184
|
+
minDate?: string | Date | null;
|
|
185
|
+
maxDate?: string | Date | null;
|
|
186
|
+
disabledDates?: Array<string | Date>;
|
|
187
|
+
monthNames?: string[];
|
|
188
|
+
dayNames?: string[];
|
|
189
|
+
firstDayOfWeek?: number;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** Événements émis par FDatePicker */
|
|
193
|
+
export interface FDatePickerEvents {
|
|
194
|
+
input: (value: Date | Array<Date> | null) => void;
|
|
195
|
+
change: (value: Date | Array<Date> | null) => void;
|
|
196
|
+
focus: (event: FocusEvent) => void;
|
|
197
|
+
blur: (event: FocusEvent) => void;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// =============================================================================
|
|
201
|
+
// FInput Types
|
|
202
|
+
// =============================================================================
|
|
203
|
+
|
|
204
|
+
/** Tailles disponibles pour FInput */
|
|
205
|
+
export type FInputSize = 'small' | 'medium' | 'large';
|
|
206
|
+
|
|
207
|
+
/** Props du composant FInput */
|
|
208
|
+
export interface FInputProps {
|
|
209
|
+
value?: string | number;
|
|
210
|
+
type?: string;
|
|
211
|
+
placeholder?: string;
|
|
212
|
+
size?: FInputSize;
|
|
213
|
+
disabled?: boolean;
|
|
214
|
+
readonly?: boolean;
|
|
215
|
+
error?: boolean;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** Événements émis par FInput */
|
|
219
|
+
export interface FInputEvents {
|
|
220
|
+
input: (value: string) => void;
|
|
221
|
+
focus: (event: FocusEvent) => void;
|
|
222
|
+
blur: (event: FocusEvent) => void;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// =============================================================================
|
|
226
|
+
// FTextarea Types
|
|
227
|
+
// =============================================================================
|
|
228
|
+
|
|
229
|
+
/** Tailles disponibles pour FTextarea */
|
|
230
|
+
export type FTextareaSize = 'small' | 'medium' | 'large';
|
|
231
|
+
|
|
232
|
+
/** Props du composant FTextarea */
|
|
233
|
+
export interface FTextareaProps {
|
|
234
|
+
value?: string;
|
|
235
|
+
placeholder?: string;
|
|
236
|
+
size?: FTextareaSize;
|
|
237
|
+
disabled?: boolean;
|
|
238
|
+
readonly?: boolean;
|
|
239
|
+
error?: boolean;
|
|
240
|
+
rows?: number;
|
|
241
|
+
resize?: 'none' | 'vertical' | 'horizontal' | 'both';
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/** Événements émis par FTextarea */
|
|
245
|
+
export interface FTextareaEvents {
|
|
246
|
+
input: (value: string) => void;
|
|
247
|
+
focus: (event: FocusEvent) => void;
|
|
248
|
+
blur: (event: FocusEvent) => void;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// =============================================================================
|
|
252
|
+
// FCheckbox Types
|
|
253
|
+
// =============================================================================
|
|
254
|
+
|
|
255
|
+
/** Props du composant FCheckbox */
|
|
256
|
+
export interface FCheckboxProps {
|
|
257
|
+
value?: boolean;
|
|
258
|
+
checked?: boolean;
|
|
259
|
+
disabled?: boolean;
|
|
260
|
+
label?: string;
|
|
261
|
+
name?: string;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** Événements émis par FCheckbox */
|
|
265
|
+
export interface FCheckboxEvents {
|
|
266
|
+
input: (value: boolean) => void;
|
|
267
|
+
change: (value: boolean) => void;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// =============================================================================
|
|
271
|
+
// FRadio Types
|
|
272
|
+
// =============================================================================
|
|
273
|
+
|
|
274
|
+
/** Props du composant FRadio */
|
|
275
|
+
export interface FRadioProps {
|
|
276
|
+
value?: string | number | boolean;
|
|
277
|
+
checked?: boolean;
|
|
278
|
+
disabled?: boolean;
|
|
279
|
+
label?: string;
|
|
280
|
+
name?: string;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** Événements émis par FRadio */
|
|
284
|
+
export interface FRadioEvents {
|
|
285
|
+
input: (value: string | number | boolean) => void;
|
|
286
|
+
change: (value: string | number | boolean) => void;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// =============================================================================
|
|
290
|
+
// FToggle Types
|
|
291
|
+
// =============================================================================
|
|
292
|
+
|
|
293
|
+
/** Tailles disponibles pour FToggle */
|
|
294
|
+
export type FToggleSize = 'small' | 'medium' | 'large';
|
|
295
|
+
|
|
296
|
+
/** Props du composant FToggle */
|
|
297
|
+
export interface FToggleProps {
|
|
298
|
+
value?: boolean;
|
|
299
|
+
disabled?: boolean;
|
|
300
|
+
size?: FToggleSize;
|
|
301
|
+
label?: string;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/** Événements émis par FToggle */
|
|
305
|
+
export interface FToggleEvents {
|
|
306
|
+
input: (value: boolean) => void;
|
|
307
|
+
change: (value: boolean) => void;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// =============================================================================
|
|
311
|
+
// FTabs Types
|
|
312
|
+
// =============================================================================
|
|
313
|
+
|
|
314
|
+
/** Variants disponibles pour FTabs */
|
|
315
|
+
export type FTabsVariant = 'default' | 'pills' | 'underline';
|
|
316
|
+
|
|
317
|
+
/** Position disponibles pour FTabs */
|
|
318
|
+
export type FTabsPosition = 'top' | 'bottom';
|
|
319
|
+
|
|
320
|
+
/** Props du composant FTabs */
|
|
321
|
+
export interface FTabsProps {
|
|
322
|
+
value?: string;
|
|
323
|
+
variant?: FTabsVariant;
|
|
324
|
+
position?: FTabsPosition;
|
|
325
|
+
ariaLabel?: string;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/** Événements émis par FTabs */
|
|
329
|
+
export interface FTabsEvents {
|
|
330
|
+
input: (value: string) => void;
|
|
331
|
+
change: (value: string) => void;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/** Props du composant FTab */
|
|
335
|
+
export interface FTabProps {
|
|
336
|
+
name: string;
|
|
337
|
+
label: string;
|
|
338
|
+
disabled?: boolean;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// =============================================================================
|
|
342
|
+
// FModal Types
|
|
343
|
+
// =============================================================================
|
|
344
|
+
|
|
345
|
+
/** Tailles disponibles pour FModal */
|
|
346
|
+
export type FModalSize = 'small' | 'medium' | 'large' | 'xl';
|
|
347
|
+
|
|
348
|
+
/** Props du composant FModal */
|
|
349
|
+
export interface FModalProps {
|
|
350
|
+
value?: boolean;
|
|
351
|
+
title?: string;
|
|
352
|
+
size?: FModalSize;
|
|
353
|
+
closeOnEscape?: boolean;
|
|
354
|
+
closeOnBackdrop?: boolean;
|
|
355
|
+
showCloseButton?: boolean;
|
|
356
|
+
persistent?: boolean;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/** Événements émis par FModal */
|
|
360
|
+
export interface FModalEvents {
|
|
361
|
+
input: (value: boolean) => void;
|
|
362
|
+
close: () => void;
|
|
363
|
+
open: () => void;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/** Slots disponibles pour FModal */
|
|
367
|
+
export interface FModalSlots {
|
|
368
|
+
/** Slot par défaut pour le contenu du modal */
|
|
369
|
+
default: void;
|
|
370
|
+
/** Slot pour le header personnalisé */
|
|
371
|
+
header?: void;
|
|
372
|
+
/** Slot pour le footer avec actions */
|
|
373
|
+
footer?: void;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
// =============================================================================
|
|
377
|
+
// FDrawer Types
|
|
378
|
+
// =============================================================================
|
|
379
|
+
|
|
380
|
+
/** Position disponibles pour FDrawer */
|
|
381
|
+
export type FDrawerPosition = 'left' | 'right' | 'top' | 'bottom';
|
|
382
|
+
|
|
383
|
+
/** Tailles disponibles pour FDrawer */
|
|
384
|
+
export type FDrawerSize = 'small' | 'medium' | 'large' | 'xl';
|
|
385
|
+
|
|
386
|
+
/** Props du composant FDrawer */
|
|
387
|
+
export interface FDrawerProps {
|
|
388
|
+
value?: boolean;
|
|
389
|
+
title?: string;
|
|
390
|
+
position?: FDrawerPosition;
|
|
391
|
+
size?: FDrawerSize;
|
|
392
|
+
closeOnEscape?: boolean;
|
|
393
|
+
closeOnBackdrop?: boolean;
|
|
394
|
+
showCloseButton?: boolean;
|
|
395
|
+
persistent?: boolean;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/** Événements émis par FDrawer */
|
|
399
|
+
export interface FDrawerEvents {
|
|
400
|
+
input: (value: boolean) => void;
|
|
401
|
+
close: () => void;
|
|
402
|
+
open: () => void;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/** Slots disponibles pour FDrawer */
|
|
406
|
+
export interface FDrawerSlots {
|
|
407
|
+
/** Slot par défaut pour le contenu du drawer */
|
|
408
|
+
default: void;
|
|
409
|
+
/** Slot pour le header personnalisé */
|
|
410
|
+
header?: void;
|
|
411
|
+
/** Slot pour le footer avec actions */
|
|
412
|
+
footer?: void;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// =============================================================================
|
|
416
|
+
// FCard Types
|
|
417
|
+
// =============================================================================
|
|
418
|
+
|
|
419
|
+
/** Props du composant FCard */
|
|
420
|
+
export interface FCardProps {
|
|
421
|
+
title?: string;
|
|
422
|
+
subtitle?: string;
|
|
423
|
+
clickable?: boolean;
|
|
424
|
+
bordered?: boolean;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/** Événements émis par FCard */
|
|
428
|
+
export interface FCardEvents {
|
|
429
|
+
click: (event: MouseEvent) => void;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/** Slots disponibles pour FCard */
|
|
433
|
+
export interface FCardSlots {
|
|
434
|
+
/** Slot par défaut pour le contenu principal */
|
|
435
|
+
default: void;
|
|
436
|
+
/** Slot pour le header personnalisé */
|
|
437
|
+
header?: void;
|
|
438
|
+
/** Slot pour les médias (images, vidéos) */
|
|
439
|
+
media?: void;
|
|
440
|
+
/** Slot pour les actions en bas de la carte */
|
|
441
|
+
actions?: void;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// =============================================================================
|
|
445
|
+
// FAlert Types
|
|
446
|
+
// =============================================================================
|
|
447
|
+
|
|
448
|
+
/** Variants disponibles pour FAlert */
|
|
449
|
+
export type FAlertVariant = 'info' | 'success' | 'warning' | 'danger';
|
|
450
|
+
|
|
451
|
+
/** Props du composant FAlert */
|
|
452
|
+
export interface FAlertProps {
|
|
453
|
+
variant?: FAlertVariant;
|
|
454
|
+
title?: string;
|
|
455
|
+
message?: string;
|
|
456
|
+
dismissible?: boolean;
|
|
457
|
+
icon?: string | null;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/** Événements émis par FAlert */
|
|
461
|
+
export interface FAlertEvents {
|
|
462
|
+
close: () => void;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/** Slots disponibles pour FAlert */
|
|
466
|
+
export interface FAlertSlots {
|
|
467
|
+
/** Slot par défaut pour le contenu du message */
|
|
468
|
+
default?: void;
|
|
469
|
+
/** Slot pour le titre */
|
|
470
|
+
title?: void;
|
|
471
|
+
/** Slot pour l'icône personnalisée */
|
|
472
|
+
icon?: void;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// =============================================================================
|
|
476
|
+
// FToast Types
|
|
477
|
+
// =============================================================================
|
|
478
|
+
|
|
479
|
+
/** Variants disponibles pour FToast */
|
|
480
|
+
export type FToastVariant = 'info' | 'success' | 'warning' | 'error';
|
|
481
|
+
|
|
482
|
+
/** Positions disponibles pour FToast */
|
|
483
|
+
export type FToastPosition =
|
|
484
|
+
| 'top-left'
|
|
485
|
+
| 'top-center'
|
|
486
|
+
| 'top-right'
|
|
487
|
+
| 'bottom-left'
|
|
488
|
+
| 'bottom-center'
|
|
489
|
+
| 'bottom-right';
|
|
490
|
+
|
|
491
|
+
/** Props du composant FToast */
|
|
492
|
+
export interface FToastProps {
|
|
493
|
+
variant?: FToastVariant;
|
|
494
|
+
title?: string;
|
|
495
|
+
message?: string;
|
|
496
|
+
duration?: number;
|
|
497
|
+
dismissible?: boolean;
|
|
498
|
+
icon?: string | null;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/** Événements émis par FToast */
|
|
502
|
+
export interface FToastEvents {
|
|
503
|
+
close: () => void;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/** Configuration pour afficher un toast */
|
|
507
|
+
export interface ToastConfig {
|
|
508
|
+
variant?: FToastVariant;
|
|
509
|
+
title?: string;
|
|
510
|
+
message: string;
|
|
511
|
+
duration?: number;
|
|
512
|
+
dismissible?: boolean;
|
|
513
|
+
icon?: string | null;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// =============================================================================
|
|
517
|
+
// FPagination Types
|
|
518
|
+
// =============================================================================
|
|
519
|
+
|
|
520
|
+
/** Props du composant FPagination */
|
|
521
|
+
export interface FPaginationProps {
|
|
522
|
+
currentPage?: number;
|
|
523
|
+
totalPages: number;
|
|
524
|
+
maxVisiblePages?: number;
|
|
525
|
+
showFirstLast?: boolean;
|
|
526
|
+
showPrevNext?: boolean;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/** Événements émis par FPagination */
|
|
530
|
+
export interface FPaginationEvents {
|
|
531
|
+
'page-change': (page: number) => void;
|
|
532
|
+
'update:currentPage': (page: number) => void;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
// =============================================================================
|
|
536
|
+
// FDataTable Slots Types
|
|
537
|
+
// =============================================================================
|
|
538
|
+
|
|
539
|
+
/** Context pour le slot cell d'une table */
|
|
540
|
+
export interface FDataTableCellSlotContext<T = Record<string, unknown>> {
|
|
541
|
+
/** Valeur de la cellule */
|
|
542
|
+
value: unknown;
|
|
543
|
+
/** Ligne complète de données */
|
|
544
|
+
row: T;
|
|
545
|
+
/** Définition de la colonne */
|
|
546
|
+
column: FDataTableColumn;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/** Context pour le slot actions d'une table */
|
|
550
|
+
export interface FDataTableActionsSlotContext<T = Record<string, unknown>> {
|
|
551
|
+
/** Éléments sélectionnés */
|
|
552
|
+
selectedItems: T[];
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/** Slots disponibles pour FDataTable */
|
|
556
|
+
export interface FDataTableSlots<T = Record<string, unknown>> {
|
|
557
|
+
/** Slot dynamique pour personnaliser une cellule. Nom: `cell-{columnKey}` */
|
|
558
|
+
[key: `cell-${string}`]: (context: FDataTableCellSlotContext<T>) => void;
|
|
559
|
+
/** Slot pour les actions personnalisées dans la barre d'outils */
|
|
560
|
+
actions?: (context: FDataTableActionsSlotContext<T>) => void;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
// =============================================================================
|
|
564
|
+
// FEmptyState Types
|
|
565
|
+
// =============================================================================
|
|
566
|
+
|
|
567
|
+
/** Props du composant FEmptyState */
|
|
568
|
+
export interface FEmptyStateProps {
|
|
569
|
+
icon?: string;
|
|
570
|
+
title?: string;
|
|
571
|
+
description?: string;
|
|
572
|
+
actionLabel?: string;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/** Événements émis par FEmptyState */
|
|
576
|
+
export interface FEmptyStateEvents {
|
|
577
|
+
action: () => void;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
/** Slots disponibles pour FEmptyState */
|
|
581
|
+
export interface FEmptyStateSlots {
|
|
582
|
+
/** Slot pour le contenu par défaut */
|
|
583
|
+
default?: void;
|
|
584
|
+
/** Slot pour l'icône personnalisée */
|
|
585
|
+
icon?: void;
|
|
586
|
+
/** Slot pour les actions personnalisées */
|
|
587
|
+
actions?: void;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
// =============================================================================
|
|
591
|
+
// FSearchBar Types
|
|
592
|
+
// =============================================================================
|
|
593
|
+
|
|
594
|
+
/** Tailles disponibles pour FSearchBar */
|
|
595
|
+
export type FSearchBarSize = 'small' | 'medium' | 'large';
|
|
596
|
+
|
|
597
|
+
/** Props du composant FSearchBar */
|
|
598
|
+
export interface FSearchBarProps {
|
|
599
|
+
value?: string;
|
|
600
|
+
placeholder?: string;
|
|
601
|
+
size?: FSearchBarSize;
|
|
602
|
+
disabled?: boolean;
|
|
603
|
+
loading?: boolean;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
/** Événements émis par FSearchBar */
|
|
607
|
+
export interface FSearchBarEvents {
|
|
608
|
+
input: (value: string) => void;
|
|
609
|
+
search: (value: string) => void;
|
|
610
|
+
clear: () => void;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// =============================================================================
|
|
614
|
+
// FBreadcrumb Types
|
|
615
|
+
// =============================================================================
|
|
616
|
+
|
|
617
|
+
/** Item de breadcrumb */
|
|
618
|
+
export interface BreadcrumbItem {
|
|
619
|
+
label: string;
|
|
620
|
+
to?: string | RouteLocation;
|
|
621
|
+
href?: string;
|
|
622
|
+
disabled?: boolean;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
/** Props du composant FBreadcrumb */
|
|
626
|
+
export interface FBreadcrumbProps {
|
|
627
|
+
items: BreadcrumbItem[];
|
|
628
|
+
separator?: string;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/** Événements émis par FBreadcrumb */
|
|
632
|
+
export interface FBreadcrumbEvents {
|
|
633
|
+
click: (item: BreadcrumbItem, index: number) => void;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// =============================================================================
|
|
637
|
+
// FAvatar Types
|
|
638
|
+
// =============================================================================
|
|
639
|
+
|
|
640
|
+
/** Tailles disponibles pour FAvatar */
|
|
641
|
+
export type FAvatarSize = 'xs' | 'small' | 'medium' | 'large' | 'xl' | '2xl';
|
|
642
|
+
|
|
643
|
+
/** Formes disponibles pour FAvatar */
|
|
644
|
+
export type FAvatarShape = 'circle' | 'square' | 'rounded';
|
|
645
|
+
|
|
646
|
+
/** Status disponibles pour FAvatar */
|
|
647
|
+
export type FAvatarStatus = 'online' | 'offline' | 'away' | 'busy' | null;
|
|
648
|
+
|
|
649
|
+
/** Props du composant FAvatar */
|
|
650
|
+
export interface FAvatarProps {
|
|
651
|
+
src?: string;
|
|
652
|
+
alt?: string;
|
|
653
|
+
initials?: string;
|
|
654
|
+
name?: string;
|
|
655
|
+
size?: FAvatarSize;
|
|
656
|
+
shape?: FAvatarShape;
|
|
657
|
+
status?: FAvatarStatus;
|
|
658
|
+
placeholderClass?: string;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// =============================================================================
|
|
662
|
+
// FBadge Types
|
|
663
|
+
// =============================================================================
|
|
664
|
+
|
|
665
|
+
/** Variants disponibles pour FBadge */
|
|
666
|
+
export type FBadgeVariant =
|
|
667
|
+
| 'primary'
|
|
668
|
+
| 'secondary'
|
|
669
|
+
| 'success'
|
|
670
|
+
| 'danger'
|
|
671
|
+
| 'warning'
|
|
672
|
+
| 'info'
|
|
673
|
+
| 'neutral';
|
|
674
|
+
|
|
675
|
+
/** Tailles disponibles pour FBadge */
|
|
676
|
+
export type FBadgeSize = 'small' | 'medium' | 'large';
|
|
677
|
+
|
|
678
|
+
/** Props du composant FBadge */
|
|
679
|
+
export interface FBadgeProps {
|
|
680
|
+
variant?: FBadgeVariant;
|
|
681
|
+
size?: FBadgeSize;
|
|
682
|
+
rounded?: boolean;
|
|
683
|
+
outlined?: boolean;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
// =============================================================================
|
|
687
|
+
// FIcon Types
|
|
688
|
+
// =============================================================================
|
|
689
|
+
|
|
690
|
+
/** Tailles disponibles pour FIcon */
|
|
691
|
+
export type FIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
692
|
+
|
|
693
|
+
/** Props du composant FIcon */
|
|
694
|
+
export interface FIconProps {
|
|
695
|
+
name: string;
|
|
696
|
+
size?: FIconSize;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// =============================================================================
|
|
700
|
+
// FLoader Types
|
|
701
|
+
// =============================================================================
|
|
702
|
+
|
|
703
|
+
/** Tailles disponibles pour FLoader */
|
|
704
|
+
export type FLoaderSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
705
|
+
|
|
706
|
+
/** Variants disponibles pour FLoader */
|
|
707
|
+
export type FLoaderVariant = 'spinner' | 'dots' | 'pulse';
|
|
708
|
+
|
|
709
|
+
/** Props du composant FLoader */
|
|
710
|
+
export interface FLoaderProps {
|
|
711
|
+
size?: FLoaderSize;
|
|
712
|
+
variant?: FLoaderVariant;
|
|
713
|
+
text?: string;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// =============================================================================
|
|
717
|
+
// FFormField Types
|
|
718
|
+
// =============================================================================
|
|
719
|
+
|
|
720
|
+
/** Props du composant FFormField */
|
|
721
|
+
export interface FFormFieldProps {
|
|
722
|
+
label?: string;
|
|
723
|
+
hint?: string;
|
|
724
|
+
error?: string;
|
|
725
|
+
required?: boolean;
|
|
726
|
+
optional?: boolean;
|
|
727
|
+
labelFor?: string;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
/** Slots disponibles pour FFormField */
|
|
731
|
+
export interface FFormFieldSlots {
|
|
732
|
+
/** Slot par défaut pour le champ de formulaire */
|
|
733
|
+
default: void;
|
|
734
|
+
/** Slot pour le label personnalisé */
|
|
735
|
+
label?: void;
|
|
736
|
+
/** Slot pour l'indication (hint) */
|
|
737
|
+
hint?: void;
|
|
738
|
+
/** Slot pour le message d'erreur */
|
|
739
|
+
error?: void;
|
|
740
|
+
}
|