@proyecto-viviana/solidaria-components 0.3.2 → 0.4.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 (398) hide show
  1. package/dist/ActionBar.js +184 -0
  2. package/dist/ActionBar.js.map +1 -0
  3. package/dist/ActionBar.jsx +128 -0
  4. package/dist/ActionBar.jsx.map +1 -0
  5. package/dist/ActionGroup.js +179 -0
  6. package/dist/ActionGroup.js.map +1 -0
  7. package/dist/ActionGroup.jsx +129 -0
  8. package/dist/ActionGroup.jsx.map +1 -0
  9. package/dist/Alert.js +111 -0
  10. package/dist/Alert.js.map +1 -0
  11. package/dist/Alert.jsx +82 -0
  12. package/dist/Alert.jsx.map +1 -0
  13. package/dist/Autocomplete.js +130 -0
  14. package/dist/Autocomplete.js.map +1 -0
  15. package/dist/Autocomplete.jsx +116 -0
  16. package/dist/Autocomplete.jsx.map +1 -0
  17. package/dist/Breadcrumbs.d.ts.map +1 -1
  18. package/dist/Breadcrumbs.js +334 -0
  19. package/dist/Breadcrumbs.js.map +1 -0
  20. package/dist/Breadcrumbs.jsx +266 -0
  21. package/dist/Breadcrumbs.jsx.map +1 -0
  22. package/dist/Button.d.ts.map +1 -1
  23. package/dist/Button.js +348 -0
  24. package/dist/Button.js.map +1 -0
  25. package/dist/Button.jsx +314 -0
  26. package/dist/Button.jsx.map +1 -0
  27. package/dist/Calendar.d.ts +4 -4
  28. package/dist/Calendar.d.ts.map +1 -1
  29. package/dist/Calendar.js +538 -0
  30. package/dist/Calendar.js.map +1 -0
  31. package/dist/Calendar.jsx +333 -0
  32. package/dist/Calendar.jsx.map +1 -0
  33. package/dist/CalendarPicker.d.ts +33 -0
  34. package/dist/CalendarPicker.d.ts.map +1 -0
  35. package/dist/CalendarPicker.js +44 -0
  36. package/dist/CalendarPicker.js.map +1 -0
  37. package/dist/CalendarPicker.jsx +44 -0
  38. package/dist/CalendarPicker.jsx.map +1 -0
  39. package/dist/Checkbox.d.ts +83 -4
  40. package/dist/Checkbox.d.ts.map +1 -1
  41. package/dist/Checkbox.js +923 -0
  42. package/dist/Checkbox.js.map +1 -0
  43. package/dist/Checkbox.jsx +707 -0
  44. package/dist/Checkbox.jsx.map +1 -0
  45. package/dist/Collection.d.ts.map +1 -1
  46. package/dist/Collection.js +202 -0
  47. package/dist/Collection.js.map +1 -0
  48. package/dist/Collection.jsx +152 -0
  49. package/dist/Collection.jsx.map +1 -0
  50. package/dist/Color.d.ts.map +1 -1
  51. package/dist/Color.js +1720 -0
  52. package/dist/Color.js.map +1 -0
  53. package/dist/Color.jsx +1344 -0
  54. package/dist/Color.jsx.map +1 -0
  55. package/dist/ColorEditor.js +208 -0
  56. package/dist/ColorEditor.js.map +1 -0
  57. package/dist/ColorEditor.jsx +120 -0
  58. package/dist/ColorEditor.jsx.map +1 -0
  59. package/dist/ComboBox.d.ts +4 -4
  60. package/dist/ComboBox.d.ts.map +1 -1
  61. package/dist/ComboBox.js +992 -0
  62. package/dist/ComboBox.js.map +1 -0
  63. package/dist/ComboBox.jsx +714 -0
  64. package/dist/ComboBox.jsx.map +1 -0
  65. package/dist/ContextualHelpTrigger.js +146 -0
  66. package/dist/ContextualHelpTrigger.js.map +1 -0
  67. package/dist/ContextualHelpTrigger.jsx +109 -0
  68. package/dist/ContextualHelpTrigger.jsx.map +1 -0
  69. package/dist/DateField.d.ts +3 -3
  70. package/dist/DateField.d.ts.map +1 -1
  71. package/dist/DateField.js +4 -0
  72. package/dist/DateField.jsx +4 -0
  73. package/dist/DateField2.js +499 -0
  74. package/dist/DateField2.js.map +1 -0
  75. package/dist/DateField2.jsx +317 -0
  76. package/dist/DateField2.jsx.map +1 -0
  77. package/dist/DatePicker.d.ts +4 -4
  78. package/dist/DatePicker.d.ts.map +1 -1
  79. package/dist/DatePicker.js +991 -0
  80. package/dist/DatePicker.js.map +1 -0
  81. package/dist/DatePicker.jsx +682 -0
  82. package/dist/DatePicker.jsx.map +1 -0
  83. package/dist/Dialog.d.ts.map +1 -1
  84. package/dist/Dialog.js +337 -0
  85. package/dist/Dialog.js.map +1 -0
  86. package/dist/Dialog.jsx +192 -0
  87. package/dist/Dialog.jsx.map +1 -0
  88. package/dist/Disclosure.d.ts.map +1 -1
  89. package/dist/Disclosure.js +328 -0
  90. package/dist/Disclosure.js.map +1 -0
  91. package/dist/Disclosure.jsx +230 -0
  92. package/dist/Disclosure.jsx.map +1 -0
  93. package/dist/DragAndDrop.d.ts.map +1 -1
  94. package/dist/DragAndDrop.js +176 -0
  95. package/dist/DragAndDrop.js.map +1 -0
  96. package/dist/DragAndDrop.jsx +160 -0
  97. package/dist/DragAndDrop.jsx.map +1 -0
  98. package/dist/DropZone.d.ts.map +1 -1
  99. package/dist/DropZone.js +189 -0
  100. package/dist/DropZone.js.map +1 -0
  101. package/dist/DropZone.jsx +144 -0
  102. package/dist/DropZone.jsx.map +1 -0
  103. package/dist/FieldError.js +66 -0
  104. package/dist/FieldError.js.map +1 -0
  105. package/dist/FieldError.jsx +47 -0
  106. package/dist/FieldError.jsx.map +1 -0
  107. package/dist/FileTrigger.js +79 -0
  108. package/dist/FileTrigger.js.map +1 -0
  109. package/dist/FileTrigger.jsx +49 -0
  110. package/dist/FileTrigger.jsx.map +1 -0
  111. package/dist/Focusable.js +70 -0
  112. package/dist/Focusable.js.map +1 -0
  113. package/dist/Focusable.jsx +69 -0
  114. package/dist/Focusable.jsx.map +1 -0
  115. package/dist/Form.js +99 -0
  116. package/dist/Form.js.map +1 -0
  117. package/dist/Form.jsx +73 -0
  118. package/dist/Form.jsx.map +1 -0
  119. package/dist/GridList.d.ts +34 -2
  120. package/dist/GridList.d.ts.map +1 -1
  121. package/dist/GridList.js +723 -0
  122. package/dist/GridList.js.map +1 -0
  123. package/dist/GridList.jsx +552 -0
  124. package/dist/GridList.jsx.map +1 -0
  125. package/dist/HiddenTimeInput.js +104 -0
  126. package/dist/HiddenTimeInput.js.map +1 -0
  127. package/dist/HiddenTimeInput.jsx +69 -0
  128. package/dist/HiddenTimeInput.jsx.map +1 -0
  129. package/dist/Icon.d.ts.map +1 -1
  130. package/dist/Icon.js +127 -0
  131. package/dist/Icon.js.map +1 -0
  132. package/dist/Icon.jsx +72 -0
  133. package/dist/Icon.jsx.map +1 -0
  134. package/dist/Keyboard.js +30 -0
  135. package/dist/Keyboard.js.map +1 -0
  136. package/dist/Keyboard.jsx +24 -0
  137. package/dist/Keyboard.jsx.map +1 -0
  138. package/dist/Landmark.js +134 -0
  139. package/dist/Landmark.js.map +1 -0
  140. package/dist/Landmark.jsx +118 -0
  141. package/dist/Landmark.jsx.map +1 -0
  142. package/dist/Link.d.ts.map +1 -1
  143. package/dist/Link.js +219 -0
  144. package/dist/Link.js.map +1 -0
  145. package/dist/Link.jsx +189 -0
  146. package/dist/Link.jsx.map +1 -0
  147. package/dist/ListBox.d.ts.map +1 -1
  148. package/dist/ListBox.js +670 -0
  149. package/dist/ListBox.js.map +1 -0
  150. package/dist/ListBox.jsx +508 -0
  151. package/dist/ListBox.jsx.map +1 -0
  152. package/dist/Menu.d.ts +27 -9
  153. package/dist/Menu.d.ts.map +1 -1
  154. package/dist/Menu.js +1254 -0
  155. package/dist/Menu.js.map +1 -0
  156. package/dist/Menu.jsx +1042 -0
  157. package/dist/Menu.jsx.map +1 -0
  158. package/dist/Meter.d.ts.map +1 -1
  159. package/dist/Meter.js +123 -0
  160. package/dist/Meter.js.map +1 -0
  161. package/dist/Meter.jsx +107 -0
  162. package/dist/Meter.jsx.map +1 -0
  163. package/dist/Modal.d.ts.map +1 -1
  164. package/dist/Modal.js +380 -0
  165. package/dist/Modal.js.map +1 -0
  166. package/dist/Modal.jsx +314 -0
  167. package/dist/Modal.jsx.map +1 -0
  168. package/dist/NumberField.d.ts +3 -3
  169. package/dist/NumberField.d.ts.map +1 -1
  170. package/dist/NumberField.js +573 -0
  171. package/dist/NumberField.js.map +1 -0
  172. package/dist/NumberField.jsx +443 -0
  173. package/dist/NumberField.jsx.map +1 -0
  174. package/dist/Popover.d.ts +10 -2
  175. package/dist/Popover.d.ts.map +1 -1
  176. package/dist/Popover.js +464 -0
  177. package/dist/Popover.js.map +1 -0
  178. package/dist/Popover.jsx +333 -0
  179. package/dist/Popover.jsx.map +1 -0
  180. package/dist/Pressable.js +69 -0
  181. package/dist/Pressable.js.map +1 -0
  182. package/dist/Pressable.jsx +68 -0
  183. package/dist/Pressable.jsx.map +1 -0
  184. package/dist/ProgressBar.d.ts.map +1 -1
  185. package/dist/ProgressBar.js +130 -0
  186. package/dist/ProgressBar.js.map +1 -0
  187. package/dist/ProgressBar.jsx +114 -0
  188. package/dist/ProgressBar.jsx.map +1 -0
  189. package/dist/RadioGroup.d.ts +82 -4
  190. package/dist/RadioGroup.d.ts.map +1 -1
  191. package/dist/RadioGroup.js +931 -0
  192. package/dist/RadioGroup.js.map +1 -0
  193. package/dist/RadioGroup.jsx +681 -0
  194. package/dist/RadioGroup.jsx.map +1 -0
  195. package/dist/RangeCalendar.d.ts.map +1 -1
  196. package/dist/RangeCalendar.js +410 -0
  197. package/dist/RangeCalendar.js.map +1 -0
  198. package/dist/RangeCalendar.jsx +253 -0
  199. package/dist/RangeCalendar.jsx.map +1 -0
  200. package/dist/RouterProvider.js +118 -0
  201. package/dist/RouterProvider.js.map +1 -0
  202. package/dist/RouterProvider.jsx +112 -0
  203. package/dist/RouterProvider.jsx.map +1 -0
  204. package/dist/SearchField.d.ts +2 -2
  205. package/dist/SearchField.d.ts.map +1 -1
  206. package/dist/SearchField.js +643 -0
  207. package/dist/SearchField.js.map +1 -0
  208. package/dist/SearchField.jsx +526 -0
  209. package/dist/SearchField.jsx.map +1 -0
  210. package/dist/Select.d.ts.map +1 -1
  211. package/dist/Select.js +1031 -0
  212. package/dist/Select.js.map +1 -0
  213. package/dist/Select.jsx +744 -0
  214. package/dist/Select.jsx.map +1 -0
  215. package/dist/SelectionIndicator.d.ts.map +1 -1
  216. package/dist/SelectionIndicator.js +86 -0
  217. package/dist/SelectionIndicator.js.map +1 -0
  218. package/dist/SelectionIndicator.jsx +50 -0
  219. package/dist/SelectionIndicator.jsx.map +1 -0
  220. package/dist/Separator.js +97 -0
  221. package/dist/Separator.js.map +1 -0
  222. package/dist/Separator.jsx +85 -0
  223. package/dist/Separator.jsx.map +1 -0
  224. package/dist/SharedElementTransition.d.ts.map +1 -1
  225. package/dist/SharedElementTransition.js +165 -0
  226. package/dist/SharedElementTransition.js.map +1 -0
  227. package/dist/SharedElementTransition.jsx +138 -0
  228. package/dist/SharedElementTransition.jsx.map +1 -0
  229. package/dist/Slider.d.ts +33 -1
  230. package/dist/Slider.d.ts.map +1 -1
  231. package/dist/Slider.js +515 -0
  232. package/dist/Slider.js.map +1 -0
  233. package/dist/Slider.jsx +403 -0
  234. package/dist/Slider.jsx.map +1 -0
  235. package/dist/StepList.js +198 -0
  236. package/dist/StepList.js.map +1 -0
  237. package/dist/StepList.jsx +141 -0
  238. package/dist/StepList.jsx.map +1 -0
  239. package/dist/Switch.d.ts +65 -2
  240. package/dist/Switch.d.ts.map +1 -1
  241. package/dist/Switch.js +534 -0
  242. package/dist/Switch.js.map +1 -0
  243. package/dist/Switch.jsx +393 -0
  244. package/dist/Switch.jsx.map +1 -0
  245. package/dist/Table.d.ts +48 -0
  246. package/dist/Table.d.ts.map +1 -1
  247. package/dist/Table.js +1759 -0
  248. package/dist/Table.js.map +1 -0
  249. package/dist/Table.jsx +1348 -0
  250. package/dist/Table.jsx.map +1 -0
  251. package/dist/Tabs.d.ts +0 -4
  252. package/dist/Tabs.d.ts.map +1 -1
  253. package/dist/Tabs.js +595 -0
  254. package/dist/Tabs.js.map +1 -0
  255. package/dist/Tabs.jsx +367 -0
  256. package/dist/Tabs.jsx.map +1 -0
  257. package/dist/TagGroup.d.ts.map +1 -1
  258. package/dist/TagGroup.js +378 -0
  259. package/dist/TagGroup.js.map +1 -0
  260. package/dist/TagGroup.jsx +270 -0
  261. package/dist/TagGroup.jsx.map +1 -0
  262. package/dist/Text.d.ts +18 -6
  263. package/dist/Text.d.ts.map +1 -1
  264. package/dist/Text.js +42 -0
  265. package/dist/Text.js.map +1 -0
  266. package/dist/Text.jsx +35 -0
  267. package/dist/Text.jsx.map +1 -0
  268. package/dist/TextField.d.ts +6 -6
  269. package/dist/TextField.d.ts.map +1 -1
  270. package/dist/TextField.js +436 -0
  271. package/dist/TextField.js.map +1 -0
  272. package/dist/TextField.jsx +403 -0
  273. package/dist/TextField.jsx.map +1 -0
  274. package/dist/TimeField.d.ts +3 -3
  275. package/dist/TimeField.d.ts.map +1 -1
  276. package/dist/TimeField.js +372 -0
  277. package/dist/TimeField.js.map +1 -0
  278. package/dist/TimeField.jsx +224 -0
  279. package/dist/TimeField.jsx.map +1 -0
  280. package/dist/Toast.d.ts +14 -0
  281. package/dist/Toast.d.ts.map +1 -1
  282. package/dist/Toast.js +551 -0
  283. package/dist/Toast.js.map +1 -0
  284. package/dist/Toast.jsx +361 -0
  285. package/dist/Toast.jsx.map +1 -0
  286. package/dist/ToggleButton.d.ts.map +1 -1
  287. package/dist/ToggleButton.js +123 -0
  288. package/dist/ToggleButton.js.map +1 -0
  289. package/dist/ToggleButton.jsx +88 -0
  290. package/dist/ToggleButton.jsx.map +1 -0
  291. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  292. package/dist/ToggleButtonGroup.js +114 -0
  293. package/dist/ToggleButtonGroup.js.map +1 -0
  294. package/dist/ToggleButtonGroup.jsx +85 -0
  295. package/dist/ToggleButtonGroup.jsx.map +1 -0
  296. package/dist/Toolbar.js +112 -0
  297. package/dist/Toolbar.js.map +1 -0
  298. package/dist/Toolbar.jsx +92 -0
  299. package/dist/Toolbar.jsx.map +1 -0
  300. package/dist/Tooltip.d.ts.map +1 -1
  301. package/dist/Tooltip.js +539 -0
  302. package/dist/Tooltip.js.map +1 -0
  303. package/dist/Tooltip.jsx +465 -0
  304. package/dist/Tooltip.jsx.map +1 -0
  305. package/dist/Tree.d.ts +14 -2
  306. package/dist/Tree.d.ts.map +1 -1
  307. package/dist/Tree.js +1424 -0
  308. package/dist/Tree.js.map +1 -0
  309. package/dist/Tree.jsx +1172 -0
  310. package/dist/Tree.jsx.map +1 -0
  311. package/dist/Virtualizer.d.ts +16 -2
  312. package/dist/Virtualizer.d.ts.map +1 -1
  313. package/dist/Virtualizer.js +2 -0
  314. package/dist/Virtualizer.jsx +2 -0
  315. package/dist/Virtualizer2.js +751 -0
  316. package/dist/Virtualizer2.js.map +1 -0
  317. package/dist/Virtualizer2.jsx +730 -0
  318. package/dist/Virtualizer2.jsx.map +1 -0
  319. package/dist/VirtualizerLayouts.d.ts +18 -0
  320. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  321. package/dist/VisuallyHidden.js +42 -0
  322. package/dist/VisuallyHidden.js.map +1 -0
  323. package/dist/VisuallyHidden.jsx +35 -0
  324. package/dist/VisuallyHidden.jsx.map +1 -0
  325. package/dist/contexts.js +33 -0
  326. package/dist/contexts.js.map +1 -0
  327. package/dist/contexts.jsx +33 -0
  328. package/dist/contexts.jsx.map +1 -0
  329. package/dist/index.d.ts +7 -6
  330. package/dist/index.d.ts.map +1 -1
  331. package/dist/index.js +70 -23932
  332. package/dist/index.jsx +70 -18337
  333. package/dist/useDragAndDrop.js +2 -0
  334. package/dist/useDragAndDrop.jsx +2 -0
  335. package/dist/useDragAndDrop2.js +395 -0
  336. package/dist/useDragAndDrop2.js.map +1 -0
  337. package/dist/useDragAndDrop2.jsx +395 -0
  338. package/dist/useDragAndDrop2.jsx.map +1 -0
  339. package/dist/utils.d.ts +83 -11
  340. package/dist/utils.d.ts.map +1 -1
  341. package/dist/utils.js +285 -0
  342. package/dist/utils.js.map +1 -0
  343. package/dist/utils.jsx +277 -0
  344. package/dist/utils.jsx.map +1 -0
  345. package/dist/virtualizer/Layout.js +144 -0
  346. package/dist/virtualizer/Layout.js.map +1 -0
  347. package/dist/virtualizer/Layout.jsx +144 -0
  348. package/dist/virtualizer/Layout.jsx.map +1 -0
  349. package/package.json +401 -4
  350. package/src/Breadcrumbs.tsx +3 -1
  351. package/src/Button.tsx +22 -2
  352. package/src/Calendar.tsx +27 -10
  353. package/src/CalendarPicker.tsx +73 -0
  354. package/src/Checkbox.tsx +539 -3
  355. package/src/Collection.tsx +9 -3
  356. package/src/Color.tsx +42 -14
  357. package/src/ComboBox.tsx +50 -6
  358. package/src/DateField.tsx +20 -2
  359. package/src/DatePicker.tsx +57 -5
  360. package/src/Dialog.tsx +13 -5
  361. package/src/Disclosure.tsx +3 -1
  362. package/src/DragAndDrop.tsx +3 -1
  363. package/src/DropZone.tsx +3 -1
  364. package/src/GridList.tsx +125 -24
  365. package/src/Icon.tsx +3 -1
  366. package/src/Link.tsx +3 -1
  367. package/src/ListBox.tsx +31 -4
  368. package/src/Menu.tsx +252 -128
  369. package/src/Meter.tsx +3 -1
  370. package/src/Modal.tsx +100 -52
  371. package/src/NumberField.tsx +51 -8
  372. package/src/Popover.tsx +40 -10
  373. package/src/ProgressBar.tsx +3 -1
  374. package/src/RadioGroup.tsx +468 -4
  375. package/src/RangeCalendar.tsx +3 -1
  376. package/src/SearchField.tsx +27 -3
  377. package/src/Select.tsx +22 -7
  378. package/src/SelectionIndicator.tsx +3 -1
  379. package/src/SharedElementTransition.tsx +3 -1
  380. package/src/Slider.tsx +159 -13
  381. package/src/Switch.tsx +395 -2
  382. package/src/Table.tsx +409 -95
  383. package/src/Tabs.tsx +16 -45
  384. package/src/TagGroup.tsx +3 -1
  385. package/src/Text.tsx +31 -10
  386. package/src/TextField.tsx +43 -5
  387. package/src/TimeField.tsx +20 -2
  388. package/src/Toast.tsx +79 -14
  389. package/src/ToggleButton.tsx +3 -1
  390. package/src/ToggleButtonGroup.tsx +3 -1
  391. package/src/Tooltip.tsx +3 -1
  392. package/src/Tree.tsx +77 -9
  393. package/src/Virtualizer.tsx +180 -31
  394. package/src/VirtualizerLayouts.ts +45 -10
  395. package/src/index.ts +50 -0
  396. package/src/utils.tsx +243 -27
  397. package/dist/index.js.map +0 -1
  398. package/dist/index.jsx.map +0 -1
