@proyecto-viviana/solidaria-components 0.5.1 → 0.7.0-rc.1

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 (655) hide show
  1. package/LICENSE-APACHE-2.0 +201 -0
  2. package/NOTICE +91 -0
  3. package/README.md +57 -34
  4. package/dist/ActionBar.d.ts +2 -10
  5. package/dist/ActionBar.d.ts.map +1 -1
  6. package/dist/ActionBar.js +95 -59
  7. package/dist/ActionBar.js.map +1 -1
  8. package/dist/ActionBar.jsx +42 -15
  9. package/dist/ActionBar.jsx.map +1 -1
  10. package/dist/ActionGroup.d.ts +1 -12
  11. package/dist/ActionGroup.d.ts.map +1 -1
  12. package/dist/ActionGroup.js +66 -44
  13. package/dist/ActionGroup.js.map +1 -1
  14. package/dist/ActionGroup.jsx +25 -10
  15. package/dist/ActionGroup.jsx.map +1 -1
  16. package/dist/Alert.d.ts +4 -1
  17. package/dist/Alert.d.ts.map +1 -1
  18. package/dist/Alert.js +20 -17
  19. package/dist/Alert.js.map +1 -1
  20. package/dist/Alert.jsx +10 -6
  21. package/dist/Alert.jsx.map +1 -1
  22. package/dist/Autocomplete.d.ts +2 -9
  23. package/dist/Autocomplete.d.ts.map +1 -1
  24. package/dist/Autocomplete.js +19 -6
  25. package/dist/Autocomplete.js.map +1 -1
  26. package/dist/Autocomplete.jsx +21 -8
  27. package/dist/Autocomplete.jsx.map +1 -1
  28. package/dist/Breadcrumbs.d.ts +2 -1
  29. package/dist/Breadcrumbs.d.ts.map +1 -1
  30. package/dist/Breadcrumbs.js +152 -59
  31. package/dist/Breadcrumbs.js.map +1 -1
  32. package/dist/Breadcrumbs.jsx +99 -19
  33. package/dist/Breadcrumbs.jsx.map +1 -1
  34. package/dist/Button.d.ts +1 -7
  35. package/dist/Button.d.ts.map +1 -1
  36. package/dist/Button.js +144 -79
  37. package/dist/Button.js.map +1 -1
  38. package/dist/Button.jsx +124 -50
  39. package/dist/Button.jsx.map +1 -1
  40. package/dist/Calendar.d.ts +9 -7
  41. package/dist/Calendar.d.ts.map +1 -1
  42. package/dist/Calendar.js +321 -228
  43. package/dist/Calendar.js.map +1 -1
  44. package/dist/Calendar.jsx +74 -41
  45. package/dist/Calendar.jsx.map +1 -1
  46. package/dist/CalendarPicker.d.ts +1 -10
  47. package/dist/CalendarPicker.d.ts.map +1 -1
  48. package/dist/CalendarPicker.js +12 -0
  49. package/dist/CalendarPicker.js.map +1 -1
  50. package/dist/CalendarPicker.jsx +12 -0
  51. package/dist/CalendarPicker.jsx.map +1 -1
  52. package/dist/Checkbox.d.ts +3 -19
  53. package/dist/Checkbox.d.ts.map +1 -1
  54. package/dist/Checkbox.js +422 -317
  55. package/dist/Checkbox.js.map +1 -1
  56. package/dist/Checkbox.jsx +150 -131
  57. package/dist/Checkbox.jsx.map +1 -1
  58. package/dist/Collection.d.ts +152 -6
  59. package/dist/Collection.d.ts.map +1 -1
  60. package/dist/Collection.js +245 -78
  61. package/dist/Collection.js.map +1 -1
  62. package/dist/Collection.jsx +150 -12
  63. package/dist/Collection.jsx.map +1 -1
  64. package/dist/Color.d.ts +8 -572
  65. package/dist/Color.d.ts.map +1 -1
  66. package/dist/Color.js +8 -1717
  67. package/dist/Color.jsx +8 -1340
  68. package/dist/ColorArea.d.ts +104 -0
  69. package/dist/ColorArea.d.ts.map +1 -0
  70. package/dist/ColorArea.js +382 -0
  71. package/dist/ColorArea.js.map +1 -0
  72. package/dist/ColorArea.jsx +286 -0
  73. package/dist/ColorArea.jsx.map +1 -0
  74. package/dist/ColorEditor.d.ts +3 -1
  75. package/dist/ColorEditor.d.ts.map +1 -1
  76. package/dist/ColorEditor.js +147 -125
  77. package/dist/ColorEditor.js.map +1 -1
  78. package/dist/ColorEditor.jsx +12 -6
  79. package/dist/ColorEditor.jsx.map +1 -1
  80. package/dist/ColorField.d.ts +89 -0
  81. package/dist/ColorField.d.ts.map +1 -0
  82. package/dist/ColorField.js +395 -0
  83. package/dist/ColorField.js.map +1 -0
  84. package/dist/ColorField.jsx +280 -0
  85. package/dist/ColorField.jsx.map +1 -0
  86. package/dist/ColorPicker.d.ts +33 -0
  87. package/dist/ColorPicker.d.ts.map +1 -0
  88. package/dist/ColorPicker.js +86 -0
  89. package/dist/ColorPicker.js.map +1 -0
  90. package/dist/ColorPicker.jsx +67 -0
  91. package/dist/ColorPicker.jsx.map +1 -0
  92. package/dist/ColorSlider.d.ts +145 -0
  93. package/dist/ColorSlider.d.ts.map +1 -0
  94. package/dist/ColorSlider.js +444 -0
  95. package/dist/ColorSlider.js.map +1 -0
  96. package/dist/ColorSlider.jsx +319 -0
  97. package/dist/ColorSlider.jsx.map +1 -0
  98. package/dist/ColorSwatch.d.ts +37 -0
  99. package/dist/ColorSwatch.d.ts.map +1 -0
  100. package/dist/ColorSwatch.js +101 -0
  101. package/dist/ColorSwatch.js.map +1 -0
  102. package/dist/ColorSwatch.jsx +84 -0
  103. package/dist/ColorSwatch.jsx.map +1 -0
  104. package/dist/ColorSwatchPicker.d.ts +82 -0
  105. package/dist/ColorSwatchPicker.d.ts.map +1 -0
  106. package/dist/ColorSwatchPicker.js +364 -0
  107. package/dist/ColorSwatchPicker.js.map +1 -0
  108. package/dist/ColorSwatchPicker.jsx +314 -0
  109. package/dist/ColorSwatchPicker.jsx.map +1 -0
  110. package/dist/ColorThumb.d.ts +16 -0
  111. package/dist/ColorThumb.d.ts.map +1 -0
  112. package/dist/ColorThumb.js +14 -0
  113. package/dist/ColorThumb.jsx +14 -0
  114. package/dist/ColorWheel.d.ts +103 -0
  115. package/dist/ColorWheel.d.ts.map +1 -0
  116. package/dist/ColorWheel.js +312 -0
  117. package/dist/ColorWheel.js.map +1 -0
  118. package/dist/ColorWheel.jsx +224 -0
  119. package/dist/ColorWheel.jsx.map +1 -0
  120. package/dist/ComboBox.d.ts +68 -32
  121. package/dist/ComboBox.d.ts.map +1 -1
  122. package/dist/ComboBox.js +564 -292
  123. package/dist/ComboBox.js.map +1 -1
  124. package/dist/ComboBox.jsx +235 -89
  125. package/dist/ComboBox.jsx.map +1 -1
  126. package/dist/ContextualHelpTrigger.d.ts +1 -7
  127. package/dist/ContextualHelpTrigger.d.ts.map +1 -1
  128. package/dist/ContextualHelpTrigger.js +104 -86
  129. package/dist/ContextualHelpTrigger.js.map +1 -1
  130. package/dist/ContextualHelpTrigger.jsx +38 -30
  131. package/dist/ContextualHelpTrigger.jsx.map +1 -1
  132. package/dist/DateField.d.ts +15 -9
  133. package/dist/DateField.d.ts.map +1 -1
  134. package/dist/DateField.js +0 -2
  135. package/dist/DateField.jsx +0 -2
  136. package/dist/DateField2.js +262 -196
  137. package/dist/DateField2.js.map +1 -1
  138. package/dist/DateField2.jsx +114 -74
  139. package/dist/DateField2.jsx.map +1 -1
  140. package/dist/DatePicker.d.ts +13 -34
  141. package/dist/DatePicker.d.ts.map +1 -1
  142. package/dist/DatePicker.js +3 -2
  143. package/dist/DatePicker.jsx +3 -2
  144. package/dist/DatePicker2.js +671 -512
  145. package/dist/DatePicker2.js.map +1 -1
  146. package/dist/DatePicker2.jsx +342 -222
  147. package/dist/DatePicker2.jsx.map +1 -1
  148. package/dist/DateRangePickerContext.d.ts +7 -0
  149. package/dist/DateRangePickerContext.d.ts.map +1 -1
  150. package/dist/Dialog.d.ts +6 -25
  151. package/dist/Dialog.d.ts.map +1 -1
  152. package/dist/Dialog.js +181 -232
  153. package/dist/Dialog.js.map +1 -1
  154. package/dist/Dialog.jsx +138 -98
  155. package/dist/Dialog.jsx.map +1 -1
  156. package/dist/Disclosure.d.ts +1 -9
  157. package/dist/Disclosure.d.ts.map +1 -1
  158. package/dist/Disclosure.js +167 -92
  159. package/dist/Disclosure.js.map +1 -1
  160. package/dist/Disclosure.jsx +62 -22
  161. package/dist/Disclosure.jsx.map +1 -1
  162. package/dist/DragAndDrop.d.ts +9 -6
  163. package/dist/DragAndDrop.d.ts.map +1 -1
  164. package/dist/DragAndDrop.js +40 -23
  165. package/dist/DragAndDrop.js.map +1 -1
  166. package/dist/DragAndDrop.jsx +23 -5
  167. package/dist/DragAndDrop.jsx.map +1 -1
  168. package/dist/DragPreview.d.ts +1 -1
  169. package/dist/DragPreview.d.ts.map +1 -1
  170. package/dist/DropZone.d.ts +4 -3
  171. package/dist/DropZone.d.ts.map +1 -1
  172. package/dist/DropZone.js +107 -57
  173. package/dist/DropZone.js.map +1 -1
  174. package/dist/DropZone.jsx +49 -13
  175. package/dist/DropZone.jsx.map +1 -1
  176. package/dist/ElementTag.d.ts +9 -20
  177. package/dist/ElementTag.d.ts.map +1 -1
  178. package/dist/ElementTag.js +8 -210
  179. package/dist/ElementTag.js.map +1 -1
  180. package/dist/ElementTag.jsx +8 -57
  181. package/dist/ElementTag.jsx.map +1 -1
  182. package/dist/FieldError.d.ts +8 -7
  183. package/dist/FieldError.d.ts.map +1 -1
  184. package/dist/FieldError.js +33 -13
  185. package/dist/FieldError.js.map +1 -1
  186. package/dist/FieldError.jsx +20 -5
  187. package/dist/FieldError.jsx.map +1 -1
  188. package/dist/FileTrigger.d.ts +1 -7
  189. package/dist/FileTrigger.d.ts.map +1 -1
  190. package/dist/FileTrigger.js +69 -17
  191. package/dist/FileTrigger.js.map +1 -1
  192. package/dist/FileTrigger.jsx +49 -3
  193. package/dist/FileTrigger.jsx.map +1 -1
  194. package/dist/Focusable.d.ts +2 -8
  195. package/dist/Focusable.d.ts.map +1 -1
  196. package/dist/Focusable.js +23 -6
  197. package/dist/Focusable.js.map +1 -1
  198. package/dist/Focusable.jsx +22 -5
  199. package/dist/Focusable.jsx.map +1 -1
  200. package/dist/Form.d.ts +9 -8
  201. package/dist/Form.d.ts.map +1 -1
  202. package/dist/Form.js +82 -42
  203. package/dist/Form.js.map +1 -1
  204. package/dist/Form.jsx +52 -17
  205. package/dist/Form.jsx.map +1 -1
  206. package/dist/GridList.d.ts +65 -37
  207. package/dist/GridList.d.ts.map +1 -1
  208. package/dist/GridList.js +512 -277
  209. package/dist/GridList.js.map +1 -1
  210. package/dist/GridList.jsx +307 -134
  211. package/dist/GridList.jsx.map +1 -1
  212. package/dist/Heading.d.ts +15 -0
  213. package/dist/Heading.d.ts.map +1 -0
  214. package/dist/Heading.js +55 -0
  215. package/dist/Heading.js.map +1 -0
  216. package/dist/Heading.jsx +40 -0
  217. package/dist/Heading.jsx.map +1 -0
  218. package/dist/HiddenDateInput.d.ts +1 -7
  219. package/dist/HiddenDateInput.d.ts.map +1 -1
  220. package/dist/Icon.d.ts +4 -1
  221. package/dist/Icon.d.ts.map +1 -1
  222. package/dist/Icon.js +55 -38
  223. package/dist/Icon.js.map +1 -1
  224. package/dist/Icon.jsx +12 -4
  225. package/dist/Icon.jsx.map +1 -1
  226. package/dist/Keyboard.d.ts +1 -7
  227. package/dist/Keyboard.d.ts.map +1 -1
  228. package/dist/Keyboard.js +24 -11
  229. package/dist/Keyboard.js.map +1 -1
  230. package/dist/Keyboard.jsx +15 -2
  231. package/dist/Keyboard.jsx.map +1 -1
  232. package/dist/Label.d.ts +20 -0
  233. package/dist/Label.d.ts.map +1 -0
  234. package/dist/Label.js +60 -0
  235. package/dist/Label.js.map +1 -0
  236. package/dist/Label.jsx +47 -0
  237. package/dist/Label.jsx.map +1 -0
  238. package/dist/Landmark.d.ts +4 -1
  239. package/dist/Landmark.d.ts.map +1 -1
  240. package/dist/Landmark.js +10 -4
  241. package/dist/Landmark.js.map +1 -1
  242. package/dist/Landmark.jsx +5 -1
  243. package/dist/Landmark.jsx.map +1 -1
  244. package/dist/Link.d.ts +4 -7
  245. package/dist/Link.d.ts.map +1 -1
  246. package/dist/Link.js +80 -47
  247. package/dist/Link.js.map +1 -1
  248. package/dist/Link.jsx +76 -21
  249. package/dist/Link.jsx.map +1 -1
  250. package/dist/ListBox.d.ts +62 -33
  251. package/dist/ListBox.d.ts.map +1 -1
  252. package/dist/ListBox.js +858 -411
  253. package/dist/ListBox.js.map +1 -1
  254. package/dist/ListBox.jsx +478 -268
  255. package/dist/ListBox.jsx.map +1 -1
  256. package/dist/ListDropTargetDelegate.d.ts +3 -0
  257. package/dist/ListDropTargetDelegate.d.ts.map +1 -1
  258. package/dist/Menu.d.ts +51 -34
  259. package/dist/Menu.d.ts.map +1 -1
  260. package/dist/Menu.js +808 -427
  261. package/dist/Menu.js.map +1 -1
  262. package/dist/Menu.jsx +570 -296
  263. package/dist/Menu.jsx.map +1 -1
  264. package/dist/Meter.d.ts +6 -13
  265. package/dist/Meter.d.ts.map +1 -1
  266. package/dist/Meter.js +55 -18
  267. package/dist/Meter.js.map +1 -1
  268. package/dist/Meter.jsx +33 -8
  269. package/dist/Meter.jsx.map +1 -1
  270. package/dist/Modal.d.ts +1 -7
  271. package/dist/Modal.d.ts.map +1 -1
  272. package/dist/Modal.js +106 -74
  273. package/dist/Modal.js.map +1 -1
  274. package/dist/Modal.jsx +68 -57
  275. package/dist/Modal.jsx.map +1 -1
  276. package/dist/NumberField.d.ts +6 -9
  277. package/dist/NumberField.d.ts.map +1 -1
  278. package/dist/NumberField.js +344 -136
  279. package/dist/NumberField.js.map +1 -1
  280. package/dist/NumberField.jsx +194 -38
  281. package/dist/NumberField.jsx.map +1 -1
  282. package/dist/Popover.d.ts +21 -7
  283. package/dist/Popover.d.ts.map +1 -1
  284. package/dist/Popover.js +392 -192
  285. package/dist/Popover.js.map +1 -1
  286. package/dist/Popover.jsx +237 -93
  287. package/dist/Popover.jsx.map +1 -1
  288. package/dist/Pressable.d.ts +2 -8
  289. package/dist/Pressable.d.ts.map +1 -1
  290. package/dist/Pressable.js +23 -6
  291. package/dist/Pressable.js.map +1 -1
  292. package/dist/Pressable.jsx +22 -5
  293. package/dist/Pressable.jsx.map +1 -1
  294. package/dist/PreviewTrigger.d.ts +24 -0
  295. package/dist/PreviewTrigger.d.ts.map +1 -0
  296. package/dist/PreviewTrigger.js +128 -0
  297. package/dist/PreviewTrigger.js.map +1 -0
  298. package/dist/PreviewTrigger.jsx +117 -0
  299. package/dist/PreviewTrigger.jsx.map +1 -0
  300. package/dist/ProgressBar.d.ts +1 -7
  301. package/dist/ProgressBar.d.ts.map +1 -1
  302. package/dist/ProgressBar.js +49 -16
  303. package/dist/ProgressBar.js.map +1 -1
  304. package/dist/ProgressBar.jsx +30 -6
  305. package/dist/ProgressBar.jsx.map +1 -1
  306. package/dist/RadioGroup.d.ts +4 -20
  307. package/dist/RadioGroup.d.ts.map +1 -1
  308. package/dist/RadioGroup.js +459 -338
  309. package/dist/RadioGroup.js.map +1 -1
  310. package/dist/RadioGroup.jsx +186 -153
  311. package/dist/RadioGroup.jsx.map +1 -1
  312. package/dist/RangeCalendar.d.ts +11 -7
  313. package/dist/RangeCalendar.d.ts.map +1 -1
  314. package/dist/RangeCalendar.js +299 -208
  315. package/dist/RangeCalendar.js.map +1 -1
  316. package/dist/RangeCalendar.jsx +79 -47
  317. package/dist/RangeCalendar.jsx.map +1 -1
  318. package/dist/RouterProvider.d.ts +17 -69
  319. package/dist/RouterProvider.d.ts.map +1 -1
  320. package/dist/RouterProvider.js +12 -116
  321. package/dist/RouterProvider.jsx +12 -110
  322. package/dist/SearchField.d.ts +5 -8
  323. package/dist/SearchField.d.ts.map +1 -1
  324. package/dist/SearchField.js +212 -181
  325. package/dist/SearchField.js.map +1 -1
  326. package/dist/SearchField.jsx +94 -78
  327. package/dist/SearchField.jsx.map +1 -1
  328. package/dist/Select.d.ts +73 -36
  329. package/dist/Select.d.ts.map +1 -1
  330. package/dist/Select.js +700 -453
  331. package/dist/Select.js.map +1 -1
  332. package/dist/Select.jsx +356 -237
  333. package/dist/Select.jsx.map +1 -1
  334. package/dist/SelectionIndicator.d.ts +1 -4
  335. package/dist/SelectionIndicator.d.ts.map +1 -1
  336. package/dist/SelectionIndicator.js +29 -13
  337. package/dist/SelectionIndicator.js.map +1 -1
  338. package/dist/SelectionIndicator.jsx +18 -4
  339. package/dist/SelectionIndicator.jsx.map +1 -1
  340. package/dist/Separator.d.ts +3 -9
  341. package/dist/Separator.d.ts.map +1 -1
  342. package/dist/Separator.js +24 -12
  343. package/dist/Separator.js.map +1 -1
  344. package/dist/Separator.jsx +18 -9
  345. package/dist/Separator.jsx.map +1 -1
  346. package/dist/SharedElementTransition.d.ts +1 -10
  347. package/dist/SharedElementTransition.d.ts.map +1 -1
  348. package/dist/SharedElementTransition.js +68 -40
  349. package/dist/SharedElementTransition.js.map +1 -1
  350. package/dist/SharedElementTransition.jsx +49 -25
  351. package/dist/SharedElementTransition.jsx.map +1 -1
  352. package/dist/Slider.d.ts +25 -26
  353. package/dist/Slider.d.ts.map +1 -1
  354. package/dist/Slider.js +324 -167
  355. package/dist/Slider.js.map +1 -1
  356. package/dist/Slider.jsx +195 -93
  357. package/dist/Slider.jsx.map +1 -1
  358. package/dist/StepList.d.ts +2 -8
  359. package/dist/StepList.d.ts.map +1 -1
  360. package/dist/StepList.js +121 -75
  361. package/dist/StepList.js.map +1 -1
  362. package/dist/StepList.jsx +67 -27
  363. package/dist/StepList.jsx.map +1 -1
  364. package/dist/Switch.d.ts +17 -11
  365. package/dist/Switch.d.ts.map +1 -1
  366. package/dist/Switch.js +213 -128
  367. package/dist/Switch.js.map +1 -1
  368. package/dist/Switch.jsx +68 -31
  369. package/dist/Switch.jsx.map +1 -1
  370. package/dist/Table.d.ts +21 -2
  371. package/dist/Table.d.ts.map +1 -1
  372. package/dist/Table.js +938 -638
  373. package/dist/Table.js.map +1 -1
  374. package/dist/Table.jsx +537 -259
  375. package/dist/Table.jsx.map +1 -1
  376. package/dist/Tabs.d.ts +2 -7
  377. package/dist/Tabs.d.ts.map +1 -1
  378. package/dist/Tabs.js +322 -300
  379. package/dist/Tabs.js.map +1 -1
  380. package/dist/Tabs.jsx +106 -67
  381. package/dist/Tabs.jsx.map +1 -1
  382. package/dist/TagGroup.d.ts +32 -22
  383. package/dist/TagGroup.d.ts.map +1 -1
  384. package/dist/TagGroup.js +377 -136
  385. package/dist/TagGroup.js.map +1 -1
  386. package/dist/TagGroup.jsx +220 -53
  387. package/dist/TagGroup.jsx.map +1 -1
  388. package/dist/Text.d.ts +3 -3
  389. package/dist/Text.d.ts.map +1 -1
  390. package/dist/Text.js +38 -8
  391. package/dist/Text.js.map +1 -1
  392. package/dist/Text.jsx +27 -5
  393. package/dist/Text.jsx.map +1 -1
  394. package/dist/TextField.d.ts +4 -17
  395. package/dist/TextField.d.ts.map +1 -1
  396. package/dist/TextField.js +116 -142
  397. package/dist/TextField.js.map +1 -1
  398. package/dist/TextField.jsx +88 -115
  399. package/dist/TextField.jsx.map +1 -1
  400. package/dist/TimeField.d.ts +3 -16
  401. package/dist/TimeField.d.ts.map +1 -1
  402. package/dist/TimeField.js +121 -107
  403. package/dist/TimeField.js.map +1 -1
  404. package/dist/TimeField.jsx +67 -54
  405. package/dist/TimeField.jsx.map +1 -1
  406. package/dist/Toast.d.ts +27 -14
  407. package/dist/Toast.d.ts.map +1 -1
  408. package/dist/Toast.js +273 -113
  409. package/dist/Toast.js.map +1 -1
  410. package/dist/Toast.jsx +182 -32
  411. package/dist/Toast.jsx.map +1 -1
  412. package/dist/ToggleButton.d.ts +1 -7
  413. package/dist/ToggleButton.d.ts.map +1 -1
  414. package/dist/ToggleButton.js +75 -35
  415. package/dist/ToggleButton.js.map +1 -1
  416. package/dist/ToggleButton.jsx +39 -13
  417. package/dist/ToggleButton.jsx.map +1 -1
  418. package/dist/ToggleButtonGroup.d.ts +1 -7
  419. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  420. package/dist/ToggleButtonGroup.js +59 -44
  421. package/dist/ToggleButtonGroup.js.map +1 -1
  422. package/dist/ToggleButtonGroup.jsx +25 -12
  423. package/dist/ToggleButtonGroup.jsx.map +1 -1
  424. package/dist/TokenField.d.ts +54 -0
  425. package/dist/TokenField.d.ts.map +1 -0
  426. package/dist/TokenField.js +374 -0
  427. package/dist/TokenField.js.map +1 -0
  428. package/dist/TokenField.jsx +272 -0
  429. package/dist/TokenField.jsx.map +1 -0
  430. package/dist/Toolbar.d.ts +2 -7
  431. package/dist/Toolbar.d.ts.map +1 -1
  432. package/dist/Toolbar.js +37 -22
  433. package/dist/Toolbar.js.map +1 -1
  434. package/dist/Toolbar.jsx +17 -8
  435. package/dist/Toolbar.jsx.map +1 -1
  436. package/dist/Tooltip.d.ts +2 -7
  437. package/dist/Tooltip.d.ts.map +1 -1
  438. package/dist/Tooltip.js +128 -78
  439. package/dist/Tooltip.js.map +1 -1
  440. package/dist/Tooltip.jsx +83 -46
  441. package/dist/Tooltip.jsx.map +1 -1
  442. package/dist/Tree.d.ts +85 -39
  443. package/dist/Tree.d.ts.map +1 -1
  444. package/dist/Tree.js +926 -414
  445. package/dist/Tree.js.map +1 -1
  446. package/dist/Tree.jsx +450 -195
  447. package/dist/Tree.jsx.map +1 -1
  448. package/dist/Virtualizer.d.ts +41 -10
  449. package/dist/Virtualizer.d.ts.map +1 -1
  450. package/dist/Virtualizer.js +2 -2
  451. package/dist/Virtualizer.jsx +2 -2
  452. package/dist/Virtualizer2.js +554 -144
  453. package/dist/Virtualizer2.js.map +1 -1
  454. package/dist/Virtualizer2.jsx +516 -124
  455. package/dist/Virtualizer2.jsx.map +1 -1
  456. package/dist/VirtualizerLayouts.d.ts +55 -2
  457. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  458. package/dist/VisuallyHidden.d.ts +4 -3
  459. package/dist/VisuallyHidden.d.ts.map +1 -1
  460. package/dist/VisuallyHidden.js +18 -11
  461. package/dist/VisuallyHidden.js.map +1 -1
  462. package/dist/VisuallyHidden.jsx +15 -9
  463. package/dist/VisuallyHidden.jsx.map +1 -1
  464. package/dist/calendarHeadingTitle.d.ts +14 -0
  465. package/dist/calendarHeadingTitle.d.ts.map +1 -0
  466. package/dist/calendarHeadingTitle.js +23 -0
  467. package/dist/calendarHeadingTitle.js.map +1 -0
  468. package/dist/calendarHeadingTitle.jsx +23 -0
  469. package/dist/calendarHeadingTitle.jsx.map +1 -0
  470. package/dist/contexts.d.ts +31 -1
  471. package/dist/contexts.d.ts.map +1 -1
  472. package/dist/contexts.js +9 -1
  473. package/dist/contexts.js.map +1 -1
  474. package/dist/contexts.jsx +9 -1
  475. package/dist/contexts.jsx.map +1 -1
  476. package/dist/fileTriggerContext.d.ts +5 -0
  477. package/dist/fileTriggerContext.d.ts.map +1 -0
  478. package/dist/fileTriggerContext.js +7 -0
  479. package/dist/fileTriggerContext.js.map +1 -0
  480. package/dist/fileTriggerContext.jsx +7 -0
  481. package/dist/fileTriggerContext.jsx.map +1 -0
  482. package/dist/index.d.ts +27 -15
  483. package/dist/index.d.ts.map +1 -1
  484. package/dist/index.js +30 -18
  485. package/dist/index.jsx +30 -18
  486. package/dist/intl/index.d.ts +16 -0
  487. package/dist/intl/index.d.ts.map +1 -0
  488. package/dist/intl.js +212 -0
  489. package/dist/intl.js.map +1 -0
  490. package/dist/intl.jsx +212 -0
  491. package/dist/intl.jsx.map +1 -0
  492. package/dist/loadMoreSentinel.d.ts +7 -0
  493. package/dist/loadMoreSentinel.d.ts.map +1 -0
  494. package/dist/loadMoreSentinel.js +30 -0
  495. package/dist/loadMoreSentinel.js.map +1 -0
  496. package/dist/loadMoreSentinel.jsx +30 -0
  497. package/dist/loadMoreSentinel.jsx.map +1 -0
  498. package/dist/slots.d.ts +35 -0
  499. package/dist/slots.d.ts.map +1 -0
  500. package/dist/slots.js +66 -0
  501. package/dist/slots.js.map +1 -0
  502. package/dist/slots.jsx +66 -0
  503. package/dist/slots.jsx.map +1 -0
  504. package/dist/staticSelectCollection.d.ts +2 -0
  505. package/dist/staticSelectCollection.d.ts.map +1 -0
  506. package/dist/staticSelectCollection.js +2 -0
  507. package/dist/staticSelectCollection.jsx +2 -0
  508. package/dist/useDragAndDrop.d.ts +6 -2
  509. package/dist/useDragAndDrop.d.ts.map +1 -1
  510. package/dist/useDragAndDrop2.js +39 -21
  511. package/dist/useDragAndDrop2.js.map +1 -1
  512. package/dist/useDragAndDrop2.jsx +39 -21
  513. package/dist/useDragAndDrop2.jsx.map +1 -1
  514. package/dist/utils.d.ts +49 -9
  515. package/dist/utils.d.ts.map +1 -1
  516. package/dist/utils.js +119 -24
  517. package/dist/utils.js.map +1 -1
  518. package/dist/utils.jsx +110 -24
  519. package/dist/utils.jsx.map +1 -1
  520. package/dist/virtualizer/Layout.d.ts +12 -2
  521. package/dist/virtualizer/Layout.d.ts.map +1 -1
  522. package/dist/virtualizer/Layout.js +23 -2
  523. package/dist/virtualizer/Layout.js.map +1 -1
  524. package/dist/virtualizer/Layout.jsx +23 -2
  525. package/dist/virtualizer/Layout.jsx.map +1 -1
  526. package/package.json +87 -10
  527. package/src/ActionBar.tsx +50 -24
  528. package/src/ActionGroup.tsx +30 -19
  529. package/src/Alert.tsx +12 -7
  530. package/src/Autocomplete.tsx +25 -16
  531. package/src/Breadcrumbs.tsx +139 -24
  532. package/src/Button.tsx +214 -76
  533. package/src/Calendar.tsx +120 -61
  534. package/src/CalendarPicker.tsx +16 -1
  535. package/src/Checkbox.tsx +205 -227
  536. package/src/Collection.tsx +334 -12
  537. package/src/Color.tsx +8 -2454
  538. package/src/ColorArea.tsx +479 -0
  539. package/src/ColorEditor.tsx +9 -9
  540. package/src/ColorField.tsx +471 -0
  541. package/src/ColorPicker.tsx +126 -0
  542. package/src/ColorSlider.tsx +562 -0
  543. package/src/ColorSwatch.tsx +129 -0
  544. package/src/ColorSwatchPicker.tsx +623 -0
  545. package/src/ColorThumb.tsx +19 -0
  546. package/src/ColorWheel.tsx +398 -0
  547. package/src/ComboBox.tsx +471 -173
  548. package/src/ContextualHelpTrigger.tsx +49 -65
  549. package/src/DateField.tsx +174 -131
  550. package/src/DatePicker.tsx +501 -376
  551. package/src/DateRangePickerContext.tsx +8 -0
  552. package/src/Dialog.tsx +224 -162
  553. package/src/Disclosure.tsx +85 -34
  554. package/src/DragAndDrop.tsx +51 -9
  555. package/src/DragPreview.tsx +20 -1
  556. package/src/DropZone.tsx +77 -42
  557. package/src/ElementTag.tsx +14 -104
  558. package/src/FieldError.tsx +39 -7
  559. package/src/FileTrigger.tsx +71 -4
  560. package/src/Focusable.tsx +27 -11
  561. package/src/Form.tsx +64 -15
  562. package/src/GridList.tsx +478 -214
  563. package/src/Heading.tsx +59 -0
  564. package/src/HiddenDateInput.tsx +19 -3
  565. package/src/Icon.tsx +19 -4
  566. package/src/Keyboard.tsx +18 -2
  567. package/src/Label.tsx +77 -0
  568. package/src/Landmark.tsx +6 -1
  569. package/src/Link.tsx +103 -30
  570. package/src/ListBox.tsx +924 -530
  571. package/src/ListDropTargetDelegate.ts +4 -0
  572. package/src/Menu.tsx +883 -465
  573. package/src/Meter.tsx +42 -8
  574. package/src/Modal.tsx +89 -80
  575. package/src/NumberField.tsx +267 -66
  576. package/src/Popover.tsx +454 -156
  577. package/src/Pressable.tsx +27 -11
  578. package/src/PreviewTrigger.tsx +171 -0
  579. package/src/ProgressBar.tsx +41 -5
  580. package/src/RadioGroup.tsx +358 -278
  581. package/src/RangeCalendar.tsx +130 -77
  582. package/src/RouterProvider.tsx +33 -215
  583. package/src/SearchField.tsx +157 -136
  584. package/src/Select.tsx +689 -453
  585. package/src/SelectionIndicator.tsx +21 -3
  586. package/src/Separator.tsx +22 -14
  587. package/src/SharedElementTransition.tsx +67 -46
  588. package/src/Slider.tsx +296 -120
  589. package/src/StepList.tsx +88 -38
  590. package/src/Switch.tsx +127 -51
  591. package/src/Table.tsx +842 -479
  592. package/src/Tabs.tsx +186 -156
  593. package/src/TagGroup.tsx +377 -90
  594. package/src/Text.tsx +39 -7
  595. package/src/TextField.tsx +136 -173
  596. package/src/TimeField.tsx +90 -93
  597. package/src/Toast.tsx +238 -82
  598. package/src/ToggleButton.tsx +60 -17
  599. package/src/ToggleButtonGroup.tsx +27 -9
  600. package/src/TokenField.tsx +502 -0
  601. package/src/Toolbar.tsx +21 -17
  602. package/src/Tooltip.tsx +157 -99
  603. package/src/Tree.tsx +888 -360
  604. package/src/Virtualizer.tsx +501 -148
  605. package/src/VirtualizerLayouts.ts +211 -26
  606. package/src/VisuallyHidden.tsx +22 -8
  607. package/src/calendarHeadingTitle.ts +37 -0
  608. package/src/contexts.ts +23 -1
  609. package/src/fileTriggerContext.ts +8 -0
  610. package/src/index.ts +98 -22
  611. package/src/intl/ar-AE.json +6 -0
  612. package/src/intl/bg-BG.json +6 -0
  613. package/src/intl/cs-CZ.json +6 -0
  614. package/src/intl/da-DK.json +6 -0
  615. package/src/intl/de-DE.json +6 -0
  616. package/src/intl/el-GR.json +6 -0
  617. package/src/intl/en-US.json +6 -0
  618. package/src/intl/es-ES.json +6 -0
  619. package/src/intl/et-EE.json +6 -0
  620. package/src/intl/fi-FI.json +6 -0
  621. package/src/intl/fr-FR.json +6 -0
  622. package/src/intl/he-IL.json +6 -0
  623. package/src/intl/hr-HR.json +6 -0
  624. package/src/intl/hu-HU.json +6 -0
  625. package/src/intl/index.ts +125 -0
  626. package/src/intl/it-IT.json +6 -0
  627. package/src/intl/ja-JP.json +6 -0
  628. package/src/intl/ko-KR.json +6 -0
  629. package/src/intl/lt-LT.json +6 -0
  630. package/src/intl/lv-LV.json +6 -0
  631. package/src/intl/nb-NO.json +6 -0
  632. package/src/intl/nl-NL.json +6 -0
  633. package/src/intl/pl-PL.json +6 -0
  634. package/src/intl/pt-BR.json +6 -0
  635. package/src/intl/pt-PT.json +6 -0
  636. package/src/intl/ro-RO.json +6 -0
  637. package/src/intl/ru-RU.json +6 -0
  638. package/src/intl/sk-SK.json +6 -0
  639. package/src/intl/sl-SI.json +6 -0
  640. package/src/intl/sr-SP.json +6 -0
  641. package/src/intl/sv-SE.json +6 -0
  642. package/src/intl/tr-TR.json +6 -0
  643. package/src/intl/uk-UA.json +6 -0
  644. package/src/intl/zh-CN.json +6 -0
  645. package/src/intl/zh-TW.json +6 -0
  646. package/src/loadMoreSentinel.ts +31 -0
  647. package/src/slots.tsx +103 -0
  648. package/src/staticSelectCollection.tsx +25 -0
  649. package/src/useDragAndDrop.ts +35 -33
  650. package/src/utils.tsx +178 -67
  651. package/src/virtualizer/Layout.ts +32 -2
  652. package/dist/Color.js.map +0 -1
  653. package/dist/Color.jsx.map +0 -1
  654. package/dist/RouterProvider.js.map +0 -1
  655. package/dist/RouterProvider.jsx.map +0 -1
