ropav 0.4.0 → 0.6.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 (266) hide show
  1. package/dist/components/autocomplete/autocomplete-root.js +3 -1
  2. package/dist/components/autocomplete/index.d.ts +3 -0
  3. package/dist/components/breadcrumbs/breadcrumbs-item.js +1 -0
  4. package/dist/components/breadcrumbs/index.d.ts +1 -0
  5. package/dist/components/calendar/index.d.ts +5 -3
  6. package/dist/components/calendar-year-picker/index.d.ts +4 -2
  7. package/dist/components/checkbox/checkbox-content.js +1 -1
  8. package/dist/components/color-field/index.d.ts +1 -0
  9. package/dist/components/color-input-group/color-input-group-root.js +2 -0
  10. package/dist/components/color-input-group/color-input-group.types.d.ts +2 -0
  11. package/dist/components/color-input-group/index.d.ts +2 -0
  12. package/dist/components/combo-box/combo-box-root.js +9 -2
  13. package/dist/components/combo-box/combo-box.types.d.ts +3 -0
  14. package/dist/components/combo-box/index.d.ts +3 -0
  15. package/dist/components/date-field/index.d.ts +1 -0
  16. package/dist/components/date-input-group/date-input-group-root.js +2 -0
  17. package/dist/components/date-input-group/date-input-group-segment.js +1 -1
  18. package/dist/components/date-input-group/date-input-group.types.d.ts +2 -0
  19. package/dist/{composables → components/date-input-group}/use-date-segment.d.ts +2 -2
  20. package/dist/{composables → components/date-input-group}/use-date-segment.js +9 -9
  21. package/dist/components/date-range-picker/date-range-picker-root.js +1 -1
  22. package/dist/components/date-range-picker/index.d.ts +15 -14
  23. package/dist/{composables → components/date-range-picker}/use-date-range-picker.d.ts +7 -7
  24. package/dist/{composables → components/date-range-picker}/use-date-range-picker.js +10 -10
  25. package/dist/components/drawer/drawer-dialog.js +1 -1
  26. package/dist/{composables → components/drawer}/use-drawer-drag.d.ts +1 -1
  27. package/dist/{composables → components/drawer}/use-drawer-drag.js +1 -1
  28. package/dist/components/drop-zone/drop-zone-root.d.ts +23 -0
  29. package/dist/components/drop-zone/drop-zone-root.js +153 -0
  30. package/dist/components/drop-zone/drop-zone-trigger.d.ts +21 -0
  31. package/dist/components/drop-zone/drop-zone-trigger.js +20 -0
  32. package/dist/components/drop-zone/drop-zone.accept.d.ts +19 -0
  33. package/dist/components/drop-zone/drop-zone.accept.js +28 -0
  34. package/dist/components/drop-zone/drop-zone.context.d.ts +6 -0
  35. package/dist/components/drop-zone/drop-zone.context.js +5 -0
  36. package/dist/components/drop-zone/drop-zone.types.d.ts +30 -0
  37. package/dist/components/drop-zone/index.d.ts +86 -0
  38. package/dist/components/drop-zone/index.js +11 -0
  39. package/dist/components/dropdown/dropdown-menu.js +1 -0
  40. package/dist/components/dropdown/dropdown-submenu-trigger.js +1 -1
  41. package/dist/components/dropdown/index.d.ts +4 -2
  42. package/dist/{composables → components/dropdown}/use-safely-mouse-to-submenu.js +1 -1
  43. package/dist/components/icons/icon-overlay-arrow.js +1 -1
  44. package/dist/components/index.d.ts +5 -0
  45. package/dist/components/input/index.d.ts +2 -0
  46. package/dist/components/input/input-root.js +3 -0
  47. package/dist/components/input/input.types.d.ts +5 -0
  48. package/dist/components/input-group/index.d.ts +2 -0
  49. package/dist/components/input-group/input-group-root.js +3 -0
  50. package/dist/components/input-group/input-group.types.d.ts +5 -0
  51. package/dist/components/input-otp/index.d.ts +6 -4
  52. package/dist/components/link/index.d.ts +2 -0
  53. package/dist/components/link/link-root.js +22 -5
  54. package/dist/components/link/link.types.d.ts +14 -3
  55. package/dist/{composables → components/list-box}/drag-collection.d.ts +2 -2
  56. package/dist/{composables → components/list-box}/drag-collection.js +1 -1
  57. package/dist/components/list-box/index.d.ts +4 -0
  58. package/dist/components/list-box/list-box-root.js +53 -32
  59. package/dist/components/list-box/list-box.types.d.ts +2 -0
  60. package/dist/components/menu/index.d.ts +2 -0
  61. package/dist/components/menu/menu-root.js +5 -1
  62. package/dist/components/menu/menu.types.d.ts +3 -0
  63. package/dist/components/number-field/index.d.ts +3 -0
  64. package/dist/components/number-field/number-field-root.js +2 -0
  65. package/dist/components/number-field/number-field.types.d.ts +2 -0
  66. package/dist/components/overlay/overlay-arrow.js +64 -11
  67. package/dist/components/progress-bar/index.d.ts +4 -0
  68. package/dist/components/progress-bar/progress-bar-root.js +4 -0
  69. package/dist/components/progress-bar/progress-bar.types.d.ts +7 -0
  70. package/dist/components/radio/radio-content.js +1 -1
  71. package/dist/components/range-calendar/index.d.ts +18 -15
  72. package/dist/components/router-provider/index.d.ts +5 -0
  73. package/dist/components/router-provider/index.js +3 -0
  74. package/dist/components/router-provider/router-provider.context.d.ts +40 -0
  75. package/dist/components/router-provider/router-provider.context.js +16 -0
  76. package/dist/components/router-provider/router-provider.d.ts +21 -0
  77. package/dist/components/router-provider/router-provider.js +22 -0
  78. package/dist/components/router-provider/router-provider.types.d.ts +23 -0
  79. package/dist/components/scroll-shadow/use-scroll-shadow.js +25 -1
  80. package/dist/components/search-field/index.d.ts +2 -0
  81. package/dist/components/search-field/search-field-root.js +3 -1
  82. package/dist/components/search-field/search-field.types.d.ts +2 -0
  83. package/dist/{composables → components/search-field}/use-search-field.d.ts +2 -2
  84. package/dist/{composables → components/search-field}/use-search-field.js +3 -3
  85. package/dist/components/segmented-control/index.d.ts +134 -0
  86. package/dist/components/segmented-control/index.js +15 -0
  87. package/dist/components/segmented-control/segmented-control-indicator.d.ts +19 -0
  88. package/dist/components/segmented-control/segmented-control-indicator.js +36 -0
  89. package/dist/components/segmented-control/segmented-control-item.d.ts +21 -0
  90. package/dist/components/segmented-control/segmented-control-item.js +96 -0
  91. package/dist/components/segmented-control/segmented-control-root.d.ts +25 -0
  92. package/dist/components/segmented-control/segmented-control-root.js +112 -0
  93. package/dist/components/segmented-control/segmented-control-separator.d.ts +19 -0
  94. package/dist/components/segmented-control/segmented-control-separator.js +18 -0
  95. package/dist/components/segmented-control/segmented-control.context.d.ts +17 -0
  96. package/dist/components/segmented-control/segmented-control.context.js +12 -0
  97. package/dist/components/segmented-control/segmented-control.types.d.ts +67 -0
  98. package/dist/components/select/index.d.ts +3 -0
  99. package/dist/components/select/select-hidden-select.js +1 -1
  100. package/dist/components/select/select-root.js +2 -0
  101. package/dist/components/select/select.types.d.ts +2 -0
  102. package/dist/components/sidebar/index.d.ts +546 -0
  103. package/dist/components/sidebar/index.js +47 -0
  104. package/dist/components/sidebar/sidebar-collapsible-trigger.d.ts +21 -0
  105. package/dist/components/sidebar/sidebar-collapsible-trigger.js +70 -0
  106. package/dist/components/sidebar/sidebar-collapsible.d.ts +24 -0
  107. package/dist/components/sidebar/sidebar-collapsible.js +78 -0
  108. package/dist/components/sidebar/sidebar-content.d.ts +21 -0
  109. package/dist/components/sidebar/sidebar-content.js +37 -0
  110. package/dist/components/sidebar/sidebar-footer.d.ts +21 -0
  111. package/dist/components/sidebar/sidebar-footer.js +24 -0
  112. package/dist/components/sidebar/sidebar-group-label.d.ts +21 -0
  113. package/dist/components/sidebar/sidebar-group-label.js +32 -0
  114. package/dist/components/sidebar/sidebar-group.d.ts +21 -0
  115. package/dist/components/sidebar/sidebar-group.js +48 -0
  116. package/dist/components/sidebar/sidebar-header.d.ts +21 -0
  117. package/dist/components/sidebar/sidebar-header.js +24 -0
  118. package/dist/components/sidebar/sidebar-inset.d.ts +21 -0
  119. package/dist/components/sidebar/sidebar-inset.js +24 -0
  120. package/dist/components/sidebar/sidebar-item-icon.d.ts +21 -0
  121. package/dist/components/sidebar/sidebar-item-icon.js +20 -0
  122. package/dist/components/sidebar/sidebar-item-indicator.d.ts +21 -0
  123. package/dist/components/sidebar/sidebar-item-indicator.js +48 -0
  124. package/dist/components/sidebar/sidebar-item-label.d.ts +21 -0
  125. package/dist/components/sidebar/sidebar-item-label.js +28 -0
  126. package/dist/components/sidebar/sidebar-item-tooltip.d.ts +21 -0
  127. package/dist/components/sidebar/sidebar-item-tooltip.js +38 -0
  128. package/dist/components/sidebar/sidebar-item-trailing.d.ts +21 -0
  129. package/dist/components/sidebar/sidebar-item-trailing.js +28 -0
  130. package/dist/components/sidebar/sidebar-item.d.ts +23 -0
  131. package/dist/components/sidebar/sidebar-item.js +160 -0
  132. package/dist/components/sidebar/sidebar-panel.d.ts +21 -0
  133. package/dist/components/sidebar/sidebar-panel.js +88 -0
  134. package/dist/components/sidebar/sidebar-rail.d.ts +21 -0
  135. package/dist/components/sidebar/sidebar-rail.js +210 -0
  136. package/dist/components/sidebar/sidebar-root.d.ts +31 -0
  137. package/dist/components/sidebar/sidebar-root.js +140 -0
  138. package/dist/components/sidebar/sidebar-separator.d.ts +19 -0
  139. package/dist/components/sidebar/sidebar-separator.js +16 -0
  140. package/dist/components/sidebar/sidebar-sub-menu.d.ts +23 -0
  141. package/dist/components/sidebar/sidebar-sub-menu.js +40 -0
  142. package/dist/components/sidebar/sidebar-trigger.d.ts +21 -0
  143. package/dist/components/sidebar/sidebar-trigger.js +69 -0
  144. package/dist/components/sidebar/sidebar.context.d.ts +75 -0
  145. package/dist/components/sidebar/sidebar.context.js +30 -0
  146. package/dist/components/sidebar/sidebar.state.d.ts +73 -0
  147. package/dist/components/sidebar/sidebar.state.js +76 -0
  148. package/dist/components/sidebar/sidebar.storage.d.ts +8 -0
  149. package/dist/components/sidebar/sidebar.storage.js +45 -0
  150. package/dist/components/sidebar/sidebar.types.d.ts +273 -0
  151. package/dist/components/splitter/index.d.ts +143 -0
  152. package/dist/components/splitter/index.js +13 -0
  153. package/dist/components/splitter/splitter-handle.d.ts +21 -0
  154. package/dist/components/splitter/splitter-handle.js +209 -0
  155. package/dist/components/splitter/splitter-panel.d.ts +21 -0
  156. package/dist/components/splitter/splitter-panel.js +70 -0
  157. package/dist/components/splitter/splitter-root.d.ts +31 -0
  158. package/dist/components/splitter/splitter-root.js +152 -0
  159. package/dist/components/splitter/splitter.context.d.ts +15 -0
  160. package/dist/components/splitter/splitter.context.js +5 -0
  161. package/dist/components/splitter/splitter.state.d.ts +87 -0
  162. package/dist/components/splitter/splitter.state.js +322 -0
  163. package/dist/components/splitter/splitter.storage.d.ts +15 -0
  164. package/dist/components/splitter/splitter.storage.js +56 -0
  165. package/dist/components/splitter/splitter.types.d.ts +98 -0
  166. package/dist/components/switch/switch-content.js +1 -1
  167. package/dist/components/table/index.d.ts +10 -9
  168. package/dist/components/table/table-body.js +13 -13
  169. package/dist/components/table/table-cell.js +49 -46
  170. package/dist/components/table/table-column-resizer.js +1 -1
  171. package/dist/components/table/table-column.js +1 -1
  172. package/dist/components/table/table-content.js +37 -18
  173. package/dist/{composables → components/table}/table-drag-collection.d.ts +1 -1
  174. package/dist/{composables → components/table}/table-drag-collection.js +1 -1
  175. package/dist/components/table/table-drop-indicator.js +3 -1
  176. package/dist/components/table/table-resizable-container.d.ts +4 -5
  177. package/dist/components/table/table-row.js +45 -14
  178. package/dist/components/table/table-virtualizer-item.d.ts +2 -7
  179. package/dist/components/table/table-virtualizer-item.js +20 -9
  180. package/dist/components/table/table.context.d.ts +11 -3
  181. package/dist/components/table/table.types.d.ts +1 -1
  182. package/dist/{composables → components/table}/use-grid-keyboard.d.ts +3 -3
  183. package/dist/{composables → components/table}/use-grid-keyboard.js +57 -55
  184. package/dist/{composables → components/table}/use-grid-selection-announcement.d.ts +2 -2
  185. package/dist/{composables → components/table}/use-grid-selection-announcement.js +2 -2
  186. package/dist/{composables → components/table}/use-table-collection.d.ts +2 -2
  187. package/dist/{composables → components/table}/use-table-collection.js +4 -4
  188. package/dist/{composables → components/table}/use-table-column-layout.d.ts +13 -20
  189. package/dist/components/table/use-table-column-layout.js +115 -0
  190. package/dist/components/textarea/index.d.ts +2 -0
  191. package/dist/components/textarea/textarea-root.js +3 -0
  192. package/dist/components/textarea/textarea.types.d.ts +5 -0
  193. package/dist/components/textfield/index.d.ts +2 -0
  194. package/dist/components/textfield/textfield-root.js +5 -1
  195. package/dist/components/textfield/textfield.context.d.ts +2 -0
  196. package/dist/components/textfield/textfield.types.d.ts +5 -0
  197. package/dist/components/time-field/index.d.ts +1 -0
  198. package/dist/components/toast/index.d.ts +1 -0
  199. package/dist/components/toast/toast-default-content.js +1 -1
  200. package/dist/components/toolbar/index.d.ts +3 -2
  201. package/dist/components/tooltip/index.js +1 -1
  202. package/dist/components/tooltip/tooltip-root.js +1 -1
  203. package/dist/components/virtualizer/index.d.ts +3 -1
  204. package/dist/components/virtualizer/index.js +2 -1
  205. package/dist/components/virtualizer/use-virtualizer-item.d.ts +23 -0
  206. package/dist/components/virtualizer/use-virtualizer-item.js +45 -0
  207. package/dist/components/virtualizer/virtualizer-item.js +7 -41
  208. package/dist/components/virtualizer/virtualizer-scrollbar-track.d.ts +20 -0
  209. package/dist/components/virtualizer/virtualizer-scrollbar-track.js +141 -0
  210. package/dist/components/virtualizer/virtualizer-scrollbar.d.ts +18 -0
  211. package/dist/components/virtualizer/virtualizer-scrollbar.js +55 -0
  212. package/dist/components/virtualizer/virtualizer.context.d.ts +17 -1
  213. package/dist/composables/drag-manager.js +1 -13
  214. package/dist/composables/index.d.ts +3 -70
  215. package/dist/composables/use-collection.d.ts +22 -3
  216. package/dist/composables/use-collection.js +67 -14
  217. package/dist/composables/use-color-area.js +2 -2
  218. package/dist/composables/use-color-field.js +1 -1
  219. package/dist/composables/use-combo-box.js +1 -1
  220. package/dist/composables/use-date-field.js +1 -1
  221. package/dist/composables/use-drag.d.ts +6 -5
  222. package/dist/composables/use-draggable-item.d.ts +2 -2
  223. package/dist/composables/use-droppable-collection.js +3 -3
  224. package/dist/composables/use-droppable-item.js +1 -1
  225. package/dist/composables/use-form-reset.d.ts +6 -2
  226. package/dist/composables/use-form-reset.js +9 -5
  227. package/dist/composables/use-list-keyboard.js +64 -62
  228. package/dist/composables/use-number-field.js +1 -1
  229. package/dist/composables/use-select.js +2 -2
  230. package/dist/composables/use-selection-manager.js +4 -4
  231. package/dist/composables/use-single-select-list-state.d.ts +37 -0
  232. package/dist/composables/use-single-select-list-state.js +110 -0
  233. package/dist/composables/use-slider-thumb.js +2 -2
  234. package/dist/composables/use-slider.js +1 -1
  235. package/dist/composables/use-tab-list-state.d.ts +10 -29
  236. package/dist/composables/use-tab-list-state.js +10 -99
  237. package/dist/composables/use-text-field.js +1 -1
  238. package/dist/composables/use-virtualizer-scroll.d.ts +52 -2
  239. package/dist/composables/use-virtualizer-scroll.js +79 -13
  240. package/dist/composables/use-virtualizer.d.ts +24 -4
  241. package/dist/composables/use-virtualizer.js +40 -6
  242. package/dist/index.js +60 -83
  243. package/dist/utils/document-order.d.ts +14 -0
  244. package/dist/utils/document-order.js +17 -0
  245. package/dist/utils/flex-sizing.d.ts +41 -0
  246. package/dist/utils/flex-sizing.js +140 -0
  247. package/dist/utils/index.d.ts +2 -0
  248. package/dist/utils/open-link.d.ts +31 -0
  249. package/dist/utils/open-link.js +32 -0
  250. package/dist/utils/story-truncation.d.ts +20 -0
  251. package/dist/utils/story-users.d.ts +11 -0
  252. package/dist/utils/virtualizer-collection.d.ts +14 -4
  253. package/dist/utils/virtualizer-collection.js +9 -14
  254. package/dist/utils/virtualizer-layout-info.js +3 -2
  255. package/dist/utils/virtualizer-list-layout.d.ts +75 -29
  256. package/dist/utils/virtualizer-list-layout.js +182 -99
  257. package/dist/utils/virtualizer-offsets.d.ts +111 -0
  258. package/dist/utils/virtualizer-offsets.js +159 -0
  259. package/dist/utils/virtualizer-overscan.d.ts +9 -15
  260. package/dist/utils/virtualizer-overscan.js +14 -33
  261. package/dist/utils/virtualizer-table-layout.d.ts +50 -21
  262. package/dist/utils/virtualizer-table-layout.js +130 -89
  263. package/dist/version.js +1 -1
  264. package/package.json +25 -5
  265. package/dist/composables/use-table-column-layout.js +0 -214
  266. /package/dist/{composables → components/dropdown}/use-safely-mouse-to-submenu.d.ts +0 -0