package/src/GridList.tsx CHANGED
@@ -24,10 +24,12 @@ import {
24
24
  createGridList,
25
25
  createGridListItem,
26
26
  createGridListSelectionCheckbox,
27
+ createGridListSection,
27
28
  createFocusRing,
28
29
  createHover,
29
30
  mergeProps,
30
31
  type AriaGridListProps,
32
+ type GridListSectionAria,
31
33
  } from "@proyecto-viviana/solidaria";
32
34
  import {
33
35
  createGridState,
@@ -50,11 +52,10 @@ import { type DragAndDropHooks } from "./useDragAndDrop";
50
52
  import {
51
53
  CollectionRendererContext,
52
54
  type CollectionRendererContextValue,
53
- Section,
54
55
  type SectionProps,
55
56
  useCollectionRenderer,
56
57
  } from "./Collection";
57
- import { useVirtualizerContext } from "./Virtualizer";
58
+ import { useVirtualizerContext, type Orientation } from "./Virtualizer";
58
59
  import {
59
60
  getNormalizedDropTargetKey,
60
61
  mergePersistedKeysIntoVirtualRange,
@@ -82,6 +83,12 @@ export interface GridListRenderProps {
82
83
  isDisabled: boolean;
83
84
  /** Whether the grid list is empty. */
84
85
  isEmpty: boolean;
86
+ /**
87
+ * The primary orientation of the items.
88
+ *
89
+ * @selector [data-orientation="vertical | horizontal"]
90
+ */
91
+ orientation: Orientation;
85
92
  }
86
93
 
87
94
  export interface GridListProps<T extends object>
@@ -100,12 +107,21 @@ export interface GridListProps<T extends object>
100
107
  selectionBehavior?: "replace" | "toggle";
101
108
  /** Keys of disabled items. */
102
109
  disabledKeys?: Iterable<Key>;
110
+ /** Whether disabled items can still receive focus. */
111
+ disabledBehavior?: "selection" | "all";
103
112
  /** Currently selected keys (controlled). */
104
113
  selectedKeys?: "all" | Iterable<Key>;
105
114
  /** Default selected keys (uncontrolled). */
106
115
  defaultSelectedKeys?: "all" | Iterable<Key>;
107
116
  /** Handler called when selection changes. */
108
117
  onSelectionChange?: (keys: "all" | Set<Key>) => void;
118
+ /**
119
+ * The primary orientation of the items. Usually this is the direction that the collection
120
+ * scrolls.
121
+ *
122
+ * @default 'vertical'
123
+ */
124
+ orientation?: Orientation;
109
125
  /** The children of the component. A function may be provided to render each item. */
110
126
  children: (item: T) => JSX.Element;
111
127
  /** The CSS className for the element. */
@@ -198,7 +214,12 @@ export const GridListContext = createContext<GridListContextValue<object> | null
198
214
  export const GridListStateContext = createContext<GridState<object, GridCollection<object>> | null>(
199
215
  null,
200
216
  );
201
- export const GridListHeaderContext = createContext<null>(null);
217
+ /** Carries the section header's outer (row) props to {@link GridListHeader}. */
218
+ export const GridListHeaderContext = createContext<GridListSectionAria["rowProps"] | null>(null);
219
+ /** Carries the section header's inner (rowheader) props to {@link GridListHeader}. */
220
+ export const GridListHeaderInnerContext = createContext<
221
+ GridListSectionAria["rowHeaderProps"] | null
222
+ >(null);
202
223
 
203
224
  function buildGridCollection<T extends object>(
204
225
  items: T[],
@@ -295,6 +316,7 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
295
316
  "isLoading",
296
317
  "onLoadMore",
297
318
  "dragAndDropHooks",
319
+ "orientation",
298
320
  ],
299
321
  [
300
322
  "items",
@@ -302,6 +324,7 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
302
324
  "getTextValue",
303
325
  "getDisabled",
304
326
  "disabledKeys",
327
+ "disabledBehavior",
305
328
  "selectionMode",
306
329
  "selectedKeys",
307
330
  "defaultSelectedKeys",
@@ -339,11 +362,22 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
339
362
  return keys;
340
363
  });
341
364
 
365
+ const orientation = (): Orientation => local.orientation ?? "vertical";
366
+ const resolveDirection = (): "ltr" | "rtl" => {
367
+ const el = ref();
368
+ if (el && typeof window !== "undefined" && typeof window.getComputedStyle === "function") {
369
+ const dir = window.getComputedStyle(el).direction;
370
+ if (dir === "rtl") return "rtl";
371
+ }
372
+ return typeof document !== "undefined" && document.dir === "rtl" ? "rtl" : "ltr";
373
+ };
374
+
342
375
  const state = createGridState<T, GridCollection<T>>(() => ({
343
376
  collection: collection(),
344
377
  disabledKeys: allDisabledKeys(),
378
+ disabledBehavior: stateProps.disabledBehavior,
345
379
  selectionMode: stateProps.selectionMode,
346
- selectionBehavior: stateProps.selectionBehavior,
380
+ selectionBehavior: stateProps.selectionBehavior ?? "replace",
347
381
  selectedKeys: stateProps.selectedKeys,
348
382
  defaultSelectedKeys: stateProps.defaultSelectedKeys,
349
383
  onSelectionChange: stateProps.onSelectionChange,
@@ -358,19 +392,22 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
358
392
  isVirtualized: ariaProps.isVirtualized,
359
393
  onAction: ariaProps.onAction,
360
394
  isDisabled: ariaProps.isDisabled,
361
- selectionBehavior: stateProps.selectionBehavior,
395
+ selectionBehavior: state.selectionBehavior,
396
+ keyboardNavigationBehavior: ariaProps.keyboardNavigationBehavior,
397
+ orientation: orientation(),
398
+ direction: resolveDirection(),
362
399
  }),
363
400
  () => state,
364
401
  ref,
365
402
  );
366
403
 
367
404
  const { isFocused, isFocusVisible, focusProps } = createFocusRing();
368
-
369
405
  const renderValues = createMemo<GridListRenderProps>(() => ({
370
406
  isFocused: state.isFocused || isFocused(),
371
407
  isFocusVisible: isFocusVisible(),
372
408
  isDisabled: ariaProps.isDisabled ?? false,
373
409
  isEmpty: stateProps.items.length === 0,
410
+ orientation: orientation(),
374
411
  }));
375
412
 
376
413
  const renderProps = useRenderProps(
@@ -446,14 +483,6 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
446
483
  const hooks = local.dragAndDropHooks;
447
484
  const activeDropState = dropState();
448
485
  if (!hooks?.useDroppableCollection || !activeDropState) return undefined;
449
- const resolveDirection = (): "ltr" | "rtl" => {
450
- const el = ref();
451
- if (el && typeof window !== "undefined" && typeof window.getComputedStyle === "function") {
452
- const dir = window.getComputedStyle(el).direction;
453
- if (dir === "rtl") return "rtl";
454
- }
455
- return typeof document !== "undefined" && document.dir === "rtl" ? "rtl" : "ltr";
456
- };
457
486
  const dropTargetDelegate =
458
487
  hooks.dropTargetDelegate ??
459
488
  parentCollectionRenderer?.dropTargetDelegate ??
@@ -461,7 +490,7 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
461
490
  ? new hooks.ListDropTargetDelegate(
462
491
  () => state.collection,
463
492
  () => ref(),
464
- { layout: "grid", orientation: "vertical", direction: resolveDirection() },
493
+ { layout: "grid", orientation: orientation(), direction: resolveDirection() },
465
494
  )
466
495
  : undefined);
467
496
  if (!dropTargetDelegate) return undefined;
@@ -564,12 +593,16 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
564
593
  if (!range) return stateProps.items;
565
594
  return stateProps.items.slice(range.start, range.end);
566
595
  });
