@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.
Files changed (210) hide show
  1. package/README.md +119 -0
  2. package/dist/fabric.cjs.js +18109 -0
  3. package/dist/fabric.css +2180 -0
  4. package/dist/fabric.esm.js +18062 -0
  5. package/dist/fabric.min.js +18112 -0
  6. package/dist/types/components/atoms/FAvatar/FAvatar.test.d.ts +1 -0
  7. package/dist/types/components/atoms/FBadge/FBadge.test.d.ts +1 -0
  8. package/dist/types/components/atoms/FButton/FButton.test.d.ts +1 -0
  9. package/dist/types/components/atoms/FCheckbox/FCheckbox.test.d.ts +1 -0
  10. package/dist/types/components/atoms/FDivider/FDivider.test.d.ts +1 -0
  11. package/dist/types/components/atoms/FIcon/FIcon.test.d.ts +1 -0
  12. package/dist/types/components/atoms/FInput/FInput.test.d.ts +1 -0
  13. package/dist/types/components/atoms/FLoader/FLoader.test.d.ts +1 -0
  14. package/dist/types/components/atoms/FRadio/FRadio.test.d.ts +1 -0
  15. package/dist/types/components/atoms/FTextarea/FTextarea.test.d.ts +1 -0
  16. package/dist/types/components/atoms/FToggle/FToggle.test.d.ts +1 -0
  17. package/dist/types/components/atoms/FTypography/FTypography.test.d.ts +1 -0
  18. package/dist/types/components/atoms/index.d.ts +13 -0
  19. package/dist/types/components/molecules/FAccordionItem/FAccordionItem.test.d.ts +1 -0
  20. package/dist/types/components/molecules/FAlert/FAlert.test.d.ts +1 -0
  21. package/dist/types/components/molecules/FBreadcrumb/FBreadcrumb.test.d.ts +1 -0
  22. package/dist/types/components/molecules/FButtonGroup/FButtonGroup.test.d.ts +1 -0
  23. package/dist/types/components/molecules/FCard/FCard.test.d.ts +1 -0
  24. package/dist/types/components/molecules/FDatePicker/FDatePicker.test.d.ts +1 -0
  25. package/dist/types/components/molecules/FEmptyState/FEmptyState.test.d.ts +1 -0
  26. package/dist/types/components/molecules/FFilePreview/FFilePreview.test.d.ts +1 -0
  27. package/dist/types/components/molecules/FFormField/FFormField.test.d.ts +1 -0
  28. package/dist/types/components/molecules/FListItem/FListItem.test.d.ts +1 -0
  29. package/dist/types/components/molecules/FPagination/FPagination.test.d.ts +1 -0
  30. package/dist/types/components/molecules/FSearchBar/FSearchBar.test.d.ts +1 -0
  31. package/dist/types/components/molecules/FSelect/FSelect.test.d.ts +1 -0
  32. package/dist/types/components/molecules/FStatCard/FStatCard.test.d.ts +1 -0
  33. package/dist/types/components/molecules/FTabs/FTabs.test.d.ts +1 -0
  34. package/dist/types/components/molecules/FToast/FToast.test.d.ts +1 -0
  35. package/dist/types/components/molecules/index.d.ts +18 -0
  36. package/dist/types/components/organisms/FActivityFeed/FActivityFeed.test.d.ts +1 -0
  37. package/dist/types/components/organisms/FDataTable/FDataTable.test.d.ts +1 -0
  38. package/dist/types/components/organisms/FDrawer/FDrawer.test.d.ts +1 -0
  39. package/dist/types/components/organisms/FFileUpload/FFileUpload.test.d.ts +1 -0
  40. package/dist/types/components/organisms/FFilterSidebar/FFilterSidebar.test.d.ts +1 -0
  41. package/dist/types/components/organisms/FForm/FForm.test.d.ts +1 -0
  42. package/dist/types/components/organisms/FModal/FModal.test.d.ts +1 -0
  43. package/dist/types/components/organisms/FNavigationSidebar/FNavigationSidebar.test.d.ts +1 -0
  44. package/dist/types/components/organisms/FOnboardingStepper/FOnboardingStepper.test.d.ts +1 -0
  45. package/dist/types/components/organisms/FOnboardingStepper/FStepperProgress.test.d.ts +1 -0
  46. package/dist/types/components/organisms/FPageHeader/FPageHeader.test.d.ts +1 -0
  47. package/dist/types/components/organisms/FProfileSection/FProfileSection.test.d.ts +1 -0
  48. package/dist/types/components/organisms/FToastProvider/FToastProvider.test.d.ts +1 -0
  49. package/dist/types/components/organisms/FUserMenu/FUserMenu.test.d.ts +1 -0
  50. package/dist/types/components/organisms/index.d.ts +14 -0
  51. package/dist/types/components/utils/FThemeProvider.test.d.ts +1 -0
  52. package/dist/types/components/utils/index.d.ts +2 -0
  53. package/dist/types/components.d.ts +602 -0
  54. package/dist/types/composables/index.d.ts +12 -0
  55. package/dist/types/composables/useDataTableState.d.ts +106 -0
  56. package/dist/types/composables/useDataTableState.test.d.ts +1 -0
  57. package/dist/types/composables/useFormValidation.d.ts +49 -0
  58. package/dist/types/composables/useFormValidation.test.d.ts +1 -0
  59. package/dist/types/composables/useSidebarState.d.ts +65 -0
  60. package/dist/types/composables/useSidebarState.test.d.ts +1 -0
  61. package/dist/types/index.d.ts +19 -0
  62. package/dist/types/types.d.ts +529 -0
  63. package/package.json +100 -0
  64. package/src/components/atoms/FAvatar/FAvatar.stories.js +100 -0
  65. package/src/components/atoms/FAvatar/FAvatar.test.ts +95 -0
  66. package/src/components/atoms/FAvatar/FAvatar.vue +190 -0
  67. package/src/components/atoms/FBadge/FBadge.stories.js +129 -0
  68. package/src/components/atoms/FBadge/FBadge.test.ts +93 -0
  69. package/src/components/atoms/FBadge/FBadge.vue +103 -0
  70. package/src/components/atoms/FButton/FButton.stories.js +122 -0
  71. package/src/components/atoms/FButton/FButton.test.ts +98 -0
  72. package/src/components/atoms/FButton/FButton.vue +147 -0
  73. package/src/components/atoms/FCheckbox/FCheckbox.stories.js +96 -0
  74. package/src/components/atoms/FCheckbox/FCheckbox.test.ts +64 -0
  75. package/src/components/atoms/FCheckbox/FCheckbox.vue +76 -0
  76. package/src/components/atoms/FDivider/FDivider.stories.js +104 -0
  77. package/src/components/atoms/FDivider/FDivider.test.ts +80 -0
  78. package/src/components/atoms/FDivider/FDivider.vue +117 -0
  79. package/src/components/atoms/FIcon/FIcon.stories.js +189 -0
  80. package/src/components/atoms/FIcon/FIcon.test.ts +99 -0
  81. package/src/components/atoms/FIcon/FIcon.vue +192 -0
  82. package/src/components/atoms/FInput/FInput.stories.js +119 -0
  83. package/src/components/atoms/FInput/FInput.test.ts +79 -0
  84. package/src/components/atoms/FInput/FInput.vue +88 -0
  85. package/src/components/atoms/FLoader/FLoader.stories.js +109 -0
  86. package/src/components/atoms/FLoader/FLoader.test.ts +66 -0
  87. package/src/components/atoms/FLoader/FLoader.vue +97 -0
  88. package/src/components/atoms/FRadio/FRadio.stories.js +105 -0
  89. package/src/components/atoms/FRadio/FRadio.test.ts +75 -0
  90. package/src/components/atoms/FRadio/FRadio.vue +119 -0
  91. package/src/components/atoms/FTextarea/FTextarea.stories.js +126 -0
  92. package/src/components/atoms/FTextarea/FTextarea.test.ts +94 -0
  93. package/src/components/atoms/FTextarea/FTextarea.vue +156 -0
  94. package/src/components/atoms/FToggle/FToggle.stories.js +108 -0
  95. package/src/components/atoms/FToggle/FToggle.test.ts +96 -0
  96. package/src/components/atoms/FToggle/FToggle.vue +123 -0
  97. package/src/components/atoms/FTypography/FTypography.stories.js +127 -0
  98. package/src/components/atoms/FTypography/FTypography.test.ts +93 -0
  99. package/src/components/atoms/FTypography/FTypography.vue +78 -0
  100. package/src/components/atoms/index.ts +27 -0
  101. package/src/components/molecules/FAccordionItem/FAccordionItem.stories.js +71 -0
  102. package/src/components/molecules/FAccordionItem/FAccordionItem.test.ts +61 -0
  103. package/src/components/molecules/FAccordionItem/FAccordionItem.vue +105 -0
  104. package/src/components/molecules/FAlert/FAlert.stories.js +87 -0
  105. package/src/components/molecules/FAlert/FAlert.test.ts +59 -0
  106. package/src/components/molecules/FAlert/FAlert.vue +108 -0
  107. package/src/components/molecules/FBreadcrumb/FBreadcrumb.stories.js +90 -0
  108. package/src/components/molecules/FBreadcrumb/FBreadcrumb.test.ts +76 -0
  109. package/src/components/molecules/FBreadcrumb/FBreadcrumb.vue +117 -0
  110. package/src/components/molecules/FButtonGroup/FButtonGroup.stories.js +82 -0
  111. package/src/components/molecules/FButtonGroup/FButtonGroup.test.ts +44 -0
  112. package/src/components/molecules/FButtonGroup/FButtonGroup.vue +31 -0
  113. package/src/components/molecules/FCard/FCard.stories.js +136 -0
  114. package/src/components/molecules/FCard/FCard.test.ts +87 -0
  115. package/src/components/molecules/FCard/FCard.vue +75 -0
  116. package/src/components/molecules/FDatePicker/FDatePicker.stories.js +305 -0
  117. package/src/components/molecules/FDatePicker/FDatePicker.test.ts +282 -0
  118. package/src/components/molecules/FDatePicker/FDatePicker.vue +750 -0
  119. package/src/components/molecules/FEmptyState/FEmptyState.stories.js +98 -0
  120. package/src/components/molecules/FEmptyState/FEmptyState.test.ts +82 -0
  121. package/src/components/molecules/FEmptyState/FEmptyState.vue +89 -0
  122. package/src/components/molecules/FFilePreview/FFilePreview.stories.js +130 -0
  123. package/src/components/molecules/FFilePreview/FFilePreview.test.ts +70 -0
  124. package/src/components/molecules/FFilePreview/FFilePreview.vue +125 -0
  125. package/src/components/molecules/FFormField/FFormField.stories.js +149 -0
  126. package/src/components/molecules/FFormField/FFormField.test.ts +85 -0
  127. package/src/components/molecules/FFormField/FFormField.vue +107 -0
  128. package/src/components/molecules/FListItem/FListItem.stories.js +158 -0
  129. package/src/components/molecules/FListItem/FListItem.test.ts +93 -0
  130. package/src/components/molecules/FListItem/FListItem.vue +113 -0
  131. package/src/components/molecules/FPagination/FPagination.stories.js +132 -0
  132. package/src/components/molecules/FPagination/FPagination.test.ts +79 -0
  133. package/src/components/molecules/FPagination/FPagination.vue +206 -0
  134. package/src/components/molecules/FSearchBar/FSearchBar.stories.js +129 -0
  135. package/src/components/molecules/FSearchBar/FSearchBar.test.ts +81 -0
  136. package/src/components/molecules/FSearchBar/FSearchBar.vue +180 -0
  137. package/src/components/molecules/FSelect/FSelect.stories.js +333 -0
  138. package/src/components/molecules/FSelect/FSelect.test.ts +478 -0
  139. package/src/components/molecules/FSelect/FSelect.vue +551 -0
  140. package/src/components/molecules/FStatCard/FStatCard.stories.js +144 -0
  141. package/src/components/molecules/FStatCard/FStatCard.test.ts +78 -0
  142. package/src/components/molecules/FStatCard/FStatCard.vue +106 -0
  143. package/src/components/molecules/FTabs/FTab.vue +63 -0
  144. package/src/components/molecules/FTabs/FTabs.stories.js +277 -0
  145. package/src/components/molecules/FTabs/FTabs.test.ts +264 -0
  146. package/src/components/molecules/FTabs/FTabs.vue +273 -0
  147. package/src/components/molecules/FToast/FToast.stories.js +150 -0
  148. package/src/components/molecules/FToast/FToast.test.ts +157 -0
  149. package/src/components/molecules/FToast/FToast.vue +283 -0
  150. package/src/components/molecules/index.ts +37 -0
  151. package/src/components/organisms/FActivityFeed/FActivityFeed.stories.js +217 -0
  152. package/src/components/organisms/FActivityFeed/FActivityFeed.test.ts +134 -0
  153. package/src/components/organisms/FActivityFeed/FActivityFeed.vue +589 -0
  154. package/src/components/organisms/FDataTable/FDataTable.stories.js +370 -0
  155. package/src/components/organisms/FDataTable/FDataTable.test.ts +248 -0
  156. package/src/components/organisms/FDataTable/FDataTable.vue +808 -0
  157. package/src/components/organisms/FDrawer/FDrawer.stories.js +296 -0
  158. package/src/components/organisms/FDrawer/FDrawer.test.ts +142 -0
  159. package/src/components/organisms/FDrawer/FDrawer.vue +303 -0
  160. package/src/components/organisms/FFileUpload/FFileUpload.stories.js +162 -0
  161. package/src/components/organisms/FFileUpload/FFileUpload.test.ts +103 -0
  162. package/src/components/organisms/FFileUpload/FFileUpload.vue +616 -0
  163. package/src/components/organisms/FFilterSidebar/FFilterSidebar.stories.js +161 -0
  164. package/src/components/organisms/FFilterSidebar/FFilterSidebar.test.ts +92 -0
  165. package/src/components/organisms/FFilterSidebar/FFilterSidebar.vue +458 -0
  166. package/src/components/organisms/FForm/FForm.stories.js +270 -0
  167. package/src/components/organisms/FForm/FForm.test.ts +63 -0
  168. package/src/components/organisms/FForm/FForm.vue +19 -0
  169. package/src/components/organisms/FModal/FModal.stories.js +227 -0
  170. package/src/components/organisms/FModal/FModal.test.ts +181 -0
  171. package/src/components/organisms/FModal/FModal.vue +319 -0
  172. package/src/components/organisms/FNavigationSidebar/FNavigationSidebar.stories.js +176 -0
  173. package/src/components/organisms/FNavigationSidebar/FNavigationSidebar.test.ts +95 -0
  174. package/src/components/organisms/FNavigationSidebar/FNavigationSidebar.vue +577 -0
  175. package/src/components/organisms/FOnboardingStepper/FOnboardingStepper.stories.js +197 -0
  176. package/src/components/organisms/FOnboardingStepper/FOnboardingStepper.test.ts +114 -0
  177. package/src/components/organisms/FOnboardingStepper/FOnboardingStepper.vue +212 -0
  178. package/src/components/organisms/FOnboardingStepper/FStepperProgress.stories.js +122 -0
  179. package/src/components/organisms/FOnboardingStepper/FStepperProgress.test.ts +130 -0
  180. package/src/components/organisms/FOnboardingStepper/FStepperProgress.vue +146 -0
  181. package/src/components/organisms/FPageHeader/FPageHeader.stories.js +142 -0
  182. package/src/components/organisms/FPageHeader/FPageHeader.test.ts +83 -0
  183. package/src/components/organisms/FPageHeader/FPageHeader.vue +241 -0
  184. package/src/components/organisms/FProfileSection/FProfileSection.stories.js +190 -0
  185. package/src/components/organisms/FProfileSection/FProfileSection.test.ts +85 -0
  186. package/src/components/organisms/FProfileSection/FProfileSection.vue +562 -0
  187. package/src/components/organisms/FToastProvider/FToastProvider.stories.js +290 -0
  188. package/src/components/organisms/FToastProvider/FToastProvider.test.ts +215 -0
  189. package/src/components/organisms/FToastProvider/FToastProvider.vue +214 -0
  190. package/src/components/organisms/FUserMenu/FUserMenu.stories.js +170 -0
  191. package/src/components/organisms/FUserMenu/FUserMenu.test.ts +102 -0
  192. package/src/components/organisms/FUserMenu/FUserMenu.vue +407 -0
  193. package/src/components/organisms/index.ts +29 -0
  194. package/src/components/utils/FThemeProvider.stories.js +236 -0
  195. package/src/components/utils/FThemeProvider.test.ts +244 -0
  196. package/src/components/utils/FThemeProvider.vue +191 -0
  197. package/src/components/utils/index.ts +3 -0
  198. package/src/components.d.ts +602 -0
  199. package/src/composables/README.md +233 -0
  200. package/src/composables/index.ts +25 -0
  201. package/src/composables/useDataTableState.test.ts +378 -0
  202. package/src/composables/useDataTableState.ts +361 -0
  203. package/src/composables/useFormValidation.test.ts +198 -0
  204. package/src/composables/useFormValidation.ts +178 -0
  205. package/src/composables/useSidebarState.test.ts +307 -0
  206. package/src/composables/useSidebarState.ts +201 -0
  207. package/src/env.d.ts +14 -0
  208. package/src/index.ts +167 -0
  209. package/src/styles/tailwind.css +173 -0
  210. package/src/types.ts +740 -0