@@ -3,10 +3,10 @@ import { dataAttr } from "../../utils/assertion.js";
3
3
  import { useId as useId$1 } from "../../composables/use-id.js";
4
4
  import { useInteractionStates } from "../../composables/use-interaction-states.js";
5
5
  import { getCollectionTextValue } from "../../utils/text-value.js";
6
+ import { useVirtualizerItem } from "../virtualizer/use-virtualizer-item.js";
6
7
  import { useTableContext, useTableGridContext, useTableRowContext, useTableVirtualizerContext } from "./table.context.js";
7
- import table_virtualizer_item_default from "./table-virtualizer-item.js";
8
- import { tableCellId } from "../../composables/use-table-collection.js";
9
- import { computed, createComponent, createDynamicComponent, createSlot, defineVaporComponent, extend, setStaticTemplateRef, shallowRef, unref, watch } from "vue";
8
+ import { tableCellId } from "./use-table-collection.js";
9
+ import { computed, createDynamicComponent, createSlot, defineVaporComponent, extend, setStaticTemplateRef, shallowRef, unref, watch } from "vue";
10
10
  //#region src/components/table/table-cell.vue?vue&type=script&setup=true&vapor=true&lang.ts
11
11
  var table_cell_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
12
12
  __name: "table-cell",
@@ -18,7 +18,7 @@ var table_cell_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PUR
18
18
  const props = __props;
