@affino/datagrid-vue 0.1.0 → 0.1.2

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 (2) hide show
  1. package/README.md +85 -0
  2. package/package.json +3 -3
package/README.md CHANGED
@@ -92,6 +92,10 @@ Compatibility entrypoint. New demo/workbench wiring should import `@affino/datag
92
92
  - `useDataGridViewportContextMenuRouter`
93
93
  - `useDataGridViewportBlurHandler`
94
94
  - `useDataGridViewportScrollLifecycle`
95
+ - `useDataGridLinkedPaneScrollSync`
96
+ - `useDataGridResizeClickGuard`
97
+ - `useDataGridInitialViewportRecovery`
98
+ - `useDataGridManagedWheelScroll`
95
99
  - `useDataGridClearSelectionLifecycle`
96
100
  - `useDataGridGlobalPointerLifecycle`
97
101
  - `useDataGridPointerAutoScroll`
@@ -104,6 +108,7 @@ Compatibility entrypoint. New demo/workbench wiring should import `@affino/datag
104
108
  - `useDataGridQuickFilterActions`
105
109
  - `useDataGridCellCoordNormalizer`
106
110
  - `useDataGridSelectionComparators`
111
+ - `useDataGridRowSelectionModel`
107
112
  - `useDataGridPointerModifierPolicy`
108
113
  - `useDataGridHistoryActionRunner`
109
114
  - `useDataGridInlineEditorFocus`
@@ -130,6 +135,86 @@ const { api, columnSnapshot } = useDataGridRuntime({
130
135
  })
131
136
  ```
132
137
 
138
+ ## Managed wheel scroll (advanced)
139
+
140
+ Use `useDataGridManagedWheelScroll` when you want deterministic wheel ownership (axis lock, preventDefault policy, and consistent header/body horizontal sync).
141
+
142
+ ```ts
143
+ import { useDataGridManagedWheelScroll } from "@affino/datagrid-vue/advanced"
144
+
145
+ const managedWheelScroll = useDataGridManagedWheelScroll({
146
+ resolveWheelMode: () => "managed", // "managed" | "native"
147
+ resolveWheelAxisLockMode: () => "dominant",
148
+ resolvePreventDefaultWhenHandled: () => true,
149
+ resolveBodyViewport: () => viewportRef.value,
150
+ resolveMainViewport: () => viewportRef.value
151
+ ? {
152
+ scrollLeft: viewportRef.value.scrollLeft,
153
+ scrollWidth: viewportRef.value.scrollWidth,
154
+ clientWidth: viewportRef.value.clientWidth,
155
+ }
156
+ : null,
157
+ setHandledScrollTop: (nextTop) => {
158
+ if (viewportRef.value) {
159
+ viewportRef.value.scrollTop = nextTop
160
+ }
161
+ },
162
+ setHandledScrollLeft: (nextLeft) => {
163
+ if (viewportRef.value) {
164
+ viewportRef.value.scrollLeft = nextLeft
165
+ }
166
+ },
167
+ })
168
+
169
+ function onViewportWheel(event: WheelEvent) {
170
+ managedWheelScroll.onBodyViewportWheel(event)
171
+ }
172
+ ```
173
+
174
+ ```vue
175
+ <div ref="viewportRef" @wheel="onViewportWheel" @scroll="onViewportScroll" />
176
+ ```
177
+
178
+ - Call `managedWheelScroll.reset()` on unmount.
179
+ - Keep DOM reads/writes in adapter/demo/UI layer; do not move wheel DOM handling into core.
180
+
181
+ ## Orchestration-heavy viewport integration
182
+
183
+ Use orchestration primitives from `@affino/datagrid-vue/advanced` to keep component code thin while preserving high-fidelity interaction behavior.
184
+
185
+ ```ts
186
+ import {
187
+ useDataGridLinkedPaneScrollSync,
188
+ useDataGridResizeClickGuard,
189
+ useDataGridInitialViewportRecovery,
190
+ useDataGridRowSelectionModel,
191
+ } from "@affino/datagrid-vue/advanced"
192
+
193
+ const linkedPaneSync = useDataGridLinkedPaneScrollSync({
194
+ resolveSourceScrollTop: () => viewportRef.value?.scrollTop ?? 0,
195
+ mode: "css-var",
196
+ resolveCssVarHost: () => gridRootRef.value,
197
+ })
198
+
199
+ const resizeGuard = useDataGridResizeClickGuard()
200
+
201
+ const viewportRecovery = useDataGridInitialViewportRecovery({
202
+ resolveShouldRecover: () => totalRows.value > 1 && renderedRowsCount.value <= 1,
203
+ runRecoveryStep: () => syncViewportMetrics(),
204
+ })
205
+
206
+ const rowSelectionModel = useDataGridRowSelectionModel({
207
+ resolveFilteredRows: () => filteredRows.value,
208
+ resolveRowId: row => String(row.rowId),
209
+ resolveAllRows: () => allRows.value,
210
+ })
211
+ ```
212
+
213
+ Recommended ownership:
214
+ - `@affino/datagrid-core`: deterministic data/runtime contracts.
215
+ - `@affino/datagrid-orchestration`: interaction policies and state orchestration.
216
+ - `@affino/datagrid-vue`: refs/template wiring and DOM lifecycle integration.
217
+
133
218
  ## 60-second integration (junior-friendly)
134
219
 
135
220
  ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@affino/datagrid-vue",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "author": "Anton Pavlov <a.pavlov@affino.dev>",
5
5
  "type": "module",
6
6
  "description": "Vue adapter and UI layer for @affino/datagrid-core (bootstrap fork from .tmp/ui-table/vue)",
@@ -38,8 +38,8 @@
38
38
  "@affino/datagrid-theme": "^0.1.0"
39
39
  },
40
40
  "dependencies": {
41
- "@affino/datagrid-orchestration": "0.1.0",
42
- "@affino/datagrid-core": "0.1.0"
41
+ "@affino/datagrid-core": "0.1.0",
42
+ "@affino/datagrid-orchestration": "0.1.2"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@affino/datagrid-theme": "^0.1.0"