@@ -0,0 +1,49 @@
1
+ import { Ref } from 'vue';
2
+ /**
3
+ * Configuration options for useFormValidation
4
+ */
5
+ export interface FormValidationOptions {
6
+ /**
7
+ * Initial form data
8
+ */
9
+ initialData?: Record<string, any>;
10
+ }
11
+ /**
12
+ * Return type for useFormValidation
13
+ */
14
+ export interface FormValidationState {
15
+ formData: Ref<Record<string, any>>;
16
+ errors: Ref<Record<string, string>>;
17
+ isValid: Ref<boolean>;
18
+ isSubmitting: Ref<boolean>;
19
+ handleSubmit: (event: Event, callback?: (data: Record<string, any>) => void | Promise<void>) => Promise<void>;
20
+ setFieldValue: (field: string, value: any) => void;
21
+ setFieldError: (field: string, error: string) => void;
22
+ clearFieldError: (field: string) => void;
23
+ clearErrors: () => void;
24
+ reset: () => void;
25
+ validate: () => boolean;
26
+ }
27
+ /**
28
+ * Composable for managing form validation and submission
29
+ *
30
+ * Provides a simple interface for form handling with built-in validation state.
31
+ * Can be extended with custom validation logic.
32
+ *
33
+ * @param options - Configuration options for the form validation
34
+ * @param emit - Emit function from the component setup
35
+ * @returns Object containing reactive state and methods for form operations
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const formState = useFormValidation({
40
+ * initialData: { name: '', email: '' }
41
+ * }, emit);
42
+ *
43
+ * // In submit handler
44
+ * await formState.handleSubmit(event, async (data) => {
45
+ * await api.submitForm(data);
46
+ * });
47
+ * ```
48
+ */
49
+ export declare function useFormValidation(options: FormValidationOptions | undefined, emit: (event: string, ...args: any[]) => void): FormValidationState;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ import { Ref, ComputedRef } from 'vue';
2
+ /**
3
+ * Navigation item structure
4
+ */
5
+ export interface NavigationItem {
6
+ id?: string;
7
+ label?: string;
8
+ icon?: string;
9
+ href?: string;
10
+ to?: string;
11
+ children?: NavigationItem[];
12
+ badge?: string | number;
13
+ badgeVariant?: string;
14
+ disabled?: boolean;
15
+ type?: 'link' | 'group' | 'divider';
16
+ }
17
+ /**
18
+ * Configuration options for useSidebarState
19
+ */
20
+ export interface SidebarStateOptions {
21
+ /**
22
+ * Navigation items configuration
23
+ */
24
+ items: NavigationItem[];
25
+ /**
26
+ * Initial collapsed state
27
+ */
28
+ initialCollapsed?: boolean;
29
+ /**
30
+ * Current active route path
31
+ */
32
+ activeRoute?: string;
33
+ }
34
+ /**
35
+ * Return type for useSidebarState
36
+ */
37
+ export interface SidebarState {
38
+ collapsed: Ref<boolean>;
39
+ openSubmenus: Ref<string[]>;
40
+ navigationItems: ComputedRef<NavigationItem[]>;
41
+ toggleCollapsed: () => void;
42
+ isSubmenuOpen: (item: NavigationItem) => boolean;
43
+ toggleSubmenu: (item: NavigationItem) => void;
44
+ isItemActive: (item: NavigationItem) => boolean;
45
+ hasActiveChild: (item: NavigationItem) => boolean;
46
+ initializeOpenSubmenus: () => void;
47
+ }
48
+ /**
49
+ * Composable for managing navigation sidebar state
50
+ *
51
+ * Handles collapsed state, submenu navigation, and active route detection.
52
+ *
53
+ * @param options - Configuration options for the sidebar state
54
+ * @param emit - Emit function from the component setup
55
+ * @returns Object containing reactive state and methods for sidebar operations
56
+ *
57
+ * @example
58
+ * ```ts
59
+ * const sidebarState = useSidebarState({
60
+ * items: navigationItems,
61
+ * activeRoute: '/dashboard'
62
+ * }, emit);
63
+ * ```
64
+ */
65
+ export declare function useSidebarState(options: SidebarStateOptions, emit: (event: string, ...args: any[]) => void): SidebarState;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ import './styles/tailwind.css';
2
+ import { FAvatar, FBadge, FButton, FCheckbox, FDivider, FIcon, FInput, FLoader, FRadio, FTextarea, FToggle, FTypography } from './components/atoms';
3
+ import { FAccordionItem, FAlert, FBreadcrumb, FButtonGroup, FDatePicker, FEmptyState, FFilePreview, FFormField, FCard, FSearchBar, FListItem, FPagination, FSelect, FTabs, FTab, FToast } from './components/molecules';
4
+ import { FActivityFeed, FForm, FDataTable, FDrawer, FFileUpload, FPageHeader, FModal, FUserMenu, FOnboardingStepper, FProfileSection, FToastProvider } from './components/organisms';
5
+ import { FThemeProvider } from './components/utils';
6
+ import type { VueConstructor } from 'vue';
7
+ export * from './types';
8
+ export * from './components';
9
+ export * from './composables';
10
+ declare global {
11
+ interface Window {
12
+ Vue?: VueConstructor;
13
+ }
14
+ }
15
+ declare const _default: {
16
+ install: (Vue: VueConstructor) => void;
17
+ };
18
+ export default _default;
19
+ export { FAccordionItem, FActivityFeed, FAlert, FAvatar, FBadge, FBreadcrumb, FButton, FButtonGroup, FCheckbox, FDataTable, FDatePicker, FDivider, FDrawer, FEmptyState, FFilePreview, FFileUpload, FIcon, FInput, FListItem, FLoader, FModal, FOnboardingStepper, FPageHeader, FProfileSection, FRadio, FSelect, FTab, FTabs, FTextarea, FToggle, FTypography, FFormField, FCard, FForm, FSearchBar, FPagination, FUserMenu, FToast, FToastProvider, FThemeProvider };
@@ -0,0 +1,529 @@
1
+ /** Variants disponibles pour FButton */
2
+ export type FButtonVariant = 'primary' | 'secondary' | 'danger' | 'success' | 'outline' | 'ghost' | 'link';
3
+ /** Tailles disponibles pour FButton */
4
+ export type FButtonSize = 'xs' | 'small' | 'medium' | 'large' | 'xl';
5
+ /** Type de route pour router-link */
6
+ export interface RouteLocation {
7
+ name?: string;
8
+ path?: string;
9
+ params?: Record<string, string>;
10
+ query?: Record<string, string>;
11
+ }
12
+ /** Props du composant FButton */
13
+ export interface FButtonProps {
14
+ variant?: FButtonVariant;
15
+ size?: FButtonSize;
16
+ type?: string;
17
+ disabled?: boolean;
18
+ loading?: boolean;
19
+ loadingText?: string;
20
+ block?: boolean;
21
+ to?: string | RouteLocation | null;
22
+ href?: string | null;
23
+ target?: string | null;
24
+ }
25
+ /** Tailles disponibles pour FDataTable */
26
+ export type FDataTableSize = 'small' | 'medium' | 'large';
27
+ /** Direction de tri */
28
+ export type SortDirection = 'asc' | 'desc';
29
+ /** Alignement des colonnes */
30
+ export type ColumnAlign = 'left' | 'center' | 'right';
31
+ /** Définition d'une colonne */
32
+ export interface FDataTableColumn {
33
+ key: string;
34
+ label: string;
35
+ sortable?: boolean;
36
+ align?: ColumnAlign;
37
+ }
38
+ /** Événement de tri émis */
39
+ export interface SortEvent {
40
+ key: string;
41
+ direction: SortDirection;
42
+ }
43
+ /** Événement de sélection émis */
44
+ export interface SelectEvent<T = Record<string, unknown>> {
45
+ row: T;
46
+ selected: boolean;
47
+ }
48
+ /** Type pour les clés de lignes */
49
+ export type RowKey = string | number;
50
+ /** Props du composant FDataTable */
51
+ export interface FDataTableProps<T = Record<string, unknown>> {
52
+ data?: T[];
53
+ columns: FDataTableColumn[];
54
+ rowKey?: string;
55
+ selectable?: boolean;
56
+ selected?: RowKey[];
57
+ searchable?: boolean;
58
+ searchPlaceholder?: string;
59
+ paginated?: boolean;
60
+ perPage?: number;
61
+ page?: number;
62
+ totalItems?: number | null;
63
+ serverMode?: boolean;
64
+ loading?: boolean;
65
+ defaultSortKey?: string | null;
66
+ defaultSortDirection?: SortDirection;
67
+ size?: FDataTableSize;
68
+ emptyIcon?: string;
69
+ emptyTitle?: string;
70
+ emptyDescription?: string;
71
+ emptyActionLabel?: string;
72
+ striped?: boolean;
73
+ hoverable?: boolean;
74
+ bordered?: boolean;
75
+ }
76
+ /** Événements émis par FDataTable */
77
+ export interface FDataTableEvents<T = Record<string, unknown>> {
78
+ 'row-click': (row: T) => void;
79
+ sort: (event: SortEvent) => void;
80
+ search: (query: string) => void;
81
+ 'page-change': (page: number) => void;
82
+ select: (event: SelectEvent<T>) => void;
83
+ 'select-all': (checked: boolean) => void;
84
+ 'empty-action': () => void;
85
+ 'update:page': (page: number) => void;
86
+ 'update:selected': (keys: RowKey[]) => void;
87
+ }
88
+ /** Tailles disponibles pour FSelect */
89
+ export type FSelectSize = 'small' | 'medium' | 'large';
90
+ /** Type pour une option de sélection */
91
+ export type FSelectOption = string | number | Record<string, unknown>;
92
+ /** Fonction de filtrage personnalisée pour FSelect */
93
+ export type FSelectFilterMethod = (query: string, options: FSelectOption[]) => FSelectOption[];
94
+ /** Props du composant FSelect */
95
+ export interface FSelectProps {
96
+ value?: FSelectOption | FSelectOption[] | null;
97
+ options?: FSelectOption[];
98
+ optionKey?: string;
99
+ optionLabel?: string;
100
+ optionDisabled?: string;
101
+ placeholder?: string;
102
+ size?: FSelectSize;
103
+ multiple?: boolean;
104
+ searchable?: boolean;
105
+ searchPlaceholder?: string;
106
+ emptyText?: string;
107
+ loading?: boolean;
108
+ loadingText?: string;
109
+ disabled?: boolean;
110
+ error?: boolean;
111
+ labelId?: string | null;
112
+ filterMethod?: FSelectFilterMethod | null;
113
+ }
114
+ /** Événements émis par FSelect */
115
+ export interface FSelectEvents {
116
+ input: (value: FSelectOption | FSelectOption[]) => void;
117
+ change: (value: FSelectOption | FSelectOption[]) => void;
118
+ open: () => void;
119
+ close: () => void;
120
+ focus: (event: FocusEvent) => void;
121
+ blur: (event: FocusEvent) => void;
122
+ }
123
+ /** Modes disponibles pour FDatePicker */
124
+ export type FDatePickerMode = 'single' | 'range';
125
+ /** Tailles disponibles pour FDatePicker */
126
+ export type FDatePickerSize = 'small' | 'medium' | 'large';
127
+ /** Props du composant FDatePicker */
128
+ export interface FDatePickerProps {
129
+ value?: string | Date | Array<string | Date> | null;
130
+ mode?: FDatePickerMode;
131
+ placeholder?: string;
132
+ format?: string;
133
+ size?: FDatePickerSize;
134
+ disabled?: boolean;
135
+ readonly?: boolean;
136
+ error?: boolean;
137
+ showTimePicker?: boolean;
138
+ minDate?: string | Date | null;
139
+ maxDate?: string | Date | null;
140
+ disabledDates?: Array<string | Date>;
141
+ monthNames?: string[];
142
+ dayNames?: string[];
143
+ firstDayOfWeek?: number;
144
+ }
145
+ /** Événements émis par FDatePicker */
146
+ export interface FDatePickerEvents {
147
+ input: (value: Date | Array<Date> | null) => void;
148
+ change: (value: Date | Array<Date> | null) => void;
149
+ focus: (event: FocusEvent) => void;
150
+ blur: (event: FocusEvent) => void;
151
+ }
152
+ /** Tailles disponibles pour FInput */
153
+ export type FInputSize = 'small' | 'medium' | 'large';
154
+ /** Props du composant FInput */
155
+ export interface FInputProps {
156
+ value?: string | number;
157
+ type?: string;
158
+ placeholder?: string;
159
+ size?: FInputSize;
160
+ disabled?: boolean;
161
+ readonly?: boolean;
162
+ error?: boolean;
163
+ }
164
+ /** Événements émis par FInput */
165
+ export interface FInputEvents {
166
+ input: (value: string) => void;
167
+ focus: (event: FocusEvent) => void;
168
+ blur: (event: FocusEvent) => void;
169
+ }
170
+ /** Tailles disponibles pour FTextarea */
171
+ export type FTextareaSize = 'small' | 'medium' | 'large';
172
+ /** Props du composant FTextarea */
173
+ export interface FTextareaProps {
174
+ value?: string;
175
+ placeholder?: string;
176
+ size?: FTextareaSize;
177
+ disabled?: boolean;
178
+ readonly?: boolean;
179
+ error?: boolean;
180
+ rows?: number;
181
+ resize?: 'none' | 'vertical' | 'horizontal' | 'both';
182
+ }
183
+ /** Événements émis par FTextarea */
184
+ export interface FTextareaEvents {
185
+ input: (value: string) => void;
186
+ focus: (event: FocusEvent) => void;
187
+ blur: (event: FocusEvent) => void;
188
+ }
189
+ /** Props du composant FCheckbox */
190
+ export interface FCheckboxProps {
191
+ value?: boolean;
192
+ checked?: boolean;
193
+ disabled?: boolean;
194
+ label?: string;
195
+ name?: string;
196
+ }
197
+ /** Événements émis par FCheckbox */
198
+ export interface FCheckboxEvents {
199
+ input: (value: boolean) => void;
200
+ change: (value: boolean) => void;
201
+ }
202
+ /** Props du composant FRadio */
203
+ export interface FRadioProps {
204
+ value?: string | number | boolean;
205
+ checked?: boolean;
206
+ disabled?: boolean;
207
+ label?: string;
208
+ name?: string;
209
+ }
210
+ /** Événements émis par FRadio */
211
+ export interface FRadioEvents {
212
+ input: (value: string | number | boolean) => void;
213
+ change: (value: string | number | boolean) => void;
214
+ }
215
+ /** Tailles disponibles pour FToggle */
216
+ export type FToggleSize = 'small' | 'medium' | 'large';
217
+ /** Props du composant FToggle */
218
+ export interface FToggleProps {
219
+ value?: boolean;
220
+ disabled?: boolean;
221
+ size?: FToggleSize;
222
+ label?: string;
223
+ }
224
+ /** Événements émis par FToggle */
225
+ export interface FToggleEvents {
226
+ input: (value: boolean) => void;
227
+ change: (value: boolean) => void;
228
+ }
229
+ /** Variants disponibles pour FTabs */
230
+ export type FTabsVariant = 'default' | 'pills' | 'underline';
231
+ /** Position disponibles pour FTabs */
232
+ export type FTabsPosition = 'top' | 'bottom';
233
+ /** Props du composant FTabs */
234
+ export interface FTabsProps {
235
+ value?: string;
236
+ variant?: FTabsVariant;
237
+ position?: FTabsPosition;
238
+ ariaLabel?: string;
239
+ }
240
+ /** Événements émis par FTabs */
241
+ export interface FTabsEvents {
242
+ input: (value: string) => void;
243
+ change: (value: string) => void;
244
+ }
245
+ /** Props du composant FTab */
246
+ export interface FTabProps {
247
+ name: string;
248
+ label: string;
249
+ disabled?: boolean;
250
+ }
251
+ /** Tailles disponibles pour FModal */
252
+ export type FModalSize = 'small' | 'medium' | 'large' | 'xl';
253
+ /** Props du composant FModal */
254
+ export interface FModalProps {
255
+ value?: boolean;
256
+ title?: string;
257
+ size?: FModalSize;
258
+ closeOnEscape?: boolean;
259
+ closeOnBackdrop?: boolean;
260
+ showCloseButton?: boolean;
261
+ persistent?: boolean;
262
+ }
263
+ /** Événements émis par FModal */
264
+ export interface FModalEvents {
265
+ input: (value: boolean) => void;
266
+ close: () => void;
267
+ open: () => void;
268
+ }
269
+ /** Slots disponibles pour FModal */
270
+ export interface FModalSlots {
271
+ /** Slot par défaut pour le contenu du modal */
272
+ default: void;
273
+ /** Slot pour le header personnalisé */
274
+ header?: void;
275
+ /** Slot pour le footer avec actions */
276
+ footer?: void;
277
+ }
278
+ /** Position disponibles pour FDrawer */
279
+ export type FDrawerPosition = 'left' | 'right' | 'top' | 'bottom';
280
+ /** Tailles disponibles pour FDrawer */
281
+ export type FDrawerSize = 'small' | 'medium' | 'large' | 'xl';
282
+ /** Props du composant FDrawer */
283
+ export interface FDrawerProps {
284
+ value?: boolean;
285
+ title?: string;
286
+ position?: FDrawerPosition;
287
+ size?: FDrawerSize;
288
+ closeOnEscape?: boolean;
289
+ closeOnBackdrop?: boolean;
290
+ showCloseButton?: boolean;
291
+ persistent?: boolean;
292
+ }
293
+ /** Événements émis par FDrawer */
294
+ export interface FDrawerEvents {
295
+ input: (value: boolean) => void;
296
+ close: () => void;
297
+ open: () => void;
298
+ }
299
+ /** Slots disponibles pour FDrawer */
300
+ export interface FDrawerSlots {
301
+ /** Slot par défaut pour le contenu du drawer */
302
+ default: void;
303
+ /** Slot pour le header personnalisé */
304
+ header?: void;
305
+ /** Slot pour le footer avec actions */
306
+ footer?: void;
307
+ }
308
+ /** Props du composant FCard */
309
+ export interface FCardProps {
310
+ title?: string;
311
+ subtitle?: string;
312
+ clickable?: boolean;
313
+ bordered?: boolean;
314
+ }
315
+ /** Événements émis par FCard */
316
+ export interface FCardEvents {
317
+ click: (event: MouseEvent) => void;
318
+ }
319
+ /** Slots disponibles pour FCard */
320
+ export interface FCardSlots {
321
+ /** Slot par défaut pour le contenu principal */
322
+ default: void;
323
+ /** Slot pour le header personnalisé */
324
+ header?: void;
325
+ /** Slot pour les médias (images, vidéos) */
326
+ media?: void;
327
+ /** Slot pour les actions en bas de la carte */
328
+ actions?: void;
329
+ }
330
+ /** Variants disponibles pour FAlert */
331
+ export type FAlertVariant = 'info' | 'success' | 'warning' | 'danger';
332
+ /** Props du composant FAlert */
333
+ export interface FAlertProps {
334
+ variant?: FAlertVariant;
335
+ title?: string;
336
+ message?: string;
337
+ dismissible?: boolean;
338
+ icon?: string | null;
339
+ }
340
+ /** Événements émis par FAlert */
341
+ export interface FAlertEvents {
342
+ close: () => void;
343
+ }
344
+ /** Slots disponibles pour FAlert */
345
+ export interface FAlertSlots {
346
+ /** Slot par défaut pour le contenu du message */
347
+ default?: void;
348
+ /** Slot pour le titre */
349
+ title?: void;
350
+ /** Slot pour l'icône personnalisée */
351
+ icon?: void;
352
+ }
353
+ /** Variants disponibles pour FToast */
354
+ export type FToastVariant = 'info' | 'success' | 'warning' | 'error';
355
+ /** Positions disponibles pour FToast */
356
+ export type FToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
357
+ /** Props du composant FToast */
358
+ export interface FToastProps {
359
+ variant?: FToastVariant;
360
+ title?: string;
361
+ message?: string;
362
+ duration?: number;
363
+ dismissible?: boolean;
364
+ icon?: string | null;
365
+ }
366
+ /** Événements émis par FToast */
367
+ export interface FToastEvents {
368
+ close: () => void;
369
+ }
370
+ /** Configuration pour afficher un toast */
371
+ export interface ToastConfig {
372
+ variant?: FToastVariant;
373
+ title?: string;
374
+ message: string;
375
+ duration?: number;
376
+ dismissible?: boolean;
377
+ icon?: string | null;
378
+ }
379
+ /** Props du composant FPagination */
380
+ export interface FPaginationProps {
381
+ currentPage?: number;
382
+ totalPages: number;
383
+ maxVisiblePages?: number;
384
+ showFirstLast?: boolean;
385
+ showPrevNext?: boolean;
386
+ }
387
+ /** Événements émis par FPagination */
388
+ export interface FPaginationEvents {
389
+ 'page-change': (page: number) => void;
390
+ 'update:currentPage': (page: number) => void;
391
+ }
392
+ /** Context pour le slot cell d'une table */
393
+ export interface FDataTableCellSlotContext<T = Record<string, unknown>> {
394
+ /** Valeur de la cellule */
395
+ value: unknown;
396
+ /** Ligne complète de données */
397
+ row: T;
398
+ /** Définition de la colonne */
399
+ column: FDataTableColumn;
400
+ }
401
+ /** Context pour le slot actions d'une table */
402
+ export interface FDataTableActionsSlotContext<T = Record<string, unknown>> {
403
+ /** Éléments sélectionnés */
404
+ selectedItems: T[];
405
+ }
406
+ /** Slots disponibles pour FDataTable */
407
+ export interface FDataTableSlots<T = Record<string, unknown>> {
408
+ /** Slot dynamique pour personnaliser une cellule. Nom: `cell-{columnKey}` */
409
+ [key: `cell-${string}`]: (context: FDataTableCellSlotContext<T>) => void;
410
+ /** Slot pour les actions personnalisées dans la barre d'outils */
411
+ actions?: (context: FDataTableActionsSlotContext<T>) => void;
412
+ }
413
+ /** Props du composant FEmptyState */
414
+ export interface FEmptyStateProps {
415
+ icon?: string;
416
+ title?: string;
417
+ description?: string;
418
+ actionLabel?: string;
419
+ }
420
+ /** Événements émis par FEmptyState */
421
+ export interface FEmptyStateEvents {
422
+ action: () => void;
423
+ }
424
+ /** Slots disponibles pour FEmptyState */
425
+ export interface FEmptyStateSlots {
426
+ /** Slot pour le contenu par défaut */
427
+ default?: void;
428
+ /** Slot pour l'icône personnalisée */
429
+ icon?: void;
430
+ /** Slot pour les actions personnalisées */
431
+ actions?: void;
432
+ }
433
+ /** Tailles disponibles pour FSearchBar */
434
+ export type FSearchBarSize = 'small' | 'medium' | 'large';
435
+ /** Props du composant FSearchBar */
436
+ export interface FSearchBarProps {
437
+ value?: string;
438
+ placeholder?: string;
439
+ size?: FSearchBarSize;
440
+ disabled?: boolean;
441
+ loading?: boolean;
442
+ }
443
+ /** Événements émis par FSearchBar */
444
+ export interface FSearchBarEvents {
445
+ input: (value: string) => void;
446
+ search: (value: string) => void;
447
+ clear: () => void;
448
+ }
449
+ /** Item de breadcrumb */
450
+ export interface BreadcrumbItem {
451
+ label: string;
452
+ to?: string | RouteLocation;
453
+ href?: string;
454
+ disabled?: boolean;
455
+ }
456
+ /** Props du composant FBreadcrumb */
457
+ export interface FBreadcrumbProps {
458
+ items: BreadcrumbItem[];
459
+ separator?: string;
460
+ }
461
+ /** Événements émis par FBreadcrumb */
462
+ export interface FBreadcrumbEvents {
463
+ click: (item: BreadcrumbItem, index: number) => void;
464
+ }
465
+ /** Tailles disponibles pour FAvatar */
466
+ export type FAvatarSize = 'xs' | 'small' | 'medium' | 'large' | 'xl' | '2xl';
467
+ /** Formes disponibles pour FAvatar */
468
+ export type FAvatarShape = 'circle' | 'square' | 'rounded';
469
+ /** Status disponibles pour FAvatar */
470
+ export type FAvatarStatus = 'online' | 'offline' | 'away' | 'busy' | null;
471
+ /** Props du composant FAvatar */
472
+ export interface FAvatarProps {
473
+ src?: string;
474
+ alt?: string;
475
+ initials?: string;
476
+ name?: string;
477
+ size?: FAvatarSize;
478
+ shape?: FAvatarShape;
479
+ status?: FAvatarStatus;
480
+ placeholderClass?: string;
481
+ }
482
+ /** Variants disponibles pour FBadge */
483
+ export type FBadgeVariant = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'neutral';
484
+ /** Tailles disponibles pour FBadge */
485
+ export type FBadgeSize = 'small' | 'medium' | 'large';
486
+ /** Props du composant FBadge */
487
+ export interface FBadgeProps {
488
+ variant?: FBadgeVariant;
489
+ size?: FBadgeSize;
490
+ rounded?: boolean;
491
+ outlined?: boolean;
492
+ }
493
+ /** Tailles disponibles pour FIcon */
494
+ export type FIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
495
+ /** Props du composant FIcon */
496
+ export interface FIconProps {
497
+ name: string;
498
+ size?: FIconSize;
499
+ }
500
+ /** Tailles disponibles pour FLoader */
501
+ export type FLoaderSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
502
+ /** Variants disponibles pour FLoader */
503
+ export type FLoaderVariant = 'spinner' | 'dots' | 'pulse';
504
+ /** Props du composant FLoader */
505
+ export interface FLoaderProps {
506
+ size?: FLoaderSize;
507
+ variant?: FLoaderVariant;
508
+ text?: string;
509
+ }
510
+ /** Props du composant FFormField */
511
+ export interface FFormFieldProps {
512
+ label?: string;
513
+ hint?: string;
514
+ error?: string;
515
+ required?: boolean;
516
+ optional?: boolean;
517
+ labelFor?: string;
518
+ }
519
+ /** Slots disponibles pour FFormField */
520
+ export interface FFormFieldSlots {
521
+ /** Slot par défaut pour le champ de formulaire */
522
+ default: void;
523
+ /** Slot pour le label personnalisé */
524
+ label?: void;
525
+ /** Slot pour l'indication (hint) */
526
+ hint?: void;
527
+ /** Slot pour le message d'erreur */
528
+ error?: void;
529
+ }