19
19
  const { slots } = useTableContext();
20
20
  const { collection, collectionId, keyboard, selection, tableId, treeColumn } = useTableGridContext();
21
- const { cells, hasChildRows, isExpanded, level, rowKey } = useTableRowContext();
21
+ const { cells, claimCellIndex, hasChildRows, isExpanded, level, rowKey } = useTableRowContext();
22
22
  const cellKey = useId$1();
23
23
  const element = shallowRef(null);
24
24
  watch(element, (current, _previous, onCleanup) => {
@@ -31,7 +31,11 @@ var table_cell_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PUR
31
31
  flush: "post",
32
32
  immediate: true
33
33
  });
34
- const index = computed(() => cells.indexOf(cellKey.value));
34
+ const claimedIndex = claimCellIndex();
35
+ const index = computed(() => {
36
+ const registered = cells.indexOf(cellKey.value);
37
+ return registered < 0 ? claimedIndex : registered;
38
+ });
35
39
  const columnKey = computed(() => index.value < 0 ? null : collection.columns.keyAt(index.value));
36
40
  const isRowHeader = computed(() => columnKey.value != null && collection.rowHeaderColumnKeys.value.has(columnKey.value));
37
41
  const cellId = computed(() => isRowHeader.value && columnKey.value != null ? tableCellId(tableId.value, rowKey.value, columnKey.value) : void 0);