596
+ // Spacers reserve the windowed-out extent along the virtualizer's primary axis,
597
+ // so a horizontal layout offsets along width rather than height.
598
+ const virtualSpacerStyle = (size: number): JSX.CSSProperties =>
599
+ virtualizer?.orientation === "horizontal" ? { width: `${size}px` } : { height: `${size}px` };
567
600
 
568
601
  const contextValue = createMemo<GridListContextValue<T>>(() => ({
569
602
  state,
570
603
  collection: collection(),
571
604
  isDisabled: ariaProps.isDisabled ?? false,
572
- selectionBehavior: stateProps.selectionBehavior ?? "replace",
605
+ selectionBehavior: state.selectionBehavior,
573
606
  dragAndDropHooks: local.dragAndDropHooks,
574
607
  dragState: dragState(),
575
608
  dropState: dropState(),
@@ -606,6 +639,7 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
606
639
  data-disabled={ariaProps.isDisabled || undefined}
607
640
  data-empty={isEmpty() || undefined}
608
641
  data-drop-target={isRootDropTarget() || undefined}
642
+ data-orientation={orientation()}
609
643
  >
610
644
  <SharedElementTransition>
611
645
  {isEmpty() && local.renderEmptyState ? (
@@ -616,7 +650,7 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
616
650
  <div
617
651
  role="presentation"
618
652
  aria-hidden="true"
619
- style={{ height: `${virtualRange()!.offsetTop}px` }}
653
+ style={virtualSpacerStyle(virtualRange()!.offsetTop)}
620
654
  data-virtualizer-spacer="top"
621
655
  />
622
656
  ) : null}
@@ -643,7 +677,7 @@ export function GridList<T extends object>(props: GridListProps<T>): JSX.Element
643
677
  <div
644
678
  role="presentation"
645
679
  aria-hidden="true"
646
- style={{ height: `${virtualRange()!.offsetBottom}px` }}
680
+ style={virtualSpacerStyle(virtualRange()!.offsetBottom)}
647
681
  data-virtualizer-spacer="bottom"
648
682
  />
649
683
  ) : null}
@@ -759,7 +793,9 @@ export function GridListItem<T extends object>(props: GridListItemProps<T>): JSX
759
793
 
760
794
  const renderProps = useRenderProps(
761
795
  {
762
- children: props.children,
796
+ get children() {
797
+ return props.children;
798
+ },
763
799
  class: local.class,
764
800
  style: local.style,
765
801
  defaultClassName: "solidaria-GridList-item",
@@ -796,6 +832,7 @@ export function GridListItem<T extends object>(props: GridListItemProps<T>): JSX
796
832
  )}
797
833
  class={renderProps.class()}
798
834
  style={renderProps.style()}
835
+ data-key={local.id}
799
836
  data-selected={isSelected() || undefined}
800
837
  data-focused={isFocused() || undefined}
801
838
  data-focus-visible={(isFocusVisible() && isFocused()) || undefined}
@@ -876,7 +913,9 @@ export function GridListLoadMoreItem(props: GridListLoadMoreItemProps): JSX.Elem
876
913
 
877
914
  const renderProps = useRenderProps(
878
915
  {
879
- children: props.children ?? (() => (isLoading() ? "Loading more..." : "Load more")),
916
+ get children() {
917
+ return props.children ?? (() => (isLoading() ? "Loading more..." : "Load more"));
918
+ },
880
919
  class: props.class,
881
920
  style: props.style,
882
921
  defaultClassName: "solidaria-GridList-loadMore",
@@ -905,19 +944,81 @@ export function GridListLoadMoreItem(props: GridListLoadMoreItemProps): JSX.Elem
905
944
  );
906
945
  }
907
946
 
947
+ /**
948
+ * The header of a {@link GridListSection}. Renders as `role="row"` wrapping a
949
+ * `role="rowheader"` whose id labels the section (mirrors upstream
950
+ * `GridListHeader`). The row/rowheader props are supplied by the enclosing
951
+ * section through context.
952
+ */
908
953
  export function GridListHeader(props: GridListHeaderProps): JSX.Element {
954
+ const rowProps = useContext(GridListHeaderContext);
955
+ const rowHeaderProps = useContext(GridListHeaderInnerContext);
909
956
  return (
910
- <div class={props.class ?? "solidaria-GridListHeader"} style={props.style}>
911
- {props.children}
957
+ <div
958
+ class={props.class ?? "solidaria-GridListHeader"}
959
+ style={props.style}
960
+ {...(rowProps ?? {})}
961
+ >
962
+ <div {...(rowHeaderProps ?? {})} style={{ display: "contents" }}>
963
+ {props.children}
964
+ </div>
912
965
  </div>
913
966
  );
914
967
  }
915
968
 
916
969
  /**
917
- * Section primitive alias for GridList composition parity.
970
+ * A section within a GridList. Renders as `role="rowgroup"` and supplies its
971
+ * optional {@link GridListHeader} with the row/rowheader props that wire up the
972
+ * section's `aria-labelledby` (mirrors upstream `GridListSection`).
918
973
  */
919
974
  export function GridListSection(props: GridListSectionProps): JSX.Element {
920
- return <Section {...props} />;
975
+ const [local, domProps] = splitProps(props, ["children", "class", "style", "slot", "ref"]);
976
+
977
+ const section = createGridListSection({
978
+ get "aria-label"() {
979
+ return (domProps as { "aria-label"?: string })["aria-label"];
980
+ },
981
+ });
982
+
983
+ // Mirror upstream: resolve class/style via renderProps but keep children out
984
+ // of it (upstream passes `children: undefined`/`values: undefined`). The real
985
+ // children must only be evaluated inside the header providers below, otherwise
986
+ // a child <GridListHeader> would be instantiated in this component's owner and
987
+ // read the contexts as null.
988
+ // The values callback runs during setup (useRenderProps resolves class/style
989
+ // synchronously), so it must not read `local.children` — doing so would
990
+ // instantiate the header children in this owner, outside the providers below,
991
+ // and break their context wiring. Mirror upstream's `values: undefined` with a
992
+ // constant: a rendered section primitive always wraps its item collection.
993
+ const renderProps = useRenderProps(
994
+ {
995
+ children: undefined,
996
+ class: local.class,
997
+ style: local.style,
998
+ defaultClassName: "solidaria-GridListSection",
999
+ },
1000
+ () => ({ hasChildren: true }),
1001
+ );
1002
+
1003
+ const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));
1004
+
1005
+ return (
1006
+ <div
1007
+ ref={(el) => assignRef(local.ref, el)}
1008
+ {...filteredDomProps()}
1009
+ {...section.rowGroupProps}
1010
+ class={renderProps.class()}
1011
+ style={renderProps.style()}
1012
+ slot={local.slot}
1013
+ data-section
1014
+ >
1015
+ <GridListHeaderContext.Provider value={section.rowProps}>
1016
+ <GridListHeaderInnerContext.Provider value={section.rowHeaderProps}>
1017
+ {local.children}
1018
+ </GridListHeaderInnerContext.Provider>
1019
+ </GridListHeaderContext.Provider>
1020
+ </div>
1021
+ );
921
1022
  }
