@contember/bindx-react 0.1.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 (194) hide show
  1. package/dist/batching/QueryBatcher.d.ts +31 -0
  2. package/dist/batching/QueryBatcher.d.ts.map +1 -0
  3. package/dist/batching/index.d.ts +2 -0
  4. package/dist/batching/index.d.ts.map +1 -0
  5. package/dist/components/EntityScope.d.ts +28 -0
  6. package/dist/components/EntityScope.d.ts.map +1 -0
  7. package/dist/dataview/DataGrid.d.ts +45 -0
  8. package/dist/dataview/DataGrid.d.ts.map +1 -0
  9. package/dist/dataview/DataGridPagination.d.ts +24 -0
  10. package/dist/dataview/DataGridPagination.d.ts.map +1 -0
  11. package/dist/dataview/DataGridToolbar.d.ts +16 -0
  12. package/dist/dataview/DataGridToolbar.d.ts.map +1 -0
  13. package/dist/dataview/DataViewContext.d.ts +32 -0
  14. package/dist/dataview/DataViewContext.d.ts.map +1 -0
  15. package/dist/dataview/columns.d.ts +115 -0
  16. package/dist/dataview/columns.d.ts.map +1 -0
  17. package/dist/dataview/contextHooks.d.ts +48 -0
  18. package/dist/dataview/contextHooks.d.ts.map +1 -0
  19. package/dist/dataview/dataAttribute.d.ts +6 -0
  20. package/dist/dataview/dataAttribute.d.ts.map +1 -0
  21. package/dist/dataview/export.d.ts +46 -0
  22. package/dist/dataview/export.d.ts.map +1 -0
  23. package/dist/dataview/filterComponents.d.ts +127 -0
  24. package/dist/dataview/filterComponents.d.ts.map +1 -0
  25. package/dist/dataview/filterContext.d.ts +10 -0
  26. package/dist/dataview/filterContext.d.ts.map +1 -0
  27. package/dist/dataview/filterHooks.d.ts +74 -0
  28. package/dist/dataview/filterHooks.d.ts.map +1 -0
  29. package/dist/dataview/filterScope.d.ts +54 -0
  30. package/dist/dataview/filterScope.d.ts.map +1 -0
  31. package/dist/dataview/filterWrappers.d.ts +65 -0
  32. package/dist/dataview/filterWrappers.d.ts.map +1 -0
  33. package/dist/dataview/index.d.ts +21 -0
  34. package/dist/dataview/index.d.ts.map +1 -0
  35. package/dist/dataview/infiniteLoad.d.ts +32 -0
  36. package/dist/dataview/infiniteLoad.d.ts.map +1 -0
  37. package/dist/dataview/loaderComponents.d.ts +80 -0
  38. package/dist/dataview/loaderComponents.d.ts.map +1 -0
  39. package/dist/dataview/pagingComponents.d.ts +50 -0
  40. package/dist/dataview/pagingComponents.d.ts.map +1 -0
  41. package/dist/dataview/renderCellValue.d.ts +9 -0
  42. package/dist/dataview/renderCellValue.d.ts.map +1 -0
  43. package/dist/dataview/selectionComponents.d.ts +62 -0
  44. package/dist/dataview/selectionComponents.d.ts.map +1 -0
  45. package/dist/dataview/sortingComponents.d.ts +39 -0
  46. package/dist/dataview/sortingComponents.d.ts.map +1 -0
  47. package/dist/dataview/stateStorage.d.ts +19 -0
  48. package/dist/dataview/stateStorage.d.ts.map +1 -0
  49. package/dist/dataview/useDataView.d.ts +58 -0
  50. package/dist/dataview/useDataView.d.ts.map +1 -0
  51. package/dist/dataview/useDataViewState.d.ts +89 -0
  52. package/dist/dataview/useDataViewState.d.ts.map +1 -0
  53. package/dist/hooks/BackendAdapterContext.d.ts +110 -0
  54. package/dist/hooks/BackendAdapterContext.d.ts.map +1 -0
  55. package/dist/hooks/ContemberBindxProvider.d.ts +67 -0
  56. package/dist/hooks/ContemberBindxProvider.d.ts.map +1 -0
  57. package/dist/hooks/createBindx.d.ts +39 -0
  58. package/dist/hooks/createBindx.d.ts.map +1 -0
  59. package/dist/hooks/index.d.ts +10 -0
  60. package/dist/hooks/index.d.ts.map +1 -0
  61. package/dist/hooks/useBindxEvents.d.ts +83 -0
  62. package/dist/hooks/useBindxEvents.d.ts.map +1 -0
  63. package/dist/hooks/useEntity.d.ts +123 -0
  64. package/dist/hooks/useEntity.d.ts.map +1 -0
  65. package/dist/hooks/useEntityBeforePersist.d.ts +22 -0
  66. package/dist/hooks/useEntityBeforePersist.d.ts.map +1 -0
  67. package/dist/hooks/useEntityCore.d.ts +52 -0
  68. package/dist/hooks/useEntityCore.d.ts.map +1 -0
  69. package/dist/hooks/useEntityImpl.d.ts +105 -0
  70. package/dist/hooks/useEntityImpl.d.ts.map +1 -0
  71. package/dist/hooks/useEntityList.d.ts +102 -0
  72. package/dist/hooks/useEntityList.d.ts.map +1 -0
  73. package/dist/hooks/useEntityListCore.d.ts +49 -0
  74. package/dist/hooks/useEntityListCore.d.ts.map +1 -0
  75. package/dist/hooks/useEntityListImpl.d.ts +70 -0
  76. package/dist/hooks/useEntityListImpl.d.ts.map +1 -0
  77. package/dist/hooks/useErrors.d.ts +72 -0
  78. package/dist/hooks/useErrors.d.ts.map +1 -0
  79. package/dist/hooks/usePersist.d.ts +115 -0
  80. package/dist/hooks/usePersist.d.ts.map +1 -0
  81. package/dist/hooks/useSelectionCollection.d.ts +41 -0
  82. package/dist/hooks/useSelectionCollection.d.ts.map +1 -0
  83. package/dist/hooks/useSelectionCollectionForList.d.ts +40 -0
  84. package/dist/hooks/useSelectionCollectionForList.d.ts.map +1 -0
  85. package/dist/hooks/useStableSelectionMeta.d.ts +11 -0
  86. package/dist/hooks/useStableSelectionMeta.d.ts.map +1 -0
  87. package/dist/hooks/useStoreSubscription.d.ts +19 -0
  88. package/dist/hooks/useStoreSubscription.d.ts.map +1 -0
  89. package/dist/hooks/useUndo.d.ts +45 -0
  90. package/dist/hooks/useUndo.d.ts.map +1 -0
  91. package/dist/index.d.ts +17 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/jsx/SelectionMeta.d.ts +2 -0
  94. package/dist/jsx/SelectionMeta.d.ts.map +1 -0
  95. package/dist/jsx/analyzer.d.ts +22 -0
  96. package/dist/jsx/analyzer.d.ts.map +1 -0
  97. package/dist/jsx/collectorProxy.d.ts +14 -0
  98. package/dist/jsx/collectorProxy.d.ts.map +1 -0
  99. package/dist/jsx/componentBuilder.d.ts +51 -0
  100. package/dist/jsx/componentBuilder.d.ts.map +1 -0
  101. package/dist/jsx/componentBuilder.types.d.ts +268 -0
  102. package/dist/jsx/componentBuilder.types.d.ts.map +1 -0
  103. package/dist/jsx/componentBuilderCompat.d.ts +17 -0
  104. package/dist/jsx/componentBuilderCompat.d.ts.map +1 -0
  105. package/dist/jsx/componentFactory.d.ts +39 -0
  106. package/dist/jsx/componentFactory.d.ts.map +1 -0
  107. package/dist/jsx/components/Entity.d.ts +82 -0
  108. package/dist/jsx/components/Entity.d.ts.map +1 -0
  109. package/dist/jsx/components/EntityList.d.ts +48 -0
  110. package/dist/jsx/components/EntityList.d.ts.map +1 -0
  111. package/dist/jsx/components/Field.d.ts +27 -0
  112. package/dist/jsx/components/Field.d.ts.map +1 -0
  113. package/dist/jsx/components/HasMany.d.ts +34 -0
  114. package/dist/jsx/components/HasMany.d.ts.map +1 -0
  115. package/dist/jsx/components/HasOne.d.ts +25 -0
  116. package/dist/jsx/components/HasOne.d.ts.map +1 -0
  117. package/dist/jsx/components/HasRole.d.ts +51 -0
  118. package/dist/jsx/components/HasRole.d.ts.map +1 -0
  119. package/dist/jsx/components/If.d.ts +51 -0
  120. package/dist/jsx/components/If.d.ts.map +1 -0
  121. package/dist/jsx/components/Show.d.ts +33 -0
  122. package/dist/jsx/components/Show.d.ts.map +1 -0
  123. package/dist/jsx/components/index.d.ts +8 -0
  124. package/dist/jsx/components/index.d.ts.map +1 -0
  125. package/dist/jsx/conditions.d.ts +310 -0
  126. package/dist/jsx/conditions.d.ts.map +1 -0
  127. package/dist/jsx/createComponent.d.ts +44 -0
  128. package/dist/jsx/createComponent.d.ts.map +1 -0
  129. package/dist/jsx/index.d.ts +19 -0
  130. package/dist/jsx/index.d.ts.map +1 -0
  131. package/dist/jsx/inlineProxy.d.ts +14 -0
  132. package/dist/jsx/inlineProxy.d.ts.map +1 -0
  133. package/dist/jsx/legacyTypes.d.ts +26 -0
  134. package/dist/jsx/legacyTypes.d.ts.map +1 -0
  135. package/dist/jsx/proxy.d.ts +2 -0
  136. package/dist/jsx/proxy.d.ts.map +1 -0
  137. package/dist/jsx/proxyShared.d.ts +14 -0
  138. package/dist/jsx/proxyShared.d.ts.map +1 -0
  139. package/dist/jsx/runtimeProxy.d.ts +11 -0
  140. package/dist/jsx/runtimeProxy.d.ts.map +1 -0
  141. package/dist/jsx/standaloneCreateComponent.d.ts +30 -0
  142. package/dist/jsx/standaloneCreateComponent.d.ts.map +1 -0
  143. package/dist/jsx/types.d.ts +109 -0
  144. package/dist/jsx/types.d.ts.map +1 -0
  145. package/dist/jsx/withCollector.d.ts +39 -0
  146. package/dist/jsx/withCollector.d.ts.map +1 -0
  147. package/dist/roles/RoleContext.d.ts +31 -0
  148. package/dist/roles/RoleContext.d.ts.map +1 -0
  149. package/dist/roles/index.d.ts +2 -0
  150. package/dist/roles/index.d.ts.map +1 -0
  151. package/package.json +34 -0
  152. package/src/batching/QueryBatcher.ts +114 -0
  153. package/src/batching/index.ts +1 -0
  154. package/src/components/EntityScope.tsx +43 -0
  155. package/src/hooks/BackendAdapterContext.tsx +214 -0
  156. package/src/hooks/ContemberBindxProvider.tsx +158 -0
  157. package/src/hooks/index.ts +61 -0
  158. package/src/hooks/useBindxEvents.ts +229 -0
  159. package/src/hooks/useEntity.ts +489 -0
  160. package/src/hooks/useEntityBeforePersist.ts +32 -0
  161. package/src/hooks/useEntityList.ts +444 -0
  162. package/src/hooks/useErrors.ts +150 -0
  163. package/src/hooks/usePersist.ts +377 -0
  164. package/src/hooks/useSelectionCollection.ts +122 -0
  165. package/src/hooks/useStoreSubscription.ts +51 -0
  166. package/src/hooks/useUndo.ts +83 -0
  167. package/src/index.ts +357 -0
  168. package/src/jsx/SelectionMeta.ts +2 -0
  169. package/src/jsx/analyzer.ts +261 -0
  170. package/src/jsx/collectorProxy.ts +282 -0
  171. package/src/jsx/componentBuilder.ts +180 -0
  172. package/src/jsx/componentBuilder.types.ts +463 -0
  173. package/src/jsx/componentBuilderCompat.ts +39 -0
  174. package/src/jsx/componentFactory.ts +400 -0
  175. package/src/jsx/components/Entity.tsx +383 -0
  176. package/src/jsx/components/EntityList.tsx +147 -0
  177. package/src/jsx/components/Field.tsx +79 -0
  178. package/src/jsx/components/HasMany.tsx +109 -0
  179. package/src/jsx/components/HasOne.tsx +78 -0
  180. package/src/jsx/components/HasRole.tsx +95 -0
  181. package/src/jsx/components/If.tsx +127 -0
  182. package/src/jsx/components/Show.tsx +56 -0
  183. package/src/jsx/components/index.ts +20 -0
  184. package/src/jsx/conditions.ts +472 -0
  185. package/src/jsx/createComponent.ts +175 -0
  186. package/src/jsx/index.ts +135 -0
  187. package/src/jsx/legacyTypes.ts +30 -0
  188. package/src/jsx/proxy.ts +1 -0
  189. package/src/jsx/proxyShared.ts +42 -0
  190. package/src/jsx/standaloneCreateComponent.ts +47 -0
  191. package/src/jsx/types.ts +192 -0
  192. package/src/jsx/withCollector.ts +45 -0
  193. package/src/roles/RoleContext.tsx +57 -0
  194. package/src/roles/index.ts +1 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * useDataView — low-level hook for building custom data views.