@@ -48,12 +52,10 @@ var table_cell_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PUR
48
52
  });
49
53
  };
50
54
  /**
51
- * Virtualized, the cell sits inside a wrapper carrying the column's width and offset.
55
+ * Virtualized, the cell carries the column's width and offset itself, as the row does its own.
52
56
  *
53
57
  * The geometry is found by the cell the row and the column meet at, which means the row has to
54
- * carry the `id` its item was keyed by — that key is half of the pair. Until the cell registry has
55
- * settled the column is unknown and there is no wrapper yet, the same tick `data-column-index` is
56
- * missing for.
58
+ * carry the `id` its item was keyed by — that key is half of the pair.
57
59
  */
58
60
  const virtualizer = useTableVirtualizerContext();
59
61
  const layoutInfo = computed(() => {
@@ -61,44 +63,45 @@ var table_cell_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PUR
61
63
  return virtualizer.getLayoutInfo(virtualizer.collection.value.cellKey(rowKey.value, columnKey.value));
62
64
  });
63
65
  const parentLayoutInfo = computed(() => virtualizer ? virtualizer.getLayoutInfo(rowKey.value) : null);
64
- return createComponent(table_virtualizer_item_default, {
65
- "layout-info": () => layoutInfo.value,
66
- "parent-layout-info": () => parentLayoutInfo.value
66
+ const placement = virtualizer ? useVirtualizerItem({
67
+ element,
68
+ layoutInfo: () => layoutInfo.value,
69
+ parentLayoutInfo: () => parentLayoutInfo.value
70
+ }) : null;
71
+ const n1 = createDynamicComponent(() => unref(virtualizer) ? "div" : "td", {
72
+ id: () => cellId.value,
73
+ "aria-colindex": () => unref(virtualizer) && index.value >= 0 ? index.value + 1 : void 0,
74
+ class: () => unref(composeSlotClassName)(unref(slots).cell, props.class),
75
+ "data-collection": () => unref(collectionId),
76
+ "data-column-index": () => index.value < 0 ? void 0 : index.value,
77
+ "data-disabled": () => unref(dataAttr)(isDisabled.value),
78
+ "data-expanded": () => unref(dataAttr)(unref(isExpanded)),
79
+ "data-focus-visible": () => unref(dataAttr)(unref(states).isFocusVisible.value),
80
+ "data-focused": () => unref(dataAttr)(unref(states).isFocused.value),
81
+ "data-has-child-items": () => unref(dataAttr)(unref(hasChildRows)),
82
+ "data-key": () => columnKey.value == null ? void 0 : `${unref(rowKey)}:${columnKey.value}`,
83
+ "data-level": () => unref(level),
84
+ "data-pressed": () => unref(dataAttr)(unref(states).isPressed.value),
85
+ "data-selected": () => unref(dataAttr)(isSelected.value),
86
+ "data-slot": "table-cell",
87
+ "data-tree-column": () => unref(dataAttr)(isTreeColumn.value),
88
+ role: () => isRowHeader.value ? "rowheader" : "gridcell",
89
+ style: () => unref(placement)?.style.value,
90
+ tabindex: () => unref(keyboard).cellTabIndex(unref(rowKey), columnKey.value),
91
+ onBlur: () => unref(states).onBlur,
92
+ onFocus: () => onFocus,
93
+ onPointerdown: () => unref(states).onPointerdown
67
94
  }, extend(() => {
68
- const n1 = createDynamicComponent(() => unref(virtualizer) ? "div" : "td", {
69
- id: () => cellId.value,
70
- "aria-colindex": () => unref(virtualizer) && index.value >= 0 ? index.value + 1 : void 0,
71
- class: () => unref(composeSlotClassName)(unref(slots).cell, props.class),
72
- "data-collection": () => unref(collectionId),
73
- "data-column-index": () => index.value < 0 ? void 0 : index.value,
74
- "data-disabled": () => unref(dataAttr)(isDisabled.value),
75
- "data-expanded": () => unref(dataAttr)(unref(isExpanded)),
76
- "data-focus-visible": () => unref(dataAttr)(unref(states).isFocusVisible.value),
77
- "data-focused": () => unref(dataAttr)(unref(states).isFocused.value),
78
- "data-has-child-items": () => unref(dataAttr)(unref(hasChildRows)),
79
- "data-key": () => columnKey.value == null ? void 0 : `${unref(rowKey)}:${columnKey.value}`,
80
- "data-level": () => unref(level),
81
- "data-pressed": () => unref(dataAttr)(unref(states).isPressed.value),
82
- "data-selected": () => unref(dataAttr)(isSelected.value),
83
- "data-slot": "table-cell",
84
- "data-tree-column": () => unref(dataAttr)(isTreeColumn.value),
85
- role: () => isRowHeader.value ? "rowheader" : "gridcell",
86
- tabindex: () => unref(keyboard).cellTabIndex(unref(rowKey), columnKey.value),
87
- onBlur: () => unref(states).onBlur,
88
- onFocus: () => onFocus,
89
- onPointerdown: () => unref(states).onPointerdown
90
- }, extend(() => {
91
- return createSlot("default", {
92
- hasChildRows: () => unref(hasChildRows),
93
- isDisabled: () => isDisabled.value,
94
- isExpanded: () => unref(isExpanded),
95
- isSelected: () => isSelected.value,
96
- isTreeColumn: () => isTreeColumn.value
97
- }, null, 36);
98
- }, { _: 8 }), 4);
99
- setStaticTemplateRef(n1, element, null, "element");
100
- return n1;
101
- }, { _: 8 }), true);
95
+ return createSlot("default", {
96
+ hasChildRows: () => unref(hasChildRows),
97
+ isDisabled: () => isDisabled.value,
98
+ isExpanded: () => unref(isExpanded),
99
+ isSelected: () => isSelected.value,
100
+ isTreeColumn: () => isTreeColumn.value
101
+ }, null, 36);
102
+ }, { _: 8 }), 1);
103
+ setStaticTemplateRef(n1, element, null, "element");
104
+ return n1;
102
105
  }
103
106
  });
104
107
  //#endregion
@@ -2,9 +2,9 @@ import { composeSlotClassName } from "../../utils/compose.js";
2
2
  import { dataAttr } from "../../utils/assertion.js";
3
3
  import { useId as useId$1 } from "../../composables/use-id.js";
4
4
  import { useInteractionStates } from "../../composables/use-interaction-states.js";
5
+ import { useMove } from "../../composables/use-move.js";
5
6
  import { useDescription } from "../../composables/use-description.js";
6
7
  import { visuallyHiddenStyle } from "../../utils/visually-hidden.js";
