@ram_28/kf-ai-sdk 2.0.14 → 2.0.16

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 (157) hide show
  1. package/README.md +10 -9
  2. package/dist/FileField-BWrSHNRq.js +296 -0
  3. package/dist/FileField-eDeuzln8.cjs +1 -0
  4. package/dist/api.cjs +1 -1
  5. package/dist/api.mjs +2 -2
  6. package/dist/auth.cjs +1 -1
  7. package/dist/auth.mjs +1 -1
  8. package/dist/bdo/core/BaseBdo.d.ts +1 -1
  9. package/dist/bdo.cjs +1 -1
  10. package/dist/bdo.mjs +230 -474
  11. package/dist/{client-DnO2KKrw.cjs → client-D5k4SYuw.cjs} +1 -1
  12. package/dist/{client-iQTqFDNI.js → client-_ayziI1d.js} +33 -32
  13. package/dist/components/hooks/index.d.ts +9 -3
  14. package/dist/components/hooks/index.d.ts.map +1 -1
  15. package/dist/{workflow/components → components/hooks}/useActivityForm/createActivityItemProxy.d.ts +9 -5
  16. package/dist/components/hooks/useActivityForm/createActivityItemProxy.d.ts.map +1 -0
  17. package/dist/components/hooks/useActivityForm/createActivityResolver.d.ts +23 -0
  18. package/dist/components/hooks/useActivityForm/createActivityResolver.d.ts.map +1 -0
  19. package/dist/components/hooks/useActivityForm/index.d.ts.map +1 -0
  20. package/dist/{workflow/components → components/hooks}/useActivityForm/types.d.ts +12 -8
  21. package/dist/components/hooks/useActivityForm/types.d.ts.map +1 -0
  22. package/dist/{workflow/components → components/hooks}/useActivityForm/useActivityForm.d.ts +2 -2
  23. package/dist/components/hooks/useActivityForm/useActivityForm.d.ts.map +1 -0
  24. package/dist/components/hooks/useActivityTable/index.d.ts +4 -0
  25. package/dist/components/hooks/useActivityTable/index.d.ts.map +1 -0
  26. package/dist/components/hooks/useActivityTable/types.d.ts +36 -0
  27. package/dist/components/hooks/useActivityTable/types.d.ts.map +1 -0
  28. package/dist/components/hooks/useActivityTable/useActivityTable.d.ts +4 -0
  29. package/dist/components/hooks/useActivityTable/useActivityTable.d.ts.map +1 -0
  30. package/dist/components/hooks/useBDOForm/createItemProxy.d.ts.map +1 -0
  31. package/dist/components/hooks/useBDOForm/createResolver.d.ts.map +1 -0
  32. package/dist/components/hooks/useBDOForm/index.d.ts +6 -0
  33. package/dist/components/hooks/useBDOForm/index.d.ts.map +1 -0
  34. package/dist/components/hooks/useBDOForm/shared.d.ts +50 -0
  35. package/dist/components/hooks/useBDOForm/shared.d.ts.map +1 -0
  36. package/dist/components/hooks/{useForm → useBDOForm}/types.d.ts +6 -6
  37. package/dist/components/hooks/useBDOForm/types.d.ts.map +1 -0
  38. package/dist/components/hooks/{useForm/useForm.d.ts → useBDOForm/useBDOForm.d.ts} +4 -4
  39. package/dist/components/hooks/useBDOForm/useBDOForm.d.ts.map +1 -0
  40. package/dist/components/hooks/useBDOTable/index.d.ts +3 -0
  41. package/dist/components/hooks/useBDOTable/index.d.ts.map +1 -0
  42. package/dist/components/hooks/useBDOTable/types.d.ts +24 -0
  43. package/dist/components/hooks/useBDOTable/types.d.ts.map +1 -0
  44. package/dist/components/hooks/useBDOTable/useBDOTable.d.ts +3 -0
  45. package/dist/components/hooks/useBDOTable/useBDOTable.d.ts.map +1 -0
  46. package/dist/components/hooks/useTable/index.d.ts +2 -2
  47. package/dist/components/hooks/useTable/index.d.ts.map +1 -1
  48. package/dist/components/hooks/useTable/types.d.ts +11 -10
  49. package/dist/components/hooks/useTable/types.d.ts.map +1 -1
  50. package/dist/components/hooks/useTable/useTable.d.ts +1 -1
  51. package/dist/components/hooks/useTable/useTable.d.ts.map +1 -1
  52. package/dist/form.cjs +1 -1
  53. package/dist/form.d.ts +1 -1
  54. package/dist/form.d.ts.map +1 -1
  55. package/dist/form.mjs +279 -344
  56. package/dist/form.types.d.ts +1 -1
  57. package/dist/form.types.d.ts.map +1 -1
  58. package/dist/{metadata-DpfI3zRN.js → metadata-Cc1mBcLS.js} +1 -1
  59. package/dist/{metadata-DgLSJkF5.cjs → metadata-DWXQPDav.cjs} +1 -1
  60. package/dist/shared-5a7UkED1.js +1180 -0
  61. package/dist/shared-nnmlRVs7.cjs +1 -0
  62. package/dist/table.cjs +1 -1
  63. package/dist/table.d.ts +1 -0
  64. package/dist/table.d.ts.map +1 -1
  65. package/dist/table.mjs +17 -192
  66. package/dist/table.types.d.ts +2 -1
  67. package/dist/table.types.d.ts.map +1 -1
  68. package/dist/types/base-fields.d.ts +4 -4
  69. package/dist/types/base-fields.d.ts.map +1 -1
  70. package/dist/types/constants.d.ts +3 -3
  71. package/dist/useTable-CeRklbdT.cjs +1 -0
  72. package/dist/useTable-DS0-WInw.js +203 -0
  73. package/dist/workflow/Activity.d.ts +19 -7
  74. package/dist/workflow/Activity.d.ts.map +1 -1
  75. package/dist/workflow/client.d.ts +2 -2
  76. package/dist/workflow/client.d.ts.map +1 -1
  77. package/dist/workflow/createFieldFromMeta.d.ts +29 -0
  78. package/dist/workflow/createFieldFromMeta.d.ts.map +1 -0
  79. package/dist/workflow/index.d.ts +1 -2
  80. package/dist/workflow/index.d.ts.map +1 -1
  81. package/dist/workflow/types.d.ts +16 -12
  82. package/dist/workflow/types.d.ts.map +1 -1
  83. package/dist/workflow.cjs +1 -1
  84. package/dist/workflow.d.ts +5 -2
  85. package/dist/workflow.d.ts.map +1 -1
  86. package/dist/workflow.mjs +687 -352
  87. package/dist/workflow.types.d.ts +1 -0
  88. package/dist/workflow.types.d.ts.map +1 -1
  89. package/docs/bdo.md +1 -1
  90. package/docs/gaps.md +360 -0
  91. package/docs/useActivityForm.md +393 -0
  92. package/docs/useActivityTable.md +418 -0
  93. package/docs/{useForm.md → useBDOForm.md} +24 -24
  94. package/docs/useBDOTable.md +284 -0
  95. package/docs/workflow.md +148 -297
  96. package/package.json +2 -2
  97. package/sdk/bdo/core/BaseBdo.ts +2 -2
  98. package/sdk/bdo/fields/UserField.ts +1 -1
  99. package/sdk/components/hooks/index.ts +28 -5
  100. package/sdk/components/hooks/useActivityForm/createActivityItemProxy.ts +400 -0
  101. package/sdk/components/hooks/useActivityForm/createActivityResolver.ts +87 -0
  102. package/sdk/{workflow/components → components/hooks}/useActivityForm/types.ts +24 -11
  103. package/sdk/components/hooks/useActivityForm/useActivityForm.ts +478 -0
  104. package/sdk/components/hooks/useActivityTable/index.ts +8 -0
  105. package/sdk/components/hooks/useActivityTable/types.ts +47 -0
  106. package/sdk/components/hooks/useActivityTable/useActivityTable.ts +40 -0
  107. package/sdk/components/hooks/{useForm → useBDOForm}/index.ts +4 -3
  108. package/sdk/components/hooks/useBDOForm/shared.ts +250 -0
  109. package/sdk/components/hooks/{useForm → useBDOForm}/types.ts +9 -9
  110. package/sdk/components/hooks/{useForm/useForm.ts → useBDOForm/useBDOForm.ts} +70 -96
  111. package/sdk/components/hooks/useBDOTable/index.ts +2 -0
  112. package/sdk/components/hooks/useBDOTable/types.ts +22 -0
  113. package/sdk/components/hooks/useBDOTable/useBDOTable.ts +16 -0
  114. package/sdk/components/hooks/useTable/index.ts +3 -3
  115. package/sdk/components/hooks/useTable/types.ts +16 -12
  116. package/sdk/components/hooks/useTable/useTable.ts +56 -49
  117. package/sdk/form.ts +2 -2
  118. package/sdk/form.types.ts +4 -4
  119. package/sdk/table.ts +4 -1
  120. package/sdk/table.types.ts +7 -4
  121. package/sdk/types/base-fields.ts +4 -4
  122. package/sdk/types/constants.ts +3 -3
  123. package/sdk/workflow/Activity.ts +36 -12
  124. package/sdk/workflow/client.ts +65 -12
  125. package/sdk/workflow/createFieldFromMeta.ts +110 -0
  126. package/sdk/workflow/index.ts +1 -6
  127. package/sdk/workflow/types.ts +20 -11
  128. package/sdk/workflow.ts +11 -2
  129. package/sdk/workflow.types.ts +7 -0
  130. package/dist/BaseField-B6da88U7.js +0 -40
  131. package/dist/BaseField-Drp0-OxL.cjs +0 -1
  132. package/dist/components/hooks/useForm/createItemProxy.d.ts.map +0 -1
  133. package/dist/components/hooks/useForm/createResolver.d.ts.map +0 -1
  134. package/dist/components/hooks/useForm/index.d.ts +0 -5
  135. package/dist/components/hooks/useForm/index.d.ts.map +0 -1
  136. package/dist/components/hooks/useForm/types.d.ts.map +0 -1
  137. package/dist/components/hooks/useForm/useForm.d.ts.map +0 -1
  138. package/dist/error-handling-CAoD0Kwb.cjs +0 -1
  139. package/dist/error-handling-CrhTtD88.js +0 -14
  140. package/dist/index.esm-Cj63v5ny.js +0 -1014
  141. package/dist/index.esm-DuwT11sx.cjs +0 -1
  142. package/dist/workflow/components/useActivityForm/createActivityItemProxy.d.ts.map +0 -1
  143. package/dist/workflow/components/useActivityForm/createActivityResolver.d.ts +0 -22
  144. package/dist/workflow/components/useActivityForm/createActivityResolver.d.ts.map +0 -1
  145. package/dist/workflow/components/useActivityForm/index.d.ts.map +0 -1
  146. package/dist/workflow/components/useActivityForm/types.d.ts.map +0 -1
  147. package/dist/workflow/components/useActivityForm/useActivityForm.d.ts.map +0 -1
  148. package/docs/useTable.md +0 -369
  149. package/sdk/workflow/components/useActivityForm/createActivityItemProxy.ts +0 -130
  150. package/sdk/workflow/components/useActivityForm/createActivityResolver.ts +0 -61
  151. package/sdk/workflow/components/useActivityForm/useActivityForm.ts +0 -386
  152. /package/dist/{workflow/components → components/hooks}/useActivityForm/index.d.ts +0 -0
  153. /package/dist/components/hooks/{useForm → useBDOForm}/createItemProxy.d.ts +0 -0
  154. /package/dist/components/hooks/{useForm → useBDOForm}/createResolver.d.ts +0 -0
  155. /package/sdk/{workflow/components → components/hooks}/useActivityForm/index.ts +0 -0
  156. /package/sdk/components/hooks/{useForm → useBDOForm}/createItemProxy.ts +0 -0
  157. /package/sdk/components/hooks/{useForm → useBDOForm}/createResolver.ts +0 -0