922
1023
 
923
1024
  GridList.Item = GridListItem;
package/src/Icon.tsx CHANGED
@@ -88,7 +88,9 @@ export function Icon(props: IconProps): JSX.Element {
88
88
 
89
89
  const renderProps = useRenderProps(
90
90
  {
91
- children: local.children,
91
+ get children() {
92
+ return local.children;
93
+ },
92
94
  class: local.class,
93
95
  style: local.style,
94
96
  defaultClassName: "solidaria-Icon",
package/src/Link.tsx CHANGED
@@ -210,7 +210,9 @@ export function Link(props: ParentProps<LinkProps>): JSX.Element {
210
210
 
211
211
  const renderProps = useRenderProps(
212
212
  {
213
- children: props.children,
213
+ get children() {
214
+ return props.children;
215
+ },
214
216
  class: local.class,
215
217
  style: local.style,
216
218
  defaultClassName: "solidaria-Link",
package/src/ListBox.tsx CHANGED
@@ -21,7 +21,9 @@ import {
21
21
  createListBox,
22
22
  createOption,
23
23
  createFocusRing,
24
+ createScrollIntoViewOnFocus,
24
25
  mergeProps,
26
+ useLocale,
25
27
  type AriaListBoxProps,
26
28
  type AriaOptionProps,
27
29
  } from "@proyecto-viviana/solidaria";
@@ -287,14 +289,22 @@ export function ListBox<T>(props: ListBoxProps<T>): JSX.Element {
287
289
  return !!disabled;
288
290
  };
289
291
 
292
+ const locale = useLocale();
290
293
  const listBoxAria = createListBox(
291
294
  {
292
295
  ...ariaProps,
293
296
  get isDisabled() {
294
297
  return resolveDisabled();
295
298
  },
299
+ get orientation() {
300
+ return stateProps.orientation ?? "vertical";
301
+ },
302
+ get direction() {
303
+ return locale().direction;
304
+ },
296
305
  },
297
306
  state,
307
+ () => listRef(),
298
308
  );
299
309
 
300
310
  const { isFocused, isFocusVisible, focusProps } = createFocusRing();
@@ -334,6 +344,15 @@ export function ListBox<T>(props: ListBoxProps<T>): JSX.Element {
334
344
  };
335
345
  const [listRef, setListRef] = createSignal<HTMLElement | null>(null);
336
346
 
347
+ // Reveal the activedescendant-focused option on keyboard navigation. The
348
+ // listbox keeps real DOM focus on itself, so the browser won't natively scroll
349
+ // an off-screen focused option into view the way roving tabindex would.
350
+ createScrollIntoViewOnFocus({
351
+ focusedKey: () => state.focusedKey(),
352
+ isActive: () => state.isFocused(),
353
+ ref: () => listRef(),
354
+ });
355
+
337
356
  const isEmpty = () => stateProps.items.length === 0;
338
357
  const parentCollectionRenderer = useCollectionRenderer<unknown>();
339
358
  const getItemNodes = createMemo(() =>
@@ -495,6 +514,10 @@ export function ListBox<T>(props: ListBoxProps<T>): JSX.Element {
495
514
  if (!range) return stateProps.items;
496
515
  return stateProps.items.slice(range.start, range.end);
497
516
  });
517
+ // Spacers reserve the windowed-out extent along the virtualizer's primary axis,
518
+ // so a horizontal layout offsets along width rather than height.
519
+ const virtualSpacerStyle = (size: number): JSX.CSSProperties =>
520
+ virtualizer?.orientation === "horizontal" ? { width: `${size}px` } : { height: `${size}px` };
498
521
  const sectionedRenderEntries = createMemo(() => {
499
522
  let globalIndex = 0;
500
523
  return stateProps.items.map((entry) => {
@@ -626,7 +649,7 @@ export function ListBox<T>(props: ListBoxProps<T>): JSX.Element {
626
649
  <li
627
650
  role="presentation"
628
651
  aria-hidden="true"
629
- style={{ height: `${virtualRange()!.offsetTop}px` }}
652
+ style={virtualSpacerStyle(virtualRange()!.offsetTop)}
630
653
  data-virtualizer-spacer="top"
631
654
  />
632
655
  ) : null}
@@ -653,7 +676,7 @@ export function ListBox<T>(props: ListBoxProps<T>): JSX.Element {
653
676
  <li
654
677
  role="presentation"
655
678
  aria-hidden="true"
656
- style={{ height: `${virtualRange()!.offsetBottom}px` }}
679
+ style={virtualSpacerStyle(virtualRange()!.offsetBottom)}
657
680
  data-virtualizer-spacer="bottom"
658
681
  />
659
682
  ) : null}
@@ -732,7 +755,9 @@ export function ListBoxOption<T>(props: ListBoxOptionProps<T>): JSX.Element {
732
755
 
733
756
  const renderProps = useRenderProps(
734
757
  {
735
- children: props.children,
758
+ get children() {
759
+ return props.children;
760
+ },
736
761
  class: local.class,
737
762
  style: local.style,
738
763
  defaultClassName: "solidaria-ListBox-option",
@@ -855,7 +880,9 @@ export function ListBoxLoadMoreItem(props: ListBoxLoadMoreItemProps): JSX.Elemen
855
880
 
856
881
  const renderProps = useRenderProps(
857
882
  {
858
- children: props.children ?? (() => (isLoading() ? "Loading more..." : "Load more")),
883
+ get children() {
884
+ return props.children ?? (() => (isLoading() ? "Loading more..." : "Load more"));
885
+ },
859
886
  class: props.class,
860
887
  style: props.style,
861
888
  defaultClassName: "solidaria-ListBox-loadMore",