7
- import { useMove } from "../../composables/use-move.js";
8
8
  import { useTableColumnContext, useTableColumnLayoutContext, useTableContext } from "./table.context.js";
9
9
  import { child, computed, defineVaporComponent, on, renderEffect, setAttr, setClass, setProp, setStaticTemplateRef, setStyle, setValue, shallowRef, template, unref, watch } from "vue";
10
10
  //#region src/components/table/table-column-resizer.vue?vue&type=script&setup=true&vapor=true&lang.ts
@@ -6,7 +6,7 @@ import { getCollectionTextValue } from "../../utils/text-value.js";
6
6
  import { useDescription } from "../../composables/use-description.js";
7
7
  import { provideTableColumnContext, useTableColumnLayoutContext, useTableContext, useTableGridContext, useTableVirtualizerContext } from "./table.context.js";
8
8
  import table_virtualizer_item_default from "./table-virtualizer-item.js";
9
- import { tableColumnHeaderId } from "../../composables/use-table-collection.js";
9
+ import { tableColumnHeaderId } from "./use-table-collection.js";
10
10
  import { computed, createComponent, createDynamicComponent, createSlot, defineVaporComponent, extend, setStaticTemplateRef, shallowRef, unref, watch } from "vue";
11
11
  //#region src/components/table/table-column.vue?vue&type=script&setup=true&vapor=true&lang.ts
12
12
  var table_column_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
@@ -5,6 +5,7 @@ import { useControllableState } from "../../composables/use-controllable-state.j
5
5
  import { useSelectionManager } from "../../composables/use-selection-manager.js";
6
6
  import { provideVirtualizerStateContext, useVirtualizerConfigContext } from "../virtualizer/virtualizer.context.js";
7
7
  import { Size } from "../../utils/virtualizer-geometry.js";
8
+ import virtualizer_scrollbar_default from "../virtualizer/virtualizer-scrollbar.js";
8
9
  import { useDndPersistedKeys } from "../../composables/use-dnd-persisted-keys.js";
9
10
  import { useTypeahead } from "../../composables/use-typeahead.js";
10
11
  import { useVirtualizer } from "../../composables/use-virtualizer.js";
@@ -13,13 +14,13 @@ import { useLocale } from "../../composables/use-locale.js";
13
14
  import { useDescription } from "../../composables/use-description.js";
14
15
  import { announce } from "../../utils/live-announcer.js";
15
16
  import { provideTableColumnLayoutContext, provideTableGridContext, provideTableVirtualizerContext, useTableContext, useTableResizableContainerContext } from "./table.context.js";
16
- import { useTableCollection } from "../../composables/use-table-collection.js";
17
- import { toTableDragCollection } from "../../composables/table-drag-collection.js";
18
- import { useGridKeyboard } from "../../composables/use-grid-keyboard.js";
19
- import { useGridSelectionAnnouncement } from "../../composables/use-grid-selection-announcement.js";
20
- import { buildColumnWidths, useTableColumnLayout } from "../../composables/use-table-column-layout.js";
17
+ import { useTableCollection } from "./use-table-collection.js";
21
18
  import { TreeDropTargetDelegate } from "../../utils/dnd-tree-drop-target-delegate.js";
22
- import { computed, createDynamicComponent, createIf, createSlot, defineVaporComponent, extend, renderEffect, setInsertionState, setStaticTemplateRef, setStyle, shallowRef, template, unref, watch } from "vue";
19
+ import { toTableDragCollection } from "./table-drag-collection.js";
20
+ import { useGridKeyboard } from "./use-grid-keyboard.js";
21
+ import { useGridSelectionAnnouncement } from "./use-grid-selection-announcement.js";
22
+ import { buildColumnWidths, useTableColumnLayout } from "./use-table-column-layout.js";
23
+ import { computed, createComponent, createDynamicComponent, createIf, createSlot, defineVaporComponent, extend, renderEffect, setInsertionState, setStaticTemplateRef, setStyle, shallowRef, template, unref, watch } from "vue";
23
24
  //#region src/components/table/table-content.vue?vue&type=script&setup=true&vapor=true&lang.ts
24
25
  var t0 = template("<div role=presentation>");
25
26
  var table_content_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
@@ -207,7 +208,9 @@ var table_content_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
207
208
  containerSize.value = size;
208
209
  virtualizer.setSize(size);
209
210
  },
210
- onVisibleRectChange: virtualizer.setVisibleRect
211
+ onVisibleRectChange: virtualizer.setVisibleRect,
212
+ scrollAdjustment: () => virtualizer.scrollAdjustment.value,
213
+ takeScrollAdjustment: virtualizer.takeScrollAdjustment
211
214
  });
212
215
  /**
213
216
  * The rows inside the window. The body renders these rather than every row it was given.
@@ -373,6 +376,13 @@ var table_content_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
373
376
  getIndex: (key) => collection.rows.getIndex(key),
374
377
  getLayoutInfo: virtualizer.getLayoutInfo,
375
378
  itemCount: computed(() => collection.rows.size.value),
379
+ scroll: {
380
+ box: scroll.scrollBox,
381
+ offset: scroll.scrollOffset,
382
+ scrollSize: scroll.scrollSize,
383
+ scrollTo: scroll.scrollTo,
384
+ size: virtualizer.size
385
+ },
376
386
  shouldObserveItemSize: virtualizerConfig.shouldObserveItemSize,
377
387
  updateItemSize: virtualizer.updateItemSize
378
388
  });
@@ -411,16 +421,23 @@ var table_content_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
411
421
  * A CSS table lays its own columns out, and the two declarations below are how a resizable one is
412
422
  * held to the widths it was given. Virtualized there is no CSS table to hold: the elements are
413
423
  * divs, every cell is placed absolutely, and `min-content` on a div would collapse it.
424
+ *
425
+ * A windowed table hides the native scrollbar and draws its own in the content wrapper below: a
426
+ * native thumb is moved by the compositor, a frame ahead of the rows, and across a long collection
427
+ * that frame shows an empty body. Wheel, trackpad and keyboard scrolling stay native.
414
428
  */
415
- const tableStyle = computed(() => layout && !isVirtualized ? {
416
- tableLayout: "fixed",
417
- width: "min-content"
418
- } : void 0);
429
+ const tableStyle = computed(() => {
430
+ if (isVirtualized) return { scrollbarWidth: "none" };
431
+ return layout ? {
432
+ tableLayout: "fixed",
433
+ width: "min-content"
434
+ } : void 0;
435
+ });
419
436
  const _on_dragenter = ($event) => unref(droppable)?.handlers.onDragenter($event);
420
437
  const _on_dragleave = ($event) => unref(droppable)?.handlers.onDragleave($event);
421
438
  const _on_dragover = ($event) => unref(droppable)?.handlers.onDragover($event);
422
439
  const _on_drop = ($event) => unref(droppable)?.handlers.onDrop($event);
