@codella-software/react 2.0.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.
Files changed (44) hide show
  1. package/dist/index.cjs +2121 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.mjs +2121 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/dist/react/src/filters-and-sort/index.d.ts +2 -0
  7. package/dist/react/src/filters-and-sort/index.d.ts.map +1 -0
  8. package/dist/react/src/filters-and-sort/useFiltersAndSort.d.ts +67 -0
  9. package/dist/react/src/filters-and-sort/useFiltersAndSort.d.ts.map +1 -0
  10. package/dist/react/src/form-builder/index.d.ts +2 -0
  11. package/dist/react/src/form-builder/index.d.ts.map +1 -0
  12. package/dist/react/src/form-builder/useFormBuilder.d.ts +70 -0
  13. package/dist/react/src/form-builder/useFormBuilder.d.ts.map +1 -0
  14. package/dist/react/src/index.d.ts +46 -0
  15. package/dist/react/src/index.d.ts.map +1 -0
  16. package/dist/react/src/live-updates/LiveUpdateProvider.d.ts +52 -0
  17. package/dist/react/src/live-updates/LiveUpdateProvider.d.ts.map +1 -0
  18. package/dist/react/src/live-updates/index.d.ts +11 -0
  19. package/dist/react/src/live-updates/index.d.ts.map +1 -0
  20. package/dist/react/src/live-updates/useLiveListener.d.ts +12 -0
  21. package/dist/react/src/live-updates/useLiveListener.d.ts.map +1 -0
  22. package/dist/react/src/live-updates/useLiveRequest.d.ts +12 -0
  23. package/dist/react/src/live-updates/useLiveRequest.d.ts.map +1 -0
  24. package/dist/react/src/live-updates/useLiveUpdateListener.d.ts +14 -0
  25. package/dist/react/src/live-updates/useLiveUpdateListener.d.ts.map +1 -0
  26. package/dist/react/src/live-updates/useLiveUpdates.d.ts +10 -0
  27. package/dist/react/src/live-updates/useLiveUpdates.d.ts.map +1 -0
  28. package/dist/react/src/table-builder/index.d.ts +2 -0
  29. package/dist/react/src/table-builder/index.d.ts.map +1 -0
  30. package/dist/react/src/table-builder/useTableService.d.ts +93 -0
  31. package/dist/react/src/table-builder/useTableService.d.ts.map +1 -0
  32. package/dist/react/src/tabs/ResponsiveTabs.d.ts +50 -0
  33. package/dist/react/src/tabs/ResponsiveTabs.d.ts.map +1 -0
  34. package/dist/react/src/tabs/index.d.ts +40 -0
  35. package/dist/react/src/tabs/index.d.ts.map +1 -0
  36. package/dist/react/src/tabs/useTabsHooks.d.ts +49 -0
  37. package/dist/react/src/tabs/useTabsHooks.d.ts.map +1 -0
  38. package/dist/react/src/useFiltersAndSort.d.ts +67 -0
  39. package/dist/react/src/useFiltersAndSort.d.ts.map +1 -0
  40. package/dist/react/src/useFormBuilder.d.ts +70 -0
  41. package/dist/react/src/useFormBuilder.d.ts.map +1 -0
  42. package/dist/react/src/useTableService.d.ts +93 -0
  43. package/dist/react/src/useTableService.d.ts.map +1 -0
  44. package/package.json +72 -0