package/src/TagGroup.tsx CHANGED
@@ -1,3 +1,17 @@
1
+ /*
2
+ * Copyright 2022 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+
13
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/TagGroup.tsx
14
+
1
15
  /**
2
16
  * TagGroup component for solidaria-components
3
17
  *
@@ -8,17 +22,15 @@
8
22
  * with support for keyboard navigation, selection, and removal.
9
23
  */
10
24
 
25
+ import { createContext, createMemo, createSignal, useContext, For, Show } from "solid-js";
26
+ import type { Context } from "solid-js";
27
+ import type { JSX } from "@solidjs/web";
11
28
  import {
12
- type JSX,
13
- createContext,
14
- createMemo,
15
- createSignal,
16
- splitProps,
17
- useContext,
18
- For,
19
- Show,
20
- } from "solid-js";
21
- import {
29
+ createButton,
30
+ createFocusRing,
31
+ createHover,
32
+ createId,
33
+ createSlotId,
22
34
  createTagGroup,
23
35
  createTag,
24
36
  useLocale,
@@ -41,8 +53,15 @@ import {
41
53
  filterDOMProps,
42
54
  dataAttr,
43
55
  mergeRefs,
56
+ assignRef,
57
+ useSlot,
58
+ Provider,
44
59
  } from "./utils";
60
+ import { LabelContext } from "./Label";
61
+ import { TextContext } from "./Text";
62
+ import { ButtonContext, type ButtonProps } from "./Button";
45
63
  import { SharedElementTransition } from "./SharedElementTransition";
64
+ import { splitProps } from "@proyecto-viviana/solidaria/utils";
46
65
  import {
47
66
  SelectionIndicatorContext,
48
67
  type SelectionIndicatorContextValue,
@@ -59,7 +78,10 @@ export interface TagGroupProps
59
78
  extends
60
79
  Omit<AriaTagGroupProps, "id">,
61
80
  SlotProps,
62
- Omit<JSX.HTMLAttributes<HTMLDivElement>, "class" | "style" | "children"> {
81
+ Omit<
82
+ JSX.HTMLAttributes<HTMLDivElement>,
83
+ "class" | "style" | "children" | "aria-label" | "aria-labelledby" | "aria-describedby"
84
+ > {
63
85
  /** The children of the component. */
64
86
  children?: JSX.Element;
65
87
  /** The CSS className for the element. */
@@ -71,8 +93,10 @@ export interface TagGroupProps
71
93
  export interface TagListRenderProps {
72
94
  /** Whether the tag list is empty. */
73
95
  isEmpty: boolean;
74
- /** Whether the tag list is focused. */
96
+ /** Whether the tag list itself is focused. */
75
97
  isFocused: boolean;
98
+ /** Whether the tag list itself is keyboard focused. */
99
+ isFocusVisible: boolean;
76
100
  }
77
101
 
78
102
  export interface TagListProps<T>
@@ -124,6 +148,8 @@ export interface TagRenderProps {
124
148
  isDisabled: boolean;
125
149
  /** Whether the tag is focused. */
126
150
  isFocused: boolean;
151
+ /** Whether the tag is keyboard focused. */
152
+ isFocusVisible: boolean;
127
153
  /** Whether the tag is pressed. */
128
154
  isPressed: boolean;
129
155
  /** Whether the tag allows removal. */
@@ -168,6 +194,19 @@ export const TagGroupContext = createContext<TagGroupContextValue | null>(null);
168
194
  export const TagListStateContext = createContext<ListState | null>(null);
169
195
  export const TagContext = createContext<TagContextValue | null>(null);
170
196
 
197
+ // Label and help text are siblings of TagList, so the group mints their ids
198
+ // and the list points the grid at them. Remove-button text, aria-live, and
199
+ // focusing the list when the last tag disappears stay out of this path (#54).
200
+ interface TagGroupFieldContextValue {
201
+ descriptionId: () => string | undefined;
202
+ errorMessageId: () => string | undefined;
203
+ labelledBy: () => string | undefined;
204
+ ariaLabel: () => string | undefined;
205
+ describedBy: () => string | undefined;
206
+ }
207
+
208
+ const TagGroupFieldContext = createContext<TagGroupFieldContextValue | null>(null);
209
+
171
210
  export function useTagGroupContext(): TagGroupContextValue | null {
172
211
  return useContext(TagGroupContext);
173
212
  }
@@ -186,9 +225,51 @@ export function useTagGroupContext(): TagGroupContextValue | null {
186
225
  * ```
187
226
  */
188
227
  export function TagGroup(props: TagGroupProps): JSX.Element {
189
- const [local, domProps] = splitProps(props, ["class", "style", "slot", "children"]);
228
+ const [local, domProps] = splitProps(props, [
229
+ "class",
230
+ "style",
231
+ "slot",
232
+ "children",
233
+ "label",
234
+ "aria-label",
235
+ "aria-labelledby",
236
+ "aria-describedby",
237
+ "description",
238
+ "errorMessage",
239
+ ]);
240
+
241
+ // Start true when nothing else names the group, matching useSlot: a Label
242
+ // child confirms it, and onSettled clears it when that child is absent.
243
+ const [labelRef, hasLabel] = useSlot(
244
+ !local["aria-label"] && !local["aria-labelledby"] && !local.label,
245
+ );
246
+ const labelId = createId();
247
+ const descriptionId = createSlotId([
248
+ () => Boolean(local.description),
249
+ () => Boolean(local.errorMessage),
250
+ ]);
251
+ const errorMessageId = createSlotId([
252
+ () => Boolean(local.description),
253
+ () => Boolean(local.errorMessage),
254
+ ]);
255
+ const field: TagGroupFieldContextValue = {
256
+ descriptionId,
257
+ errorMessageId,
258
+ labelledBy: () => local["aria-labelledby"] ?? (hasLabel() ? labelId : undefined),
259
+ ariaLabel: () => local["aria-label"],
260
+ describedBy: () => local["aria-describedby"],
261
+ };
262
+ const textSlots = {
263
+ slots: {
264
+ get description() {
265
+ return { id: descriptionId() };
266
+ },
267
+ get errorMessage() {
268
+ return { id: errorMessageId() };
269
+ },
270
+ },
271
+ };
190
272
 
191
- // We need TagList to provide the state, so TagGroup just provides context
192
273
  return (
193
274
  <div
194
275
  {...domProps}
@@ -196,7 +277,19 @@ export function TagGroup(props: TagGroupProps): JSX.Element {
196
277
  style={typeof local.style === "object" ? local.style : undefined}
197
278
  slot={local.slot}
198
279
  >
199
- {props.children}
280
+ <TagGroupFieldContext value={field}>
281
+ <LabelContext
282
+ value={{
283
+ ref: labelRef,
284
+ elementType: "span",
285
+ get id() {
286
+ return labelId;
287
+ },
288
+ }}
289
+ >
290
+ <TextContext value={textSlots}>{local.children}</TextContext>
291
+ </LabelContext>
292
+ </TagGroupFieldContext>
200
293
  </div>
201
294
  );
202
295
  }
@@ -267,24 +360,47 @@ export function TagList<T extends { id?: Key; key?: Key }>(props: TagListProps<T
267
360
  // under RTL. Thread the resolved layout direction into the hook (mirrors
268
361
  // ListBox, and useTagGroup passing `direction` to the ListKeyboardDelegate).
269
362
  const locale = useLocale();
363
+ const field = useContext(TagGroupFieldContext);
364
+
365
+ // Callback-valued props must not go through createMemo — a memo that
366
+ // stores a function is easy to unwrap/call, and the live getter
367
+ // `onRemove={handler()}` must re-read on each access.
368
+ const onRemove = () => local.onRemove;
369
+
370
+ const labelledBy = () => local["aria-labelledby"] ?? field?.labelledBy();
371
+ const describedBy = () => {
372
+ const ids = [
373
+ field?.descriptionId(),
374
+ field?.errorMessageId(),
375
+ local["aria-describedby"] ?? field?.describedBy(),
376
+ ].filter((id): id is string => !!id);
377
+ return ids.length > 0 ? ids.join(" ") : undefined;
378
+ };
270
379
 
271
- // Create tag group accessibility props
272
380
  const tagGroupAria = createTagGroup(
273
381
  {
274
382
  get "aria-label"() {
275
- return local["aria-label"] ?? (!local["aria-labelledby"] ? local.label : undefined);
383
+ if (local["aria-label"] != null) {
384
+ return local["aria-label"];
385
+ }
386
+ // A real label id suppresses the string fallback; the grid is named
387
+ // by aria-labelledby. TagList's own label still wins when no id is set.
388
+ if (labelledBy()) {
389
+ return field?.ariaLabel();
390
+ }
391
+ return local.label ?? field?.ariaLabel();
276
392
  },
277
393
  get "aria-labelledby"() {
278
- return local["aria-labelledby"];
394
+ return labelledBy();
279
395
  },
280
396
  get "aria-describedby"() {
281
- return local["aria-describedby"];
397
+ return describedBy();
282
398
  },
283
399
  get isDisabled() {
284
400
  return local.isDisabled;
285
401
  },
286
402
  get onRemove() {
287
- return local.onRemove;
403
+ return onRemove();
288
404
  },
289
405
  get direction() {
290
406
  return locale().direction;
@@ -294,11 +410,14 @@ export function TagList<T extends { id?: Key; key?: Key }>(props: TagListProps<T
294
410
  gridRef,
295
411
  );
296
412
 
297
- const [isFocused, setIsFocused] = createSignal(false);
413
+ // Self ring: a focused row must not mark the list. Solid onFocus does not
414
+ // bubble, which matches useFocusRing() with no `within`.
415
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
298
416
 
299
417
  const renderValues = createMemo<TagListRenderProps>(() => ({
300
418
  isEmpty: local.items.length === 0,
301
419
  isFocused: isFocused(),
420
+ isFocusVisible: isFocusVisible(),
302
421
  }));
303
422
 
304
423
  const renderProps = useRenderProps(
@@ -313,7 +432,7 @@ export function TagList<T extends { id?: Key; key?: Key }>(props: TagListProps<T
313
432
  const contextValue: TagGroupContextValue = {
314
433
  state,
315
434
  get onRemove() {
316
- return local.onRemove;
435
+ return onRemove();
317
436
  },
318
437
  get isDisabled() {
319
438
  return local.isDisabled;
@@ -321,31 +440,27 @@ export function TagList<T extends { id?: Key; key?: Key }>(props: TagListProps<T
321
440
  };
322
441
 
323
442
  return (
324
- <TagGroupContext.Provider value={contextValue}>
325
- <TagListStateContext.Provider value={state}>
443
+ <TagGroupContext value={contextValue}>
444
+ <TagListStateContext value={state}>
326
445
  <div
327
446
  ref={setGridRef}
328
447
  {...domProps}
329
448
  {...tagGroupAria.gridProps}
330
449
  class={renderProps.class()}
331
450
  style={renderProps.style()}
332
- // Track focus-within via the BUBBLING focusin/focusout pair (not the
333
- // non-bubbling focus/blur the hook's trampoline uses) so this render-prop
334
- // signal never clobbers `gridProps.onFocus` — the container focus
335
- // trampoline that marshals entry onto the first/last row.
336
- onFocusIn={() => {
337
- setIsFocused(true);
451
+ // Chain after the grid trampoline. Replacing gridProps.onFocus would
452
+ // skip the move onto the first or last row.
453
+ onFocus={(event) => {
454
+ tagGroupAria.gridProps.onFocus?.(event);
455
+ focusProps.onFocus?.(event);
338
456
  }}
339
- onFocusOut={(e) => {
340
- const nextTarget = e.relatedTarget as Node | null;
341
- if (nextTarget && e.currentTarget.contains(nextTarget)) {
342
- return;
343
- }
344
-
345
- setIsFocused(false);
457
+ onBlur={(event) => {
458
+ tagGroupAria.gridProps.onBlur?.(event);
459
+ focusProps.onBlur?.(event);
346
460
  }}
347
461
  data-empty={dataAttr(local.items.length === 0)}
348
462
  data-focused={dataAttr(isFocused())}
463
+ data-focus-visible={dataAttr(isFocusVisible())}
349
464
  >
350
465
  <SharedElementTransition>
351
466
  <Show when={local.items.length > 0} fallback={local.renderEmptyState?.()}>
@@ -353,8 +468,8 @@ export function TagList<T extends { id?: Key; key?: Key }>(props: TagListProps<T
353
468
  </Show>
354
469
  </SharedElementTransition>
355
470
  </div>
356
- </TagListStateContext.Provider>
357
- </TagGroupContext.Provider>
471
+ </TagListStateContext>
472
+ </TagGroupContext>
358
473
  );
359
474
  }
360
475
 
@@ -392,6 +507,9 @@ export function Tag(props: TagProps): JSX.Element {
392
507
  get textValue() {
393
508
  return local.textValue;
394
509
  },
510
+ get onAction() {
511
+ return local.onAction ? () => local.onAction?.(local.id) : undefined;
512
+ },
395
513
  },
396
514
  state!,
397
515
  tagRef,
@@ -403,21 +521,21 @@ export function Tag(props: TagProps): JSX.Element {
403
521
  return {
404
522
  ...raw,
405
523
  onPress: () => {
406
- if (!tagAria.isDisabled && groupContext?.onRemove) {
407
- groupContext.onRemove(new Set([local.id]));
408
- return;
409
- }
410
524
  rawHandler?.();
411
525
  },
412
526
  };
413
527
  });
414
528
 
529
+ const allowsRemoving = createMemo(
530
+ () => Boolean(tagAria.allowsRemoving) || Boolean(groupContext?.onRemove),
531
+ );
415
532
  const renderValues = createMemo<TagRenderProps>(() => ({
416
533
  isSelected: tagAria.isSelected,
417
534
  isDisabled: tagAria.isDisabled,
418
535
  isFocused: tagAria.isFocused,
536
+ isFocusVisible: tagAria.isFocusVisible,
419
537
  isPressed: tagAria.isPressed,
420
- allowsRemoving: tagAria.allowsRemoving,
538
+ allowsRemoving: allowsRemoving(),
421
539
  selectionMode: state?.selectionMode() ?? "none",
422
540
  removeButtonProps: normalizedRemoveButtonProps(),
423
541
  }));
@@ -440,15 +558,42 @@ export function Tag(props: TagProps): JSX.Element {
440
558
 
441
559
  const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
442
560
 
561
+ // Pin remove props carry no tabIndex. #318 keeps tabIndex -1 on TagRemoveButton.
562
+ const removeButtonSlot: ButtonProps = {
563
+ get id() {
564
+ return tagAria.removeButtonProps.id as string;
565
+ },
566
+ get "aria-label"() {
567
+ return tagAria.removeButtonProps["aria-label"] as string;
568
+ },
569
+ get "aria-labelledby"() {
570
+ return tagAria.removeButtonProps["aria-labelledby"] as string;
571
+ },
572
+ get isDisabled() {
573
+ return Boolean(tagAria.removeButtonProps.isDisabled);
574
+ },
575
+ onPress() {
576
+ const handler = tagAria.removeButtonProps.onPress;
577
+ if (typeof handler === "function") {
578
+ handler();
579
+ }
580
+ },
581
+ };
582
+ const buttonContextValue = {
583
+ slots: {
584
+ remove: removeButtonSlot,
585
+ },
586
+ };
587
+
443
588
  return (
444
- <SelectionIndicatorContext.Provider value={selectionIndicatorContext()}>
445
- <TagContext.Provider
589
+ <SelectionIndicatorContext value={selectionIndicatorContext()}>
590
+ <TagContext
446
591
  value={{
447
592
  get removeButtonProps() {
448
593
  return normalizedRemoveButtonProps();
449
594
  },
450
595
  get allowsRemoving() {
451
- return tagAria.allowsRemoving;
596
+ return allowsRemoving();
452
597
  },
453
598
  }}
454
599
  >
@@ -458,40 +603,56 @@ export function Tag(props: TagProps): JSX.Element {
458
603
  {...tagAria.rowProps}
459
604
  class={renderProps.class()}
460
605
  style={renderProps.style()}
461
- onClick={(event) => {
462
- const rowClick = tagAria.rowProps.onClick;
463
- if (typeof rowClick === "function") {
464
- (rowClick as JSX.EventHandler<HTMLDivElement, MouseEvent>)(event);
465
- }
466
-
467
- if (!tagAria.isDisabled && !(event.target as Element | null)?.closest("button")) {
468
- local.onAction?.(local.id);
469
- }
470
- }}
471
606
  data-selected={dataAttr(tagAria.isSelected)}
472
607
  data-disabled={dataAttr(tagAria.isDisabled)}
473
608
  data-focused={dataAttr(tagAria.isFocused)}
609
+ data-focus-visible={dataAttr(tagAria.isFocusVisible)}
474
610
  data-pressed={dataAttr(tagAria.isPressed)}
475
- data-allows-removing={dataAttr(tagAria.allowsRemoving)}
611
+ data-allows-removing={dataAttr(allowsRemoving())}
476
612
  >
477
613
  <div {...tagAria.gridCellProps} style={{ display: "contents" }}>
478
- {renderProps.renderChildren()}
614
+ <Provider
615
+ values={[[ButtonContext, buttonContextValue]] as Array<[Context<unknown>, unknown]>}
616
+ >
617
+ {renderProps.renderChildrenStable()}
618
+ </Provider>
479
619
  </div>
480
620
  </div>
481
- </TagContext.Provider>
482
- </SelectionIndicatorContext.Provider>
621
+ </TagContext>
622
+ </SelectionIndicatorContext>
483
623
  );
484
624
  }
485
625
 
486
- export interface TagRemoveButtonProps {
487
- /** The children of the button (usually an X icon). */
488
- children?: JSX.Element;
489
- /** The CSS className for the element. */
490
- class?: string;
491
- /** The inline style for the element. */
492
- style?: JSX.CSSProperties;
626
+ export interface TagRemoveButtonRenderProps {
627
+ /** Whether the remove button is pressed. */
628
+ isPressed: boolean;
629
+ /** Whether the remove button is disabled. */
630
+ isDisabled: boolean;
631
+ /** Whether the remove button is hovered. */
632
+ isHovered: boolean;
633
+ /** Whether the remove button is focused. */
634
+ isFocused: boolean;
635
+ /** Whether the remove button has focus visible. */
636
+ isFocusVisible: boolean;
637
+ }
638
+
639
+ export interface TagRemoveButtonProps
640
+ extends
641
+ SlotProps,
642
+ Omit<
643
+ JSX.ButtonHTMLAttributes<HTMLButtonElement>,
644
+ "children" | "class" | "style" | "disabled" | "ref"
645
+ > {
646
+ /** The children of the button (usually an X icon) or a render function. */
647
+ children?: RenderChildren<TagRemoveButtonRenderProps>;
648
+ /** The CSS className for the element or a function. */
649
+ class?: ClassNameOrFunction<TagRemoveButtonRenderProps>;
650
+ /** The inline style for the element or a function. */
651
+ style?: StyleOrFunction<TagRemoveButtonRenderProps>;
493
652
  /** Explicit button props from Tag render props. */
494
653
  buttonProps?: Record<string, unknown>;
654
+ /** Ref to the button element. */
655
+ ref?: RefLike<HTMLButtonElement>;
495
656
  }
496
657
 
497
658
  /**
@@ -499,42 +660,168 @@ export interface TagRemoveButtonProps {
499
660
  * It should be placed inside a Tag component.
500
661
  */
501
662
  export function TagRemoveButton(props: TagRemoveButtonProps): JSX.Element {
663
+ const [local, domProps] = splitProps(props, ["children", "class", "style", "buttonProps", "ref"]);
664
+
502
665
  const tagContext = useContext(TagContext);
503
- const getRemoveButtonProps = () => props.buttonProps ?? tagContext?.removeButtonProps ?? {};
504
- const getIsDisabled = () => Boolean(getRemoveButtonProps().isDisabled);
505
- const rawId = getRemoveButtonProps().id;
506
- const rawAriaLabel = getRemoveButtonProps()["aria-label"];
507
- const rawAriaLabelledBy = getRemoveButtonProps()["aria-labelledby"];
508
- const buttonId: string | undefined = typeof rawId === "string" ? rawId : undefined;
509
- const ariaLabel: string = typeof rawAriaLabel === "string" ? rawAriaLabel : "Remove";
510
- const ariaLabelledBy: string | undefined =
511
- typeof rawAriaLabelledBy === "string" ? rawAriaLabelledBy : undefined;
666
+ const getRemoveButtonProps = () =>
667
+ (local.buttonProps ?? tagContext?.removeButtonProps ?? {}) as Record<string, unknown>;
668
+ const isDisabled = () => Boolean(getRemoveButtonProps().isDisabled);
669
+ const rawId = () => getRemoveButtonProps().id;
670
+ const rawAriaLabel = () => getRemoveButtonProps()["aria-label"];
671
+ const rawAriaLabelledBy = () => getRemoveButtonProps()["aria-labelledby"];
672
+ const rawTabIndex = () => getRemoveButtonProps().tabIndex;
673
+
674
+ const buttonId = () => (typeof rawId() === "string" ? (rawId() as string) : undefined);
675
+ const ariaLabel = () =>
676
+ typeof rawAriaLabel() === "string" ? (rawAriaLabel() as string) : "Remove";
677
+ const ariaLabelledBy = () =>
678
+ typeof rawAriaLabelledBy() === "string" ? (rawAriaLabelledBy() as string) : undefined;
679
+ const tabIndex = () =>
680
+ typeof rawTabIndex() === "number" ? (rawTabIndex() as number) : undefined;
681
+
682
+ const { buttonProps, isPressed } = createButton({
683
+ get id() {
684
+ return buttonId();
685
+ },
686
+ get "aria-label"() {
687
+ return ariaLabel();
688
+ },
689
+ get "aria-labelledby"() {
690
+ return ariaLabelledBy();
691
+ },
692
+ get isDisabled() {
693
+ return isDisabled();
694
+ },
695
+ get excludeFromTabOrder() {
696
+ return tabIndex() === -1;
697
+ },
698
+ onPress: (e) => {
699
+ const handler = getRemoveButtonProps().onPress;
700
+ if (typeof handler === "function" && !isDisabled()) {
701
+ (handler as (e: unknown) => void)(e);
702
+ }
703
+ },
704
+ });
512
705
 
513
- const handleClick: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (event) => {
706
+ const { isHovered, hoverProps } = createHover({
707
+ get isDisabled() {
708
+ return isDisabled();
709
+ },
710
+ });
711
+
712
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
713
+
714
+ const renderValues = createMemo<TagRemoveButtonRenderProps>(() => ({
715
+ isPressed: isPressed(),
716
+ isDisabled: isDisabled(),
717
+ isHovered: isHovered(),
718
+ isFocused: isFocused(),
719
+ isFocusVisible: isFocusVisible(),
720
+ }));
721
+
722
+ const renderProps = useRenderProps(
723
+ {
724
+ get children() {
725
+ return local.children ?? "×";
726
+ },
727
+ get class() {
728
+ return local.class;
729
+ },
730
+ get style() {
731
+ return local.style;
732
+ },
733
+ defaultClassName: "solidaria-TagRemoveButton",
734
+ },
735
+ renderValues,
736
+ );
737
+
738
+ const cleanButtonProps = () => {
739
+ const { ref: _ref, ...rest } = buttonProps as Record<string, unknown>;
740
+ return rest;
741
+ };
742
+ const cleanHoverProps = () => {
743
+ const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;
744
+ return rest;
745
+ };
746
+ const cleanFocusProps = () => {
747
+ const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;
748
+ return rest;
749
+ };
750
+
751
+ const handlePointerDown: JSX.EventHandler<HTMLButtonElement, PointerEvent> = (event) => {
752
+ event.stopPropagation();
753
+ const handler = cleanButtonProps().onPointerDown;
754
+ if (typeof handler === "function") {
755
+ (handler as JSX.EventHandler<HTMLButtonElement, PointerEvent>)(event);
756
+ }
757
+ };
758
+
759
+ const handleMouseDown: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (event) => {
514
760
  event.stopPropagation();
515
- const handler = getRemoveButtonProps().onPress;
516
- if (typeof handler === "function" && !getIsDisabled()) {
517
- (handler as () => void)();
761
+ const handler = cleanButtonProps().onMouseDown;
762
+ if (typeof handler === "function") {
763
+ (handler as JSX.EventHandler<HTMLButtonElement, MouseEvent>)(event);
518
764
  }
519
765
  };
520
- const stopRowPress: JSX.EventHandler<HTMLButtonElement, PointerEvent> = (event) => {
766
+
767
+ const handleClick: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (event) => {
521
768
  event.stopPropagation();
769
+ const handler = cleanButtonProps().onClick;
770
+ if (typeof handler === "function") {
771
+ (handler as JSX.EventHandler<HTMLButtonElement, MouseEvent>)(event);
772
+ }
773
+ };
774
+
775
+ const handleKeyDown: JSX.EventHandler<HTMLButtonElement, KeyboardEvent> = (event) => {
776
+ const handler = cleanButtonProps().onKeyDown;
777
+ if (typeof handler === "function") {
778
+ (handler as JSX.EventHandler<HTMLButtonElement, KeyboardEvent>)(event);
779
+ }
780
+ if (event.key === "Enter" || event.key === " " || event.key === "Spacebar") {
781
+ event.stopPropagation();
782
+ }
783
+ };
784
+
785
+ const handleKeyUp: JSX.EventHandler<HTMLButtonElement, KeyboardEvent> = (event) => {
786
+ const handler = cleanButtonProps().onKeyUp;
787
+ if (typeof handler === "function") {
788
+ (handler as JSX.EventHandler<HTMLButtonElement, KeyboardEvent>)(event);
789
+ }
790
+ if (event.key === "Enter" || event.key === " " || event.key === "Spacebar") {
791
+ event.stopPropagation();
792
+ }
522
793
  };
523
794
 
524
795
  return (
525
796
  <button
797
+ {...domProps}
798
+ {...cleanButtonProps()}
799
+ {...cleanFocusProps()}
800
+ {...cleanHoverProps()}
801
+ ref={(el) => {
802
+ assignRef(local.ref, el);
803
+ }}
526
804
  type="button"
527
- class={props.class ?? "solidaria-TagRemoveButton"}
528
- style={props.style}
529
- id={buttonId}
530
- aria-label={ariaLabel}
531
- aria-labelledby={ariaLabelledBy}
532
- disabled={getIsDisabled()}
805
+ id={buttonId()}
806
+ aria-label={ariaLabel()}
807
+ aria-labelledby={ariaLabelledBy()}
808
+ tabindex={tabIndex()}
809
+ disabled={isDisabled()}
810
+ class={renderProps.class()}
811
+ style={renderProps.style()}
533
812
  data-allows-removing={dataAttr(tagContext?.allowsRemoving ?? false)}
534
- onPointerDown={stopRowPress}
813
+ data-pressed={dataAttr(isPressed())}
814
+ data-disabled={dataAttr(isDisabled())}
815
+ data-hovered={dataAttr(isHovered())}
816
+ data-focused={dataAttr(isFocused())}
817
+ data-focus-visible={dataAttr(isFocusVisible())}
818
+ onPointerDown={handlePointerDown}
819
+ onMouseDown={handleMouseDown}
535
820
  onClick={handleClick}
821
+ onKeyDown={handleKeyDown}
822
+ onKeyUp={handleKeyUp}
536
823
  >
537
- {props.children ?? "×"}
824
+ {renderProps.renderChildrenStable()}
538
825
  </button>
539
826
  );
540
827
  }