3
+ *
4
+ * Manages filtering, sorting, paging, and selection state, and loads data
5
+ * from the backend adapter. This is the hook API that DataGrid
6
+ * uses internally, exposed for building custom grid/list UIs.
7
+ */
8
+ import type { FilterHandler, FilterArtifact, SelectionMeta, FieldError, SortingDirections, DataViewLayout, SelectionValues } from '@contember/bindx';
9
+ import { type EntityListCoreItem } from '../hooks/useEntityListCore.js';
10
+ import { type FilteringState, type SortingStateResult, type PagingStateResult, type SelectionStateResult } from './useDataViewState.js';
11
+ import type { StateStorageOrName } from './stateStorage.js';
12
+ export interface UseDataViewOptions {
13
+ /** Filter definitions: name → { handler, initialArtifact? } */
14
+ filters?: ReadonlyMap<string, {
15
+ handler: FilterHandler<FilterArtifact>;
16
+ initialArtifact?: FilterArtifact;
17
+ }>;
18
+ /** Fields that can be sorted */
19
+ sortableFields?: ReadonlySet<string>;
20
+ /** Initial sorting directions (supports multi-column) */
21
+ initialSorting?: SortingDirections;
22
+ /** Items per page. null = show all. Default: 50 */
23
+ itemsPerPage?: number | null;
24
+ /** Static filter (always applied) */
25
+ filter?: Record<string, unknown>;
26
+ /** Selection metadata for building the query */
27
+ selection: SelectionMeta;
28
+ /** Available layouts */
29
+ layouts?: readonly DataViewLayout[];
30
+ /** Initial selection (layout + visibility) */
31
+ initialSelection?: SelectionValues;
32
+ /** State storage for filter/sorting/selection state */
33
+ stateStorage?: StateStorageOrName;
34
+ /** State storage for current page (typically 'url') */
35
+ currentPageStateStorage?: StateStorageOrName;
36
+ /** State storage for page size preference (typically 'session' or 'local') */
37
+ pagingSettingsStorage?: StateStorageOrName;
38
+ /** Storage key prefix for isolation */
39
+ storageKey?: string;
40
+ }
41
+ export interface DataViewResult {
42
+ /** Current load status */
43
+ readonly status: 'loading' | 'error' | 'ready';
44
+ /** Error if status is 'error' */
45
+ readonly error?: FieldError;
46
+ /** Loaded items */
47
+ readonly items: readonly EntityListCoreItem[];
48
+ /** Filtering state and controls */
49
+ readonly filtering: FilteringState;
50
+ /** Sorting state and controls */
51
+ readonly sorting: SortingStateResult;
52
+ /** Paging state and controls */
53
+ readonly paging: PagingStateResult;
54
+ /** Selection state (visibility + layout) */
55
+ readonly selection: SelectionStateResult;
56
+ }
57
+ export declare function useDataView(entityType: string, options: UseDataViewOptions): DataViewResult;
58
+ //# sourceMappingURL=useDataView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataView.d.ts","sourceRoot":"","sources":["../../src/dataview/useDataView.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAC1F,OAAO,EAKN,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAM3D,MAAM,WAAW,kBAAkB;IAClC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QAAC,eAAe,CAAC,EAAE,cAAc,CAAA;KAAE,CAAC,CAAA;IAC3G,gCAAgC;IAChC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,yDAAyD;IACzD,cAAc,CAAC,EAAE,iBAAiB,CAAA;IAClC,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,gDAAgD;IAChD,SAAS,EAAE,aAAa,CAAA;IACxB,wBAAwB;IACxB,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IACnC,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,eAAe,CAAA;IAClC,uDAAuD;IACvD,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,uDAAuD;IACvD,uBAAuB,CAAC,EAAE,kBAAkB,CAAA;IAC5C,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,kBAAkB,CAAA;IAC1C,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAA;IAC9C,iCAAiC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;IAC3B,mBAAmB;IACnB,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC7C,mCAAmC;IACnC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;IAClC,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACpC,gCAAgC;IAChC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAA;IAClC,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAA;CACxC;AASD,wBAAgB,WAAW,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,kBAAkB,GACzB,cAAc,CA8DhB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * State management hooks for DataView filtering, sorting, paging, and selection.
3
+ *
4
+ * All hooks support optional state storage (URL, session, local, custom)
5
+ * for persisting state across navigations.
6
+ */
7
+ import type { FilterHandler, FilterArtifact, SortingState, SortingDirections, SortingDirectionAction, PagingState, PagingInfo, OrderDirection, DataViewLayout, SelectionValues, SelectionState } from '@contember/bindx';
8
+ import { type StateStorageOrName } from './stateStorage.js';
9
+ export interface RegisteredFilter {
10
+ readonly name: string;
11
+ readonly handler: FilterHandler<FilterArtifact>;
12
+ artifact: FilterArtifact;
13
+ }
14
+ export interface FilteringState {
15
+ readonly filters: ReadonlyMap<string, RegisteredFilter>;
16
+ getArtifact(name: string): FilterArtifact | undefined;
17
+ setArtifact(name: string, artifact: FilterArtifact): void;
18
+ resetFilter(name: string): void;
19
+ resetAll(): void;
20
+ readonly hasActiveFilters: boolean;
21
+ readonly resolvedWhere: Record<string, unknown> | undefined;
22
+ }
23
+ export interface UseFilteringOptions {
24
+ filters: ReadonlyMap<string, {
25
+ handler: FilterHandler<FilterArtifact>;
26
+ initialArtifact?: FilterArtifact;
27
+ }>;
28
+ /** State storage backend. Default: 'null' (no persistence) */
29
+ stateStorage?: StateStorageOrName;
30
+ /** Storage key prefix */
31
+ storageKey?: string;
32
+ }
33
+ export declare function useFilteringState(options: UseFilteringOptions): FilteringState;
34
+ export interface UseSortingOptions {
35
+ sortableFields: ReadonlySet<string>;
36
+ initialSorting?: SortingDirections;
37
+ stateStorage?: StateStorageOrName;
38
+ storageKey?: string;
39
+ }
40
+ export interface SortingStateResult {
41
+ readonly state: SortingState;
42
+ setOrderBy(field: string, action: SortingDirectionAction, append?: boolean): void;
43
+ clear(): void;
44
+ directionOf(field: string): OrderDirection | null;
45
+ readonly resolvedOrderBy: readonly Record<string, unknown>[] | undefined;
46
+ }
47
+ export declare function useSortingState(options: UseSortingOptions): SortingStateResult;
48
+ export interface UsePagingOptions {
49
+ /** Initial items per page. null = show all. Default: 50 */
50
+ initialItemsPerPage?: number | null;
51
+ /** State storage for current page */
52
+ currentPageStateStorage?: StateStorageOrName;
53
+ /** State storage for page size preference */
54
+ pagingSettingsStorage?: StateStorageOrName;
55
+ /** Storage key prefix */
56
+ storageKey?: string;
57
+ }
58
+ export interface PagingStateResult {
59
+ readonly state: PagingState;
60
+ readonly info: PagingInfo;
61
+ readonly hasPrevious: boolean;
62
+ readonly hasNext: boolean;
63
+ goTo(page: number): void;
64
+ next(): void;
65
+ previous(): void;
66
+ first(): void;
67
+ last(): void;
68
+ setItemsPerPage(count: number | null): void;
69
+ setTotalCount(count: number): void;
70
+ refreshTotalCount(): void;
71
+ readonly queryLimit: number | undefined;
72
+ readonly queryOffset: number | undefined;
73
+ }
74
+ export declare function usePagingState(options?: UsePagingOptions): PagingStateResult;
75
+ export interface UseSelectionOptions {
76
+ layouts?: readonly DataViewLayout[];
77
+ initialSelection?: SelectionValues;
78
+ stateStorage?: StateStorageOrName;
79
+ storageKey?: string;
80
+ }
81
+ export interface SelectionStateResult {
82
+ readonly state: SelectionState;
83
+ setLayout(layout: string | undefined): void;
84
+ setVisibility(name: string, visible: boolean | undefined): void;
85
+ isVisible(name: string, fallback?: boolean): boolean;
86
+ readonly currentLayout: string | undefined;
87
+ }
88
+ export declare function useSelectionState(options?: UseSelectionOptions): SelectionStateResult;
89
+ //# sourceMappingURL=useDataViewState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataViewState.d.ts","sourceRoot":"","sources":["../../src/dataview/useDataViewState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { BackendAdapter, MutationDataCollector, SchemaDefinition, UndoManagerConfig, UpdateMode } from '@contember/bindx';
3
+ import { SnapshotStore } from '@contember/bindx';
4
+ import { ActionDispatcher } from '@contember/bindx';
5
+ import { BatchPersister } from '@contember/bindx';
6
+ import { SchemaRegistry } from '@contember/bindx';
7
+ import { UndoManager } from '@contember/bindx';
8
+ import { QueryBatcher } from '../batching/QueryBatcher.js';
9
+ /**
10
+ * Context value containing all bindx services
11
+ */
12
+ export interface BindxContextValue {
13
+ /** Backend adapter for data fetching/persistence */
14
+ adapter: BackendAdapter;
15
+ /** Query batcher for combining multiple queries into single requests */
16
+ batcher: QueryBatcher;
17
+ /** Immutable snapshot store */
18
+ store: SnapshotStore;
19
+ /** Action dispatcher for mutations */
20
+ dispatcher: ActionDispatcher;
21
+ /** Batch persister for multi-entity persistence */
22
+ batchPersister: BatchPersister;
23
+ /** Schema registry for entity metadata */
24
+ schema: SchemaRegistry;
25
+ /** Undo manager (if enabled) */
26
+ undoManager: UndoManager | null;
27
+ /** Whether debug logging is enabled */
28
+ debug: boolean;
29
+ }
30
+ export declare const BindxContext: import("react").Context<BindxContextValue | null>;
31
+ /**
32
+ * Props for BindxProvider
33
+ */
34
+ export interface BindxProviderProps {
35
+ /** The backend adapter to use for data fetching/persistence */
36
+ adapter: BackendAdapter;
37
+ /** Optional custom snapshot store (useful for testing) */
38
+ store?: SnapshotStore;
39
+ /** Schema definition for entity metadata and mutation collection */
40
+ schema: SchemaDefinition<Record<string, object>>;
41
+ /** Optional custom mutation collector (overrides default behavior) */
42
+ mutationCollector?: MutationDataCollector;
43
+ /** Enable undo/redo functionality */
44
+ enableUndo?: boolean;
45
+ /** Configuration for undo manager */
46
+ undoConfig?: UndoManagerConfig;
47
+ /**
48
+ * Default update mode for persistence operations.
49
+ * - 'optimistic': Update UI immediately, revert on failure (default)
50
+ * - 'pessimistic': Wait for server confirmation before updating UI
51
+ */
52
+ defaultUpdateMode?: UpdateMode;
53
+ /** Enable debug logging (e.g., selection collection output) */
54
+ debug?: boolean;
55
+ children: ReactNode;
56
+ }
57
+ /**
58
+ * Provider component that supplies the bindx services
59
+ * to all child components using bindx hooks.
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * const adapter = new MockAdapter(initialData)
64
+ *
65
+ * function App() {
66
+ * return (
67
+ * <BindxProvider adapter={adapter} schema={testSchema}>
68
+ * <ArticleEditor id="123" />
69
+ * </BindxProvider>
70
+ * )
71
+ * }
72
+ * ```
73
+ */
74
+ export declare function BindxProvider({ adapter, store: customStore, schema: schemaDefinition, mutationCollector: customMutationCollector, enableUndo, undoConfig, defaultUpdateMode, debug, children, }: BindxProviderProps): import("react/jsx-runtime").JSX.Element;
75
+ /**
76
+ * Hook to access the schema registry.
77
+ * Must be used within a BindxProvider or ContemberBindxProvider.
78
+ */
79
+ export declare function useSchemaRegistry(): SchemaRegistry;
80
+ /**
81
+ * Hook to access the backend adapter.
82
+ * Must be used within a BindxProvider.
83
+ */
84
+ export declare function useBackendAdapter(): BackendAdapter;
85
+ /**
86
+ * Hook to access the snapshot store.
87
+ * Must be used within a BindxProvider.
88
+ */
89
+ export declare function useSnapshotStore(): SnapshotStore;
90
+ /**
91
+ * Hook to access the action dispatcher.
92
+ * Must be used within a BindxProvider.
93
+ */
94
+ export declare function useDispatcher(): ActionDispatcher;
95
+ /**
96
+ * Hook to access the batch persister.
97
+ * Must be used within a BindxProvider.
98
+ */
99
+ export declare function useBatchPersister(): BatchPersister;
100
+ /**
101
+ * Hook to access all bindx services.
102
+ * Must be used within a BindxProvider.
103
+ */
104
+ export declare function useBindxContext(): BindxContextValue;
105
+ /**
106
+ * Hook to access the query batcher.
107
+ * Must be used within a BindxProvider.
108
+ */
109
+ export declare function useQueryBatcher(): QueryBatcher;
110
+ //# sourceMappingURL=BackendAdapterContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackendAdapterContext.d.ts","sourceRoot":"","sources":["../../src/hooks/BackendAdapterContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC9H,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,oDAAoD;IACpD,OAAO,EAAE,cAAc,CAAA;IACvB,wEAAwE;IACxE,OAAO,EAAE,YAAY,CAAA;IACrB,+BAA+B;IAC/B,KAAK,EAAE,aAAa,CAAA;IACpB,sCAAsC;IACtC,UAAU,EAAE,gBAAgB,CAAA;IAC5B,mDAAmD;IACnD,cAAc,EAAE,cAAc,CAAA;IAC9B,0CAA0C;IAC1C,MAAM,EAAE,cAAc,CAAA;IACtB,gCAAgC;IAChC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,uCAAuC;IACvC,KAAK,EAAE,OAAO,CAAA;CACd;AAED,eAAO,MAAM,YAAY,mDAAgD,CAAA;AAEzE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,+DAA+D;IAC/D,OAAO,EAAE,cAAc,CAAA;IACvB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,oEAAoE;IACpE,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAChD,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;IACzC,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,qCAAqC;IACrC,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAA;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,SAAS,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,EAC7B,OAAO,EACP,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,gBAAgB,EACxB,iBAAiB,EAAE,uBAAuB,EAC1C,UAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,KAAa,EACb,QAAQ,GACR,EAAE,kBAAkB,2CAyCpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAMhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,gBAAgB,CAMhD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,CAMnD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAM9C"}
@@ -0,0 +1,67 @@
1
+ import { type ReactNode } from 'react';
2
+ import { GraphQlClient } from '@contember/graphql-client';
3
+ import { type SchemaNames } from '@contember/client-content';
4
+ import { SnapshotStore, UndoManager, type SchemaDefinition, type UndoManagerConfig, type UpdateMode } from '@contember/bindx';
5
+ /**
6
+ * Converts SchemaNames (Contember format) to SchemaDefinition (bindx format)
7
+ * so that a SchemaRegistry can be created for standalone hooks.
8
+ */
9
+ export declare function schemaNamesToDef(schemaNames: SchemaNames): SchemaDefinition<Record<string, object>>;
10
+ /**
11
+ * Props for ContemberBindxProvider
12
+ */
13
+ export interface ContemberBindxProviderProps {
14
+ /** Contember schema names for query building */
15
+ schema: SchemaNames;
16
+ /** Optional custom snapshot store (useful for testing) */
17
+ store?: SnapshotStore;
18
+ /** Children */
19
+ children: ReactNode;
20
+ client: GraphQlClient;
21
+ /** Enable undo/redo functionality. Pass true to auto-create an UndoManager, or pass an UndoManager instance. */
22
+ undoManager?: UndoManager | boolean;
23
+ /** Configuration for auto-created undo manager (only used when undoManager={true}) */
24
+ undoConfig?: UndoManagerConfig;
25
+ /**
26
+ * Default update mode for persistence operations.
27
+ * - 'optimistic': Update UI immediately, revert on failure (default)
28
+ * - 'pessimistic': Wait for server confirmation before updating UI
29
+ */
30
+ defaultUpdateMode?: UpdateMode;
31
+ /** Enable debug logging (e.g., selection collection output) */
32
+ debug?: boolean;
33
+ }
34
+ /**
35
+ * Provider component that combines Contember authentication with bindx data binding.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * import { ContemberBindxProvider, useUndo } from '@contember/bindx-react'
40
+ * import { schema } from './generated/schema'
41
+ *
42
+ * function App() {
43
+ * return (
44
+ * <ContemberBindxProvider
45
+ * client={graphQlClient}
46
+ * schema={schema}
47
+ * undoManager={true}
48
+ * >
49
+ * <ArticleEditor id="123" />
50
+ * </ContemberBindxProvider>
51
+ * )
52
+ * }
53
+ *
54
+ * // Access undo/redo in child components
55
+ * function UndoControls() {
56
+ * const { canUndo, canRedo, undo, redo } = useUndo()
57
+ * return (
58
+ * <div>
59
+ * <button onClick={undo} disabled={!canUndo}>Undo</button>
60
+ * <button onClick={redo} disabled={!canRedo}>Redo</button>
61
+ * </div>
62
+ * )
63
+ * }
64
+ * ```
65
+ */
66
+ export declare const ContemberBindxProvider: import("react").NamedExoticComponent<ContemberBindxProviderProps>;
67
+ //# sourceMappingURL=ContemberBindxProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContemberBindxProvider.d.ts","sourceRoot":"","sources":["../../src/hooks/ContemberBindxProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAsC,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAoB,aAAa,EAAuF,WAAW,EAAkB,KAAK,gBAAgB,EAAiB,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAInQ;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwBnG;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAA;IACnB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,eAAe;IACf,QAAQ,EAAE,SAAS,CAAA;IAEnB,MAAM,EAAE,aAAa,CAAA;IAErB,gHAAgH;IAChH,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAA;IACnC,sFAAsF;IACtF,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAA;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,sBAAsB,mEA6DjC,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { type ReactElement } from 'react';
2
+ import { type SchemaDefinition, SchemaRegistry, type SelectionInput } from '@contember/bindx';
3
+ import { type UseEntityOptions, type EntityAccessorResult } from './useEntityImpl.js';
4
+ import { type UseEntityListOptions, type EntityListAccessorResult } from './useEntityListImpl.js';
5
+ import type { ComponentBuilder, ComponentBuilderState, CreateComponentOptions } from '../jsx/componentBuilder.types.js';
6
+ import { type EntityProps } from '../jsx/components/Entity.js';
7
+ import { type EntityListProps } from '../jsx/components/EntityList.js';
8
+ export { COMPONENT_MARKER, COMPONENT_SELECTIONS, type SelectionPropMeta } from '../jsx/componentBuilder.js';
9
+ export type { EntityFields } from '@contember/bindx';
10
+ export type { UseEntityOptions, EntityAccessorResult, LoadingEntityAccessor, ErrorEntityAccessor, NotFoundEntityAccessor, ReadyEntityAccessor } from './useEntityImpl.js';
11
+ export type { UseEntityListOptions, EntityListAccessorResult, LoadingEntityListAccessor, ErrorEntityListAccessor, ReadyEntityListAccessor } from './useEntityListImpl.js';
12
+ /**
13
+ * Creates type-safe bindx hooks and components for a specific schema.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const schema = defineSchema<{
18
+ * Article: Article
19
+ * Author: Author
20
+ * }>({...})
21
+ *
22
+ * export const { useEntity, useEntityList, Entity, createComponent } = createBindx(schema)
23
+ * ```
24
+ */
25
+ export declare function createBindx<TModels extends {
26
+ [K in keyof TModels]: object;
27
+ }>(schemaDefinition: SchemaDefinition<TModels>): {
28
+ useEntity: <TEntityName extends keyof TModels & string, TResult extends object>(entityType: TEntityName, options: UseEntityOptions, definer: SelectionInput<TModels[TEntityName], TResult>) => EntityAccessorResult<TModels[TEntityName], TResult>;
29
+ useEntityList: <TEntityName extends keyof TModels & string, TResult extends object>(entityType: TEntityName, options: UseEntityListOptions, definer: SelectionInput<TModels[TEntityName], TResult>) => EntityListAccessorResult<TResult>;
30
+ Entity: <K extends keyof TModels & string>(props: EntityProps<TModels, K>) => ReactElement | null;
31
+ EntityList: <K extends keyof TModels & string>(props: EntityListProps<TModels, K>) => ReactElement | null;
32
+ createComponent: {
33
+ (): ComponentBuilder<TModels, ComponentBuilderState<TModels, {}, object, readonly string[]>>;
34
+ <TRoles extends readonly string[]>(options: CreateComponentOptions<TRoles>): ComponentBuilder<TModels, ComponentBuilderState<TModels, {}, object, TRoles>>;
35
+ };
36
+ schemaRegistry: SchemaRegistry<TModels>;
37
+ schema: SchemaRegistry<TModels>;
38
+ };
39
+ //# sourceMappingURL=createBindx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBindx.d.ts","sourceRoot":"","sources":["../../src/hooks/createBindx.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EACN,KAAK,gBAAgB,EACrB,cAAc,EACd,KAAK,cAAc,EAGnB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAiB,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACpG,OAAO,EAAqB,KAAK,oBAAoB,EAAE,KAAK,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAQpH,OAAO,KAAK,EACX,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAGlF,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAG3G,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACzK,YAAY,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAMzK;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,OAAO,SAAS;KAAG,CAAC,IAAI,MAAM,OAAO,GAAG,MAAM;CAAE,EAC3E,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,CAAC;gBAqBxB,WAAW,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,SAAS,MAAM,cACxE,WAAW,WACd,gBAAgB,WAChB,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,KACpD,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;oBAiB/B,WAAW,SAAS,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,SAAS,MAAM,cAC5E,WAAW,WACd,oBAAoB,WACpB,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,KACpD,wBAAwB,CAAC,OAAO,CAAC;aAYf,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,SAAS,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,KAAG,YAAY,GAAG,IAAI;iBAIlF,CAAC,SAAS,MAAM,OAAO,GAAG,MAAM,SAAS,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,KAAG,YAAY,GAAG,IAAI;;YAQvF,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;SAC3F,MAAM,SAAS,SAAS,MAAM,EAAE,WAC/C,sBAAsB,CAAC,MAAM,CAAC,GAErC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;;;EAkBhF"}
@@ -0,0 +1,10 @@
1
+ export { BindxProvider, useBackendAdapter, useSnapshotStore, useDispatcher, useBatchPersister, useBindxContext, useSchemaRegistry, type BindxProviderProps, type BindxContextValue, } from './BackendAdapterContext.js';
2
+ export { usePersist, usePersistEntity, type PersistApi, type EntityPersistApi, type AnyRefWithMeta, } from './usePersist.js';
3
+ export { useEntity, type UseEntityOptions, type LoadingEntityAccessor, type ErrorEntityAccessor, type NotFoundEntityAccessor, type ReadyEntityAccessor, type EntityAccessorResult, } from './useEntity.js';
4
+ export { useEntityList, type UseEntityListOptions, type LoadingEntityListAccessor, type ErrorEntityListAccessor, type ReadyEntityListAccessor, type EntityListAccessorResult, } from './useEntityList.js';
5
+ export { ContemberBindxProvider, schemaNamesToDef, } from './ContemberBindxProvider.js';
6
+ export { useUndo, type UndoHookResult } from './useUndo.js';
7
+ export { useOnEvent, useOnEntityEvent, useOnFieldEvent, useIntercept, useInterceptEntity, useInterceptField, } from './useBindxEvents.js';
8
+ export { useEntityBeforePersist } from './useEntityBeforePersist.js';
9
+ export { useEntityErrors, type EntityErrorsState, } from './useErrors.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACtB,MAAM,4BAA4B,CAAA;AAEnC,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACnB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACN,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GACzB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EACN,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC7B,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EACN,sBAAsB,EACtB,gBAAgB,GAChB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GACjB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,OAAO,EACN,eAAe,EACf,KAAK,iBAAiB,GACtB,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,83 @@
1
+ import type { EventTypeMap, AfterEventTypes, BeforeEventTypes, EventListener, Interceptor } from '@contember/bindx';
2
+ /**
3
+ * Subscribe to a global bindx event.
4
+ * Automatically handles subscription lifecycle and cleanup.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * useOnEvent('field:changed', (event) => {
9
+ * console.log('Any field changed:', event)
10
+ * })
11
+ * ```
12
+ */
13
+ export declare function useOnEvent<T extends AfterEventTypes>(eventType: T, listener: EventListener<EventTypeMap[T]>): void;
14
+ /**
15
+ * Subscribe to an entity-scoped bindx event.
16
+ * Automatically handles subscription lifecycle and cleanup.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * useOnEntityEvent('entity:persisted', 'Article', articleId, (event) => {
21
+ * toast.success('Article saved!')
22
+ * })
23
+ * ```
24
+ */
25
+ export declare function useOnEntityEvent<T extends AfterEventTypes>(eventType: T, entityType: string, entityId: string, listener: EventListener<EventTypeMap[T]>): void;
26
+ /**
27
+ * Subscribe to a field-scoped bindx event.
28
+ * Automatically handles subscription lifecycle and cleanup.
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * useOnFieldEvent('field:changed', 'Article', articleId, 'title', (event) => {
33
+ * console.log('Title changed:', event.oldValue, '->', event.newValue)
34
+ * })
35
+ * ```
36
+ */
37
+ export declare function useOnFieldEvent<T extends AfterEventTypes>(eventType: T, entityType: string, entityId: string, fieldName: string, listener: EventListener<EventTypeMap[T]>): void;
38
+ /**
39
+ * Add a global interceptor for a before event.
40
+ * Automatically handles subscription lifecycle and cleanup.
41
+ *
42
+ * @example
43
+ * ```tsx
44
+ * useIntercept('field:changing', (event) => {
45
+ * if (event.newValue === '') {
46
+ * return { action: 'cancel' }
47
+ * }
48
+ * return { action: 'continue' }
49
+ * })
50
+ * ```
51
+ */
52
+ export declare function useIntercept<T extends BeforeEventTypes>(eventType: T, interceptor: Interceptor<EventTypeMap[T]>): void;
53
+ /**
54
+ * Add an entity-scoped interceptor.
55
+ * Automatically handles subscription lifecycle and cleanup.
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * useInterceptEntity('entity:persisting', 'Article', articleId, (event) => {
60
+ * if (!isValid) {
61
+ * return { action: 'cancel' }
62
+ * }
63
+ * return { action: 'continue' }
64
+ * })
65
+ * ```
66
+ */
67
+ export declare function useInterceptEntity<T extends BeforeEventTypes>(eventType: T, entityType: string, entityId: string, interceptor: Interceptor<EventTypeMap[T]>): void;
68
+ /**
69
+ * Add a field-scoped interceptor.
70
+ * Automatically handles subscription lifecycle and cleanup.
71
+ *
72
+ * @example
73
+ * ```tsx
74
+ * useInterceptField('field:changing', 'Article', articleId, 'title', (event) => {
75
+ * if (event.newValue === '') {
76
+ * return { action: 'cancel' }
77
+ * }
78
+ * return { action: 'continue' }
79
+ * })
80
+ * ```
81
+ */
82
+ export declare function useInterceptField<T extends BeforeEventTypes>(eventType: T, entityType: string, entityId: string, fieldName: string, interceptor: Interceptor<EventTypeMap[T]>): void;
83
+ //# sourceMappingURL=useBindxEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBindxEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useBindxEvents.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,MAAM,kBAAkB,CAAA;AAMzB;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,eAAe,EACnD,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACtC,IAAI,CAgBN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,EACzD,SAAS,EAAE,CAAC,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACtC,IAAI,CAgBN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EACxD,SAAS,EAAE,CAAC,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACtC,IAAI,CAgBN;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,gBAAgB,EACtD,SAAS,EAAE,CAAC,EACZ,WAAW,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAgBN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,gBAAgB,EAC5D,SAAS,EAAE,CAAC,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAgBN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,gBAAgB,EAC3D,SAAS,EAAE,CAAC,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAgBN"}
@@ -0,0 +1,123 @@
1
+ import type { EntityDef, EntityUniqueWhere, SelectionInput, SelectionMeta, FieldError, SelectedEntityFields, CommonEntity, EntityForRoles, RoleNames } from '@contember/bindx';
2
+ /**
3
+ * Options for useEntity hook
4
+ */
5
+ export interface UseEntityOptions {
6
+ /** Unique field(s) to identify the entity (e.g., { id: '...' } or { slug: '...' }) */
7
+ by: EntityUniqueWhere;
8
+ /** If true, use cached data from store if available (default: false) */
9
+ cache?: boolean;
10
+ /**
11
+ * Pre-resolved selection metadata.
12
+ * When provided, definer (3rd argument) is not needed.
13
+ * Used internally by Entity component.
14
+ */
15
+ selection?: SelectionMeta;
16
+ /** Optional query key for cache invalidation */
17
+ queryKey?: string;
18
+ }
19
+ /**
20
+ * Loading state for entity accessor
21
+ */
22
+ export interface LoadingEntityAccessor {
23
+ readonly status: 'loading';
24
+ readonly isLoading: true;
25
+ readonly isError: false;
26
+ readonly isNotFound: false;
27
+ readonly isPersisting: false;
28
+ readonly isDirty: false;
29
+ readonly id: string;
30
+ readonly fields: never;
31
+ readonly data: never;
32
+ persist(): Promise<void>;
33
+ reset(): void;
34
+ }
35
+ /**
36
+ * Error state for entity accessor
37
+ */
38
+ export interface ErrorEntityAccessor {
39
+ readonly status: 'error';
40
+ readonly isLoading: false;
41
+ readonly isError: true;
42
+ readonly isNotFound: false;
43
+ readonly error: FieldError;
44
+ readonly isPersisting: false;
45
+ readonly isDirty: false;
46
+ readonly id: string;
47
+ readonly fields: never;
48
+ readonly data: never;
49
+ persist(): Promise<void>;
50
+ reset(): void;
51
+ }
52
+ /**
53
+ * Not found state for entity accessor
54
+ */
55
+ export interface NotFoundEntityAccessor {
56
+ readonly status: 'not_found';
57
+ readonly isLoading: false;
58
+ readonly isError: false;
59
+ readonly isNotFound: true;
60
+ readonly isPersisting: false;
61
+ readonly isDirty: false;
62
+ readonly id: string;
63
+ readonly fields: never;
64
+ readonly data: never;
65
+ persist(): Promise<void>;
66
+ reset(): void;
67
+ }
68
+ /**
69
+ * Ready state base interface for entity accessor
70
+ */
71
+ export interface ReadyEntityAccessorBase<TEntity extends object, TSelected extends object = TEntity> {
72
+ readonly status: 'ready';
73
+ readonly isLoading: false;
74
+ readonly isError: false;
75
+ readonly isNotFound: false;
76
+ readonly isPersisting: boolean;
77
+ readonly isDirty: boolean;
78
+ readonly id: string;
79
+ readonly fields: SelectedEntityFields<TEntity, TSelected>;
80
+ readonly data: TSelected;
81
+ persist(): Promise<void>;
82
+ reset(): void;
83
+ }
84
+ /**
85
+ * Ready state for entity accessor with direct field access via Proxy.
86
+ */
87
+ export type ReadyEntityAccessor<TEntity extends object, TSelected extends object = TEntity> = ReadyEntityAccessorBase<TEntity, TSelected> & SelectedEntityFields<TEntity, TSelected>;
88
+ /**
89
+ * Union of all entity accessor states
90
+ */
91
+ export type EntityAccessorResult<TEntity extends object, TSelected extends object = TEntity> = LoadingEntityAccessor | ErrorEntityAccessor | NotFoundEntityAccessor | ReadyEntityAccessor<TEntity, TSelected>;
92
+ /**
93
+ * Hook to fetch and manage a single entity with role-expanded type inference.
94
+ *
95
+ * @example
96
+ * ```tsx
97
+ * const article = useEntity(schema.Article, { by: { id }, roles: ['admin'] }, e => e.title().internalNotes())
98
+ * ```
99
+ */
100
+ export declare function useEntity<TRoleMap extends Record<string, object>, TRoles extends RoleNames<TRoleMap>, TResult extends object>(entity: EntityDef<TRoleMap>, options: UseEntityOptions & {
101
+ roles: readonly TRoles[];
102
+ }, definer: SelectionInput<EntityForRoles<TRoleMap, TRoles>, TResult>): EntityAccessorResult<EntityForRoles<TRoleMap, TRoles>, TResult>;
103
+ /**
104
+ * Hook to fetch and manage a single entity with full type inference.
105
+ * Uses the common (narrowest) entity type when no roles are specified.
106
+ *
107
+ * @example
108
+ * ```tsx
109
+ * const article = useEntity(schema.Article, { by: { id } }, e => e.title().content())
110
+ * if (article.status !== 'ready') return <Loading />
111
+ * return <input value={article.title.value} onChange={...} />
112
+ * ```
113
+ */
114
+ export declare function useEntity<TRoleMap extends Record<string, object>, TResult extends object>(entity: EntityDef<TRoleMap>, options: UseEntityOptions, definer: SelectionInput<CommonEntity<TRoleMap>, TResult>): EntityAccessorResult<CommonEntity<TRoleMap>, TResult>;
115
+ /**
116
+ * Hook to fetch and manage a single entity with pre-resolved selection.
117
+ *
118
+ * Used internally by Entity component that collects selection from JSX.
119
+ */
120
+ export declare function useEntity(entity: EntityDef, options: UseEntityOptions & {
121
+ selection: SelectionMeta;
122
+ }): EntityAccessorResult<object, object>;
123
+ //# sourceMappingURL=useEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEntity.d.ts","sourceRoot":"","sources":["../../src/hooks/useEntity.ts"],"names":[],"mappings":"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"}