@nccirtu/tablefy 0.8.3 → 0.9.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 (251) hide show
  1. package/README.md +224 -200
  2. package/dist/columns/badge-column.d.ts +7 -0
  3. package/dist/columns/columns/badge-column.d.ts +7 -0
  4. package/dist/columns/columns/types.d.ts +7 -0
  5. package/dist/columns/forms/builders/actions-builder.d.ts +14 -0
  6. package/dist/columns/forms/builders/form-schema.d.ts +35 -0
  7. package/dist/columns/forms/builders/index.d.ts +5 -0
  8. package/dist/columns/forms/builders/section-builder.d.ts +16 -0
  9. package/dist/columns/forms/builders/tab-builder.d.ts +16 -0
  10. package/dist/columns/forms/builders/wizard-builder.d.ts +17 -0
  11. package/dist/columns/forms/components/field-renderer.d.ts +12 -0
  12. package/dist/columns/forms/components/form-actions.d.ts +9 -0
  13. package/dist/columns/forms/components/form-renderer.d.ts +14 -0
  14. package/dist/columns/forms/components/grid-layout.d.ts +7 -0
  15. package/dist/columns/forms/components/index.d.ts +9 -0
  16. package/dist/columns/forms/components/section-renderer.d.ts +14 -0
  17. package/dist/columns/forms/components/tab-renderer.d.ts +15 -0
  18. package/dist/columns/forms/components/wizard-renderer.d.ts +17 -0
  19. package/dist/columns/forms/fields/base-field.d.ts +24 -0
  20. package/dist/columns/forms/fields/checkbox-group.d.ts +12 -0
  21. package/dist/columns/forms/fields/checkbox.d.ts +9 -0
  22. package/dist/columns/forms/fields/date-picker.d.ts +15 -0
  23. package/dist/columns/forms/fields/file-upload.d.ts +17 -0
  24. package/dist/columns/forms/fields/hidden.d.ts +9 -0
  25. package/dist/columns/forms/fields/index.d.ts +12 -0
  26. package/dist/columns/forms/fields/radio-group.d.ts +14 -0
  27. package/dist/columns/forms/fields/repeater.d.ts +21 -0
  28. package/dist/columns/forms/fields/select.d.ts +16 -0
  29. package/dist/columns/forms/fields/text-input.d.ts +20 -0
  30. package/dist/columns/forms/fields/textarea.d.ts +14 -0
  31. package/dist/columns/forms/fields/toggle.d.ts +11 -0
  32. package/dist/columns/forms/index.d.ts +26 -0
  33. package/dist/columns/forms/types/actions.d.ts +11 -0
  34. package/dist/columns/forms/types/field.d.ts +98 -0
  35. package/dist/columns/forms/types/form.d.ts +37 -0
  36. package/dist/columns/forms/types/index.d.ts +4 -0
  37. package/dist/columns/forms/types/layout.d.ts +31 -0
  38. package/dist/columns/index.d.ts +2 -0
  39. package/dist/columns/index.esm.js +35 -12
  40. package/dist/columns/index.esm.js.map +1 -1
  41. package/dist/columns/index.js +35 -12
  42. package/dist/columns/index.js.map +1 -1
  43. package/dist/columns/inertia/index.d.ts +4 -0
  44. package/dist/columns/inertia/precognition.d.ts +6 -0
  45. package/dist/columns/inertia/types.d.ts +63 -0
  46. package/dist/columns/inertia/use-inertia-form.d.ts +2 -0
  47. package/dist/columns/inertia/use-server-table.d.ts +2 -0
  48. package/dist/columns/types.d.ts +7 -0
  49. package/dist/forms/builders/actions-builder.d.ts +14 -0
  50. package/dist/forms/builders/empty-state.d.ts +46 -0
  51. package/dist/forms/builders/form-schema.d.ts +35 -0
  52. package/dist/forms/builders/index.d.ts +2 -0
  53. package/dist/forms/builders/section-builder.d.ts +16 -0
  54. package/dist/forms/builders/tab-builder.d.ts +16 -0
  55. package/dist/forms/builders/table-schema.d.ts +45 -0
  56. package/dist/forms/builders/wizard-builder.d.ts +17 -0
  57. package/dist/forms/columns/actions-column.d.ts +26 -0
  58. package/dist/forms/columns/avatar-group-column.d.ts +38 -0
  59. package/dist/forms/columns/badge-column.d.ts +29 -0
  60. package/dist/forms/columns/base-column.d.ts +21 -0
  61. package/dist/forms/columns/button-column.d.ts +14 -0
  62. package/dist/forms/columns/checkbox-column.d.ts +5 -0
  63. package/dist/forms/columns/date-column.d.ts +24 -0
  64. package/dist/forms/columns/dropdown-column.d.ts +17 -0
  65. package/dist/forms/columns/enum-column.d.ts +52 -0
  66. package/dist/forms/columns/icon-column.d.ts +58 -0
  67. package/dist/forms/columns/image-column.d.ts +21 -0
  68. package/dist/forms/columns/index.d.ts +18 -0
  69. package/dist/forms/columns/input-column.d.ts +27 -0
  70. package/dist/forms/columns/link-column.d.ts +27 -0
  71. package/dist/forms/columns/number-column.d.ts +23 -0
  72. package/dist/forms/columns/progress-column.d.ts +30 -0
  73. package/dist/forms/columns/select-column.d.ts +24 -0
  74. package/dist/forms/columns/text-column.d.ts +14 -0
  75. package/dist/forms/columns/types.d.ts +46 -0
  76. package/dist/forms/components/field-renderer.d.ts +12 -0
  77. package/dist/forms/components/form-actions.d.ts +9 -0
  78. package/dist/forms/components/form-renderer.d.ts +14 -0
  79. package/dist/forms/components/grid-layout.d.ts +7 -0
  80. package/dist/forms/components/index.d.ts +9 -0
  81. package/dist/forms/components/section-renderer.d.ts +14 -0
  82. package/dist/forms/components/tab-renderer.d.ts +15 -0
  83. package/dist/forms/components/wizard-renderer.d.ts +17 -0
  84. package/dist/forms/confirm/ConfirmProvider.d.ts +6 -0
  85. package/dist/forms/confirm/confirm.d.ts +3 -0
  86. package/dist/forms/confirm/index.d.ts +3 -0
  87. package/dist/forms/confirm/types.d.ts +10 -0
  88. package/dist/forms/fields/base-field.d.ts +24 -0
  89. package/dist/forms/fields/checkbox-group.d.ts +12 -0
  90. package/dist/forms/fields/checkbox.d.ts +9 -0
  91. package/dist/forms/fields/date-picker.d.ts +15 -0
  92. package/dist/forms/fields/file-upload.d.ts +17 -0
  93. package/dist/forms/fields/hidden.d.ts +9 -0
  94. package/dist/forms/fields/index.d.ts +12 -0
  95. package/dist/forms/fields/radio-group.d.ts +14 -0
  96. package/dist/forms/fields/repeater.d.ts +21 -0
  97. package/dist/forms/fields/select.d.ts +16 -0
  98. package/dist/forms/fields/text-input.d.ts +20 -0
  99. package/dist/forms/fields/textarea.d.ts +14 -0
  100. package/dist/forms/fields/toggle.d.ts +11 -0
  101. package/dist/forms/forms/builders/actions-builder.d.ts +14 -0
  102. package/dist/forms/forms/builders/form-schema.d.ts +35 -0
  103. package/dist/forms/forms/builders/index.d.ts +5 -0
  104. package/dist/forms/forms/builders/section-builder.d.ts +16 -0
  105. package/dist/forms/forms/builders/tab-builder.d.ts +16 -0
  106. package/dist/forms/forms/builders/wizard-builder.d.ts +17 -0
  107. package/dist/forms/forms/components/field-renderer.d.ts +12 -0
  108. package/dist/forms/forms/components/form-actions.d.ts +9 -0
  109. package/dist/forms/forms/components/form-renderer.d.ts +14 -0
  110. package/dist/forms/forms/components/grid-layout.d.ts +7 -0
  111. package/dist/forms/forms/components/index.d.ts +9 -0
  112. package/dist/forms/forms/components/section-renderer.d.ts +14 -0
  113. package/dist/forms/forms/components/tab-renderer.d.ts +15 -0
  114. package/dist/forms/forms/components/wizard-renderer.d.ts +17 -0
  115. package/dist/forms/forms/fields/base-field.d.ts +24 -0
  116. package/dist/forms/forms/fields/checkbox-group.d.ts +12 -0
  117. package/dist/forms/forms/fields/checkbox.d.ts +9 -0
  118. package/dist/forms/forms/fields/date-picker.d.ts +15 -0
  119. package/dist/forms/forms/fields/file-upload.d.ts +17 -0
  120. package/dist/forms/forms/fields/hidden.d.ts +9 -0
  121. package/dist/forms/forms/fields/index.d.ts +12 -0
  122. package/dist/forms/forms/fields/radio-group.d.ts +14 -0
  123. package/dist/forms/forms/fields/repeater.d.ts +21 -0
  124. package/dist/forms/forms/fields/select.d.ts +16 -0
  125. package/dist/forms/forms/fields/text-input.d.ts +20 -0
  126. package/dist/forms/forms/fields/textarea.d.ts +14 -0
  127. package/dist/forms/forms/fields/toggle.d.ts +11 -0
  128. package/dist/forms/forms/index.d.ts +26 -0
  129. package/dist/forms/forms/types/actions.d.ts +11 -0
  130. package/dist/forms/forms/types/field.d.ts +98 -0
  131. package/dist/forms/forms/types/form.d.ts +37 -0
  132. package/dist/forms/forms/types/index.d.ts +4 -0
  133. package/dist/forms/forms/types/layout.d.ts +31 -0
  134. package/dist/forms/index.d.ts +25 -0
  135. package/dist/forms/index.esm.js +1052 -0
  136. package/dist/forms/index.esm.js.map +1 -0
  137. package/dist/forms/index.js +1077 -0
  138. package/dist/forms/index.js.map +1 -0
  139. package/dist/forms/inertia/index.d.ts +4 -0
  140. package/dist/forms/inertia/precognition.d.ts +6 -0
  141. package/dist/forms/inertia/types.d.ts +63 -0
  142. package/dist/forms/inertia/use-inertia-form.d.ts +2 -0
  143. package/dist/forms/inertia/use-server-table.d.ts +2 -0
  144. package/dist/forms/tablefy/avatar-list.d.ts +15 -0
  145. package/dist/forms/tablefy/data-table-empty.d.ts +8 -0
  146. package/dist/forms/tablefy/data-table-header.d.ts +17 -0
  147. package/dist/forms/tablefy/data-table-pagination.d.ts +9 -0
  148. package/dist/forms/tablefy/data-table-schema.d.ts +1 -0
  149. package/dist/forms/tablefy/data-table.d.ts +13 -0
  150. package/dist/forms/tablefy/index.d.ts +6 -0
  151. package/dist/forms/types/actions.d.ts +21 -0
  152. package/dist/forms/types/empty-state.d.ts +18 -0
  153. package/dist/forms/types/field.d.ts +98 -0
  154. package/dist/forms/types/filters.d.ts +25 -0
  155. package/dist/forms/types/form.d.ts +37 -0
  156. package/dist/forms/types/index.d.ts +4 -0
  157. package/dist/forms/types/layout.d.ts +31 -0
  158. package/dist/forms/types/table.d.ts +42 -0
  159. package/dist/forms/utils.d.ts +1 -0
  160. package/dist/index.d.ts +2 -0
  161. package/dist/index.esm.js +1085 -21
  162. package/dist/index.esm.js.map +1 -1
  163. package/dist/index.js +1093 -12
  164. package/dist/index.js.map +1 -1
  165. package/dist/inertia/builders/empty-state.d.ts +46 -0
  166. package/dist/inertia/builders/index.d.ts +2 -0
  167. package/dist/inertia/builders/table-schema.d.ts +45 -0
  168. package/dist/inertia/columns/actions-column.d.ts +26 -0
  169. package/dist/inertia/columns/avatar-group-column.d.ts +38 -0
  170. package/dist/inertia/columns/badge-column.d.ts +29 -0
  171. package/dist/inertia/columns/base-column.d.ts +21 -0
  172. package/dist/inertia/columns/button-column.d.ts +14 -0
  173. package/dist/inertia/columns/checkbox-column.d.ts +5 -0
  174. package/dist/inertia/columns/date-column.d.ts +24 -0
  175. package/dist/inertia/columns/dropdown-column.d.ts +17 -0
  176. package/dist/inertia/columns/enum-column.d.ts +52 -0
  177. package/dist/inertia/columns/icon-column.d.ts +58 -0
  178. package/dist/inertia/columns/image-column.d.ts +21 -0
  179. package/dist/inertia/columns/index.d.ts +18 -0
  180. package/dist/inertia/columns/input-column.d.ts +27 -0
  181. package/dist/inertia/columns/link-column.d.ts +27 -0
  182. package/dist/inertia/columns/number-column.d.ts +23 -0
  183. package/dist/inertia/columns/progress-column.d.ts +30 -0
  184. package/dist/inertia/columns/select-column.d.ts +24 -0
  185. package/dist/inertia/columns/text-column.d.ts +14 -0
  186. package/dist/inertia/columns/types.d.ts +46 -0
  187. package/dist/inertia/confirm/ConfirmProvider.d.ts +6 -0
  188. package/dist/inertia/confirm/confirm.d.ts +3 -0
  189. package/dist/inertia/confirm/index.d.ts +3 -0
  190. package/dist/inertia/confirm/types.d.ts +10 -0
  191. package/dist/inertia/forms/builders/actions-builder.d.ts +14 -0
  192. package/dist/inertia/forms/builders/form-schema.d.ts +35 -0
  193. package/dist/inertia/forms/builders/index.d.ts +5 -0
  194. package/dist/inertia/forms/builders/section-builder.d.ts +16 -0
  195. package/dist/inertia/forms/builders/tab-builder.d.ts +16 -0
  196. package/dist/inertia/forms/builders/wizard-builder.d.ts +17 -0
  197. package/dist/inertia/forms/components/field-renderer.d.ts +12 -0
  198. package/dist/inertia/forms/components/form-actions.d.ts +9 -0
  199. package/dist/inertia/forms/components/form-renderer.d.ts +14 -0
  200. package/dist/inertia/forms/components/grid-layout.d.ts +7 -0
  201. package/dist/inertia/forms/components/index.d.ts +9 -0
  202. package/dist/inertia/forms/components/section-renderer.d.ts +14 -0
  203. package/dist/inertia/forms/components/tab-renderer.d.ts +15 -0
  204. package/dist/inertia/forms/components/wizard-renderer.d.ts +17 -0
  205. package/dist/inertia/forms/fields/base-field.d.ts +24 -0
  206. package/dist/inertia/forms/fields/checkbox-group.d.ts +12 -0
  207. package/dist/inertia/forms/fields/checkbox.d.ts +9 -0
  208. package/dist/inertia/forms/fields/date-picker.d.ts +15 -0
  209. package/dist/inertia/forms/fields/file-upload.d.ts +17 -0
  210. package/dist/inertia/forms/fields/hidden.d.ts +9 -0
  211. package/dist/inertia/forms/fields/index.d.ts +12 -0
  212. package/dist/inertia/forms/fields/radio-group.d.ts +14 -0
  213. package/dist/inertia/forms/fields/repeater.d.ts +21 -0
  214. package/dist/inertia/forms/fields/select.d.ts +16 -0
  215. package/dist/inertia/forms/fields/text-input.d.ts +20 -0
  216. package/dist/inertia/forms/fields/textarea.d.ts +14 -0
  217. package/dist/inertia/forms/fields/toggle.d.ts +11 -0
  218. package/dist/inertia/forms/index.d.ts +26 -0
  219. package/dist/inertia/forms/types/actions.d.ts +11 -0
  220. package/dist/inertia/forms/types/field.d.ts +98 -0
  221. package/dist/inertia/forms/types/form.d.ts +37 -0
  222. package/dist/inertia/forms/types/index.d.ts +4 -0
  223. package/dist/inertia/forms/types/layout.d.ts +31 -0
  224. package/dist/inertia/index.d.ts +25 -0
  225. package/dist/inertia/index.esm.js +149 -0
  226. package/dist/inertia/index.esm.js.map +1 -0
  227. package/dist/inertia/index.js +153 -0
  228. package/dist/inertia/index.js.map +1 -0
  229. package/dist/inertia/inertia/index.d.ts +4 -0
  230. package/dist/inertia/inertia/precognition.d.ts +6 -0
  231. package/dist/inertia/inertia/types.d.ts +63 -0
  232. package/dist/inertia/inertia/use-inertia-form.d.ts +2 -0
  233. package/dist/inertia/inertia/use-server-table.d.ts +2 -0
  234. package/dist/inertia/precognition.d.ts +6 -0
  235. package/dist/inertia/tablefy/avatar-list.d.ts +15 -0
  236. package/dist/inertia/tablefy/data-table-empty.d.ts +8 -0
  237. package/dist/inertia/tablefy/data-table-header.d.ts +17 -0
  238. package/dist/inertia/tablefy/data-table-pagination.d.ts +9 -0
  239. package/dist/inertia/tablefy/data-table-schema.d.ts +1 -0
  240. package/dist/inertia/tablefy/data-table.d.ts +13 -0
  241. package/dist/inertia/tablefy/index.d.ts +6 -0
  242. package/dist/inertia/types/actions.d.ts +21 -0
  243. package/dist/inertia/types/empty-state.d.ts +18 -0
  244. package/dist/inertia/types/filters.d.ts +25 -0
  245. package/dist/inertia/types/index.d.ts +4 -0
  246. package/dist/inertia/types/table.d.ts +42 -0
  247. package/dist/inertia/types.d.ts +63 -0
  248. package/dist/inertia/use-inertia-form.d.ts +2 -0
  249. package/dist/inertia/use-server-table.d.ts +2 -0
  250. package/dist/inertia/utils.d.ts +1 -0
  251. package/package.json +39 -13