423
- const n7 = createDynamicComponent(() => isVirtualized ? "div" : "table", {
440
+ const n8 = createDynamicComponent(() => isVirtualized ? "div" : "table", {
424
441
  id: () => unref(tableId),
425
442
  "aria-colcount": () => isVirtualized ? unref(collection).columns.size.value : void 0,
426
443
  "aria-describedby": () => unref(describedBy),
@@ -444,17 +461,19 @@ var table_content_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__
444
461
  onKeydownCapture: () => unref(typeahead).onKeydownCapture
445
462
  }, extend(() => {
446
463
  return createIf(() => isVirtualized, () => {
447
- const n3 = t0();
448
- renderEffect(() => setStyle(n3, unref(scroll)?.contentStyle.value));
449
- setInsertionState(n3);
464
+ const n4 = t0();
465
+ renderEffect(() => setStyle(n4, unref(scroll)?.contentStyle.value));
466
+ setInsertionState(n4);
467
+ createComponent(virtualizer_scrollbar_default);
468
+ setInsertionState(n4, 1);
450
469
  createSlot();
451
- return n3;
470
+ return n4;
452
471
  }, () => {
453
472
  return createSlot("default", null, null, 36);
454
473
  }, 389);
455
474
  }, { _: 8 }), 1);
456
- setStaticTemplateRef(n7, element, null, "element");
457
- return n7;
475
+ setStaticTemplateRef(n8, element, null, "element");
476
+ return n8;
458
477
  }
459
478
  });
460
479
  //#endregion
@@ -1,4 +1,4 @@
1
- import type { DragCollection } from "../utils/dnd-types.js";
1
+ import type { DragCollection } from "../../utils/dnd-types.js";
2
2
  import type { UseTableCollectionReturn } from "./use-table-collection.js";
3
3
  /**
4
4
  * A `DragCollection` over a table's rows.
@@ -1,4 +1,4 @@
1
- //#region src/composables/table-drag-collection.ts
1
+ //#region src/components/table/table-drag-collection.ts
2
2
  /**
3
3
  * A `DragCollection` over a table's rows.
4
4
  *
@@ -33,7 +33,9 @@ var table_drop_indicator_vue_vue_type_script_setup_true_vapor_true_lang_default
33
33
  const virtualizer = useTableVirtualizerContext();
34
34
  const virtualizerState = useVirtualizerStateContext();
35
35
  const element = shallowRef(null);
36
- const indicator = dropState && dragAndDropHooks?.useDropIndicator ? dragAndDropHooks.useDropIndicator({ target: props.target }, dropState, element) : null;
36
+ const indicator = dropState && dragAndDropHooks?.useDropIndicator ? dragAndDropHooks.useDropIndicator({ get target() {
37
+ return props.target;
38
+ } }, dropState, element) : null;
37
39
  const isHidden = computed(() => indicator?.isHidden.value ?? true);
38
40
  const isDropTarget = computed(() => indicator?.isDropTarget.value ?? false);
39
41
  /** Depth of the gap, so an indented indicator lines up with the rows it sits between. */
@@ -1,11 +1,10 @@
1
1
  import type { CollectionKey } from "../../composables/use-collection.js";
2
- import type { TableColumnSize } from "../../composables/use-table-column-layout.js";
3
2
  import type { TableResizableContainerProps } from "./table.types.js";
4
3
  declare const __VLS_export: (__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>['props'], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, 'attrs' | 'emit' | 'slots'>>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
5
4
  props: import('vue').PublicProps & __VLS_PrettifyLocal<TableResizableContainerProps & {
6
- onResize?: ((widths: Map<CollectionKey, TableColumnSize>) => any) | undefined;
7
- onResizeEnd?: ((widths: Map<CollectionKey, TableColumnSize>) => any) | undefined;
8
- onResizeStart?: ((widths: Map<CollectionKey, TableColumnSize>) => any) | undefined;
5
+ onResize?: ((widths: Map<CollectionKey, import("../../utils/flex-sizing.js").FlexSize>) => any) | undefined;
6
+ onResizeEnd?: ((widths: Map<CollectionKey, import("../../utils/flex-sizing.js").FlexSize>) => any) | undefined;
7
+ onResizeStart?: ((widths: Map<CollectionKey, import("../../utils/flex-sizing.js").FlexSize>) => any) | undefined;
9
8
  }> & (typeof globalThis extends {
10
9
  __VLS_PROPS_FALLBACK: infer P;
11
10
  } ? P : {});
@@ -14,7 +13,7 @@ declare const __VLS_export: (__VLS_props: NonNullable<Awaited<typeof __VLS_setup
14
13
  slots: {
15
14
  default?: () => unknown;
16
15
  };
17
- emit: ((evt: "resize", widths: Map<CollectionKey, TableColumnSize>) => void) & ((evt: "resizeEnd", widths: Map<CollectionKey, TableColumnSize>) => void) & ((evt: "resizeStart", widths: Map<CollectionKey, TableColumnSize>) => void);
16
+ emit: ((evt: "resize", widths: Map<CollectionKey, import("../../utils/flex-sizing.js").FlexSize>) => void) & ((evt: "resizeEnd", widths: Map<CollectionKey, import("../../utils/flex-sizing.js").FlexSize>) => void) & ((evt: "resizeStart", widths: Map<CollectionKey, import("../../utils/flex-sizing.js").FlexSize>) => void);
18
17
  }>) => import('vue').VNode & {
19
18
  __ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
20
19
  };
@@ -2,9 +2,10 @@ import { composeSlotClassName } from "../../utils/compose.js";
2
2
  import { dataAttr } from "../../utils/assertion.js";
3
3
  import { useId as useId$1 } from "../../composables/use-id.js";
4
4
  import { useInteractionStates } from "../../composables/use-interaction-states.js";
5
+ import { useVirtualizerItem } from "../virtualizer/use-virtualizer-item.js";
5
6
  import { visuallyHiddenStyle } from "../../utils/visually-hidden.js";
6
7
  import { provideTableRowContext, useTableContext, useTableGridContext, useTableVirtualizerContext } from "./table.context.js";
7
- import { createTableRegistry, isTableCellControl, tableCellId } from "../../composables/use-table-collection.js";
8
+ import { createTableRegistry, isTableCellControl, tableCellId } from "./use-table-collection.js";
8
9
  import { computed, createDynamicComponent, createIf, createSlot, defineVaporComponent, extend, on, renderEffect, setDynamicProps, setStaticTemplateRef, shallowRef, template, unref, watch } from "vue";
9
10
  //#region src/components/table/table-row.vue?vue&type=script&setup=true&vapor=true&lang.ts
10
11
  var t0 = template("<div>");
@@ -43,14 +44,14 @@ var table_row_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
43
44
  return columnKey != null && rowHeaders.has(columnKey);
44
45
  }).map((key) => cells.getItem(key)?.textValue() ?? "").filter(Boolean).join(" ");
45
46
  };