@@ -0,0 +1,284 @@
1
+ # useBDOTable
2
+
3
+ Hook for BDO (Business Data Object) tables with search, sort, filter, and pagination. Pass a BDO instance and the hook handles the rest.
4
+
5
+ ## Imports
6
+
7
+ ```typescript
8
+ import { useBDOTable } from "@ram_28/kf-ai-sdk/table";
9
+ import { ConditionOperator, RHSType } from "@ram_28/kf-ai-sdk/table";
10
+ import type { UseBDOTableOptionsType, UseBDOTableReturnType } from "@ram_28/kf-ai-sdk/table/types";
11
+ ```
12
+
13
+ ---
14
+
15
+ ## Common Mistakes (READ FIRST)
16
+
17
+ ### 1. Passing `source` instead of `bdo`
18
+
19
+ `useBDOTable` takes a `bdo` instance, NOT a `source` string.
20
+
21
+ ```typescript
22
+ // ❌ WRONG — source is not a valid property on useBDOTable
23
+ useBDOTable({ source: product.meta._id });
24
+
25
+ // ✅ CORRECT — pass the BDO instance
26
+ useBDOTable({ bdo: product });
27
+ ```
28
+
29
+ ### 2. Passing a raw object instead of a BDO instance
30
+
31
+ The `bdo` property expects an object with a `meta` property containing `_id` and `name`. A plain object or entity type will not work.
32
+
33
+ ```typescript
34
+ // ❌ WRONG — plain object without meta
35
+ useBDOTable({ bdo: { _id: 'BO_Product', name: 'Product' } });
36
+
37
+ // ✅ CORRECT — a BDO class instance
38
+ const product = useMemo(() => new BuyerProduct(), []);
39
+ useBDOTable({ bdo: product });
40
+ ```
41
+
42
+ ### 3. Recreating the BDO on every render
43
+
44
+ Constructing the BDO inside the component body without `useMemo` creates a new instance on every render, which destabilizes the query key and causes infinite refetching.
45
+
46
+ ```typescript
47
+ // ❌ WRONG — new instance every render
48
+ function ProductsTable() {
49
+ const product = new BuyerProduct();
50
+ const table = useBDOTable({ bdo: product }); // infinite refetch loop
51
+ }
52
+
53
+ // ✅ CORRECT — memoize the instance
54
+ function ProductsTable() {
55
+ const product = useMemo(() => new BuyerProduct(), []);
56
+ const table = useBDOTable({ bdo: product });
57
+ }
58
+ ```
59
+
60
+ ### 4. Using `columns` with useBDOTable
61
+
62
+ `useBDOTable` does not accept a `columns` property. Column definitions are a UI concern handled in your rendering logic, not in the hook options.
63
+
64
+ ```typescript
65
+ // ❌ WRONG — columns is not a hook option
66
+ useBDOTable({
67
+ bdo: product,
68
+ columns: [{ fieldId: 'Title', label: 'Title' }],
69
+ });
70
+
71
+ // ✅ CORRECT — define columns separately for rendering
72
+ const columns = [
73
+ { fieldId: product.Title.id, label: product.Title.label },
74
+ { fieldId: product.Price.id, label: product.Price.label },
75
+ ];
76
+ const table = useBDOTable({ bdo: product });
77
+ ```
78
+
79
+ ### 5. Calling `.get()` on table rows
80
+
81
+ Table `rows` are plain objects, NOT `ItemType`. The `.get()` accessor is only available on items returned by `bdo.get()`, `bdo.create()`, or the `useBDOForm` item proxy.
82
+
83
+ ```typescript
84
+ // ❌ WRONG — rows are plain objects, not ItemType
85
+ table.rows.map((row) => row.Title.get());
86
+
87
+ // ✅ CORRECT — access properties directly
88
+ table.rows.map((row) => row.Title);
89
+ ```
90
+
91
+ ### 6. Wrong initialState property names
92
+
93
+ This is not react-table. Do not use react-table naming conventions.
94
+
95
+ ```typescript
96
+ // ❌ WRONG — sorting and pageIndex are react-table names
97
+ useBDOTable({
98
+ bdo: product,
99
+ initialState: { sorting: [...], pagination: { pageIndex: 0, pageSize: 10 } },
100
+ });
101
+
102
+ // ✅ CORRECT — use sort and pageNo (1-indexed)
103
+ useBDOTable({
104
+ bdo: product,
105
+ initialState: {
106
+ sort: [{ [product.Title.id]: 'ASC' }],
107
+ pagination: { pageNo: 1, pageSize: 10 },
108
+ },
109
+ });
110
+ ```
111
+
112
+ ---
113
+
114
+ ## Complete Example
115
+
116
+ A product listing page with search, filter, sort, and pagination.
117
+
118
+ ```tsx
119
+ import { useMemo, useState } from "react";
120
+ import { useBDOTable } from "@ram_28/kf-ai-sdk/table";
121
+ import { ConditionOperator, RHSType } from "@ram_28/kf-ai-sdk/table";
122
+ import type { UseBDOTableReturnType } from "@ram_28/kf-ai-sdk/table/types";
123
+ import { BuyerProduct } from "../bdo/buyer/Product";
124
+ import type { BuyerProductFieldType } from "../bdo/buyer/Product";
125
+
126
+ function ProductListPage() {
127
+ const productBdo = useMemo(() => new BuyerProduct(), []);
128
+ const [selectedCategory, setSelectedCategory] = useState("all");
129
+
130
+ const table: UseBDOTableReturnType<BuyerProductFieldType> =
131
+ useBDOTable<BuyerProductFieldType>({
132
+ bdo: productBdo,
133
+ initialState: {
134
+ sort: [{ [productBdo.Title.id]: "ASC" }],
135
+ pagination: { pageNo: 1, pageSize: 10 },
136
+ },
137
+ onError: (error) => {
138
+ console.error("Table fetch failed:", error.message);
139
+ },
140
+ onSuccess: (data) => {
141
+ console.log("Loaded", data.length, "rows");
142
+ },
143
+ });
144
+
145
+ const handleCategoryChange = (category: string) => {
146
+ setSelectedCategory(category);
147
+ table.filter.clearAllConditions();
148
+ if (category !== "all") {
149
+ table.filter.addCondition({
150
+ LHSField: productBdo.Category.id,
151
+ Operator: ConditionOperator.EQ,
152
+ RHSValue: category,
153
+ RHSType: RHSType.Constant,
154
+ });
155
+ }
156
+ };
157
+
158
+ if (table.isLoading) return <div>Loading...</div>;
159
+ if (table.error) {
160
+ return (
161
+ <div>
162
+ <p>Error: {table.error.message}</p>
163
+ <button onClick={() => table.refetch()}>Retry</button>
164
+ </div>
165
+ );
166
+ }
167
+
168
+ return (
169
+ <div>
170
+ {/* Search */}
171
+ <input
172
+ type="text"
173
+ placeholder="Search products..."
174
+ value={table.search.query}
175
+ onChange={(e) => table.search.set(productBdo.Title.id, e.target.value)}
176
+ />
177
+ {table.search.query && (
178
+ <button onClick={table.search.clear}>Clear Search</button>
179
+ )}
180
+
181
+ {/* Category Filter */}
182
+ <select
183
+ value={selectedCategory}
184
+ onChange={(e) => handleCategoryChange(e.target.value)}
185
+ >
186
+ <option value="all">All Categories</option>
187
+ <option value="Electronics">Electronics</option>
188
+ <option value="Books">Books</option>
189
+ </select>
190
+
191
+ {/* Sort */}
192
+ <select
193
+ onChange={(e) => {
194
+ const [field, dir] = e.target.value.split(":");
195
+ table.sort.set(field, dir as "ASC" | "DESC");
196
+ }}
197
+ >
198
+ <option value={`${productBdo.Title.id}:ASC`}>Name A-Z</option>
199
+ <option value={`${productBdo.Price.id}:ASC`}>Price: Low to High</option>
200
+ <option value={`${productBdo.Price.id}:DESC`}>Price: High to Low</option>
201
+ </select>
202
+
203
+ {/* Results */}
204
+ <p>{table.totalItems} results</p>
205
+ <div>
206
+ {table.rows.map((row) => (
207
+ <div key={row._id}>
208
+ <h3>{row.Title}</h3>
209
+ <p>${row.Price}</p>
210
+ <p>{row.Category}</p>
211
+ </div>
212
+ ))}
213
+ </div>
214
+
215
+ {/* Pagination */}
216
+ <div>
217
+ <button
218
+ onClick={table.pagination.goToPrevious}
219
+ disabled={!table.pagination.canGoPrevious}
220
+ >
221
+ Previous
222
+ </button>
223
+ <span>
224
+ Page {table.pagination.pageNo} of {table.pagination.totalPages}
225
+ </span>
226
+ <button
227
+ onClick={table.pagination.goToNext}
228
+ disabled={!table.pagination.canGoNext}
229
+ >
230
+ Next
231
+ </button>
232
+ </div>
233
+ </div>
234
+ );
235
+ }
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Type Definitions
241
+
242
+ ### UseBDOTableOptionsType
243
+
244
+ ```typescript
245
+ export interface UseBDOTableOptionsType<T> {
246
+ /** BDO instance — only meta._id is used (for API routing) */
247
+ bdo: {
248
+ meta: { readonly _id: string; readonly name: string };
249
+ };
250
+
251
+ /** Initial state */
252
+ initialState?: {
253
+ sort?: SortType;
254
+ pagination?: PaginationStateType;
255
+ filter?: UseFilterOptionsType<T>;
256
+ };
257
+
258
+ /** Error callback */
259
+ onError?: (error: Error) => void;
260
+
261
+ /** Success callback — receives rows from current page */
262
+ onSuccess?: (data: T[]) => void;
263
+ }
264
+ ```
265
+
266
+ ### UseBDOTableReturnType
267
+
268
+ ```typescript
269
+ export type UseBDOTableReturnType<T> = UseTableReturnType<T>;
270
+ ```
271
+
272
+ The return type is identical to `UseTableReturnType<T>`. All properties — `rows`, `totalItems`, `isLoading`, `isFetching`, `error`, `search`, `sort`, `filter`, `pagination`, and `refetch` — behave the same.
273
+
274
+ ---
275
+
276
+ ## Search, Sort, Filter, and Pagination
277
+
278
+ `useBDOTable` supports `initialState`, `onError`, and `onSuccess` options.
279
+
280
+ - **Search** — `table.search.set(field, query)`, `table.search.clear()`, 300ms debounce
281
+ - **Sort** — `table.sort.toggle(field)`, `table.sort.set(field, direction)`, `table.sort.clear()`
282
+ - **Filter** — `table.filter.addCondition(...)`, `table.filter.removeCondition(...)`, `table.filter.clearAllConditions()`
283
+ - **Pagination** — `table.pagination.goToNext()`, `table.pagination.goToPrevious()`, `table.pagination.goToPage(n)`, `table.pagination.setPageSize(n)`
284
+