@@ -0,0 +1,31 @@
1
+ import { ReactNode } from "react";
2
+ export interface SectionConfig<TData extends Record<string, any>> {
3
+ id: string;
4
+ title: string;
5
+ description?: string;
6
+ fields: string[];
7
+ columns?: number;
8
+ collapsible?: boolean;
9
+ collapsed?: boolean;
10
+ icon?: ReactNode;
11
+ hidden?: (data: TData) => boolean;
12
+ }
13
+ export interface TabConfig<TData extends Record<string, any>> {
14
+ id: string;
15
+ label: string;
16
+ icon?: ReactNode;
17
+ fields?: string[];
18
+ sections?: SectionConfig<TData>[];
19
+ badge?: string | number | ((data: TData) => string | number);
20
+ disabled?: (data: TData) => boolean;
21
+ }
22
+ export interface WizardStepConfig<TData extends Record<string, any>> {
23
+ id: string;
24
+ label: string;
25
+ description?: string;
26
+ icon?: ReactNode;
27
+ fields?: string[];
28
+ sections?: SectionConfig<TData>[];
29
+ canProceed?: (data: TData) => boolean;
30
+ beforeNext?: (data: TData) => Promise<boolean> | boolean;
31
+ }
@@ -0,0 +1,25 @@
1
+ export { DataTable } from "./tablefy/data-table";
2
+ export { DataTableSchema } from "./tablefy/data-table-schema";
3
+ export { TableSchema, EmptyStateBuilder } from "./builders";
4
+ export { AvatarGroupColumn, AvatarGroupColumn as avatarGroupColumn, } from "./columns/avatar-group-column";
5
+ export { BadgeColumn, BadgeColumn as badgeColumn, } from "./columns/badge-column";
6
+ export { ButtonColumn, ButtonColumn as buttonColumn, } from "./columns/button-column";
7
+ export { CheckboxColumn, CheckboxColumn as checkboxColumn, } from "./columns/checkbox-column";
8
+ export { DateColumn, DateColumn as dateColumn } from "./columns/date-column";
9
+ export { DropdownColumn, DropdownColumn as dropdownColumn, } from "./columns/dropdown-column";
10
+ export { IconColumn, IconColumn as iconColumn } from "./columns/icon-column";
11
+ export { ImageColumn } from "./columns/image-column";
12
+ export { InputColumn, InputColumn as inputColumn, } from "./columns/input-column";
13
+ export { LinkColumn } from "./columns/link-column";
14
+ export { NumberColumn } from "./columns/number-column";
15
+ export { ProgressColumn, SelectColumn } from "./columns";
16
+ export { ActionsColumn, ActionsColumn as actionsColumn, } from "./columns/actions-column";
17
+ export type { ActionItem } from "./columns/actions-column";
18
+ export { TextColumn, TextColumn as textColumn } from "./columns/text-column";
19
+ export { EnumColumn, EnumColumn as enumColumn } from "./columns/enum-column";
20
+ export type { EnumOption } from "./columns/enum-column";
21
+ export { ConfirmProvider, confirm } from "./confirm";
22
+ export type { ConfirmOptions } from "./confirm";
23
+ export type { DataTableConfig, EmptyStateConfig, FilterConfig, HeaderAction, PaginationConfig, SearchConfig, } from "./types";
24
+ export { FormSchema, ActionsBuilder, SectionBuilder, TabBuilder, WizardStep, TextInput, Textarea, Select, Checkbox, Toggle, RadioGroup, DatePicker, Hidden, FileUpload, CheckboxGroup, Repeater, FormRenderer, } from "./forms";
25
+ export type { FormSchemaConfig, FormBuildResult, FormRendererProps, BuiltField, FieldType, FieldRenderProps, BaseFieldConfig, SelectOption as FormSelectOption, FormActionConfig, SectionConfig, TabConfig, WizardStepConfig, } from "./forms";
@@ -0,0 +1,149 @@
1
+ import { useForm, router } from '@inertiajs/react';
2
+ import { useMemo, useCallback, useState, useRef } from 'react';
3
+
4
+ function useInertiaForm(options) {
5
+ const { schema, initialData, url, method = "post", onSuccess, onError, onBefore, onFinish, preserveScroll, } = options;
6
+ // Compute default values from schema fields
7
+ const defaults = useMemo(() => {
8
+ const d = {};
9
+ for (const field of schema.fields) {
10
+ d[field.name] =
11
+ field.config.defaultValue !== undefined
12
+ ? field.config.defaultValue
13
+ : "";
14
+ }
15
+ return { ...d, ...initialData };
16
+ }, [schema, initialData]);
17
+ const form = useForm(defaults);
18
+ const handleChange = useCallback((field, value) => {
19
+ form.setData(field, value);
20
+ }, [form]);
21
+ const handleSubmit = useCallback(() => {
22
+ if (!url)
23
+ return;
24
+ const submitOptions = {
25
+ onSuccess: () => onSuccess?.(),
26
+ onError: (errors) => onError?.(errors),
27
+ onBefore: () => onBefore?.(),
28
+ onFinish: () => onFinish?.(),
29
+ preserveScroll,
30
+ };
31
+ switch (method) {
32
+ case "post":
33
+ form.post(url, submitOptions);
34
+ break;
35
+ case "put":
36
+ form.put(url, submitOptions);
37
+ break;
38
+ case "patch":
39
+ form.patch(url, submitOptions);
40
+ break;
41
+ case "delete":
42
+ form.delete(url, submitOptions);
43
+ break;
44
+ }
45
+ }, [form, url, method, onSuccess, onError, onBefore, onFinish, preserveScroll]);
46
+ return {
47
+ data: form.data,
48
+ errors: form.errors,
49
+ onChange: handleChange,
50
+ onSubmit: handleSubmit,
51
+ processing: form.processing,
52
+ form,
53
+ };
54
+ }
55
+
56
+ function useServerTable(config) {
57
+ const { url, defaultSort = null, defaultPageSize = 15, debounce = 300, preserveState = true, preserveScroll = true, only, } = config;
58
+ const [state, setState] = useState({
59
+ search: "",
60
+ sort: defaultSort,
61
+ page: 1,
62
+ perPage: defaultPageSize,
63
+ filters: {},
64
+ });
65
+ const debounceTimer = useRef(null);
66
+ const visitWithState = useCallback((newState) => {
67
+ const params = {};
68
+ if (newState.search)
69
+ params.search = newState.search;
70
+ if (newState.sort) {
71
+ params.sort = newState.sort.id;
72
+ params.direction = newState.sort.desc ? "desc" : "asc";
73
+ }
74
+ params.page = newState.page;
75
+ params.per_page = newState.perPage;
76
+ for (const [key, value] of Object.entries(newState.filters)) {
77
+ if (value !== null && value !== undefined && value !== "") {
78
+ params[`filter[${key}]`] = value;
79
+ }
80
+ }
81
+ router.visit(url, {
82
+ data: params,
83
+ preserveState,
84
+ preserveScroll,
85
+ only,
86
+ replace: true,
87
+ });
88
+ }, [url, preserveState, preserveScroll, only]);
89
+ const setSearch = useCallback((search) => {
90
+ const newState = { ...state, search, page: 1 };
91
+ setState(newState);
92
+ if (debounceTimer.current)
93
+ clearTimeout(debounceTimer.current);
94
+ debounceTimer.current = setTimeout(() => visitWithState(newState), debounce);
95
+ }, [state, debounce, visitWithState]);
96
+ const setSort = useCallback((sort) => {
97
+ const newState = { ...state, sort };
98
+ setState(newState);
99
+ visitWithState(newState);
100
+ }, [state, visitWithState]);
101
+ const setPage = useCallback((page) => {
102
+ const newState = { ...state, page };
103
+ setState(newState);
104
+ visitWithState(newState);
105
+ }, [state, visitWithState]);
106
+ const setPerPage = useCallback((perPage) => {
107
+ const newState = { ...state, perPage, page: 1 };
108
+ setState(newState);
109
+ visitWithState(newState);
110
+ }, [state, visitWithState]);
111
+ const setFilter = useCallback((key, value) => {
112
+ const newState = {
113
+ ...state,
114
+ filters: { ...state.filters, [key]: value },
115
+ page: 1,
116
+ };
117
+ setState(newState);
118
+ visitWithState(newState);
119
+ }, [state, visitWithState]);
120
+ const resetFilters = useCallback(() => {
121
+ const newState = { ...state, filters: {}, page: 1 };
122
+ setState(newState);
123
+ visitWithState(newState);
124
+ }, [state, visitWithState]);
125
+ return {
126
+ state,
127
+ setSearch,
128
+ setSort,
129
+ setPage,
130
+ setPerPage,
131
+ setFilter,
132
+ resetFilters,
133
+ };
134
+ }
135
+
136
+ /**
137
+ * Creates a precognition onBlur handler for a form field.
138
+ * Requires Laravel Precognition middleware on the backend
139
+ * and @inertiajs/react with precognition support.
140
+ */
141
+ function createPrecognitionBlur(form, fieldName) {
142
+ if (typeof form?.validate === "function") {
143
+ return () => form.validate(fieldName);
144
+ }
145
+ return undefined;
146
+ }
147
+
148
+ export { createPrecognitionBlur, useInertiaForm, useServerTable };
149
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/inertia/use-inertia-form.ts","../../src/inertia/use-server-table.ts","../../src/inertia/precognition.ts"],"sourcesContent":["import { useForm as useInertiaUseForm } from \"@inertiajs/react\";\nimport { useMemo, useCallback } from \"react\";\nimport { UseInertiaFormOptions, UseInertiaFormReturn } from \"./types\";\n\nexport function useInertiaForm<TData extends Record<string, any>>(\n options: UseInertiaFormOptions<TData>,\n): UseInertiaFormReturn<TData> {\n const {\n schema,\n initialData,\n url,\n method = \"post\",\n onSuccess,\n onError,\n onBefore,\n onFinish,\n preserveScroll,\n } = options;\n\n // Compute default values from schema fields\n const defaults = useMemo(() => {\n const d: Record<string, any> = {};\n for (const field of schema.fields) {\n d[field.name] =\n field.config.defaultValue !== undefined\n ? field.config.defaultValue\n : \"\";\n }\n return { ...d, ...initialData } as TData;\n }, [schema, initialData]);\n\n const form = useInertiaUseForm<TData>(defaults);\n\n const handleChange = useCallback(\n (field: keyof TData, value: any) => {\n form.setData(field as string, value);\n },\n [form],\n );\n\n const handleSubmit = useCallback(() => {\n if (!url) return;\n\n const submitOptions = {\n onSuccess: () => onSuccess?.(),\n onError: (errors: any) => onError?.(errors),\n onBefore: () => onBefore?.(),\n onFinish: () => onFinish?.(),\n preserveScroll,\n };\n\n switch (method) {\n case \"post\":\n form.post(url, submitOptions);\n break;\n case \"put\":\n form.put(url, submitOptions);\n break;\n case \"patch\":\n form.patch(url, submitOptions);\n break;\n case \"delete\":\n form.delete(url, submitOptions);\n break;\n }\n }, [form, url, method, onSuccess, onError, onBefore, onFinish, preserveScroll]);\n\n return {\n data: form.data,\n errors: form.errors as Partial<Record<keyof TData, string>>,\n onChange: handleChange,\n onSubmit: handleSubmit,\n processing: form.processing,\n form,\n };\n}\n","import { router } from \"@inertiajs/react\";\nimport { useState, useCallback, useRef } from \"react\";\nimport {\n ServerTableConfig,\n ServerTableState,\n ServerTableReturn,\n} from \"./types\";\n\nexport function useServerTable(config: ServerTableConfig): ServerTableReturn {\n const {\n url,\n defaultSort = null,\n defaultPageSize = 15,\n debounce = 300,\n preserveState = true,\n preserveScroll = true,\n only,\n } = config;\n\n const [state, setState] = useState<ServerTableState>({\n search: \"\",\n sort: defaultSort,\n page: 1,\n perPage: defaultPageSize,\n filters: {},\n });\n\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const visitWithState = useCallback(\n (newState: ServerTableState) => {\n const params: Record<string, any> = {};\n\n if (newState.search) params.search = newState.search;\n if (newState.sort) {\n params.sort = newState.sort.id;\n params.direction = newState.sort.desc ? \"desc\" : \"asc\";\n }\n params.page = newState.page;\n params.per_page = newState.perPage;\n\n for (const [key, value] of Object.entries(newState.filters)) {\n if (value !== null && value !== undefined && value !== \"\") {\n params[`filter[${key}]`] = value;\n }\n }\n\n router.visit(url, {\n data: params,\n preserveState,\n preserveScroll,\n only,\n replace: true,\n });\n },\n [url, preserveState, preserveScroll, only],\n );\n\n const setSearch = useCallback(\n (search: string) => {\n const newState = { ...state, search, page: 1 };\n setState(newState);\n\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n debounceTimer.current = setTimeout(\n () => visitWithState(newState),\n debounce,\n );\n },\n [state, debounce, visitWithState],\n );\n\n const setSort = useCallback(\n (sort: { id: string; desc: boolean } | null) => {\n const newState = { ...state, sort };\n setState(newState);\n visitWithState(newState);\n },\n [state, visitWithState],\n );\n\n const setPage = useCallback(\n (page: number) => {\n const newState = { ...state, page };\n setState(newState);\n visitWithState(newState);\n },\n [state, visitWithState],\n );\n\n const setPerPage = useCallback(\n (perPage: number) => {\n const newState = { ...state, perPage, page: 1 };\n setState(newState);\n visitWithState(newState);\n },\n [state, visitWithState],\n );\n\n const setFilter = useCallback(\n (key: string, value: any) => {\n const newState = {\n ...state,\n filters: { ...state.filters, [key]: value },\n page: 1,\n };\n setState(newState);\n visitWithState(newState);\n },\n [state, visitWithState],\n );\n\n const resetFilters = useCallback(() => {\n const newState = { ...state, filters: {}, page: 1 };\n setState(newState);\n visitWithState(newState);\n }, [state, visitWithState]);\n\n return {\n state,\n setSearch,\n setSort,\n setPage,\n setPerPage,\n setFilter,\n resetFilters,\n };\n}\n","/**\n * Creates a precognition onBlur handler for a form field.\n * Requires Laravel Precognition middleware on the backend\n * and @inertiajs/react with precognition support.\n */\nexport function createPrecognitionBlur(\n form: any,\n fieldName: string,\n): (() => void) | undefined {\n if (typeof form?.validate === \"function\") {\n return () => form.validate(fieldName);\n }\n return undefined;\n}\n"],"names":["useInertiaUseForm"],"mappings":";;;AAIM,SAAU,cAAc,CAC5B,OAAqC,EAAA;IAErC,MAAM,EACJ,MAAM,EACN,WAAW,EACX,GAAG,EACH,MAAM,GAAG,MAAM,EACf,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,cAAc,GACf,GAAG,OAAO,CAAC;;AAGZ,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAK;QAC5B,MAAM,CAAC,GAAwB,EAAE,CAAC;AAClC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;AACjC,YAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AACX,gBAAA,KAAK,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS;AACrC,sBAAE,KAAK,CAAC,MAAM,CAAC,YAAY;sBACzB,EAAE,CAAC;SACV;AACD,QAAA,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,WAAW,EAAW,CAAC;AAC3C,KAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1B,IAAA,MAAM,IAAI,GAAGA,OAAiB,CAAQ,QAAQ,CAAC,CAAC;IAEhD,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,KAAkB,EAAE,KAAU,KAAI;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,KAAe,EAAE,KAAK,CAAC,CAAC;AACvC,KAAC,EACD,CAAC,IAAI,CAAC,CACP,CAAC;AAEF,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;AACpC,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO;AAEjB,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,SAAS,EAAE,MAAM,SAAS,IAAI;YAC9B,OAAO,EAAE,CAAC,MAAW,KAAK,OAAO,GAAG,MAAM,CAAC;AAC3C,YAAA,QAAQ,EAAE,MAAM,QAAQ,IAAI;AAC5B,YAAA,QAAQ,EAAE,MAAM,QAAQ,IAAI;YAC5B,cAAc;SACf,CAAC;QAEF,QAAQ,MAAM;AACZ,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBAC9B,MAAM;AACR,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBAC7B,MAAM;AACR,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBAC/B,MAAM;AACR,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBAChC,MAAM;SACT;AACH,KAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;IAEhF,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAA8C;AAC3D,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,QAAQ,EAAE,YAAY;QACtB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI;KACL,CAAC;AACJ;;ACnEM,SAAU,cAAc,CAAC,MAAyB,EAAA;IACtD,MAAM,EACJ,GAAG,EACH,WAAW,GAAG,IAAI,EAClB,eAAe,GAAG,EAAE,EACpB,QAAQ,GAAG,GAAG,EACd,aAAa,GAAG,IAAI,EACpB,cAAc,GAAG,IAAI,EACrB,IAAI,GACL,GAAG,MAAM,CAAC;AAEX,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAmB;AACnD,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,OAAO,EAAE,eAAe;AACxB,QAAA,OAAO,EAAE,EAAE;AACZ,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,aAAa,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;AAEzE,IAAA,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,QAA0B,KAAI;QAC7B,MAAM,MAAM,GAAwB,EAAE,CAAC;QAEvC,IAAI,QAAQ,CAAC,MAAM;AAAE,YAAA,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AACrD,QAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;YACjB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/B,YAAA,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;SACxD;AACD,QAAA,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC5B,QAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;AAEnC,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC3D,YAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACzD,gBAAA,MAAM,CAAC,CAAU,OAAA,EAAA,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;aAClC;SACF;AAED,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;AAChB,YAAA,IAAI,EAAE,MAAM;YACZ,aAAa;YACb,cAAc;YACd,IAAI;AACJ,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;KACJ,EACD,CAAC,GAAG,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,CAAC,CAC3C,CAAC;AAEF,IAAA,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,MAAc,KAAI;AACjB,QAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEnB,IAAI,aAAa,CAAC,OAAO;AAAE,YAAA,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/D,QAAA,aAAa,CAAC,OAAO,GAAG,UAAU,CAChC,MAAM,cAAc,CAAC,QAAQ,CAAC,EAC9B,QAAQ,CACT,CAAC;KACH,EACD,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAClC,CAAC;AAEF,IAAA,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,IAA0C,KAAI;QAC7C,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QACpC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC3B,KAAC,EACD,CAAC,KAAK,EAAE,cAAc,CAAC,CACxB,CAAC;AAEF,IAAA,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,IAAY,KAAI;QACf,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QACpC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC3B,KAAC,EACD,CAAC,KAAK,EAAE,cAAc,CAAC,CACxB,CAAC;AAEF,IAAA,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,OAAe,KAAI;AAClB,QAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAChD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC3B,KAAC,EACD,CAAC,KAAK,EAAE,cAAc,CAAC,CACxB,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,GAAW,EAAE,KAAU,KAAI;AAC1B,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA,GAAG,KAAK;AACR,YAAA,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE;AAC3C,YAAA,IAAI,EAAE,CAAC;SACR,CAAC;QACF,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC3B,KAAC,EACD,CAAC,KAAK,EAAE,cAAc,CAAC,CACxB,CAAC;AAEF,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;AACpC,QAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC3B,KAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAE5B,OAAO;QACL,KAAK;QACL,SAAS;QACT,OAAO;QACP,OAAO;QACP,UAAU;QACV,SAAS;QACT,YAAY;KACb,CAAC;AACJ;;AC/HA;;;;AAIG;AACa,SAAA,sBAAsB,CACpC,IAAS,EACT,SAAiB,EAAA;AAEjB,IAAA,IAAI,OAAO,IAAI,EAAE,QAAQ,KAAK,UAAU,EAAE;QACxC,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KACvC;AACD,IAAA,OAAO,SAAS,CAAC;AACnB;;;;"}
@@ -0,0 +1,153 @@
1
+ 'use strict';
2
+
3
+ var react$1 = require('@inertiajs/react');
4
+ var react = require('react');
5
+
6
+ function useInertiaForm(options) {
7
+ const { schema, initialData, url, method = "post", onSuccess, onError, onBefore, onFinish, preserveScroll, } = options;
8
+ // Compute default values from schema fields
9
+ const defaults = react.useMemo(() => {
10
+ const d = {};
11
+ for (const field of schema.fields) {
12
+ d[field.name] =
13
+ field.config.defaultValue !== undefined
14
+ ? field.config.defaultValue
15
+ : "";
16
+ }
17
+ return { ...d, ...initialData };
18
+ }, [schema, initialData]);
19
+ const form = react$1.useForm(defaults);
20
+ const handleChange = react.useCallback((field, value) => {
21
+ form.setData(field, value);
22
+ }, [form]);
23
+ const handleSubmit = react.useCallback(() => {
24
+ if (!url)
25
+ return;
26
+ const submitOptions = {
27
+ onSuccess: () => onSuccess?.(),
28
+ onError: (errors) => onError?.(errors),
29
+ onBefore: () => onBefore?.(),
30
+ onFinish: () => onFinish?.(),
31
+ preserveScroll,
32
+ };
33
+ switch (method) {
34
+ case "post":
35
+ form.post(url, submitOptions);
36
+ break;
37
+ case "put":
38
+ form.put(url, submitOptions);
39
+ break;
40
+ case "patch":
41
+ form.patch(url, submitOptions);
42
+ break;
43
+ case "delete":
44
+ form.delete(url, submitOptions);
45
+ break;
46
+ }
47
+ }, [form, url, method, onSuccess, onError, onBefore, onFinish, preserveScroll]);
48
+ return {
49
+ data: form.data,
50
+ errors: form.errors,
51
+ onChange: handleChange,
52
+ onSubmit: handleSubmit,
53
+ processing: form.processing,
54
+ form,
55
+ };
56
+ }
57
+
58
+ function useServerTable(config) {
59
+ const { url, defaultSort = null, defaultPageSize = 15, debounce = 300, preserveState = true, preserveScroll = true, only, } = config;
60
+ const [state, setState] = react.useState({
61
+ search: "",
62
+ sort: defaultSort,
63
+ page: 1,
64
+ perPage: defaultPageSize,
65
+ filters: {},
66
+ });
67
+ const debounceTimer = react.useRef(null);
68
+ const visitWithState = react.useCallback((newState) => {
69
+ const params = {};
70
+ if (newState.search)
71
+ params.search = newState.search;
72
+ if (newState.sort) {
73
+ params.sort = newState.sort.id;
74
+ params.direction = newState.sort.desc ? "desc" : "asc";
75
+ }
76
+ params.page = newState.page;
77
+ params.per_page = newState.perPage;
78
+ for (const [key, value] of Object.entries(newState.filters)) {
79
+ if (value !== null && value !== undefined && value !== "") {
80
+ params[`filter[${key}]`] = value;
81
+ }
82
+ }
83
+ react$1.router.visit(url, {
84
+ data: params,
85
+ preserveState,
86
+ preserveScroll,
87
+ only,
88
+ replace: true,
89
+ });
90
+ }, [url, preserveState, preserveScroll, only]);
91
+ const setSearch = react.useCallback((search) => {
92
+ const newState = { ...state, search, page: 1 };
93
+ setState(newState);
94
+ if (debounceTimer.current)
95
+ clearTimeout(debounceTimer.current);
96
+ debounceTimer.current = setTimeout(() => visitWithState(newState), debounce);
97
+ }, [state, debounce, visitWithState]);
98
+ const setSort = react.useCallback((sort) => {
99
+ const newState = { ...state, sort };
100
+ setState(newState);
101
+ visitWithState(newState);
102
+ }, [state, visitWithState]);
103
+ const setPage = react.useCallback((page) => {
104
+ const newState = { ...state, page };
105
+ setState(newState);
106
+ visitWithState(newState);
107
+ }, [state, visitWithState]);
108
+ const setPerPage = react.useCallback((perPage) => {
109
+ const newState = { ...state, perPage, page: 1 };
110
+ setState(newState);
111
+ visitWithState(newState);
112
+ }, [state, visitWithState]);
113
+ const setFilter = react.useCallback((key, value) => {
114
+ const newState = {
115
+ ...state,
116
+ filters: { ...state.filters, [key]: value },
117
+ page: 1,
118
+ };
119
+ setState(newState);
120
+ visitWithState(newState);
121
+ }, [state, visitWithState]);
122
+ const resetFilters = react.useCallback(() => {
123
+ const newState = { ...state, filters: {}, page: 1 };
124
+ setState(newState);
125
+ visitWithState(newState);
126
+ }, [state, visitWithState]);
127
+ return {
128
+ state,
129
+ setSearch,
130
+ setSort,
131
+ setPage,
132
+ setPerPage,
133
+ setFilter,
134
+ resetFilters,
135
+ };
136
+ }
137
+
138
+ /**
139
+ * Creates a precognition onBlur handler for a form field.
140
+ * Requires Laravel Precognition middleware on the backend
141
+ * and @inertiajs/react with precognition support.
142
+ */
143
+ function createPrecognitionBlur(form, fieldName) {
144
+ if (typeof form?.validate === "function") {
145
+ return () => form.validate(fieldName);
146
+ }
147
+ return undefined;
148
+ }
149
+
150
+ exports.createPrecognitionBlur = createPrecognitionBlur;
151
+ exports.useInertiaForm = useInertiaForm;
152
+ exports.useServerTable = useServerTable;
153
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/inertia/use-inertia-form.ts","../../src/inertia/use-server-table.ts","../../src/inertia/precognition.ts"],"sourcesContent":["import { useForm as useInertiaUseForm } from \"@inertiajs/react\";\nimport { useMemo, useCallback } from \"react\";\nimport { UseInertiaFormOptions, UseInertiaFormReturn } from \"./types\";\n\nexport function useInertiaForm<TData extends Record<string, any>>(\n options: UseInertiaFormOptions<TData>,\n): UseInertiaFormReturn<TData> {\n const {\n schema,\n initialData,\n url,\n method = \"post\",\n onSuccess,\n onError,\n onBefore,\n onFinish,\n preserveScroll,\n } = options;\n\n // Compute default values from schema fields\n const defaults = useMemo(() => {\n const d: Record<string, any> = {};\n for (const field of schema.fields) {\n d[field.name] =\n field.config.defaultValue !== undefined\n ? field.config.defaultValue\n : \"\";\n }\n return { ...d, ...initialData } as TData;\n }, [schema, initialData]);\n\n const form = useInertiaUseForm<TData>(defaults);\n\n const handleChange = useCallback(\n (field: keyof TData, value: any) => {\n form.setData(field as string, value);\n },\n [form],\n );\n\n const handleSubmit = useCallback(() => {\n if (!url) return;\n\n const submitOptions = {\n onSuccess: () => onSuccess?.(),\n onError: (errors: any) => onError?.(errors),\n onBefore: () => onBefore?.(),\n onFinish: () => onFinish?.(),\n preserveScroll,\n };\n\n switch (method) {\n case \"post\":\n form.post(url, submitOptions);\n break;\n case \"put\":\n form.put(url, submitOptions);\n break;\n case \"patch\":\n form.patch(url, submitOptions);\n break;\n case \"delete\":\n form.delete(url, submitOptions);\n break;\n }\n }, [form, url, method, onSuccess, onError, onBefore, onFinish, preserveScroll]);\n\n return {\n data: form.data,\n errors: form.errors as Partial<Record<keyof TData, string>>,\n onChange: handleChange,\n onSubmit: handleSubmit,\n processing: form.processing,\n form,\n };\n}\n","import { router } from \"@inertiajs/react\";\nimport { useState, useCallback, useRef } from \"react\";\nimport {\n ServerTableConfig,\n ServerTableState,\n ServerTableReturn,\n} from \"./types\";\n\nexport function useServerTable(config: ServerTableConfig): ServerTableReturn {\n const {\n url,\n defaultSort = null,\n defaultPageSize = 15,\n debounce = 300,\n preserveState = true,\n preserveScroll = true,\n only,\n } = config;\n\n const [state, setState] = useState<ServerTableState>({\n search: \"\",\n sort: defaultSort,\n page: 1,\n perPage: defaultPageSize,\n filters: {},\n });\n\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const visitWithState = useCallback(\n (newState: ServerTableState) => {\n const params: Record<string, any> = {};\n\n if (newState.search) params.search = newState.search;\n if (newState.sort) {\n params.sort = newState.sort.id;\n params.direction = newState.sort.desc ? \"desc\" : \"asc\";\n }\n params.page = newState.page;\n params.per_page = newState.perPage;\n\n for (const [key, value] of Object.entries(newState.filters)) {\n if (value !== null && value !== undefined && value !== \"\") {\n params[`filter[${key}]`] = value;\n }\n }\n\n router.visit(url, {\n data: params,\n preserveState,\n preserveScroll,\n only,\n replace: true,\n });\n },\n [url, preserveState, preserveScroll, only],\n );\n\n const setSearch = useCallback(\n (search: string) => {\n const newState = { ...state, search, page: 1 };\n setState(newState);\n\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n debounceTimer.current = setTimeout(\n () => visitWithState(newState),\n debounce,\n );\n },\n [state, debounce, visitWithState],\n );\n\n const setSort = useCallback(\n (sort: { id: string; desc: boolean } | null) => {\n const newState = { ...state, sort };\n setState(newState);\n visitWithState(newState);\n },\n [state, visitWithState],\n );\n\n const setPage = useCallback(\n (page: number) => {\n const newState = { ...state, page };\n setState(newState);\n visitWithState(newState);\n },\n [state, visitWithState],\n );\n\n const setPerPage = useCallback(\n (perPage: number) => {\n const newState = { ...state, perPage, page: 1 };\n setState(newState);\n visitWithState(newState);\n },\n [state, visitWithState],\n );\n\n const setFilter = useCallback(\n (key: string, value: any) => {\n const newState = {\n ...state,\n filters: { ...state.filters, [key]: value },\n page: 1,\n };\n setState(newState);\n visitWithState(newState);\n },\n [state, visitWithState],\n );\n\n const resetFilters = useCallback(() => {\n const newState = { ...state, filters: {}, page: 1 };\n setState(newState);\n visitWithState(newState);\n }, [state, visitWithState]);\n\n return {\n state,\n setSearch,\n setSort,\n setPage,\n setPerPage,\n setFilter,\n resetFilters,\n };\n}\n","/**\n * Creates a precognition onBlur handler for a form field.\n * Requires Laravel Precognition middleware on the backend\n * and @inertiajs/react with precognition support.\n */\nexport function createPrecognitionBlur(\n form: any,\n fieldName: string,\n): (() => void) | undefined {\n if (typeof form?.validate === \"function\") {\n return () => form.validate(fieldName);\n }\n return undefined;\n}\n"],"names":["useMemo","useInertiaUseForm","useCallback","useState","useRef","router"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { useInertiaForm } from "./use-inertia-form";
2
+ export { useServerTable } from "./use-server-table";
3
+ export { createPrecognitionBlur } from "./precognition";
4
+ export type { UseInertiaFormOptions, UseInertiaFormReturn, ServerTableConfig, ServerTableState, ServerTableReturn, PaginatedResponse, } from "./types";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Creates a precognition onBlur handler for a form field.
3
+ * Requires Laravel Precognition middleware on the backend
4
+ * and @inertiajs/react with precognition support.
5
+ */
6
+ export declare function createPrecognitionBlur(form: any, fieldName: string): (() => void) | undefined;
@@ -0,0 +1,63 @@
1
+ import { FormBuildResult } from "../forms/types/form";
2
+ export interface UseInertiaFormOptions<TData extends Record<string, any>> {
3
+ schema: FormBuildResult<TData>;
4
+ initialData?: Partial<TData>;
5
+ url?: string;
6
+ method?: "post" | "put" | "patch" | "delete";
7
+ onSuccess?: () => void;
8
+ onError?: (errors: Partial<Record<keyof TData, string>>) => void;
9
+ onBefore?: () => void;
10
+ onFinish?: () => void;
11
+ preserveScroll?: boolean;
12
+ }
13
+ export interface UseInertiaFormReturn<TData extends Record<string, any>> {
14
+ data: TData;
15
+ errors: Partial<Record<keyof TData, string>>;
16
+ onChange: (field: keyof TData, value: any) => void;
17
+ onSubmit: () => void;
18
+ processing: boolean;
19
+ form: any;
20
+ }
21
+ export interface ServerTableConfig {
22
+ url: string;
23
+ defaultSort?: {
24
+ id: string;
25
+ desc: boolean;
26
+ };
27
+ defaultPageSize?: number;
28
+ debounce?: number;
29
+ preserveState?: boolean;
30
+ preserveScroll?: boolean;
31
+ only?: string[];
32
+ }
33
+ export interface ServerTableState {
34
+ search: string;
35
+ sort: {
36
+ id: string;
37
+ desc: boolean;
38
+ } | null;
39
+ page: number;
40
+ perPage: number;
41
+ filters: Record<string, any>;
42
+ }
43
+ export interface ServerTableReturn {
44
+ state: ServerTableState;
45
+ setSearch: (search: string) => void;
46
+ setSort: (sort: {
47
+ id: string;
48
+ desc: boolean;
49
+ } | null) => void;
50
+ setPage: (page: number) => void;
51
+ setPerPage: (perPage: number) => void;
52
+ setFilter: (key: string, value: any) => void;
53
+ resetFilters: () => void;
54
+ }
55
+ export interface PaginatedResponse<TData> {
56
+ data: TData[];
57
+ current_page: number;
58
+ last_page: number;
59
+ per_page: number;
60
+ total: number;
61
+ from: number | null;
62
+ to: number | null;
63
+ }
@@ -0,0 +1,2 @@
1
+ import { UseInertiaFormOptions, UseInertiaFormReturn } from "./types";
2
+ export declare function useInertiaForm<TData extends Record<string, any>>(options: UseInertiaFormOptions<TData>): UseInertiaFormReturn<TData>;
@@ -0,0 +1,2 @@
1
+ import { ServerTableConfig, ServerTableReturn } from "./types";
2
+ export declare function useServerTable(config: ServerTableConfig): ServerTableReturn;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Creates a precognition onBlur handler for a form field.
3
+ * Requires Laravel Precognition middleware on the backend
4
+ * and @inertiajs/react with precognition support.
5
+ */
6
+ export declare function createPrecognitionBlur(form: any, fieldName: string): (() => void) | undefined;
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+ interface AvatarItem {
3
+ id: string;
4
+ src?: string;
5
+ alt?: string;
6
+ initials?: string;
7
+ }
8
+ interface AvatarListProps {
9
+ items: AvatarItem[];
10
+ maxVisible?: number;
11
+ size?: number | string;
12
+ [key: string]: any;
13
+ }
14
+ export declare const AvatarList: React.FC<AvatarListProps>;
15
+ export default AvatarList;
@@ -0,0 +1,8 @@
1
+ import { EmptyStateConfig } from "../types";
2
+ interface DataTableEmptyProps {
3
+ config: EmptyStateConfig;
4
+ colSpan: number;
5
+ className?: string;
6
+ }
7
+ export declare function DataTableEmpty({ config, colSpan, className, }: DataTableEmptyProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,17 @@
1
+ import { Table as TanstackTable } from "@tanstack/react-table";
2
+ import { HeaderAction, SearchConfig } from "../types";
3
+ interface DataTableHeaderProps<TData> {
4
+ title?: string;
5
+ description?: string;
6
+ actions?: HeaderAction<TData>[];
7
+ search?: SearchConfig;
8
+ searchValue?: string;
9
+ onSearchChange?: (value: string) => void;
10
+ table?: TanstackTable<TData>;
11
+ selectedCount?: number;
12
+ enableColumnVisibility?: boolean;
13
+ columnVisibilityLabel?: string;
14
+ className?: string;
15
+ }
16
+ export declare function DataTableHeader<TData>({ title, description, actions, search, searchValue, onSearchChange, table, selectedCount, enableColumnVisibility, columnVisibilityLabel, className, }: DataTableHeaderProps<TData>): import("react/jsx-runtime").JSX.Element;
17
+ export {};
@@ -0,0 +1,9 @@
1
+ import { Table as TanstackTable } from "@tanstack/react-table";
2
+ import { PaginationConfig } from "../types";
3
+ interface DataTablePaginationProps<TData> {
4
+ table: TanstackTable<TData>;
5
+ config?: PaginationConfig;
6
+ className?: string;
7
+ }
8
+ export declare function DataTablePagination<TData>({ table, config, className, }: DataTablePaginationProps<TData>): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1 @@
1
+ export declare const DataTableSchema: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { ColumnDef } from "@tanstack/react-table";
2
+ import { DataTableConfig } from "../types";
3
+ interface DataTableProps<TData, TValue> {
4
+ columns: ColumnDef<TData, TValue>[];
5
+ data: TData[];
6
+ config?: DataTableConfig<TData>;
7
+ className?: string;
8
+ isLoading?: boolean;
9
+ isError?: boolean;
10
+ onRetry?: () => void;
11
+ }
12
+ export declare function DataTable<TData, TValue>({ columns, data, config, className, isLoading, isError, onRetry, }: DataTableProps<TData, TValue>): import("react/jsx-runtime").JSX.Element;
13
+ export {};
@@ -0,0 +1,6 @@
1
+ export { DataTable } from "./data-table";
2
+ export { DataTableSchema } from "./data-table-schema";
3
+ export { DataTableHeader } from "./data-table-header";
4
+ export { DataTableEmpty } from "./data-table-empty";
5
+ export { DataTablePagination } from "./data-table-pagination";
6
+ export { AvatarList } from "./avatar-list";
@@ -0,0 +1,21 @@
1
+ import { ReactNode } from "react";
2
+ /**
3
+ * Header Action Configuration
4
+ * Defines actions that can be displayed in the table header
5
+ */
6
+ export interface HeaderAction<TData = unknown> {
7
+ id?: string;
8
+ label?: string;
9
+ icon?: ReactNode;
10
+ variant?: "default" | "secondary" | "outline" | "ghost" | "destructive";
11
+ size?: "default" | "sm" | "lg" | "icon";
12
+ onClick?: () => void;
13
+ href?: string;
14
+ disabled?: boolean;
15
+ loading?: boolean;
16
+ bulk?: boolean;
17
+ bulkOnClick?: (selectedRows: TData[]) => void;
18
+ hidden?: boolean;
19
+ render?: () => ReactNode;
20
+ children?: Omit<HeaderAction<TData>, "children" | "bulk">[];
21
+ }
@@ -0,0 +1,18 @@
1
+ import { ReactNode } from "react";
2
+ /**
3
+ * Empty State Configuration
4
+ * Defines how empty states are displayed in the table
5
+ */
6
+ export interface EmptyStateConfig {
7
+ icon?: ReactNode;
8
+ imageUrl?: string;
9
+ title: string;
10
+ description?: string;
11
+ action?: {
12
+ label: string;
13
+ onClick?: () => void;
14
+ href?: string;
15
+ icon?: ReactNode;
16
+ };
17
+ variant?: "default" | "search" | "filter" | "error" | "custom";
18
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Filter Configuration
3
+ * Defines filters that can be applied to table data
4
+ */
5
+ export interface FilterConfig {
6
+ id: string;
7
+ label: string;
8
+ type: "text" | "select" | "multi-select" | "date" | "date-range" | "boolean";
9
+ column: string;
10
+ placeholder?: string;
11
+ options?: Array<{
12
+ label: string;
13
+ value: string;
14
+ }>;
15
+ }
16
+ /**
17
+ * Search Configuration
18
+ * Defines search functionality for the table
19
+ */
20
+ export interface SearchConfig {
21
+ enabled: boolean;
22
+ placeholder?: string;
23
+ columns?: string[];
24
+ debounce?: number;
25
+ }
@@ -0,0 +1,4 @@
1
+ export type { HeaderAction } from "./actions";
2
+ export type { EmptyStateConfig } from "./empty-state";
3
+ export type { FilterConfig, SearchConfig } from "./filters";
4
+ export type { PaginationConfig, DataTableConfig } from "./table";