@@ -0,0 +1,14 @@
1
+ import { WS_ACTIONS } from '../../../core/src/live-updates';
2
+ export interface UseUpdateListenerOptions {
3
+ enabled?: boolean;
4
+ }
5
+ /**
6
+ * Hook to listen for and handle live updates with callback
7
+ * @param action - The WS_ACTIONS enum value to listen for
8
+ * @param onUpdate - Callback when update is received
9
+ * @param enabled - Whether to subscribe (defaults to true)
10
+ */
11
+ export declare const useLiveUpdateListener: <T = unknown>(action: WS_ACTIONS, onUpdate: (data: T) => void, { enabled }?: UseUpdateListenerOptions) => {
12
+ subscribe: () => () => void;
13
+ };
14
+ //# sourceMappingURL=useLiveUpdateListener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLiveUpdateListener.d.ts","sourceRoot":"","sources":["../../../../src/live-updates/useLiveUpdateListener.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,GAAG,OAAO,EAC/C,QAAQ,UAAU,EAClB,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,EAC3B,cAAoB,wBAA6B;;CA2BlD,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Hook to subscribe to live update events
3
+ * @param eventName - The event name (must be mapped in LiveUpdateProvider.eventMappings)
4
+ * @returns The latest event data or null
5
+ */
6
+ export declare const useLiveUpdates: <T = unknown>(eventName: string) => {
7
+ data: T | null;
8
+ error: Error | null;
9
+ };
10
+ //# sourceMappingURL=useLiveUpdates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLiveUpdates.d.ts","sourceRoot":"","sources":["../../../../src/live-updates/useLiveUpdates.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,GAAG,OAAO,EAAE,WAAW,MAAM;;;CAsB5D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useTableService, type UseTableServiceOptions, type UseTableServiceReturn } from './useTableService';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/table-builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { TableBuilderConfig } from '../../../core/src/index.ts';
2
+ /**
3
+ * Hook options for useTableService
4
+ */
5
+ export interface UseTableServiceOptions<T extends Record<string, any>> {
6
+ /** TableBuilder configuration */
7
+ config: TableBuilderConfig<T>;
8
+ /** Table data */
9
+ data: T[];
10
+ }
11
+ /**
12
+ * Hook return value for useTableService
13
+ */
14
+ export interface UseTableServiceReturn<T extends Record<string, any>> {
15
+ /** Filtered and paginated data rows */
16
+ rows: T[];
17
+ /** Selected row IDs */
18
+ selectedRows: string[];
19
+ /** All rows selected flag */
20
+ allSelected: boolean;
21
+ /** Current page */
22
+ currentPage: number;
23
+ /** Page size */
24
+ pageSize: number;
25
+ /** Total pages */
26
+ totalPages: number;
27
+ /** Total item count */
28
+ totalItems: number;
29
+ /** Has next page */
30
+ hasNextPage: boolean;
31
+ /** Has previous page */
32
+ hasPrevPage: boolean;
33
+ /** Sort field */
34
+ sortBy: string | null;
35
+ /** Sort direction */
36
+ sortDirection: 'asc' | 'desc' | null;
37
+ /** Active filters */
38
+ filters: Record<string, any>;
39
+ /** Toggle row selection */
40
+ toggleRowSelection: (rowId: string) => void;
41
+ /** Toggle all rows selection */
42
+ toggleAllSelection: () => void;
43
+ /** Clear selection */
44
+ clearSelection: () => void;
45
+ /** Set sort */
46
+ setSort: (field: string, direction: 'asc' | 'desc') => void;
47
+ /** Toggle sort */
48
+ toggleSort: (field: string) => void;
49
+ /** Set filter */
50
+ setFilter: (field: string, value: any) => void;
51
+ /** Clear filter */
52
+ clearFilter: (field: string) => void;
53
+ /** Clear all filters */
54
+ clearAllFilters: () => void;
55
+ /** Set page */
56
+ setPage: (page: number) => void;
57
+ /** Set page size */
58
+ setPageSize: (size: number) => void;
59
+ /** Next page */
60
+ nextPage: () => void;
61
+ /** Previous page */
62
+ prevPage: () => void;
63
+ }
64
+ /**
65
+ * React hook that wraps TableBuilder for table state management
66
+ *
67
+ * @param options - Hook options including config and data
68
+ * @returns Table state and control methods
69
+ *
70
+ * @example
71
+ * ```tsx
72
+ * const config: TableBuilderConfig<User> = {
73
+ * columns: [
74
+ * { field: 'name', header: 'Name', sortable: true }
75
+ * ]
76
+ * };
77
+ *
78
+ * function MyTable({ data }: { data: User[] }) {
79
+ * const table = useTableService({ config, data });
80
+ * return (
81
+ * <table>
82
+ * <tbody>
83
+ * {table.rows.map(row => (
84
+ * <tr key={row.id}><td>{row.name}</td></tr>
85
+ * ))}
86
+ * </tbody>
87
+ * </table>
88
+ * );
89
+ * }
90
+ * ```
91
+ */
92
+ export declare function useTableService<T extends Record<string, any>>(options: UseTableServiceOptions<T>): UseTableServiceReturn<T>;
93
+ //# sourceMappingURL=useTableService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableService.d.ts","sourceRoot":"","sources":["../../../../src/table-builder/useTableService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGrE;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnE,iCAAiC;IACjC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAE7B,iBAAiB;IACjB,IAAI,EAAE,CAAC,EAAE,CAAA;CACV;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAClE,uCAAuC;IACvC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,uBAAuB;IACvB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,6BAA6B;IAC7B,WAAW,EAAE,OAAO,CAAA;IACpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,oBAAoB;IACpB,WAAW,EAAE,OAAO,CAAA;IACpB,wBAAwB;IACxB,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,qBAAqB;IACrB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAA;IACpC,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,2BAA2B;IAC3B,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,gCAAgC;IAChC,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,sBAAsB;IACtB,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,eAAe;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAA;IAC3D,kBAAkB;IAClB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,iBAAiB;IACjB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;IAC9C,mBAAmB;IACnB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,wBAAwB;IACxB,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,eAAe;IACf,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,oBAAoB;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACjC,qBAAqB,CAAC,CAAC,CAAC,CA2G1B"}
@@ -0,0 +1,50 @@
1
+ import { TabItem } from '../../../core/src/tabs';
2
+ /**
3
+ * Props for TabsComponent
4
+ */
5
+ export interface TabsComponentProps {
6
+ className?: string;
7
+ tabClassName?: string;
8
+ activeTabClassName?: string;
9
+ selectClassName?: string;
10
+ breakpoint?: number;
11
+ showBadges?: boolean;
12
+ icon?: boolean;
13
+ }
14
+ /**
15
+ * Responsive Tabs component that switches to Select on smaller screens
16
+ *
17
+ * Features:
18
+ * - Tabs on desktop (> breakpoint)
19
+ * - Select dropdown on mobile (< breakpoint)
20
+ * - Badge support
21
+ * - Icon support
22
+ * - Fully customizable with className props
23
+ */
24
+ export declare function ResponsiveTabs({ className, tabClassName, activeTabClassName, selectClassName, breakpoint, showBadges, icon, }: TabsComponentProps): import("react/jsx-runtime").JSX.Element | null;
25
+ /**
26
+ * Tabs List component (desktop view)
27
+ */
28
+ interface TabsListProps {
29
+ tabs: TabItem[];
30
+ activeTabId: string;
31
+ onTabChange: (tabId: string) => void;
32
+ className?: string;
33
+ tabClassName?: string;
34
+ activeTabClassName?: string;
35
+ showBadges?: boolean;
36
+ icon?: boolean;
37
+ }
38
+ declare function TabsList({ tabs, activeTabId, onTabChange, className, tabClassName, activeTabClassName, showBadges, icon, }: TabsListProps): import("react/jsx-runtime").JSX.Element;
39
+ /**
40
+ * Tabs Select component (mobile view)
41
+ */
42
+ interface TabsSelectProps {
43
+ tabs: TabItem[];
44
+ activeTabId: string;
45
+ onTabChange: (tabId: string) => void;
46
+ className?: string;
47
+ }
48
+ declare function TabsSelect({ tabs, activeTabId, onTabChange, className, }: TabsSelectProps): import("react/jsx-runtime").JSX.Element;
49
+ export { TabsList, TabsSelect };
50
+ //# sourceMappingURL=ResponsiveTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponsiveTabs.d.ts","sourceRoot":"","sources":["../../../../src/tabs/ResponsiveTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAC7B,SAAc,EACd,YAAiB,EACjB,kBAAuB,EACvB,eAAoB,EACpB,UAAgB,EAChB,UAAiB,EACjB,IAAW,GACZ,EAAE,kBAAkB,kDA2CpB;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,iBAAS,QAAQ,CAAC,EAChB,IAAI,EACJ,WAAW,EACX,WAAW,EACX,SAAc,EACd,YAAiB,EACjB,kBAAuB,EACvB,UAAiB,EACjB,IAAW,GACZ,EAAE,aAAa,2CAoCf;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iBAAS,UAAU,CAAC,EAClB,IAAI,EACJ,WAAW,EACX,WAAW,EACX,SAAc,GACf,EAAE,eAAe,2CAuBjB;AAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @module @codella/react/tabs
3
+ *
4
+ * React hooks and components for tabs service.
5
+ *
6
+ * ## Features
7
+ *
8
+ * - TabsProvider for state management
9
+ * - Hooks for accessing tabs service
10
+ * - Responsive Tabs component (desktop/mobile)
11
+ * - Auto-switching between tabs and select
12
+ *
13
+ * ## Usage
14
+ *
15
+ * ```tsx
16
+ * import { TabsProvider, ResponsiveTabs, useSetActiveTab } from '@codella/react/tabs';
17
+ *
18
+ * function MyApp() {
19
+ * return (
20
+ * <TabsProvider config={{
21
+ * tabs: [
22
+ * { id: 'overview', label: 'Overview' },
23
+ * { id: 'details', label: 'Details' }
24
+ * ],
25
+ * enableUrlRouting: true
26
+ * }}>
27
+ * <ResponsiveTabs />
28
+ * <MyTabContent />
29
+ * </TabsProvider>
30
+ * );
31
+ * }
32
+ * ```
33
+ *
34
+ * @packageDocumentation
35
+ */
36
+ export { TabsProvider, useActiveTab, useSetActiveTab, useTabChange, useTabs, useTabsContext, useTabsService } from './useTabsHooks';
37
+ export type { TabsProviderProps } from './useTabsHooks';
38
+ export { ResponsiveTabs, TabsList, TabsSelect } from './ResponsiveTabs';
39
+ export type { TabsComponentProps } from './ResponsiveTabs';
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tabs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpI,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { TabChangeEvent, TabsConfig, TabsService } from '../../../core/src/tabs';
2
+ import { default as React } from 'react';
3
+ interface TabsContextValue {
4
+ service: TabsService;
5
+ activeTabId: string;
6
+ tabs: ReturnType<TabsService['getTabs']>;
7
+ }
8
+ /**
9
+ * Props for TabsProvider
10
+ */
11
+ export interface TabsProviderProps {
12
+ config: TabsConfig;
13
+ children: React.ReactNode;
14
+ }
15
+ /**
16
+ * Tabs provider for React
17
+ */
18
+ export declare function TabsProvider({ config, children }: TabsProviderProps): import("react/jsx-runtime").JSX.Element;
19
+ /**
20
+ * Hook to access tabs service from context
21
+ */
22
+ export declare function useTabsContext(): TabsContextValue;
23
+ /**
24
+ * Hook to use tabs service directly
25
+ */
26
+ export declare function useTabsService(): TabsService;
27
+ /**
28
+ * Hook to get active tab
29
+ */
30
+ export declare function useActiveTab(): import('../../../core/src/index.ts').TabItem | undefined;
31
+ /**
32
+ * Hook to get all tabs
33
+ */
34
+ export declare function useTabs(): import('../../../core/src/index.ts').TabItem[];
35
+ /**
36
+ * Hook to listen to tab changes
37
+ */
38
+ export declare function useTabChange(): TabChangeEvent | null;
39
+ /**
40
+ * Hook to set active tab
41
+ */
42
+ export declare function useSetActiveTab(): {
43
+ setActiveTab: (tabId: string) => void;
44
+ setActiveTabByIndex: (index: number) => void;
45
+ nextTab: () => void;
46
+ previousTab: () => void;
47
+ };
48
+ export {};
49
+ //# sourceMappingURL=useTabsHooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTabsHooks.d.ts","sourceRoot":"","sources":["../../../../src/tabs/useTabsHooks.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAyD,MAAM,OAAO,CAAC;AAE9E,UAAU,gBAAgB;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;CAC1C;AAID;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CA0BnE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,gBAAgB,CAMjD;AAED;;GAEG;AACH,wBAAgB,cAAc,gBAG7B;AAED;;GAEG;AACH,wBAAgB,YAAY,gDAU3B;AAED;;GAEG;AACH,wBAAgB,OAAO,sCAGtB;AAED;;GAEG;AACH,wBAAgB,YAAY,0BAU3B;AAED;;GAEG;AACH,wBAAgB,eAAe;0BAGL,MAAM;iCACC,MAAM;;;EAItC"}
@@ -0,0 +1,67 @@
1
+ import { FiltersAndSortService } from '../../core/src/index.ts';
2
+ /**
3
+ * Hook options for useFiltersAndSort
4
+ */
5
+ export interface UseFiltersAndSortOptions {
6
+ /** FiltersAndSortService instance */
7
+ service: FiltersAndSortService;
8
+ }
9
+ /**
10
+ * Hook return value for useFiltersAndSort
11
+ */
12
+ export interface UseFiltersAndSortReturn {
13
+ /** Current filter state */
14
+ filters: Record<string, any>;
15
+ /** Current sort field */
16
+ sortBy: string | null;
17
+ /** Current sort direction */
18
+ sortDirection: 'asc' | 'desc';
19
+ /** Current page */
20
+ page: number;
21
+ /** Page size */
22
+ pageSize: number;
23
+ /** Set filter */
24
+ setFilter: (key: string, value: any) => void;
25
+ /** Clear specific filter */
26
+ clearFilter: (key: string) => void;
27
+ /** Clear all filters */
28
+ clearAllFilters: () => void;
29
+ /** Set sort */
30
+ setSort: (field: string, direction: 'asc' | 'desc') => void;
31
+ /** Toggle sort direction for field */
32
+ toggleSort: (field: string) => void;
33
+ /** Set page */
34
+ setPage: (page: number) => void;
35
+ /** Set page size */
36
+ setPageSize: (size: number) => void;
37
+ /** Go to next page */
38
+ nextPage: () => void;
39
+ /** Go to previous page */
40
+ prevPage: () => void;
41
+ }
42
+ /**
43
+ * React hook that wraps FiltersAndSortService
44
+ *
45
+ * @param options - Hook options including FiltersAndSortService instance
46
+ * @returns Filters and sort state with control methods
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * const service = new FiltersAndSortService({ storageKey: 'my-filters' });
51
+ *
52
+ * function MyTable() {
53
+ * const filters = useFiltersAndSort({ service });
54
+ * return (
55
+ * <div>
56
+ * <input
57
+ * value={filters.filters.name || ''}
58
+ * onChange={(e) => filters.setFilter('name', e.target.value)}
59
+ * />
60
+ * <button onClick={() => filters.clearAllFilters()}>Clear</button>
61
+ * </div>
62
+ * );
63
+ * }
64
+ * ```
65
+ */
66
+ export declare function useFiltersAndSort(options: UseFiltersAndSortOptions): UseFiltersAndSortReturn;
67
+ //# sourceMappingURL=useFiltersAndSort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFiltersAndSort.d.ts","sourceRoot":"","sources":["../../../src/useFiltersAndSort.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAA2B,MAAM,eAAe,CAAA;AAG9E;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,qCAAqC;IACrC,OAAO,EAAE,qBAAqB,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,yBAAyB;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,6BAA6B;IAC7B,aAAa,EAAE,KAAK,GAAG,MAAM,CAAA;IAC7B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB;IACjB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;IAC5C,4BAA4B;IAC5B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,wBAAwB;IACxB,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,eAAe;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAA;IAC3D,sCAAsC;IACtC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,eAAe;IACf,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,oBAAoB;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,sBAAsB;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CA+DzB"}
@@ -0,0 +1,70 @@
1
+ import { FormBuilder } from '../../core/src/index.ts';
2
+ /**
3
+ * Hook options for useFormBuilder
4
+ */
5
+ export interface UseFormBuilderOptions<T extends Record<string, any>> {
6
+ /** FormBuilder instance */
7
+ builder: FormBuilder<T>;
8
+ }
9
+ /**
10
+ * Hook return value for useFormBuilder
11
+ */
12
+ export interface UseFormBuilderReturn<T extends Record<string, any>> {
13
+ /** Current form values */
14
+ values: T;
15
+ /** Form validation errors */
16
+ errors: Record<string, string | undefined>;
17
+ /** Form touched fields */
18
+ touched: Record<string, boolean>;
19
+ /** Current form step (for multi-step forms) */
20
+ currentStep: number;
21
+ /** Total form steps */
22
+ totalSteps: number;
23
+ /** Is form currently submitting */
24
+ isSubmitting: boolean;
25
+ /** Is form valid */
26
+ isValid: boolean;
27
+ /** Set field value */
28
+ setFieldValue: (field: keyof T, value: any) => Promise<void>;
29
+ /** Set field touched */
30
+ setFieldTouched: (field: keyof T, touched: boolean) => void;
31
+ /** Validate entire form */
32
+ validate: () => Promise<Record<string, string | undefined>>;
33
+ /** Submit form */
34
+ submit: () => Promise<T | null>;
35
+ /** Reset form to initial values */
36
+ reset: () => void;
37
+ /** Go to next step */
38
+ nextStep: () => void;
39
+ /** Go to previous step */
40
+ prevStep: () => void;
41
+ }
42
+ /**
43
+ * React hook that wraps FormBuilder and provides form state management
44
+ *
45
+ * @param options - Hook options including FormBuilder instance
46
+ * @returns Form state and methods
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * const builder = new FormBuilder<{ name: string }>()
51
+ * .addField({ name: 'name', type: 'text', label: 'Name' })
52
+ * .build();
53
+ *
54
+ * function MyForm() {
55
+ * const form = useFormBuilder({ builder });
56
+ * return (
57
+ * <form onSubmit={(e) => { e.preventDefault(); form.submit(); }}>
58
+ * <input
59
+ * value={form.values.name}
60
+ * onChange={(e) => form.setFieldValue('name', e.target.value)}
61
+ * />
62
+ * {form.errors.name && <span>{form.errors.name}</span>}
63
+ * <button type="submit">Submit</button>
64
+ * </form>
65
+ * );
66
+ * }
67
+ * ```
68
+ */
69
+ export declare function useFormBuilder<T extends Record<string, any>>(options: UseFormBuilderOptions<T>): UseFormBuilderReturn<T>;
70
+ //# sourceMappingURL=useFormBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormBuilder.d.ts","sourceRoot":"","sources":["../../../src/useFormBuilder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAClE,2BAA2B;IAC3B,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACjE,0BAA0B;IAC1B,MAAM,EAAE,CAAC,CAAA;IACT,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC1C,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,mCAAmC;IACnC,YAAY,EAAE,OAAO,CAAA;IACrB,oBAAoB;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,sBAAsB;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,wBAAwB;IACxB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3D,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;IAC3D,kBAAkB;IAClB,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC/B,mCAAmC;IACnC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,sBAAsB;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1D,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAChC,oBAAoB,CAAC,CAAC,CAAC,CA4DzB"}
@@ -0,0 +1,93 @@
1
+ import { TableBuilderConfig } from '../../core/src/index.ts';
2
+ /**
3
+ * Hook options for useTableService
4
+ */
5
+ export interface UseTableServiceOptions<T extends Record<string, any>> {
6
+ /** TableBuilder configuration */
7
+ config: TableBuilderConfig<T>;
8
+ /** Table data */
9
+ data: T[];
10
+ }
11
+ /**
12
+ * Hook return value for useTableService
13
+ */
14
+ export interface UseTableServiceReturn<T extends Record<string, any>> {
15
+ /** Filtered and paginated data rows */
16
+ rows: T[];
17
+ /** Selected row IDs */
18
+ selectedRows: string[];
19
+ /** All rows selected flag */
20
+ allSelected: boolean;
21
+ /** Current page */
22
+ currentPage: number;
23
+ /** Page size */
24
+ pageSize: number;
25
+ /** Total pages */
26
+ totalPages: number;
27
+ /** Total item count */
28
+ totalItems: number;
29
+ /** Has next page */
30
+ hasNextPage: boolean;
31
+ /** Has previous page */
32
+ hasPrevPage: boolean;
33
+ /** Sort field */
34
+ sortBy: string | null;
35
+ /** Sort direction */
36
+ sortDirection: 'asc' | 'desc' | null;
37
+ /** Active filters */
38
+ filters: Record<string, any>;
39
+ /** Toggle row selection */
40
+ toggleRowSelection: (rowId: string) => void;
41
+ /** Toggle all rows selection */
42
+ toggleAllSelection: () => void;
43
+ /** Clear selection */
44
+ clearSelection: () => void;
45
+ /** Set sort */
46
+ setSort: (field: string, direction: 'asc' | 'desc') => void;
47
+ /** Toggle sort */
48
+ toggleSort: (field: string) => void;
49
+ /** Set filter */
50
+ setFilter: (field: string, value: any) => void;
51
+ /** Clear filter */
52
+ clearFilter: (field: string) => void;
53
+ /** Clear all filters */
54
+ clearAllFilters: () => void;
55
+ /** Set page */
56
+ setPage: (page: number) => void;
57
+ /** Set page size */
58
+ setPageSize: (size: number) => void;
59
+ /** Next page */
60
+ nextPage: () => void;
61
+ /** Previous page */
62
+ prevPage: () => void;
63
+ }
64
+ /**
65
+ * React hook that wraps TableBuilder for table state management
66
+ *
67
+ * @param options - Hook options including config and data
68
+ * @returns Table state and control methods
69
+ *
70
+ * @example
71
+ * ```tsx
72
+ * const config: TableBuilderConfig<User> = {
73
+ * columns: [
74
+ * { field: 'name', header: 'Name', sortable: true }
75
+ * ]
76
+ * };
77
+ *
78
+ * function MyTable({ data }: { data: User[] }) {
79
+ * const table = useTableService({ config, data });
80
+ * return (
81
+ * <table>
82
+ * <tbody>
83
+ * {table.rows.map(row => (
84
+ * <tr key={row.id}><td>{row.name}</td></tr>
85
+ * ))}
86
+ * </tbody>
87
+ * </table>
88
+ * );
89
+ * }
90
+ * ```
91
+ */
92
+ export declare function useTableService<T extends Record<string, any>>(options: UseTableServiceOptions<T>): UseTableServiceReturn<T>;
93
+ //# sourceMappingURL=useTableService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableService.d.ts","sourceRoot":"","sources":["../../../src/useTableService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGrE;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnE,iCAAiC;IACjC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAA;IAE7B,iBAAiB;IACjB,IAAI,EAAE,CAAC,EAAE,CAAA;CACV;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAClE,uCAAuC;IACvC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,uBAAuB;IACvB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,6BAA6B;IAC7B,WAAW,EAAE,OAAO,CAAA;IACpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,oBAAoB;IACpB,WAAW,EAAE,OAAO,CAAA;IACpB,wBAAwB;IACxB,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,qBAAqB;IACrB,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAAA;IACpC,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,2BAA2B;IAC3B,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,gCAAgC;IAChC,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,sBAAsB;IACtB,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,eAAe;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAA;IAC3D,kBAAkB;IAClB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,iBAAiB;IACjB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;IAC9C,mBAAmB;IACnB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,wBAAwB;IACxB,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,eAAe;IACf,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,oBAAoB;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,oBAAoB;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3D,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACjC,qBAAqB,CAAC,CAAC,CAAC,CA2G1B"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@codella-software/react",
3
+ "version": "2.0.0",
4
+ "description": "React hooks for Codella core services",
5
+ "keywords": [
6
+ "form-builder",
7
+ "table-builder",
8
+ "filters",
9
+ "react",
10
+ "hooks",
11
+ "typescript"
12
+ ],
13
+ "homepage": "https://github.com/CodellaSoftware/codella-utils#readme",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/CodellaSoftware/codella-utils.git",
17
+ "directory": "packages/react"
18
+ },
19
+ "license": "MIT",
20
+ "type": "module",
21
+ "exports": {
22
+ ".": {
23
+ "import": {
24
+ "types": "./dist/index.d.ts",
25
+ "default": "./dist/index.js"
26
+ },
27
+ "require": {
28
+ "types": "./dist/index.d.cts",
29
+ "default": "./dist/index.cjs"
30
+ }
31
+ }
32
+ },
33
+ "main": "./dist/index.cjs",
34
+ "types": "./dist/index.d.ts",
35
+ "files": [
36
+ "dist"
37
+ ],
38
+ "scripts": {
39
+ "build": "vite build && tsc --emitDeclarationOnly",
40
+ "dev": "vite build --watch",
41
+ "test": "vitest",
42
+ "test:run": "vitest run",
43
+ "lint": "eslint src --ext .ts,.tsx",
44
+ "typecheck": "tsc --noEmit"
45
+ },
46
+ "dependencies": {
47
+ "@codella/core": "file:../core"
48
+ },
49
+ "peerDependencies": {
50
+ "react": "^18.0.0 || ^19.0.0",
51
+ "rxjs": "^7.0.0"
52
+ },
53
+ "devDependencies": {
54
+ "@testing-library/jest-dom": "^6.4.0",
55
+ "@types/node": "^22.0.0",
56
+ "@types/react": "^18.3.0",
57
+ "@vitejs/plugin-react": "^4.3.0",
58
+ "clsx": "^2.1.0",
59
+ "date-fns": "^3.0.0",
60
+ "happy-dom": "^15.11.0",
61
+ "react": "^18.3.0",
62
+ "react-day-picker": "^8.10.0",
63
+ "rxjs": "^7.8.0",
64
+ "tailwind-merge": "^2.5.0",
65
+ "typescript": "^5.6.0",
66
+ "vite": "^6.0.0",
67
+ "vite-plugin-dts": "^4.3.0",
68
+ "vitest": "^3.0.0"
69
+ },
70
+ "module": "./dist/index.js",
71
+ "sideEffects": false
72
+ }