@pattern-stack/frontend-patterns 0.2.0-alpha.1 → 0.2.0-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/atoms/components/core/Badge/Badge.d.ts +1 -1
- package/dist/atoms/components/data/DataTable/ColumnFilterDropdown.d.ts +32 -0
- package/dist/atoms/components/data/DataTable/ColumnFilterDropdown.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/ColumnVisibilityToggle.d.ts +32 -0
- package/dist/atoms/components/data/DataTable/ColumnVisibilityToggle.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/DataTable.d.ts +5 -2
- package/dist/atoms/components/data/DataTable/DataTable.d.ts.map +1 -1
- package/dist/atoms/components/data/DataTable/DataTable.expansion.d.ts +91 -0
- package/dist/atoms/components/data/DataTable/DataTable.expansion.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/DataTable.filters.d.ts +271 -0
- package/dist/atoms/components/data/DataTable/DataTable.filters.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/DataTable.types.d.ts +155 -5
- package/dist/atoms/components/data/DataTable/DataTable.types.d.ts.map +1 -1
- package/dist/atoms/components/data/DataTable/ExpandButton.d.ts +37 -0
- package/dist/atoms/components/data/DataTable/ExpandButton.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/FilterPill.d.ts +25 -0
- package/dist/atoms/components/data/DataTable/FilterPill.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/QuickFilterBar.d.ts +35 -0
- package/dist/atoms/components/data/DataTable/QuickFilterBar.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/filters/BooleanFilterEditor.d.ts +10 -0
- package/dist/atoms/components/data/DataTable/filters/BooleanFilterEditor.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/filters/DateFilterEditor.d.ts +11 -0
- package/dist/atoms/components/data/DataTable/filters/DateFilterEditor.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/filters/MultiSelectFilterEditor.d.ts +10 -0
- package/dist/atoms/components/data/DataTable/filters/MultiSelectFilterEditor.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/filters/NumberFilterEditor.d.ts +10 -0
- package/dist/atoms/components/data/DataTable/filters/NumberFilterEditor.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/filters/SelectFilterEditor.d.ts +10 -0
- package/dist/atoms/components/data/DataTable/filters/SelectFilterEditor.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/filters/TextFilterEditor.d.ts +10 -0
- package/dist/atoms/components/data/DataTable/filters/TextFilterEditor.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/filters/index.d.ts +14 -0
- package/dist/atoms/components/data/DataTable/filters/index.d.ts.map +1 -0
- package/dist/atoms/components/data/DataTable/index.d.ts +9 -0
- package/dist/atoms/components/data/DataTable/index.d.ts.map +1 -1
- package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts +1 -1
- package/dist/atoms/components/data/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/atoms/components/data/index.d.ts +3 -2
- package/dist/atoms/components/data/index.d.ts.map +1 -1
- package/dist/atoms/composed/ConnectionStatus/ConnectionStatus.d.ts +16 -0
- package/dist/atoms/composed/ConnectionStatus/ConnectionStatus.d.ts.map +1 -0
- package/dist/atoms/composed/ConnectionStatus/index.d.ts +3 -0
- package/dist/atoms/composed/ConnectionStatus/index.d.ts.map +1 -0
- package/dist/atoms/hooks/index.d.ts +9 -0
- package/dist/atoms/hooks/index.d.ts.map +1 -1
- package/dist/atoms/hooks/useAdaptiveTable.d.ts +49 -0
- package/dist/atoms/hooks/useAdaptiveTable.d.ts.map +1 -0
- package/dist/atoms/hooks/useApi.d.ts +1 -1
- package/dist/atoms/hooks/useApi.d.ts.map +1 -1
- package/dist/atoms/hooks/useColumnVisibility.d.ts +75 -0
- package/dist/atoms/hooks/useColumnVisibility.d.ts.map +1 -0
- package/dist/atoms/hooks/useEntityData.d.ts +36 -0
- package/dist/atoms/hooks/useEntityData.d.ts.map +1 -0
- package/dist/atoms/hooks/useEntityDetail.d.ts +43 -0
- package/dist/atoms/hooks/useEntityDetail.d.ts.map +1 -0
- package/dist/atoms/hooks/useExpandedRows.d.ts +66 -0
- package/dist/atoms/hooks/useExpandedRows.d.ts.map +1 -0
- package/dist/atoms/hooks/useFieldMetadata.d.ts +18 -0
- package/dist/atoms/hooks/useFieldMetadata.d.ts.map +1 -0
- package/dist/atoms/hooks/useOnlineStatus.d.ts +16 -0
- package/dist/atoms/hooks/useOnlineStatus.d.ts.map +1 -0
- package/dist/atoms/hooks/useResponsiveTable.d.ts +123 -0
- package/dist/atoms/hooks/useResponsiveTable.d.ts.map +1 -0
- package/dist/atoms/hooks/useTableFilters.d.ts +92 -0
- package/dist/atoms/hooks/useTableFilters.d.ts.map +1 -0
- package/dist/atoms/index.d.ts +1 -0
- package/dist/atoms/index.d.ts.map +1 -1
- package/dist/atoms/primitives/sheet.d.ts +23 -0
- package/dist/atoms/primitives/sheet.d.ts.map +1 -0
- package/dist/atoms/primitives/table.d.ts.map +1 -1
- package/dist/atoms/services/api/client.d.ts +12 -2
- package/dist/atoms/services/api/client.d.ts.map +1 -1
- package/dist/atoms/services/auth-service.d.ts +15 -0
- package/dist/atoms/services/auth-service.d.ts.map +1 -1
- package/dist/atoms/services/index.d.ts +2 -2
- package/dist/atoms/services/index.d.ts.map +1 -1
- package/dist/atoms/shared/config/table-config.d.ts +79 -0
- package/dist/atoms/shared/config/table-config.d.ts.map +1 -0
- package/dist/atoms/shared/index.d.ts +1 -0
- package/dist/atoms/shared/index.d.ts.map +1 -1
- package/dist/atoms/types/auth.d.ts +95 -2
- package/dist/atoms/types/auth.d.ts.map +1 -1
- package/dist/atoms/types/index.d.ts +1 -0
- package/dist/atoms/types/index.d.ts.map +1 -1
- package/dist/atoms/types/navigation.d.ts +1 -1
- package/dist/atoms/types/navigation.d.ts.map +1 -1
- package/dist/atoms/types/ui-config.d.ts +46 -11
- package/dist/atoms/types/ui-config.d.ts.map +1 -1
- package/dist/atoms/types/ui-metadata.d.ts +103 -0
- package/dist/atoms/types/ui-metadata.d.ts.map +1 -0
- package/dist/atoms/utils/entity-card-mapping.d.ts +105 -0
- package/dist/atoms/utils/entity-card-mapping.d.ts.map +1 -0
- package/dist/atoms/utils/field-detection.d.ts +2 -2
- package/dist/atoms/utils/field-detection.d.ts.map +1 -1
- package/dist/atoms/utils/icon-map.d.ts +48 -0
- package/dist/atoms/utils/icon-map.d.ts.map +1 -1
- package/dist/atoms/utils/index.d.ts +2 -0
- package/dist/atoms/utils/index.d.ts.map +1 -1
- package/dist/atoms/utils/ui-mapping.d.ts +9 -3
- package/dist/atoms/utils/ui-mapping.d.ts.map +1 -1
- package/dist/features/auth/components/ProtectedRoute.d.ts +3 -1
- package/dist/features/auth/components/ProtectedRoute.d.ts.map +1 -1
- package/dist/features/auth/hooks/useAuth.d.ts.map +1 -1
- package/dist/features/auth/providers/NoAuthProvider.d.ts +17 -0
- package/dist/features/auth/providers/NoAuthProvider.d.ts.map +1 -0
- package/dist/features/auth/providers/index.d.ts +1 -0
- package/dist/features/auth/providers/index.d.ts.map +1 -1
- package/dist/frontend-patterns.css +1 -4554
- package/dist/index.d.ts +12 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +8793 -18275
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +8790 -18271
- package/dist/index.js.map +1 -1
- package/dist/molecules/layout/AppHeader/AppHeader.d.ts.map +1 -1
- package/dist/molecules/layout/BulkSelectionBar.d.ts +14 -2
- package/dist/molecules/layout/BulkSelectionBar.d.ts.map +1 -1
- package/dist/molecules/layout/FieldGrid/FieldGrid.d.ts +61 -0
- package/dist/molecules/layout/FieldGrid/FieldGrid.d.ts.map +1 -0
- package/dist/molecules/layout/FieldGrid/index.d.ts +2 -0
- package/dist/molecules/layout/FieldGrid/index.d.ts.map +1 -0
- package/dist/molecules/layout/ListToolbar/ListToolbar.d.ts +37 -0
- package/dist/molecules/layout/ListToolbar/ListToolbar.d.ts.map +1 -0
- package/dist/molecules/layout/ListToolbar/index.d.ts +2 -0
- package/dist/molecules/layout/ListToolbar/index.d.ts.map +1 -0
- package/dist/molecules/layout/PageTitle/PageTitle.d.ts +17 -0
- package/dist/molecules/layout/PageTitle/PageTitle.d.ts.map +1 -0
- package/dist/molecules/layout/PageTitle/index.d.ts +2 -0
- package/dist/molecules/layout/PageTitle/index.d.ts.map +1 -0
- package/dist/molecules/layout/index.d.ts +3 -0
- package/dist/molecules/layout/index.d.ts.map +1 -1
- package/dist/molecules/layout/navigation-context.d.ts.map +1 -1
- package/dist/sync/EntityStoreProvider.d.ts +35 -0
- package/dist/sync/EntityStoreProvider.d.ts.map +1 -0
- package/dist/sync/createEntityHooks.d.ts +29 -0
- package/dist/sync/createEntityHooks.d.ts.map +1 -0
- package/dist/sync/createStore.d.ts +65 -0
- package/dist/sync/createStore.d.ts.map +1 -0
- package/dist/sync/index.d.ts +6 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/types.d.ts +383 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/templates/ListPageTemplate.d.ts +21 -0
- package/dist/templates/ListPageTemplate.d.ts.map +1 -0
- package/dist/templates/admin/AdminCRUDTemplate.d.ts.map +1 -1
- package/dist/templates/factory.d.ts +11 -0
- package/dist/templates/factory.d.ts.map +1 -1
- package/dist/templates/index.d.ts +1 -0
- package/dist/templates/index.d.ts.map +1 -1
- package/package.json +11 -7
- package/cli/commands/generate-hooks.ts +0 -325
- package/cli/commands/init.ts +0 -33
- package/cli/commands/scaffold.ts +0 -224
- package/cli/index.ts +0 -122
- package/cli/src/codegen/openapi/__tests__/naming-utils.test.js +0 -367
- package/cli/src/codegen/openapi/client-generator.js +0 -727
- package/cli/src/codegen/openapi/confidence-scorer.js +0 -93
- package/cli/src/codegen/openapi/hook-config.js +0 -48
- package/cli/src/codegen/openapi/hook-generator.js +0 -763
- package/cli/src/codegen/openapi/naming-constants.js +0 -98
- package/cli/src/codegen/openapi/naming-utils.js +0 -149
- package/cli/src/codegen/openapi/parser.js +0 -274
- package/cli/src/codegen/openapi/type-generator.js +0 -329
- package/dist/codegen/openapi/bulk-types.d.ts +0 -142
- package/dist/codegen/openapi/bulk-types.d.ts.map +0 -1
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for the unified entity store system.
|
|
3
|
+
*
|
|
4
|
+
* These types define the interfaces for entity hooks, API clients,
|
|
5
|
+
* and the store system that provides a unified consumption API
|
|
6
|
+
* regardless of sync mode (optimistic vs confirmed).
|
|
7
|
+
*
|
|
8
|
+
* @module sync/types
|
|
9
|
+
*/
|
|
10
|
+
import type { UseMutationResult } from '@tanstack/react-query';
|
|
11
|
+
import type { Collection } from '@tanstack/db';
|
|
12
|
+
/**
|
|
13
|
+
* Configuration for an entity's hooks.
|
|
14
|
+
*
|
|
15
|
+
* @template TEntity - The entity type (must have an `id` field)
|
|
16
|
+
* @template TCreate - The type for creating new entities
|
|
17
|
+
* @template TUpdate - The type for updating existing entities
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const config: EntityHookConfig<Transaction, TransactionCreate, TransactionUpdate> = {
|
|
22
|
+
* name: 'transactions',
|
|
23
|
+
* collection: transactionCollection,
|
|
24
|
+
* api: transactionApi,
|
|
25
|
+
* localFirst: true,
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export interface EntityHookConfig<TEntity extends object & {
|
|
30
|
+
id?: string | null;
|
|
31
|
+
}, TCreate = Partial<TEntity>, TUpdate = Partial<TEntity>> {
|
|
32
|
+
/** Entity name (e.g., 'transactions') - used for query keys */
|
|
33
|
+
name: string;
|
|
34
|
+
/**
|
|
35
|
+
* TanStack DB collection for this entity.
|
|
36
|
+
* Uses `any` to avoid version mismatch issues with TanStack DB beta types
|
|
37
|
+
* across npm link boundaries.
|
|
38
|
+
*/
|
|
39
|
+
collection: any;
|
|
40
|
+
/** API client methods */
|
|
41
|
+
api: EntityApi<TEntity, TCreate, TUpdate>;
|
|
42
|
+
/**
|
|
43
|
+
* Sync mode configuration.
|
|
44
|
+
* - true: Optimistic mutations (instant UI, background sync)
|
|
45
|
+
* - false: Confirmed mutations (wait for server)
|
|
46
|
+
* - function: Dynamic resolution (for runtime config)
|
|
47
|
+
*/
|
|
48
|
+
localFirst: boolean | (() => boolean);
|
|
49
|
+
/** Query stale time in ms (default: 60000) */
|
|
50
|
+
staleTime?: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* API client interface that generated clients must implement.
|
|
54
|
+
*
|
|
55
|
+
* @template TEntity - The entity type
|
|
56
|
+
* @template TCreate - The type for creating new entities
|
|
57
|
+
* @template TUpdate - The type for updating existing entities
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const transactionApi: EntityApi<Transaction, TransactionCreate, TransactionUpdate> = {
|
|
62
|
+
* list: (params) => fetch('/api/transactions', { params }),
|
|
63
|
+
* get: (id) => fetch(`/api/transactions/${id}`),
|
|
64
|
+
* create: (data) => fetch('/api/transactions', { method: 'POST', body: data }),
|
|
65
|
+
* update: (id, data) => fetch(`/api/transactions/${id}`, { method: 'PATCH', body: data }),
|
|
66
|
+
* delete: (id) => fetch(`/api/transactions/${id}`, { method: 'DELETE' }),
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export interface EntityApi<TEntity, TCreate, TUpdate> {
|
|
71
|
+
/**
|
|
72
|
+
* Fetch a list of entities with optional filtering/pagination.
|
|
73
|
+
* @param params - Optional list parameters
|
|
74
|
+
* @returns Promise resolving to array of entities
|
|
75
|
+
*/
|
|
76
|
+
list(params?: ListParams): Promise<TEntity[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Fetch a single entity by ID.
|
|
79
|
+
* @param id - The entity ID
|
|
80
|
+
* @returns Promise resolving to the entity
|
|
81
|
+
*/
|
|
82
|
+
get(id: string): Promise<TEntity>;
|
|
83
|
+
/**
|
|
84
|
+
* Create a new entity.
|
|
85
|
+
* @param data - The entity data to create
|
|
86
|
+
* @returns Promise resolving to the created entity (may include txid for sync)
|
|
87
|
+
*/
|
|
88
|
+
create(data: TCreate): Promise<TEntity & {
|
|
89
|
+
txid?: number;
|
|
90
|
+
}>;
|
|
91
|
+
/**
|
|
92
|
+
* Update an existing entity.
|
|
93
|
+
* @param id - The entity ID
|
|
94
|
+
* @param data - The partial entity data to update
|
|
95
|
+
* @returns Promise resolving to the updated entity (may include txid for sync)
|
|
96
|
+
*/
|
|
97
|
+
update(id: string, data: TUpdate): Promise<TEntity & {
|
|
98
|
+
txid?: number;
|
|
99
|
+
}>;
|
|
100
|
+
/**
|
|
101
|
+
* Delete an entity.
|
|
102
|
+
* @param id - The entity ID
|
|
103
|
+
* @returns Promise resolving when deleted (may include txid for sync)
|
|
104
|
+
*/
|
|
105
|
+
delete(id: string): Promise<void | {
|
|
106
|
+
txid?: number;
|
|
107
|
+
}>;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Common list parameters for API queries.
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* const params: ListParams = {
|
|
115
|
+
* skip: 0,
|
|
116
|
+
* limit: 20,
|
|
117
|
+
* sort_by: 'created_at',
|
|
118
|
+
* sort_order: 'desc',
|
|
119
|
+
* status: 'active', // Additional filter
|
|
120
|
+
* }
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export interface ListParams {
|
|
124
|
+
/** Number of items to skip (for pagination) */
|
|
125
|
+
skip?: number;
|
|
126
|
+
/** Maximum number of items to return */
|
|
127
|
+
limit?: number;
|
|
128
|
+
/** Field to sort by */
|
|
129
|
+
sort_by?: string;
|
|
130
|
+
/** Sort direction */
|
|
131
|
+
sort_order?: 'asc' | 'desc';
|
|
132
|
+
/** Additional filter parameters */
|
|
133
|
+
[key: string]: unknown;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Type-safe filter where value types match field types.
|
|
137
|
+
*
|
|
138
|
+
* Supports single values for equality or arrays for IN queries.
|
|
139
|
+
*
|
|
140
|
+
* @template TEntity - The entity type to filter
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* // Type-safe filtering
|
|
145
|
+
* const where: WhereClause<Transaction> = {
|
|
146
|
+
* state: 'active', // string field, string value
|
|
147
|
+
* amount: 100, // number field, number value
|
|
148
|
+
* category_id: ['a', 'b'], // string field, string[] for IN
|
|
149
|
+
* }
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export type WhereClause<TEntity> = {
|
|
153
|
+
[K in keyof TEntity]?: TEntity[K] | TEntity[K][];
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Options for useList hook.
|
|
157
|
+
*
|
|
158
|
+
* @template TEntity - The entity type
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* const options: UseListOptions<Transaction> = {
|
|
163
|
+
* where: { state: 'active' },
|
|
164
|
+
* orderBy: { field: 'created_at', direction: 'desc' },
|
|
165
|
+
* skip: 0,
|
|
166
|
+
* limit: 20,
|
|
167
|
+
* }
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
export interface UseListOptions<TEntity> {
|
|
171
|
+
/** Filter criteria - applied client-side to collection */
|
|
172
|
+
where?: WhereClause<TEntity>;
|
|
173
|
+
/** Sort configuration */
|
|
174
|
+
orderBy?: {
|
|
175
|
+
field: keyof TEntity;
|
|
176
|
+
direction: 'asc' | 'desc';
|
|
177
|
+
};
|
|
178
|
+
/** Number of items to skip (for pagination) */
|
|
179
|
+
skip?: number;
|
|
180
|
+
/** Maximum number of items to return */
|
|
181
|
+
limit?: number;
|
|
182
|
+
/** Enable hook (default: true) */
|
|
183
|
+
enabled?: boolean;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Options for useGet hook.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* const options: UseGetOptions = {
|
|
191
|
+
* enabled: !!selectedId, // Only fetch when ID is available
|
|
192
|
+
* }
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
export interface UseGetOptions {
|
|
196
|
+
/** Enable hook (default: true) */
|
|
197
|
+
enabled?: boolean;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Result type for list hooks.
|
|
201
|
+
*
|
|
202
|
+
* @template TEntity - The entity type
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```typescript
|
|
206
|
+
* const { data, isLoading, error, refetch, collection } = useTransactionList()
|
|
207
|
+
*
|
|
208
|
+
* if (isLoading) return <Spinner />
|
|
209
|
+
* if (error) return <Error message={error.message} />
|
|
210
|
+
*
|
|
211
|
+
* return <DataTable data={data} />
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
export interface UseListResult<TEntity extends object> {
|
|
215
|
+
/** Array of entities (empty array if loading or error) */
|
|
216
|
+
data: TEntity[];
|
|
217
|
+
/** True while initial data is loading */
|
|
218
|
+
isLoading: boolean;
|
|
219
|
+
/** True if an error occurred */
|
|
220
|
+
isError: boolean;
|
|
221
|
+
/** Error object if an error occurred, null otherwise */
|
|
222
|
+
error: Error | null;
|
|
223
|
+
/** Function to manually refetch data */
|
|
224
|
+
refetch: () => void;
|
|
225
|
+
/** Direct collection access for mutations */
|
|
226
|
+
collection: Collection<TEntity, string>;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Result type for single entity hooks.
|
|
230
|
+
*
|
|
231
|
+
* @template TEntity - The entity type
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```typescript
|
|
235
|
+
* const { data, isLoading, error, refetch, collection } = useTransaction(id)
|
|
236
|
+
*
|
|
237
|
+
* if (isLoading) return <Spinner />
|
|
238
|
+
* if (error) return <Error message={error.message} />
|
|
239
|
+
* if (!data) return <NotFound />
|
|
240
|
+
*
|
|
241
|
+
* return <TransactionDetail transaction={data} />
|
|
242
|
+
* ```
|
|
243
|
+
*/
|
|
244
|
+
export interface UseGetResult<TEntity extends object> {
|
|
245
|
+
/** The entity if found, undefined otherwise */
|
|
246
|
+
data: TEntity | undefined;
|
|
247
|
+
/** True while initial data is loading */
|
|
248
|
+
isLoading: boolean;
|
|
249
|
+
/** True if an error occurred */
|
|
250
|
+
isError: boolean;
|
|
251
|
+
/** Error object if an error occurred, null otherwise */
|
|
252
|
+
error: Error | null;
|
|
253
|
+
/** Function to manually refetch data */
|
|
254
|
+
refetch: () => void;
|
|
255
|
+
/** Direct collection access for mutations */
|
|
256
|
+
collection: Collection<TEntity, string>;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Query key factory for cache management.
|
|
260
|
+
*
|
|
261
|
+
* Provides consistent query keys for TanStack Query cache operations.
|
|
262
|
+
*
|
|
263
|
+
* @example
|
|
264
|
+
* ```typescript
|
|
265
|
+
* // Invalidate all transaction queries
|
|
266
|
+
* queryClient.invalidateQueries({ queryKey: transactionKeys.all })
|
|
267
|
+
*
|
|
268
|
+
* // Invalidate only list queries
|
|
269
|
+
* queryClient.invalidateQueries({ queryKey: transactionKeys.lists() })
|
|
270
|
+
*
|
|
271
|
+
* // Invalidate specific detail query
|
|
272
|
+
* queryClient.invalidateQueries({ queryKey: transactionKeys.detail(id) })
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
export interface EntityQueryKeys {
|
|
276
|
+
/** Base key for all queries of this entity */
|
|
277
|
+
all: readonly string[];
|
|
278
|
+
/** Key factory for all list queries */
|
|
279
|
+
lists: () => readonly string[];
|
|
280
|
+
/** Key factory for a specific list query with parameters */
|
|
281
|
+
list: (params?: Record<string, unknown>) => readonly unknown[];
|
|
282
|
+
/** Key factory for all detail queries */
|
|
283
|
+
details: () => readonly string[];
|
|
284
|
+
/** Key factory for a specific detail query */
|
|
285
|
+
detail: (id: string) => readonly unknown[];
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* The hooks object returned by createEntityHooks.
|
|
289
|
+
*
|
|
290
|
+
* Provides a complete set of typed hooks for CRUD operations
|
|
291
|
+
* with automatic optimistic updates (when localFirst is enabled).
|
|
292
|
+
*
|
|
293
|
+
* @template TEntity - The entity type (must have an `id` field)
|
|
294
|
+
* @template TCreate - The type for creating new entities
|
|
295
|
+
* @template TUpdate - The type for updating existing entities
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* ```typescript
|
|
299
|
+
* // Generated code creates hooks
|
|
300
|
+
* export const transactionHooks = createEntityHooks<
|
|
301
|
+
* Transaction,
|
|
302
|
+
* TransactionCreate,
|
|
303
|
+
* TransactionUpdate
|
|
304
|
+
* >({
|
|
305
|
+
* name: 'transactions',
|
|
306
|
+
* collection: transactionCollection,
|
|
307
|
+
* api: transactionApi,
|
|
308
|
+
* localFirst: true,
|
|
309
|
+
* })
|
|
310
|
+
*
|
|
311
|
+
* // Usage in components
|
|
312
|
+
* function TransactionsPage() {
|
|
313
|
+
* const { data, isLoading } = transactionHooks.useList()
|
|
314
|
+
* const create = transactionHooks.useCreate()
|
|
315
|
+
*
|
|
316
|
+
* return (
|
|
317
|
+
* <DataTable
|
|
318
|
+
* data={data}
|
|
319
|
+
* isLoading={isLoading}
|
|
320
|
+
* onAdd={() => create.mutate({ amount: 0 })}
|
|
321
|
+
* />
|
|
322
|
+
* )
|
|
323
|
+
* }
|
|
324
|
+
* ```
|
|
325
|
+
*/
|
|
326
|
+
export interface EntityHooks<TEntity extends object & {
|
|
327
|
+
id?: string | null;
|
|
328
|
+
}, TCreate, TUpdate> {
|
|
329
|
+
/**
|
|
330
|
+
* Fetch and subscribe to list of entities.
|
|
331
|
+
* Data updates reactively when collection changes.
|
|
332
|
+
*/
|
|
333
|
+
useList: (options?: UseListOptions<TEntity>) => UseListResult<TEntity>;
|
|
334
|
+
/**
|
|
335
|
+
* Fetch and subscribe to single entity by ID.
|
|
336
|
+
* Data updates reactively when entity changes in collection.
|
|
337
|
+
*/
|
|
338
|
+
useGet: (id: string | null | undefined, options?: UseGetOptions) => UseGetResult<TEntity>;
|
|
339
|
+
/**
|
|
340
|
+
* Create mutation (optimistic if localFirst).
|
|
341
|
+
* Returns standard TanStack Query mutation result.
|
|
342
|
+
*
|
|
343
|
+
* Context includes tempId for optimistic rollback.
|
|
344
|
+
*/
|
|
345
|
+
useCreate: () => UseMutationResult<TEntity, Error, TCreate, {
|
|
346
|
+
tempId?: string;
|
|
347
|
+
wasOptimistic?: boolean;
|
|
348
|
+
}>;
|
|
349
|
+
/**
|
|
350
|
+
* Update mutation (optimistic if localFirst).
|
|
351
|
+
* Returns standard TanStack Query mutation result.
|
|
352
|
+
*
|
|
353
|
+
* Context includes previous state for rollback.
|
|
354
|
+
*/
|
|
355
|
+
useUpdate: () => UseMutationResult<TEntity, Error, {
|
|
356
|
+
id: string;
|
|
357
|
+
data: TUpdate;
|
|
358
|
+
}, {
|
|
359
|
+
previous?: TEntity;
|
|
360
|
+
wasOptimistic?: boolean;
|
|
361
|
+
}>;
|
|
362
|
+
/**
|
|
363
|
+
* Delete mutation (optimistic if localFirst).
|
|
364
|
+
* Returns standard TanStack Query mutation result.
|
|
365
|
+
*
|
|
366
|
+
* Context includes previous state for rollback.
|
|
367
|
+
*/
|
|
368
|
+
useDelete: () => UseMutationResult<void | {
|
|
369
|
+
txid?: number;
|
|
370
|
+
}, Error, string, {
|
|
371
|
+
previous?: TEntity;
|
|
372
|
+
wasOptimistic?: boolean;
|
|
373
|
+
}>;
|
|
374
|
+
/**
|
|
375
|
+
* Direct collection access (for advanced use cases).
|
|
376
|
+
* Uses `any` to avoid version mismatch issues with TanStack DB beta types
|
|
377
|
+
* across npm link boundaries.
|
|
378
|
+
*/
|
|
379
|
+
collection: any;
|
|
380
|
+
/** Query key factories (for cache management) */
|
|
381
|
+
keys: EntityQueryKeys;
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface ListPageTemplateProps {
|
|
3
|
+
/** Page title element or string */
|
|
4
|
+
title: React.ReactNode;
|
|
5
|
+
/** Toolbar element (use ListToolbar or custom) */
|
|
6
|
+
toolbar?: React.ReactNode;
|
|
7
|
+
/** Main content (table, cards, etc) */
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
/** Footer content (pagination, stats, etc) */
|
|
10
|
+
footer?: React.ReactNode;
|
|
11
|
+
/** Additional className for outer container */
|
|
12
|
+
className?: string;
|
|
13
|
+
/** Content area className */
|
|
14
|
+
contentClassName?: string;
|
|
15
|
+
/** Maximum width constraint */
|
|
16
|
+
maxWidth?: "sm" | "md" | "lg" | "xl" | "2xl" | "full" | "none";
|
|
17
|
+
/** Padding size */
|
|
18
|
+
padding?: "none" | "sm" | "md" | "lg";
|
|
19
|
+
}
|
|
20
|
+
export declare const ListPageTemplate: React.FC<ListPageTemplateProps>;
|
|
21
|
+
//# sourceMappingURL=ListPageTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListPageTemplate.d.ts","sourceRoot":"","sources":["../../src/templates/ListPageTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,kDAAkD;IAClD,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,uCAAuC;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC/D,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CACvC;AAmBD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAqE5D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminCRUDTemplate.d.ts","sourceRoot":"","sources":["../../../src/templates/admin/AdminCRUDTemplate.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AdminCRUDTemplate.d.ts","sourceRoot":"","sources":["../../../src/templates/admin/AdminCRUDTemplate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,17 @@ export interface AppConfig {
|
|
|
18
18
|
customProviders?: React.ComponentType<{
|
|
19
19
|
children: ReactNode;
|
|
20
20
|
}>[];
|
|
21
|
+
/**
|
|
22
|
+
* Enable Query cache persistence to localStorage.
|
|
23
|
+
* When true, cached data survives page refresh for instant offline UI.
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
persistQueryCache?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Storage key for persisted Query cache.
|
|
29
|
+
* @default 'PATTERN_STACK_QUERY_CACHE'
|
|
30
|
+
*/
|
|
31
|
+
queryCacheKey?: string;
|
|
21
32
|
}
|
|
22
33
|
export interface AppInstance {
|
|
23
34
|
render: () => ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/templates/factory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/templates/factory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAwCnE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,CAAC,EAAE,CAAC;IACjE;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,SAAS,CAAC;IACxB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACxD,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAyLtE;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAE1D"}
|
|
@@ -2,6 +2,7 @@ export { ComponentShowcaseTemplate } from "./ComponentShowcaseTemplate";
|
|
|
2
2
|
export { DashboardTemplate, DashboardGrid, DashboardCard, type DashboardTemplateProps, type DashboardGridProps, type DashboardCardProps, } from "./DashboardTemplate";
|
|
3
3
|
export { AuthTemplate, AuthFormField, AuthLink, AuthDivider, type AuthTemplateProps, type AuthFormFieldProps, type AuthLinkProps, type AuthDividerProps, } from "./AuthTemplate";
|
|
4
4
|
export { DataTemplate, DataDetailTemplate, type DataTemplateProps, type DataDetailTemplateProps, } from "./DataTemplate";
|
|
5
|
+
export { ListPageTemplate, type ListPageTemplateProps, } from "./ListPageTemplate";
|
|
5
6
|
export { EnhancedDataTemplate, type EnhancedDataTemplateProps, type ServerSideConfig, type FilterField, type ServerParams, type InlineEditConfig, type EditableField, } from "./EnhancedDataTemplate";
|
|
6
7
|
export * from "./admin";
|
|
7
8
|
export * from "./api";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAGhC,cAAc,SAAS,CAAC;AAGxB,cAAc,OAAO,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAGhC,cAAc,SAAS,CAAC;AAGxB,cAAc,OAAO,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,SAAS,EACd,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@pattern-stack/frontend-patterns",
|
|
3
3
|
"description": "Production-ready React frontend template with atomic architecture patterns. Build ultra-lean applications by importing shared UI foundation patterns.",
|
|
4
4
|
"private": false,
|
|
5
|
-
"version": "0.2.0-alpha.
|
|
5
|
+
"version": "0.2.0-alpha.11",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"react",
|
|
8
8
|
"typescript",
|
|
@@ -65,10 +65,8 @@
|
|
|
65
65
|
"style:check": "npm run lint:design-system",
|
|
66
66
|
"style:fix": "npm run lint:fix && npm run style:check",
|
|
67
67
|
"preview": "vite preview",
|
|
68
|
-
"generate
|
|
69
|
-
"generate-types:live": "npx openapi-typescript ${OPENAPI_URL:-http://localhost:8080/openapi.json} -o src/atoms/types/generated.ts",
|
|
68
|
+
"generate": "sync-patterns generate ./openapi.json --output ./src/generated --entities --collections",
|
|
70
69
|
"generate:hooks": "npx tsx cli/index.ts generate hooks",
|
|
71
|
-
"dev:with-types": "npm run generate-types && npm run dev",
|
|
72
70
|
"test": "vitest",
|
|
73
71
|
"test:ui": "vitest --ui",
|
|
74
72
|
"test:run": "vitest run",
|
|
@@ -94,11 +92,18 @@
|
|
|
94
92
|
"dependencies": {
|
|
95
93
|
"@hookform/resolvers": "^5.0.1",
|
|
96
94
|
"@radix-ui/react-avatar": "^1.1.10",
|
|
95
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
97
96
|
"@radix-ui/react-dropdown-menu": "^2.1.15",
|
|
98
97
|
"@radix-ui/react-label": "^2.1.7",
|
|
99
98
|
"@radix-ui/react-slot": "^1.2.3",
|
|
99
|
+
"@tanstack/db": "^0.5.11",
|
|
100
|
+
"@tanstack/electric-db-collection": "^0.2.11",
|
|
101
|
+
"@tanstack/query-db-collection": "^1.0.6",
|
|
102
|
+
"@tanstack/query-sync-storage-persister": "^5.90.14",
|
|
103
|
+
"@tanstack/react-db": "^0.1.55",
|
|
100
104
|
"@tanstack/react-query": "^5.77.2",
|
|
101
105
|
"@tanstack/react-query-devtools": "^5.79.0",
|
|
106
|
+
"@tanstack/react-query-persist-client": "^5.90.14",
|
|
102
107
|
"axios": "^1.9.0",
|
|
103
108
|
"class-variance-authority": "^0.7.1",
|
|
104
109
|
"clsx": "^2.1.1",
|
|
@@ -106,7 +111,6 @@
|
|
|
106
111
|
"lucide-react": "^0.511.0",
|
|
107
112
|
"mapbox-gl": "^3.1.2",
|
|
108
113
|
"openapi-types": "^12.1.3",
|
|
109
|
-
"openapi-typescript": "^7.8.0",
|
|
110
114
|
"react-hook-form": "^7.56.4",
|
|
111
115
|
"react-map-gl": "^7.1.7",
|
|
112
116
|
"react-router-dom": "^7.6.1",
|
|
@@ -120,8 +124,8 @@
|
|
|
120
124
|
"@testing-library/jest-dom": "^6.6.3",
|
|
121
125
|
"@testing-library/react": "^16.3.0",
|
|
122
126
|
"@testing-library/user-event": "^14.6.1",
|
|
123
|
-
"@types/node": "^22.
|
|
124
|
-
"@types/react": "^19.
|
|
127
|
+
"@types/node": "^22.19.1",
|
|
128
|
+
"@types/react": "^19.2.2",
|
|
125
129
|
"@types/react-dom": "^19.1.2",
|
|
126
130
|
"@vitejs/plugin-react": "^4.4.1",
|
|
127
131
|
"@vitest/coverage-v8": "^3.2.1",
|