46
- watch(element, (current, _previous, onCleanup) => {
47
+ watch([element, rowKey], ([current, key], _previous, onCleanup) => {
47
48
  if (!current) return;
48
- onCleanup(collection.rows.register(rowKey.value, {
49
+ onCleanup(collection.rows.register(key, {
49
50
  element: () => element.value,
50
51
  isDisabled: () => false,
51
52
  textValue
52
53
  }));
53
- onCleanup(collection.tree.register(rowKey.value, {
54
+ onCleanup(collection.tree.register(key, {
54
55
  element: () => element.value,
55
56
  hasChildRows: () => hasChildRows.value,
56
57
  level: () => props.level ?? 0,
@@ -76,7 +77,9 @@ var table_row_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
76
77
  */
77
78
  const draggable = dragState && dragAndDropHooks?.useDraggableItem ? dragAndDropHooks.useDraggableItem({
78
79
  hasDragButton: true,
79
- key: rowKey.value
80
+ get key() {
81
+ return rowKey.value;
82
+ }
80
83
  }, dragState) : null;
81
84
  /**
82
85
  * Dropping **on** the row, as an element a screen reader can reach.
@@ -86,20 +89,29 @@ var table_row_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
86
89
  * The gaps between rows are `Table.DropIndicator`, placed by the caller.
87
90
  */
88
91
  const dropIndicatorElement = shallowRef(null);
89
- const dropIndicator = dropState && dragAndDropHooks?.useDropIndicator ? dragAndDropHooks.useDropIndicator({ target: {
92
+ const dropTarget = computed(() => ({
90
93
  dropPosition: "on",
91
94
  key: rowKey.value,
92
95
  type: "item"
96
+ }));
97
+ const dropIndicator = dropState && dragAndDropHooks?.useDropIndicator ? dragAndDropHooks.useDropIndicator({ get target() {
98
+ return dropTarget.value;
93
99
  } }, dropState, dropIndicatorElement) : null;
94
100
  const isDragging = computed(() => dragState?.isDragging(rowKey.value) ?? false);
95
101
  const isDropTarget = computed(() => dropIndicator?.isDropTarget.value ?? false);
96
102
  const allowsDragging = computed(() => draggable != null);
97
- /** Attributes from the drag half. Never listeners — Vapor re-attaches every `on*` key spread
98
- * through `v-bind` on each render, so those are wired statically with `@event` instead. */
103
+ /**
104
+ * Attributes from the drag half, bound by name below. Never listeners Vapor re-attaches every
105
+ * `on*` key spread through `v-bind` on each render, so those are wired statically with `@event`.
106
+ * Not spread either: an object spread onto the element turns every attribute on it into a merged
107
+ * lookup, paid on every mount, and a windowed row mounts on every scroll.
108
+ */
99
109
  const dragAttrs = computed(() => draggable?.attrs.value ?? {});
110
+ let claimedCells = 0;
100
111
  provideTableRowContext({
101
112
  ariaLabelledBy,
102
113
  cells,
114
+ claimCellIndex: () => claimedCells++,
103
115
  drag: draggable,
104
116
  hasChildRows,
105
117
  isDisabled,
@@ -124,6 +136,20 @@ var table_row_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
124
136
  * body's first row is two. A tree grid reports depth instead, exactly as React Aria does.
125
137
  */
126
138
  const virtualizer = useTableVirtualizerContext();
139
+ /**
140
+ * Where the row sits, when the table is windowed.
141
+ *
142
+ * The row is its own wrapper: it carries the geometry the layout gave it rather than sitting inside
143
+ * an element that does. Every row of the window mounts on a scroll that moves it, and a wrapper
144
+ * would be a second component and a second element for each of them.
145
+ */
146
+ const layoutInfo = computed(() => virtualizer ? virtualizer.getLayoutInfo(rowKey.value) : null);
147
+ const parentLayoutInfo = computed(() => virtualizer ? virtualizer.getLayoutInfo(virtualizer.collection.value.bodyKey) : null);
148
+ const placement = virtualizer ? useVirtualizerItem({
149
+ element,
150
+ layoutInfo: () => layoutInfo.value,
151
+ parentLayoutInfo: () => parentLayoutInfo.value
152
+ }) : null;
127
153
  const ariaRowIndex = computed(() => {
128
154
  if (!virtualizer || isTree.value) return void 0;
129
155
  const index = collection.rows.getIndex(rowKey.value);
@@ -158,7 +184,11 @@ var table_row_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
158
184
  }, 4);
159
185
  }, { _: 8 }));
160
186
  });
161
- const n6 = createDynamicComponent(() => unref(virtualizer) ? "div" : "tr", { $: [() => dragAttrs.value, {
187
+ const _on_drag = ($event) => unref(draggable)?.handlers.onDrag($event);
188
+ const _on_dragend = ($event) => unref(draggable)?.handlers.onDragend($event);
189
+ const _on_dragstart = ($event) => unref(draggable)?.handlers.onDragstart($event);
190
+ const n6 = createDynamicComponent(() => unref(virtualizer) ? "div" : "tr", {
191
+ "aria-describedby": () => dragAttrs.value["aria-describedby"],
162
192
  "aria-disabled": () => isDisabled.value || void 0,
163
193
  "aria-expanded": () => isTree.value && hasChildRows.value ? isExpanded.value : void 0,
164
194
  "aria-labelledby": () => ariaLabelledBy.value || void 0,
@@ -183,19 +213,20 @@ var table_row_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE
183
213
  "data-selected": () => unref(dataAttr)(isSelected.value),
184
214
  "data-selection-mode": () => selectionMode.value === "none" ? void 0 : selectionMode.value,
185
215
  "data-slot": "table-row",
216
+ draggable: () => dragAttrs.value.draggable,
186
217
  role: "row",
187
- style: () => ({ "--table-row-level": level.value }),
218
+ style: () => [unref(placement)?.style.value, { "--table-row-level": level.value }],
188
219
  tabindex: () => unref(keyboard).rowTabIndex(rowKey.value),
189
220
  onBlur: () => unref(states).onBlur,
190
221
  onClick: () => onClick,
191
- onDrag: () => ($event) => unref(draggable)?.handlers.onDrag($event),
192
- onDragend: () => ($event) => unref(draggable)?.handlers.onDragend($event),
193
- onDragstart: () => ($event) => unref(draggable)?.handlers.onDragstart($event),
222
+ onDrag: () => _on_drag,
223
+ onDragend: () => _on_dragend,
224
+ onDragstart: () => _on_dragstart,
194
225
  onFocus: () => onFocus,
195
226
  onPointerdown: () => unref(states).onPointerdown,
196
227
  onPointerenter: () => unref(states).onPointerenter,
197
228
  onPointerleave: () => unref(states).onPointerleave
198
- }] }, extend(() => {
229
+ }, extend(() => {
199
230
  return createSlot("default", {
200
231
  allowsDragging: () => allowsDragging.value,
201
232
  hasChildRows: () => hasChildRows.value,
@@ -1,11 +1,6 @@
1
- import type { LayoutInfo } from "../../utils/virtualizer-layout-info.js";
1
+ import type { VirtualizerItemProps } from "../virtualizer/virtualizer.types.js";
2
2
  declare const __VLS_export: (__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>['props'], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, 'attrs' | 'emit' | 'slots'>>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>['expose'], __VLS_setup?: Promise<{
3
- props: import('vue').PublicProps & __VLS_PrettifyLocal<{
4
- /** Where this part goes, or `null` while the layout cannot say yet. */
5
- layoutInfo?: LayoutInfo | null;
6
- /** The enclosing part's layout info, which the offset is relative to. */
7
- parentLayoutInfo?: LayoutInfo | null;
8
- }> & (typeof globalThis extends {
3
+ props: import('vue').PublicProps & __VLS_PrettifyLocal<VirtualizerItemProps> & (typeof globalThis extends {
9
4
  __VLS_PROPS_FALLBACK: infer P;
10
5
  } ? P : {});
11
6
  expose: (exposed: {}) => void;
@@ -1,9 +1,10 @@
1
- import virtualizer_item_default from "../virtualizer/virtualizer-item.js";
1
+ import { useVirtualizerItem } from "../virtualizer/use-virtualizer-item.js";
2
2
  import { useTableVirtualizerContext } from "./table.context.js";
3
- import { createComponent, createIf, createSlot, defineVaporComponent, extend, unref } from "vue";
3
+ import { createIf, createSlot, defineVaporComponent, renderEffect, setInsertionState, setStaticTemplateRef, setStyle, shallowRef, template, unref } from "vue";
4
4
  //#region src/components/table/table-virtualizer-item.vue?vue&type=script&setup=true&vapor=true&lang.ts
5
+ var t0 = template("<div role=presentation>", 1);
5
6
  /**
6
- * A `VirtualizerItem` wrapper for a table part, or nothing at all.
7
+ * The wrapper around a part of a virtualized table, or nothing at all.
7
8
  *
8
9
  * A part of a virtualized table sits inside a wrapper carrying the geometry the layout worked out
9
10
  * for it, and a part of a plain table sits inside nothing. That is one element's difference in
@@ -14,6 +15,10 @@ import { createComponent, createIf, createSlot, defineVaporComponent, extend, un
14
15
  * column's geometry only exists once the column has registered itself from the DOM, so a wrapper
15
16
  * conditional on the geometry would destroy the element whose registration created it, unregister
16
17
  * it, and flap between the two branches for ever.
18
+ *
19
+ * The wrapper is rendered here rather than delegated to `VirtualizerItem`: a drop indicator mounts
20
+ * one of these for every row of the window, and a scroll that replaces the window pays for every
21
+ * component instance in it. Rows and cells go further and carry their geometry themselves.
17
22
  */
18
23
  var table_virtualizer_item_vue_vue_type_script_setup_true_vapor_true_lang_default = /*@__PURE__*/ defineVaporComponent({
19
24
  __name: "table-virtualizer-item",
@@ -24,13 +29,19 @@ var table_virtualizer_item_vue_vue_type_script_setup_true_vapor_true_lang_defaul
24
29
  setup(__props) {
25
30
  const props = __props;
26
31
  const isVirtualized = useTableVirtualizerContext() != null;
32
+ const element = shallowRef(null);
33
+ const style = isVirtualized ? useVirtualizerItem({
34
+ element,
35
+ layoutInfo: () => props.layoutInfo,
36
+ parentLayoutInfo: () => props.parentLayoutInfo
37
+ }).style : null;
27
38
  return createIf(() => isVirtualized, () => {
28
- return createComponent(unref(virtualizer_item_default), {
29
- "layout-info": () => props.layoutInfo,
30
- "parent-layout-info": () => props.parentLayoutInfo
31
- }, extend(() => {
32
- return createSlot("default", null, null, 36);
33
- }, { _: 8 }), true);
39
+ const n3 = t0();
40
+ renderEffect(() => setStyle(n3, unref(style)));
41
+ setInsertionState(n3);
42
+ createSlot();
43
+ setStaticTemplateRef(n3, element, null, "element");
44
+ return n3;
34
45
  }, () => {
35
46
  return createSlot();
36
47
  }, 261);
@@ -1,16 +1,16 @@
1
- import type { TableCellMeta, TableCollectionItems, TableRegistry, UseTableCollectionReturn } from "../../composables/index.js";
2
1
  import type { CollectionKey } from "../../composables/use-collection.js";
3
2
  import type { DragAndDropHooks } from "../../composables/use-drag-and-drop.js";
4
3
  import type { UseDraggableCollectionStateReturn } from "../../composables/use-draggable-collection-state.js";
5
4
  import type { UseDraggableItemReturn } from "../../composables/use-draggable-item.js";
6
5
  import type { UseDroppableCollectionStateReturn } from "../../composables/use-droppable-collection-state.js";
7
- import type { UseGridKeyboardReturn } from "../../composables/use-grid-keyboard.js";
8
6
  import type { UseSelectionManagerReturn } from "../../composables/use-selection-manager.js";
9
- import type { TableColumnSize, UseTableColumnLayoutReturn } from "../../composables/use-table-column-layout.js";
10
7
  import type { VirtualizerView } from "../../composables/use-virtualizer.js";
11
8
  import type { VirtualizerTableCollection } from "../../utils/virtualizer-collection.js";
12
9
  import type { LayoutInfo, VirtualizerKey } from "../../utils/virtualizer-layout-info.js";
13
10
  import type { TableSortDescriptor, TableSortDirection } from "./table.types.js";
11
+ import type { UseGridKeyboardReturn } from "./use-grid-keyboard.js";
12
+ import type { TableCellMeta, TableCollectionItems, TableRegistry, UseTableCollectionReturn } from "./use-table-collection.js";
13
+ import type { TableColumnSize, UseTableColumnLayoutReturn } from "./use-table-column-layout.js";
14
14
  import type { tableVariants } from "@ropav/styles";
15
15
  import type { ComputedRef } from "vue";
16
16
  export interface TableContext {
@@ -74,6 +74,14 @@ export interface TableRowContext {
74
74
  ariaLabelledBy: ComputedRef<string>;
75
75
  /** The cells of this row, which is how a cell learns which column it sits under. */
76
76
  cells: TableRegistry<TableCellMeta>;
77
+ /**
78
+ * The position a cell takes among its siblings until the registry has read the DOM.
79
+ *
80
+ * Cells set up in template order, so the count of those before it is where a cell sits — and
81
+ * knowing it during the first render is what lets a windowed cell be placed under its column
82
+ * the moment it mounts, rather than a tick later in a second pass over every cell of the row.
83
+ */
84
+ claimCellIndex: () => number;
77
85
  /**
78
86
  * What `Table.DragHandle` needs to turn a pressable into this row's drag control, or `null`
79
87
  * when the table is not draggable.
@@ -1,8 +1,8 @@
1
1
  import type { CollectionKey } from "../../composables/use-collection.js";
2
2
  import type { DragAndDropHooks } from "../../composables/use-drag-and-drop.js";
3
3
  import type { DisabledBehavior, SelectionBehavior, SelectionMode } from "../../composables/use-selection-manager.js";
4
- import type { TableColumnSize } from "../../composables/use-table-column-layout.js";
5
4
  import type { DropTarget } from "../../utils/dnd-types.js";
5
+ import type { TableColumnSize } from "./use-table-column-layout.js";
6
6
  import type { CheckboxVariants, TableVariants } from "@ropav/styles";
7
7
  export interface TableRootProps {
8
8
  class?: string;
@@ -1,6 +1,6 @@
1
- import type { CollectionKey } from "./use-collection.js";
2
- import type { ListKeyboardLayoutDelegate } from "./use-list-keyboard.js";
3
- import type { UseSelectionManagerReturn } from "./use-selection-manager.js";
1
+ import type { CollectionKey } from "../../composables/use-collection.js";
2
+ import type { ListKeyboardLayoutDelegate } from "../../composables/use-list-keyboard.js";
3
+ import type { UseSelectionManagerReturn } from "../../composables/use-selection-manager.js";
4
4
  import type { UseTableCollectionReturn } from "./use-table-collection.js";
5
5
  import type { ComputedRef, MaybeRefOrGetter } from "vue";
6
6
  /**