@proyecto-viviana/solidaria-components 0.5.0 → 0.7.0-rc.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 (561) hide show
  1. package/LICENSE-APACHE-2.0 +201 -0
  2. package/NOTICE +91 -0
  3. package/README.md +4 -7
  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 +25 -17
  19. package/dist/Alert.js.map +1 -1
  20. package/dist/Alert.jsx +9 -5
  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 +18 -5
  25. package/dist/Autocomplete.js.map +1 -1
  26. package/dist/Autocomplete.jsx +20 -7
  27. package/dist/Autocomplete.jsx.map +1 -1
  28. package/dist/Breadcrumbs.d.ts +2 -7
  29. package/dist/Breadcrumbs.d.ts.map +1 -1
  30. package/dist/Breadcrumbs.js +71 -51
  31. package/dist/Breadcrumbs.js.map +1 -1
  32. package/dist/Breadcrumbs.jsx +25 -12
  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 +125 -72
  37. package/dist/Button.js.map +1 -1
  38. package/dist/Button.jsx +105 -43
  39. package/dist/Button.jsx.map +1 -1
  40. package/dist/Calendar.d.ts +1 -7
  41. package/dist/Calendar.d.ts.map +1 -1
  42. package/dist/Calendar.js +297 -221
  43. package/dist/Calendar.js.map +1 -1
  44. package/dist/Calendar.jsx +52 -32
  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 +2 -7
  53. package/dist/Checkbox.d.ts.map +1 -1
  54. package/dist/Checkbox.js +332 -270
  55. package/dist/Checkbox.js.map +1 -1
  56. package/dist/Checkbox.jsx +70 -77
  57. package/dist/Checkbox.jsx.map +1 -1
  58. package/dist/Collection.d.ts +33 -7
  59. package/dist/Collection.d.ts.map +1 -1
  60. package/dist/Collection.js +128 -74
  61. package/dist/Collection.js.map +1 -1
  62. package/dist/Collection.jsx +46 -7
  63. package/dist/Collection.jsx.map +1 -1
  64. package/dist/Color.d.ts +15 -20
  65. package/dist/Color.d.ts.map +1 -1
  66. package/dist/Color.js +572 -334
  67. package/dist/Color.js.map +1 -1
  68. package/dist/Color.jsx +205 -85
  69. package/dist/Color.jsx.map +1 -1
  70. package/dist/ColorEditor.d.ts +3 -1
  71. package/dist/ColorEditor.d.ts.map +1 -1
  72. package/dist/ColorEditor.js +147 -124
  73. package/dist/ColorEditor.js.map +1 -1
  74. package/dist/ColorEditor.jsx +4 -1
  75. package/dist/ColorEditor.jsx.map +1 -1
  76. package/dist/ComboBox.d.ts +31 -10
  77. package/dist/ComboBox.d.ts.map +1 -1
  78. package/dist/ComboBox.js +539 -274
  79. package/dist/ComboBox.js.map +1 -1
  80. package/dist/ComboBox.jsx +213 -70
  81. package/dist/ComboBox.jsx.map +1 -1
  82. package/dist/ContextualHelpTrigger.d.ts +1 -7
  83. package/dist/ContextualHelpTrigger.d.ts.map +1 -1
  84. package/dist/ContextualHelpTrigger.js +102 -72
  85. package/dist/ContextualHelpTrigger.js.map +1 -1
  86. package/dist/ContextualHelpTrigger.jsx +36 -16
  87. package/dist/ContextualHelpTrigger.jsx.map +1 -1
  88. package/dist/DateField.d.ts +2 -7
  89. package/dist/DateField.d.ts.map +1 -1
  90. package/dist/DateField.js +0 -2
  91. package/dist/DateField.jsx +0 -2
  92. package/dist/DateField2.js +194 -179
  93. package/dist/DateField2.js.map +1 -1
  94. package/dist/DateField2.jsx +58 -55
  95. package/dist/DateField2.jsx.map +1 -1
  96. package/dist/DatePicker.d.ts +7 -7
  97. package/dist/DatePicker.d.ts.map +1 -1
  98. package/dist/DatePicker.js +2 -2
  99. package/dist/DatePicker.jsx +2 -2
  100. package/dist/DatePicker2.js +357 -435
  101. package/dist/DatePicker2.js.map +1 -1
  102. package/dist/DatePicker2.jsx +109 -178
  103. package/dist/DatePicker2.jsx.map +1 -1
  104. package/dist/DateRangePickerContext.d.ts +7 -0
  105. package/dist/DateRangePickerContext.d.ts.map +1 -1
  106. package/dist/Dialog.d.ts +4 -9
  107. package/dist/Dialog.d.ts.map +1 -1
  108. package/dist/Dialog.js +168 -101
  109. package/dist/Dialog.js.map +1 -1
  110. package/dist/Dialog.jsx +75 -27
  111. package/dist/Dialog.jsx.map +1 -1
  112. package/dist/Disclosure.d.ts +1 -9
  113. package/dist/Disclosure.d.ts.map +1 -1
  114. package/dist/Disclosure.js +121 -79
  115. package/dist/Disclosure.js.map +1 -1
  116. package/dist/Disclosure.jsx +32 -19
  117. package/dist/Disclosure.jsx.map +1 -1
  118. package/dist/DragAndDrop.d.ts +9 -6
  119. package/dist/DragAndDrop.d.ts.map +1 -1
  120. package/dist/DragAndDrop.js +37 -22
  121. package/dist/DragAndDrop.js.map +1 -1
  122. package/dist/DragAndDrop.jsx +20 -4
  123. package/dist/DragAndDrop.jsx.map +1 -1
  124. package/dist/DragPreview.d.ts +1 -1
  125. package/dist/DragPreview.d.ts.map +1 -1
  126. package/dist/DropZone.d.ts +1 -7
  127. package/dist/DropZone.d.ts.map +1 -1
  128. package/dist/DropZone.js +74 -40
  129. package/dist/DropZone.js.map +1 -1
  130. package/dist/DropZone.jsx +24 -8
  131. package/dist/DropZone.jsx.map +1 -1
  132. package/dist/ElementTag.d.ts +9 -20
  133. package/dist/ElementTag.d.ts.map +1 -1
  134. package/dist/ElementTag.js +8 -210
  135. package/dist/ElementTag.js.map +1 -1
  136. package/dist/ElementTag.jsx +8 -57
  137. package/dist/ElementTag.jsx.map +1 -1
  138. package/dist/FieldError.d.ts +8 -7
  139. package/dist/FieldError.d.ts.map +1 -1
  140. package/dist/FieldError.js +33 -13
  141. package/dist/FieldError.js.map +1 -1
  142. package/dist/FieldError.jsx +20 -5
  143. package/dist/FieldError.jsx.map +1 -1
  144. package/dist/FileTrigger.d.ts +1 -7
  145. package/dist/FileTrigger.d.ts.map +1 -1
  146. package/dist/FileTrigger.js +30 -12
  147. package/dist/FileTrigger.js.map +1 -1
  148. package/dist/FileTrigger.jsx +15 -2
  149. package/dist/FileTrigger.jsx.map +1 -1
  150. package/dist/Focusable.d.ts +2 -8
  151. package/dist/Focusable.d.ts.map +1 -1
  152. package/dist/Focusable.js +23 -6
  153. package/dist/Focusable.js.map +1 -1
  154. package/dist/Focusable.jsx +22 -5
  155. package/dist/Focusable.jsx.map +1 -1
  156. package/dist/Form.d.ts +9 -8
  157. package/dist/Form.d.ts.map +1 -1
  158. package/dist/Form.js +66 -43
  159. package/dist/Form.js.map +1 -1
  160. package/dist/Form.jsx +36 -16
  161. package/dist/Form.jsx.map +1 -1
  162. package/dist/GridList.d.ts +5 -10
  163. package/dist/GridList.d.ts.map +1 -1
  164. package/dist/GridList.js +372 -243
  165. package/dist/GridList.js.map +1 -1
  166. package/dist/GridList.jsx +177 -99
  167. package/dist/GridList.jsx.map +1 -1
  168. package/dist/HiddenDateInput.d.ts +1 -7
  169. package/dist/HiddenDateInput.d.ts.map +1 -1
  170. package/dist/Icon.d.ts +4 -1
  171. package/dist/Icon.d.ts.map +1 -1
  172. package/dist/Icon.js +41 -37
  173. package/dist/Icon.js.map +1 -1
  174. package/dist/Icon.jsx +7 -3
  175. package/dist/Icon.jsx.map +1 -1
  176. package/dist/Keyboard.d.ts +1 -7
  177. package/dist/Keyboard.d.ts.map +1 -1
  178. package/dist/Keyboard.js +24 -11
  179. package/dist/Keyboard.js.map +1 -1
  180. package/dist/Keyboard.jsx +15 -2
  181. package/dist/Keyboard.jsx.map +1 -1
  182. package/dist/Label.d.ts +20 -0
  183. package/dist/Label.d.ts.map +1 -0
  184. package/dist/Label.js +60 -0
  185. package/dist/Label.js.map +1 -0
  186. package/dist/Label.jsx +47 -0
  187. package/dist/Label.jsx.map +1 -0
  188. package/dist/Landmark.d.ts +4 -1
  189. package/dist/Landmark.d.ts.map +1 -1
  190. package/dist/Landmark.js +10 -4
  191. package/dist/Landmark.js.map +1 -1
  192. package/dist/Landmark.jsx +5 -1
  193. package/dist/Landmark.jsx.map +1 -1
  194. package/dist/Link.d.ts +2 -7
  195. package/dist/Link.d.ts.map +1 -1
  196. package/dist/Link.js +56 -36
  197. package/dist/Link.js.map +1 -1
  198. package/dist/Link.jsx +52 -10
  199. package/dist/Link.jsx.map +1 -1
  200. package/dist/ListBox.d.ts +17 -13
  201. package/dist/ListBox.d.ts.map +1 -1
  202. package/dist/ListBox.js +647 -348
  203. package/dist/ListBox.js.map +1 -1
  204. package/dist/ListBox.jsx +339 -236
  205. package/dist/ListBox.jsx.map +1 -1
  206. package/dist/ListDropTargetDelegate.d.ts +3 -0
  207. package/dist/ListDropTargetDelegate.d.ts.map +1 -1
  208. package/dist/Menu.d.ts +39 -30
  209. package/dist/Menu.d.ts.map +1 -1
  210. package/dist/Menu.js +547 -368
  211. package/dist/Menu.js.map +1 -1
  212. package/dist/Menu.jsx +328 -230
  213. package/dist/Menu.jsx.map +1 -1
  214. package/dist/Meter.d.ts +6 -13
  215. package/dist/Meter.d.ts.map +1 -1
  216. package/dist/Meter.js +55 -18
  217. package/dist/Meter.js.map +1 -1
  218. package/dist/Meter.jsx +33 -8
  219. package/dist/Meter.jsx.map +1 -1
  220. package/dist/Modal.d.ts +1 -7
  221. package/dist/Modal.d.ts.map +1 -1
  222. package/dist/Modal.js +104 -56
  223. package/dist/Modal.js.map +1 -1
  224. package/dist/Modal.jsx +68 -38
  225. package/dist/Modal.jsx.map +1 -1
  226. package/dist/NumberField.d.ts +4 -7
  227. package/dist/NumberField.d.ts.map +1 -1
  228. package/dist/NumberField.js +243 -124
  229. package/dist/NumberField.js.map +1 -1
  230. package/dist/NumberField.jsx +115 -26
  231. package/dist/NumberField.jsx.map +1 -1
  232. package/dist/Popover.d.ts +15 -7
  233. package/dist/Popover.d.ts.map +1 -1
  234. package/dist/Popover.js +370 -181
  235. package/dist/Popover.js.map +1 -1
  236. package/dist/Popover.jsx +215 -82
  237. package/dist/Popover.jsx.map +1 -1
  238. package/dist/Pressable.d.ts +2 -8
  239. package/dist/Pressable.d.ts.map +1 -1
  240. package/dist/Pressable.js +23 -6
  241. package/dist/Pressable.js.map +1 -1
  242. package/dist/Pressable.jsx +22 -5
  243. package/dist/Pressable.jsx.map +1 -1
  244. package/dist/PreviewTrigger.d.ts +24 -0
  245. package/dist/PreviewTrigger.d.ts.map +1 -0
  246. package/dist/PreviewTrigger.js +128 -0
  247. package/dist/PreviewTrigger.js.map +1 -0
  248. package/dist/PreviewTrigger.jsx +117 -0
  249. package/dist/PreviewTrigger.jsx.map +1 -0
  250. package/dist/ProgressBar.d.ts +1 -7
  251. package/dist/ProgressBar.d.ts.map +1 -1
  252. package/dist/ProgressBar.js +34 -14
  253. package/dist/ProgressBar.js.map +1 -1
  254. package/dist/ProgressBar.jsx +17 -3
  255. package/dist/ProgressBar.jsx.map +1 -1
  256. package/dist/RadioGroup.d.ts +2 -7
  257. package/dist/RadioGroup.d.ts.map +1 -1
  258. package/dist/RadioGroup.js +388 -269
  259. package/dist/RadioGroup.js.map +1 -1
  260. package/dist/RadioGroup.jsx +110 -99
  261. package/dist/RadioGroup.jsx.map +1 -1
  262. package/dist/RangeCalendar.d.ts +3 -7
  263. package/dist/RangeCalendar.d.ts.map +1 -1
  264. package/dist/RangeCalendar.js +271 -202
  265. package/dist/RangeCalendar.js.map +1 -1
  266. package/dist/RangeCalendar.jsx +56 -37
  267. package/dist/RangeCalendar.jsx.map +1 -1
  268. package/dist/RouterProvider.d.ts +3 -9
  269. package/dist/RouterProvider.d.ts.map +1 -1
  270. package/dist/RouterProvider.js +15 -14
  271. package/dist/RouterProvider.js.map +1 -1
  272. package/dist/RouterProvider.jsx +14 -13
  273. package/dist/RouterProvider.jsx.map +1 -1
  274. package/dist/SearchField.d.ts +4 -7
  275. package/dist/SearchField.d.ts.map +1 -1
  276. package/dist/SearchField.js +191 -164
  277. package/dist/SearchField.js.map +1 -1
  278. package/dist/SearchField.jsx +69 -62
  279. package/dist/SearchField.jsx.map +1 -1
  280. package/dist/Select.d.ts +5 -10
  281. package/dist/Select.d.ts.map +1 -1
  282. package/dist/Select.js +565 -359
  283. package/dist/Select.js.map +1 -1
  284. package/dist/Select.jsx +281 -161
  285. package/dist/Select.jsx.map +1 -1
  286. package/dist/SelectionIndicator.d.ts +1 -4
  287. package/dist/SelectionIndicator.d.ts.map +1 -1
  288. package/dist/SelectionIndicator.js +29 -13
  289. package/dist/SelectionIndicator.js.map +1 -1
  290. package/dist/SelectionIndicator.jsx +18 -4
  291. package/dist/SelectionIndicator.jsx.map +1 -1
  292. package/dist/Separator.d.ts +1 -7
  293. package/dist/Separator.d.ts.map +1 -1
  294. package/dist/Separator.js +22 -6
  295. package/dist/Separator.js.map +1 -1
  296. package/dist/Separator.jsx +16 -3
  297. package/dist/Separator.jsx.map +1 -1
  298. package/dist/SharedElementTransition.d.ts +1 -10
  299. package/dist/SharedElementTransition.d.ts.map +1 -1
  300. package/dist/SharedElementTransition.js +68 -40
  301. package/dist/SharedElementTransition.js.map +1 -1
  302. package/dist/SharedElementTransition.jsx +49 -25
  303. package/dist/SharedElementTransition.jsx.map +1 -1
  304. package/dist/Slider.d.ts +2 -8
  305. package/dist/Slider.d.ts.map +1 -1
  306. package/dist/Slider.js +155 -97
  307. package/dist/Slider.js.map +1 -1
  308. package/dist/Slider.jsx +25 -12
  309. package/dist/Slider.jsx.map +1 -1
  310. package/dist/StepList.d.ts +1 -7
  311. package/dist/StepList.d.ts.map +1 -1
  312. package/dist/StepList.js +112 -68
  313. package/dist/StepList.js.map +1 -1
  314. package/dist/StepList.jsx +58 -20
  315. package/dist/StepList.jsx.map +1 -1
  316. package/dist/Switch.d.ts +2 -9
  317. package/dist/Switch.d.ts.map +1 -1
  318. package/dist/Switch.js +164 -114
  319. package/dist/Switch.js.map +1 -1
  320. package/dist/Switch.jsx +26 -13
  321. package/dist/Switch.jsx.map +1 -1
  322. package/dist/Table.d.ts +2 -1
  323. package/dist/Table.d.ts.map +1 -1
  324. package/dist/Table.js +689 -592
  325. package/dist/Table.js.map +1 -1
  326. package/dist/Table.jsx +317 -237
  327. package/dist/Table.jsx.map +1 -1
  328. package/dist/Tabs.d.ts +2 -7
  329. package/dist/Tabs.d.ts.map +1 -1
  330. package/dist/Tabs.js +278 -293
  331. package/dist/Tabs.js.map +1 -1
  332. package/dist/Tabs.jsx +68 -66
  333. package/dist/Tabs.jsx.map +1 -1
  334. package/dist/TagGroup.d.ts +4 -11
  335. package/dist/TagGroup.d.ts.map +1 -1
  336. package/dist/TagGroup.js +153 -115
  337. package/dist/TagGroup.js.map +1 -1
  338. package/dist/TagGroup.jsx +37 -24
  339. package/dist/TagGroup.jsx.map +1 -1
  340. package/dist/Text.d.ts +3 -3
  341. package/dist/Text.d.ts.map +1 -1
  342. package/dist/Text.js +24 -7
  343. package/dist/Text.js.map +1 -1
  344. package/dist/Text.jsx +17 -5
  345. package/dist/Text.jsx.map +1 -1
  346. package/dist/TextField.d.ts +3 -16
  347. package/dist/TextField.d.ts.map +1 -1
  348. package/dist/TextField.js +104 -129
  349. package/dist/TextField.js.map +1 -1
  350. package/dist/TextField.jsx +76 -102
  351. package/dist/TextField.jsx.map +1 -1
  352. package/dist/TimeField.d.ts +2 -15
  353. package/dist/TimeField.d.ts.map +1 -1
  354. package/dist/TimeField.js +86 -102
  355. package/dist/TimeField.js.map +1 -1
  356. package/dist/TimeField.jsx +32 -49
  357. package/dist/TimeField.jsx.map +1 -1
  358. package/dist/Toast.d.ts +10 -13
  359. package/dist/Toast.d.ts.map +1 -1
  360. package/dist/Toast.js +209 -108
  361. package/dist/Toast.js.map +1 -1
  362. package/dist/Toast.jsx +127 -22
  363. package/dist/Toast.jsx.map +1 -1
  364. package/dist/ToggleButton.d.ts +1 -7
  365. package/dist/ToggleButton.d.ts.map +1 -1
  366. package/dist/ToggleButton.js +57 -35
  367. package/dist/ToggleButton.js.map +1 -1
  368. package/dist/ToggleButton.jsx +26 -12
  369. package/dist/ToggleButton.jsx.map +1 -1
  370. package/dist/ToggleButtonGroup.d.ts +1 -7
  371. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  372. package/dist/ToggleButtonGroup.js +59 -44
  373. package/dist/ToggleButtonGroup.js.map +1 -1
  374. package/dist/ToggleButtonGroup.jsx +25 -12
  375. package/dist/ToggleButtonGroup.jsx.map +1 -1
  376. package/dist/TokenField.d.ts +52 -0
  377. package/dist/TokenField.d.ts.map +1 -0
  378. package/dist/TokenField.js +301 -0
  379. package/dist/TokenField.js.map +1 -0
  380. package/dist/TokenField.jsx +197 -0
  381. package/dist/TokenField.jsx.map +1 -0
  382. package/dist/Toolbar.d.ts +2 -7
  383. package/dist/Toolbar.d.ts.map +1 -1
  384. package/dist/Toolbar.js +35 -16
  385. package/dist/Toolbar.js.map +1 -1
  386. package/dist/Toolbar.jsx +15 -2
  387. package/dist/Toolbar.jsx.map +1 -1
  388. package/dist/Tooltip.d.ts +2 -7
  389. package/dist/Tooltip.d.ts.map +1 -1
  390. package/dist/Tooltip.js +105 -68
  391. package/dist/Tooltip.js.map +1 -1
  392. package/dist/Tooltip.jsx +60 -36
  393. package/dist/Tooltip.jsx.map +1 -1
  394. package/dist/Tree.d.ts +8 -11
  395. package/dist/Tree.d.ts.map +1 -1
  396. package/dist/Tree.js +486 -339
  397. package/dist/Tree.js.map +1 -1
  398. package/dist/Tree.jsx +155 -107
  399. package/dist/Tree.jsx.map +1 -1
  400. package/dist/Virtualizer.d.ts +39 -9
  401. package/dist/Virtualizer.d.ts.map +1 -1
  402. package/dist/Virtualizer.js +2 -2
  403. package/dist/Virtualizer.jsx +2 -2
  404. package/dist/Virtualizer2.js +491 -136
  405. package/dist/Virtualizer2.js.map +1 -1
  406. package/dist/Virtualizer2.jsx +455 -122
  407. package/dist/Virtualizer2.jsx.map +1 -1
  408. package/dist/VirtualizerLayouts.d.ts +55 -2
  409. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  410. package/dist/VisuallyHidden.d.ts +4 -3
  411. package/dist/VisuallyHidden.d.ts.map +1 -1
  412. package/dist/VisuallyHidden.js +18 -11
  413. package/dist/VisuallyHidden.js.map +1 -1
  414. package/dist/VisuallyHidden.jsx +15 -9
  415. package/dist/VisuallyHidden.jsx.map +1 -1
  416. package/dist/contexts.d.ts +25 -0
  417. package/dist/contexts.d.ts.map +1 -1
  418. package/dist/contexts.js +3 -0
  419. package/dist/contexts.js.map +1 -1
  420. package/dist/contexts.jsx +3 -0
  421. package/dist/contexts.jsx.map +1 -1
  422. package/dist/index.d.ts +11 -9
  423. package/dist/index.d.ts.map +1 -1
  424. package/dist/index.js +14 -11
  425. package/dist/index.jsx +14 -11
  426. package/dist/intl/index.d.ts +16 -0
  427. package/dist/intl/index.d.ts.map +1 -0
  428. package/dist/intl.js +212 -0
  429. package/dist/intl.js.map +1 -0
  430. package/dist/intl.jsx +212 -0
  431. package/dist/intl.jsx.map +1 -0
  432. package/dist/useDragAndDrop.d.ts +4 -2
  433. package/dist/useDragAndDrop.d.ts.map +1 -1
  434. package/dist/useDragAndDrop2.js +39 -21
  435. package/dist/useDragAndDrop2.js.map +1 -1
  436. package/dist/useDragAndDrop2.jsx +39 -21
  437. package/dist/useDragAndDrop2.jsx.map +1 -1
  438. package/dist/utils.d.ts +28 -9
  439. package/dist/utils.d.ts.map +1 -1
  440. package/dist/utils.js +96 -24
  441. package/dist/utils.js.map +1 -1
  442. package/dist/utils.jsx +81 -24
  443. package/dist/utils.jsx.map +1 -1
  444. package/dist/virtualizer/Layout.d.ts +9 -0
  445. package/dist/virtualizer/Layout.d.ts.map +1 -1
  446. package/dist/virtualizer/Layout.js +23 -2
  447. package/dist/virtualizer/Layout.js.map +1 -1
  448. package/dist/virtualizer/Layout.jsx +23 -2
  449. package/dist/virtualizer/Layout.jsx.map +1 -1
  450. package/package.json +29 -10
  451. package/src/ActionBar.tsx +50 -24
  452. package/src/ActionGroup.tsx +31 -19
  453. package/src/Alert.tsx +10 -4
  454. package/src/Autocomplete.tsx +24 -15
  455. package/src/Breadcrumbs.tsx +32 -16
  456. package/src/Button.tsx +182 -67
  457. package/src/Calendar.tsx +65 -47
  458. package/src/CalendarPicker.tsx +16 -1
  459. package/src/Checkbox.tsx +84 -116
  460. package/src/Collection.tsx +84 -3
  461. package/src/Color.tsx +282 -104
  462. package/src/ColorEditor.tsx +5 -1
  463. package/src/ComboBox.tsx +384 -109
  464. package/src/ContextualHelpTrigger.tsx +47 -41
  465. package/src/DateField.tsx +74 -106
  466. package/src/DatePicker.tsx +156 -352
  467. package/src/DateRangePickerContext.tsx +8 -0
  468. package/src/Dialog.tsx +105 -38
  469. package/src/Disclosure.tsx +29 -19
  470. package/src/DragAndDrop.tsx +43 -8
  471. package/src/DragPreview.tsx +20 -1
  472. package/src/DropZone.tsx +32 -18
  473. package/src/ElementTag.tsx +14 -104
  474. package/src/FieldError.tsx +39 -7
  475. package/src/FileTrigger.tsx +18 -3
  476. package/src/Focusable.tsx +27 -6
  477. package/src/Form.tsx +57 -11
  478. package/src/GridList.tsx +233 -141
  479. package/src/HiddenDateInput.tsx +19 -3
  480. package/src/Icon.tsx +8 -2
  481. package/src/Keyboard.tsx +18 -2
  482. package/src/Label.tsx +77 -0
  483. package/src/Landmark.tsx +6 -1
  484. package/src/Link.tsx +65 -19
  485. package/src/ListBox.tsx +645 -468
  486. package/src/ListDropTargetDelegate.ts +4 -0
  487. package/src/Menu.tsx +512 -349
  488. package/src/Meter.tsx +42 -8
  489. package/src/Modal.tsx +85 -42
  490. package/src/NumberField.tsx +161 -48
  491. package/src/Popover.tsx +424 -148
  492. package/src/Pressable.tsx +27 -6
  493. package/src/PreviewTrigger.tsx +171 -0
  494. package/src/ProgressBar.tsx +25 -3
  495. package/src/RadioGroup.tsx +230 -161
  496. package/src/RangeCalendar.tsx +75 -63
  497. package/src/RouterProvider.tsx +24 -14
  498. package/src/SearchField.tsx +118 -121
  499. package/src/Select.tsx +454 -274
  500. package/src/SelectionIndicator.tsx +21 -3
  501. package/src/Separator.tsx +17 -1
  502. package/src/SharedElementTransition.tsx +115 -97
  503. package/src/Slider.tsx +35 -17
  504. package/src/StepList.tsx +71 -32
  505. package/src/Switch.tsx +45 -29
  506. package/src/Table.tsx +446 -380
  507. package/src/Tabs.tsx +132 -155
  508. package/src/TagGroup.tsx +53 -40
  509. package/src/Text.tsx +23 -6
  510. package/src/TextField.tsx +118 -159
  511. package/src/TimeField.tsx +34 -95
  512. package/src/Toast.tsx +141 -67
  513. package/src/ToggleButton.tsx +33 -15
  514. package/src/ToggleButtonGroup.tsx +27 -9
  515. package/src/TokenField.tsx +379 -0
  516. package/src/Toolbar.tsx +19 -9
  517. package/src/Tooltip.tsx +126 -84
  518. package/src/Tree.tsx +233 -173
  519. package/src/Virtualizer.tsx +400 -138
  520. package/src/VirtualizerLayouts.ts +211 -26
  521. package/src/VisuallyHidden.tsx +22 -8
  522. package/src/contexts.ts +13 -0
  523. package/src/index.ts +32 -11
  524. package/src/intl/ar-AE.json +6 -0
  525. package/src/intl/bg-BG.json +6 -0
  526. package/src/intl/cs-CZ.json +6 -0
  527. package/src/intl/da-DK.json +6 -0
  528. package/src/intl/de-DE.json +6 -0
  529. package/src/intl/el-GR.json +6 -0
  530. package/src/intl/en-US.json +6 -0
  531. package/src/intl/es-ES.json +6 -0
  532. package/src/intl/et-EE.json +6 -0
  533. package/src/intl/fi-FI.json +6 -0
  534. package/src/intl/fr-FR.json +6 -0
  535. package/src/intl/he-IL.json +6 -0
  536. package/src/intl/hr-HR.json +6 -0
  537. package/src/intl/hu-HU.json +6 -0
  538. package/src/intl/index.ts +125 -0
  539. package/src/intl/it-IT.json +6 -0
  540. package/src/intl/ja-JP.json +6 -0
  541. package/src/intl/ko-KR.json +6 -0
  542. package/src/intl/lt-LT.json +6 -0
  543. package/src/intl/lv-LV.json +6 -0
  544. package/src/intl/nb-NO.json +6 -0
  545. package/src/intl/nl-NL.json +6 -0
  546. package/src/intl/pl-PL.json +6 -0
  547. package/src/intl/pt-BR.json +6 -0
  548. package/src/intl/pt-PT.json +6 -0
  549. package/src/intl/ro-RO.json +6 -0
  550. package/src/intl/ru-RU.json +6 -0
  551. package/src/intl/sk-SK.json +6 -0
  552. package/src/intl/sl-SI.json +6 -0
  553. package/src/intl/sr-SP.json +6 -0
  554. package/src/intl/sv-SE.json +6 -0
  555. package/src/intl/tr-TR.json +6 -0
  556. package/src/intl/uk-UA.json +6 -0
  557. package/src/intl/zh-CN.json +6 -0
  558. package/src/intl/zh-TW.json +6 -0
  559. package/src/useDragAndDrop.ts +30 -32
  560. package/src/utils.tsx +124 -68
  561. package/src/virtualizer/Layout.ts +29 -0
@@ -1,10 +1,22 @@
1
+ /*
2
+ * Copyright 2024 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
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/DragAndDrop.tsx
1
13
  import { dataAttr, useRenderProps } from "./utils.jsx";
2
14
  import { createContext, createMemo, useContext } from "solid-js";
3
15
  //#region src/DragAndDrop.tsx
4
16
  /**
5
17
  * Drag and drop composition helpers for solidaria-components.
6
18
  *
7
- * Compatibility target: react-aria-components DragAndDrop exports.
19
+ * Based on packages/react-aria-components/src/DragAndDrop.tsx.
8
20
  */
9
21
  const DragAndDropContext = createContext({});
10
22
  const DropIndicatorContext = createContext(null);
@@ -22,7 +34,7 @@ function DefaultDropIndicator(props) {
22
34
  style: props.style,
23
35
  defaultClassName: "solidaria-DropIndicator"
24
36
  }, () => ({ isDropTarget: isDropTarget() }));
25
- return <div role="option" aria-disabled={true} class={renderProps.class()} style={renderProps.style()} data-drop-target={dataAttr(isDropTarget())}>
37
+ return <div role="option" aria-disabled="true" class={renderProps.class()} style={renderProps.style()} data-drop-target={dataAttr(isDropTarget())}>
26
38
  {renderProps.renderChildren()}
27
39
  </div>;
28
40
  }
@@ -48,7 +60,7 @@ function useRenderDropIndicator(hooksOrDropState, maybeDropState) {
48
60
  };
49
61
  return (target) => {
50
62
  const stateIsDropTarget = dropState?.isDropTarget;
51
- const isTarget = typeof stateIsDropTarget === "function" ? stateIsDropTarget(target) : stateIsDropTarget === true ? targetsEqual(dropState?.target, target) : false;
63
+ const isTarget = (typeof dropState?.isDropTargetFor === "function" ? dropState.isDropTargetFor(target) : typeof stateIsDropTarget === "function" ? Boolean(stateIsDropTarget(target)) : false) || targetsEqual(dropState?.target, target);
52
64
  const isVirtualDragging = dragAndDropHooks?.isVirtualDragging?.() ?? false;
53
65
  if (!isTarget && !isVirtualDragging) return void 0;
54
66
  return dragAndDropHooks?.renderDropIndicator ? dragAndDropHooks.renderDropIndicator(target) : <DropIndicator target={target} />;
@@ -154,7 +166,11 @@ function mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, itemCou
154
166
  offsetBottom: Math.max(0, lastRect.y + lastRect.height - (endRect.y + endRect.height))
155
167
  };
156
168
  }
169
+ /** Indexes that must stay mounted off-screen without expanding the in-flow window. */
170
+ function indexesOutsideRange(range, indexes) {
171
+ return indexes.filter((index) => index < range.start || index >= range.end);
172
+ }
157
173
  //#endregion
158
- export { DragAndDropContext, DropIndicator, DropIndicatorContext, getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator };
174
+ export { DragAndDropContext, DropIndicator, DropIndicatorContext, getNormalizedDropTargetKey, indexesOutsideRange, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator };
159
175
 
160
176
  //# sourceMappingURL=DragAndDrop.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"DragAndDrop.jsx","names":[],"sources":["../src/DragAndDrop.tsx"],"sourcesContent":["/**\n * Drag and drop composition helpers for solidaria-components.\n *\n * Compatibility target: react-aria-components DragAndDrop exports.\n */\n\nimport { type JSX, type Accessor, createContext, createMemo, useContext } from \"solid-js\";\nimport type {\n DragTypes,\n DropOperation,\n DropTarget,\n ItemDropTarget,\n Key,\n} from \"@proyecto-viviana/solid-stately\";\nimport type { DragAndDropHooks } from \"./useDragAndDrop\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n dataAttr,\n} from \"./utils\";\n\nexport interface DragAndDropContextValue {\n dragAndDropHooks?: DragAndDropHooks<unknown>;\n dragState?: unknown;\n dropState?: {\n target?: DropTarget | null;\n isDropTarget?: (target: DropTarget) => boolean;\n };\n}\n\nexport const DragAndDropContext = createContext<DragAndDropContextValue>({});\n\nexport interface DropIndicatorRenderProps {\n isDropTarget: boolean;\n}\n\nexport interface DropIndicatorProps extends SlotProps {\n target: ItemDropTarget;\n children?: JSX.Element | ((props: DropIndicatorRenderProps) => JSX.Element);\n class?: ClassNameOrFunction<DropIndicatorRenderProps>;\n style?: StyleOrFunction<DropIndicatorRenderProps>;\n}\n\ninterface DropIndicatorContextValue {\n render: (props: DropIndicatorProps) => JSX.Element;\n}\n\nexport const DropIndicatorContext = createContext<DropIndicatorContextValue | null>(null);\n\nfunction DefaultDropIndicator(props: DropIndicatorProps): JSX.Element {\n const dnd = useContext(DragAndDropContext);\n const isDropTarget = createMemo(() => {\n const target = props.target;\n return dnd.dropState?.isDropTarget?.(target) ?? false;\n });\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: props.class,\n style: props.style,\n defaultClassName: \"solidaria-DropIndicator\",\n },\n () => ({\n isDropTarget: isDropTarget(),\n }),\n );\n\n return (\n <div\n role=\"option\"\n aria-disabled={true}\n class={renderProps.class()}\n style={renderProps.style()}\n data-drop-target={dataAttr(isDropTarget())}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n\nexport function DropIndicator(props: DropIndicatorProps): JSX.Element {\n const context = useContext(DropIndicatorContext);\n if (context) return context.render(props);\n return <DefaultDropIndicator {...props} />;\n}\n\nexport function useRenderDropIndicator(\n hooksOrDropState?:\n | Pick<\n DragAndDropHooks<unknown>,\n \"renderDropIndicator\" | \"isVirtualDragging\" | \"useDropIndicator\"\n >\n | {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n },\n maybeDropState?: {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n },\n): ((target: ItemDropTarget) => JSX.Element | undefined) | undefined {\n const looksLikeDropState = (\n value: unknown,\n ): value is {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n } => {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (\"isDropTarget\" in (value as Record<string, unknown>) ||\n \"target\" in (value as Record<string, unknown>)),\n );\n };\n\n const dragAndDropHooks = looksLikeDropState(hooksOrDropState) ? undefined : hooksOrDropState;\n const dropState = looksLikeDropState(hooksOrDropState) ? hooksOrDropState : maybeDropState;\n\n // RAC only renders collection indicators when drop hooks are present.\n if (dragAndDropHooks && !dragAndDropHooks.useDropIndicator) return undefined;\n if (!dropState && !dragAndDropHooks?.renderDropIndicator) return undefined;\n\n const targetsEqual = (a: DropTarget | null | undefined, b: DropTarget): boolean => {\n if (!a) return false;\n if (a.type !== b.type) return false;\n if (a.type === \"root\" && b.type === \"root\") return true;\n if (a.type !== \"item\" || b.type !== \"item\") return false;\n return a.key === b.key && a.dropPosition === b.dropPosition;\n };\n\n return (target: ItemDropTarget) => {\n const stateIsDropTarget = dropState?.isDropTarget;\n const isTarget =\n typeof stateIsDropTarget === \"function\"\n ? stateIsDropTarget(target)\n : stateIsDropTarget === true\n ? targetsEqual(dropState?.target, target)\n : false;\n const isVirtualDragging = dragAndDropHooks?.isVirtualDragging?.() ?? false;\n if (!isTarget && !isVirtualDragging) return undefined;\n return dragAndDropHooks?.renderDropIndicator ? (\n dragAndDropHooks.renderDropIndicator(target)\n ) : (\n <DropIndicator target={target} />\n );\n };\n}\n\ntype KeyAccessor = Key | null | undefined | Accessor<Key | null | undefined>;\n\ninterface SelectionManagerLike {\n focusedKey?: KeyAccessor;\n}\n\ninterface CollectionLike {\n getKeyAfter: (key: Key) => Key | null;\n getItem: (key: Key) => { level?: number; type?: string } | null | undefined;\n}\n\ninterface DroppableCollectionStateLike {\n target?: DropTarget | null;\n}\n\nexport interface VirtualRangeLike {\n start: number;\n end: number;\n offsetTop: number;\n offsetBottom: number;\n}\n\nexport interface LayoutInfoProviderLike {\n getLayoutInfo: (index: number) => { rect: { y: number; height: number } };\n}\n\nfunction resolveKey(value: KeyAccessor): Key | null | undefined {\n if (typeof value === \"function\") {\n return (value as Accessor<Key | null | undefined>)();\n }\n return value;\n}\n\nfunction getAfterDropNormalizedKey(target: ItemDropTarget, collection?: CollectionLike): Key {\n if (target.dropPosition !== \"after\" || !collection) return target.key;\n\n let nextKey = collection.getKeyAfter(target.key);\n let lastDescendantKey: Key | null = null;\n\n if (nextKey != null) {\n const targetLevel = collection.getItem(target.key)?.level ?? 0;\n while (nextKey != null) {\n const node = collection.getItem(nextKey);\n if (!node) break;\n if (node.type && node.type !== \"item\") {\n nextKey = collection.getKeyAfter(nextKey);\n continue;\n }\n if ((node.level ?? 0) <= targetLevel) break;\n lastDescendantKey = nextKey;\n nextKey = collection.getKeyAfter(nextKey);\n }\n }\n\n return nextKey ?? lastDescendantKey ?? target.key;\n}\n\nexport function getNormalizedDropTargetKey(\n target: DropTarget | null | undefined,\n collection?: CollectionLike,\n): Key | null {\n if (!target || target.type !== \"item\") return null;\n return getAfterDropNormalizedKey(target, collection);\n}\n\nexport function useDndPersistedKeys(\n selectionManager: SelectionManagerLike | null | undefined,\n dragAndDropHooks?: Pick<DragAndDropHooks<unknown>, \"isVirtualDragging\">,\n dropState?: DroppableCollectionStateLike,\n collection?: CollectionLike,\n): Accessor<Set<Key>> {\n return createMemo(() => {\n const focusedKey = resolveKey(selectionManager?.focusedKey);\n let dropTargetKey: Key | null | undefined;\n\n if (dragAndDropHooks?.isVirtualDragging?.() && dropState?.target?.type === \"item\") {\n dropTargetKey = getNormalizedDropTargetKey(dropState.target, collection) ?? undefined;\n }\n\n const keys = new Set<Key>();\n if (focusedKey != null) keys.add(focusedKey);\n if (dropTargetKey != null) keys.add(dropTargetKey);\n return keys;\n });\n}\n\nexport function mergePersistedKeysIntoVirtualRange(\n baseRange: VirtualRangeLike,\n persistedIndexes: number[],\n itemCount: number,\n layoutInfoProvider: LayoutInfoProviderLike,\n maxExtraItems = 60,\n options?: {\n forceIncludeIndexes?: number[];\n forceIncludeMaxSpan?: number;\n fallbackToForcedWindow?: boolean;\n },\n): VirtualRangeLike {\n const validPersistedIndexes = Array.from(\n new Set(persistedIndexes.filter((index) => index >= 0 && index < itemCount)),\n ).sort((a, b) => a - b);\n const forceIndexes = Array.from(\n new Set(\n (options?.forceIncludeIndexes ?? []).filter((index) => index >= 0 && index < itemCount),\n ),\n );\n\n if (itemCount <= 0) return baseRange;\n if (validPersistedIndexes.length === 0 && forceIndexes.length === 0) return baseRange;\n\n const baseSpan = Math.max(1, baseRange.end - baseRange.start);\n const maxSpan = Math.max(baseSpan, baseSpan + maxExtraItems);\n\n let start = baseRange.start;\n let end = baseRange.end;\n\n const distanceToBaseRange = (index: number): number => {\n if (index < baseRange.start) return baseRange.start - index;\n if (index >= baseRange.end) return index - (baseRange.end - 1);\n return 0;\n };\n\n for (const index of validPersistedIndexes.sort(\n (a, b) => distanceToBaseRange(a) - distanceToBaseRange(b),\n )) {\n const nextStart = Math.min(start, index);\n const nextEnd = Math.max(end, index + 1);\n if (nextEnd - nextStart <= maxSpan) {\n start = nextStart;\n end = nextEnd;\n }\n }\n\n if (forceIndexes.length > 0) {\n const forceMaxSpan = Math.max(maxSpan, options?.forceIncludeMaxSpan ?? Math.max(maxSpan, 300));\n for (const index of forceIndexes) {\n const nextStart = Math.min(start, index);\n const nextEnd = Math.max(end, index + 1);\n if (nextEnd - nextStart <= forceMaxSpan) {\n start = nextStart;\n end = nextEnd;\n }\n }\n\n if (options?.fallbackToForcedWindow !== false) {\n const missingForced = forceIndexes.filter((index) => index < start || index >= end);\n if (missingForced.length > 0) {\n const nearestForced = missingForced[0];\n const forceMaxSpan = Math.max(\n maxSpan,\n options?.forceIncludeMaxSpan ?? Math.max(maxSpan, 300),\n );\n const windowSpan = Math.min(itemCount, Math.max(baseSpan, forceMaxSpan));\n const centeredStart = Math.max(\n 0,\n Math.min(itemCount - windowSpan, nearestForced - Math.floor(windowSpan / 2)),\n );\n start = centeredStart;\n end = Math.min(itemCount, centeredStart + windowSpan);\n }\n }\n }\n\n if (start === baseRange.start && end === baseRange.end) return baseRange;\n\n const startRect = start > 0 ? layoutInfoProvider.getLayoutInfo(start).rect : { y: 0, height: 0 };\n const lastRect = layoutInfoProvider.getLayoutInfo(itemCount - 1).rect;\n const endRect = end > 0 ? layoutInfoProvider.getLayoutInfo(end - 1).rect : { y: 0, height: 0 };\n\n return {\n start,\n end,\n offsetTop: Math.max(0, startRect.y),\n offsetBottom: Math.max(0, lastRect.y + lastRect.height - (endRect.y + endRect.height)),\n };\n}\n\nexport type DropTargetDelegate = {\n getDropTargetFromPoint: (\n x: number,\n y: number,\n isValidDropTarget: (target: DropTarget) => boolean,\n ) => DropTarget | null;\n getDropOperation: (\n target: DropTarget,\n types: DragTypes,\n allowedOperations: DropOperation[],\n ) => DropOperation;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"DragAndDrop.jsx","names":[],"sources":["../src/DragAndDrop.tsx"],"sourcesContent":["/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/DragAndDrop.tsx\n\n/**\n * Drag and drop composition helpers for solidaria-components.\n *\n * Based on packages/react-aria-components/src/DragAndDrop.tsx.\n */\n\nimport { createContext, createMemo, useContext } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport type {\n DragTypes,\n DropOperation,\n DropTarget,\n ItemDropTarget,\n Key,\n} from \"@proyecto-viviana/solid-stately\";\nimport type { DragAndDropHooks } from \"./useDragAndDrop\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n dataAttr,\n} from \"./utils\";\n\nexport interface DragAndDropContextValue {\n dragAndDropHooks?: DragAndDropHooks<unknown>;\n dragState?: unknown;\n dropState?: {\n target?: DropTarget | null;\n isDropTarget?: (target: DropTarget) => boolean;\n };\n}\n\nexport const DragAndDropContext = createContext<DragAndDropContextValue>({});\n\nexport interface DropIndicatorRenderProps {\n isDropTarget: boolean;\n}\n\nexport interface DropIndicatorProps extends SlotProps {\n target: ItemDropTarget;\n children?: JSX.Element | ((props: DropIndicatorRenderProps) => JSX.Element);\n class?: ClassNameOrFunction<DropIndicatorRenderProps>;\n style?: StyleOrFunction<DropIndicatorRenderProps>;\n}\n\ninterface DropIndicatorContextValue {\n render: (props: DropIndicatorProps) => JSX.Element;\n}\n\nexport const DropIndicatorContext = createContext<DropIndicatorContextValue | null>(null);\n\nfunction DefaultDropIndicator(props: DropIndicatorProps): JSX.Element {\n const dnd = useContext(DragAndDropContext);\n const isDropTarget = createMemo(() => {\n const target = props.target;\n return dnd.dropState?.isDropTarget?.(target) ?? false;\n });\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: props.class,\n style: props.style,\n defaultClassName: \"solidaria-DropIndicator\",\n },\n () => ({\n isDropTarget: isDropTarget(),\n }),\n );\n\n return (\n <div\n role=\"option\"\n aria-disabled=\"true\"\n class={renderProps.class()}\n style={renderProps.style()}\n data-drop-target={dataAttr(isDropTarget())}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n\nexport function DropIndicator(props: DropIndicatorProps): JSX.Element {\n const context = useContext(DropIndicatorContext);\n if (context) return context.render(props);\n return <DefaultDropIndicator {...props} />;\n}\n\nexport function useRenderDropIndicator(\n hooksOrDropState?:\n | Pick<\n DragAndDropHooks<unknown>,\n \"renderDropIndicator\" | \"isVirtualDragging\" | \"useDropIndicator\"\n >\n | {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n isDropTargetFor?: (target: DropTarget | null) => boolean;\n },\n maybeDropState?: {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n isDropTargetFor?: (target: DropTarget | null) => boolean;\n },\n): ((target: ItemDropTarget) => JSX.Element | undefined) | undefined {\n const looksLikeDropState = (\n value: unknown,\n ): value is {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n isDropTargetFor?: (target: DropTarget | null) => boolean;\n } => {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (\"isDropTarget\" in (value as Record<string, unknown>) ||\n \"target\" in (value as Record<string, unknown>)),\n );\n };\n\n const dragAndDropHooks = looksLikeDropState(hooksOrDropState) ? undefined : hooksOrDropState;\n const dropState = looksLikeDropState(hooksOrDropState) ? hooksOrDropState : maybeDropState;\n\n // RAC only renders collection indicators when drop hooks are present.\n if (dragAndDropHooks && !dragAndDropHooks.useDropIndicator) return undefined;\n if (!dropState && !dragAndDropHooks?.renderDropIndicator) return undefined;\n\n const targetsEqual = (a: DropTarget | null | undefined, b: DropTarget): boolean => {\n if (!a) return false;\n if (a.type !== b.type) return false;\n if (a.type === \"root\" && b.type === \"root\") return true;\n if (a.type !== \"item\" || b.type !== \"item\") return false;\n return a.key === b.key && a.dropPosition === b.dropPosition;\n };\n\n return (target: ItemDropTarget) => {\n const stateIsDropTarget = dropState?.isDropTarget;\n // RAC `useDroppableCollectionState.ts:207` `isDropTarget(target)` is a\n // per-target predicate. The port exposes `isDropTarget` as a collection-\n // level boolean (`createDroppableCollectionState.ts:458`) that keyboard\n // `setTarget` (`createDroppableCollection.ts` `onDropEnter`, RAC `:561`)\n // never flips. Match `state.target` so the active indicator still mounts\n // — otherwise Enter pickup leaves DOM focus on the collection\n // (`listbox:Permissions`) instead of `option:Insert between Read and Write`.\n const isTargetFromFn =\n typeof dropState?.isDropTargetFor === \"function\"\n ? dropState.isDropTargetFor(target)\n : typeof stateIsDropTarget === \"function\"\n ? Boolean(stateIsDropTarget(target))\n : false;\n const isTarget = isTargetFromFn || targetsEqual(dropState?.target, target);\n const isVirtualDragging = dragAndDropHooks?.isVirtualDragging?.() ?? false;\n if (!isTarget && !isVirtualDragging) return undefined;\n return dragAndDropHooks?.renderDropIndicator ? (\n dragAndDropHooks.renderDropIndicator(target)\n ) : (\n <DropIndicator target={target} />\n );\n };\n}\n\ntype KeyAccessor = Key | null | undefined | Accessor<Key | null | undefined>;\n\ninterface SelectionManagerLike {\n focusedKey?: KeyAccessor;\n}\n\ninterface CollectionLike {\n getKeyAfter: (key: Key) => Key | null;\n getItem: (key: Key) => { level?: number; type?: string } | null | undefined;\n}\n\ninterface DroppableCollectionStateLike {\n target?: DropTarget | null;\n}\n\nexport interface VirtualRangeLike {\n start: number;\n end: number;\n offsetTop: number;\n offsetBottom: number;\n}\n\nexport interface LayoutInfoProviderLike {\n getLayoutInfo: (index: number) => { rect: { y: number; height: number } };\n}\n\nfunction resolveKey(value: KeyAccessor): Key | null | undefined {\n if (typeof value === \"function\") {\n return (value as Accessor<Key | null | undefined>)();\n }\n return value;\n}\n\nfunction getAfterDropNormalizedKey(target: ItemDropTarget, collection?: CollectionLike): Key {\n if (target.dropPosition !== \"after\" || !collection) return target.key;\n\n let nextKey = collection.getKeyAfter(target.key);\n let lastDescendantKey: Key | null = null;\n\n if (nextKey != null) {\n const targetLevel = collection.getItem(target.key)?.level ?? 0;\n while (nextKey != null) {\n const node = collection.getItem(nextKey);\n if (!node) break;\n if (node.type && node.type !== \"item\") {\n nextKey = collection.getKeyAfter(nextKey);\n continue;\n }\n if ((node.level ?? 0) <= targetLevel) break;\n lastDescendantKey = nextKey;\n nextKey = collection.getKeyAfter(nextKey);\n }\n }\n\n return nextKey ?? lastDescendantKey ?? target.key;\n}\n\nexport function getNormalizedDropTargetKey(\n target: DropTarget | null | undefined,\n collection?: CollectionLike,\n): Key | null {\n if (!target || target.type !== \"item\") return null;\n return getAfterDropNormalizedKey(target, collection);\n}\n\nexport function useDndPersistedKeys(\n selectionManager: SelectionManagerLike | null | undefined,\n dragAndDropHooks?: Pick<DragAndDropHooks<unknown>, \"isVirtualDragging\">,\n dropState?: DroppableCollectionStateLike,\n collection?: CollectionLike,\n): Accessor<Set<Key>> {\n return createMemo(() => {\n const focusedKey = resolveKey(selectionManager?.focusedKey);\n let dropTargetKey: Key | null | undefined;\n\n if (dragAndDropHooks?.isVirtualDragging?.() && dropState?.target?.type === \"item\") {\n dropTargetKey = getNormalizedDropTargetKey(dropState.target, collection) ?? undefined;\n }\n\n const keys = new Set<Key>();\n if (focusedKey != null) keys.add(focusedKey);\n if (dropTargetKey != null) keys.add(dropTargetKey);\n return keys;\n });\n}\n\nexport function mergePersistedKeysIntoVirtualRange(\n baseRange: VirtualRangeLike,\n persistedIndexes: number[],\n itemCount: number,\n layoutInfoProvider: LayoutInfoProviderLike,\n maxExtraItems = 60,\n options?: {\n forceIncludeIndexes?: number[];\n forceIncludeMaxSpan?: number;\n fallbackToForcedWindow?: boolean;\n },\n): VirtualRangeLike {\n const validPersistedIndexes = Array.from(\n new Set(persistedIndexes.filter((index) => index >= 0 && index < itemCount)),\n ).sort((a, b) => a - b);\n const forceIndexes = Array.from(\n new Set(\n (options?.forceIncludeIndexes ?? []).filter((index) => index >= 0 && index < itemCount),\n ),\n );\n\n if (itemCount <= 0) return baseRange;\n if (validPersistedIndexes.length === 0 && forceIndexes.length === 0) return baseRange;\n\n const baseSpan = Math.max(1, baseRange.end - baseRange.start);\n const maxSpan = Math.max(baseSpan, baseSpan + maxExtraItems);\n\n let start = baseRange.start;\n let end = baseRange.end;\n\n const distanceToBaseRange = (index: number): number => {\n if (index < baseRange.start) return baseRange.start - index;\n if (index >= baseRange.end) return index - (baseRange.end - 1);\n return 0;\n };\n\n for (const index of validPersistedIndexes.sort(\n (a, b) => distanceToBaseRange(a) - distanceToBaseRange(b),\n )) {\n const nextStart = Math.min(start, index);\n const nextEnd = Math.max(end, index + 1);\n if (nextEnd - nextStart <= maxSpan) {\n start = nextStart;\n end = nextEnd;\n }\n }\n\n if (forceIndexes.length > 0) {\n const forceMaxSpan = Math.max(maxSpan, options?.forceIncludeMaxSpan ?? Math.max(maxSpan, 300));\n for (const index of forceIndexes) {\n const nextStart = Math.min(start, index);\n const nextEnd = Math.max(end, index + 1);\n if (nextEnd - nextStart <= forceMaxSpan) {\n start = nextStart;\n end = nextEnd;\n }\n }\n\n if (options?.fallbackToForcedWindow !== false) {\n const missingForced = forceIndexes.filter((index) => index < start || index >= end);\n if (missingForced.length > 0) {\n const nearestForced = missingForced[0];\n const forceMaxSpan = Math.max(\n maxSpan,\n options?.forceIncludeMaxSpan ?? Math.max(maxSpan, 300),\n );\n const windowSpan = Math.min(itemCount, Math.max(baseSpan, forceMaxSpan));\n const centeredStart = Math.max(\n 0,\n Math.min(itemCount - windowSpan, nearestForced - Math.floor(windowSpan / 2)),\n );\n start = centeredStart;\n end = Math.min(itemCount, centeredStart + windowSpan);\n }\n }\n }\n\n if (start === baseRange.start && end === baseRange.end) return baseRange;\n\n const startRect = start > 0 ? layoutInfoProvider.getLayoutInfo(start).rect : { y: 0, height: 0 };\n const lastRect = layoutInfoProvider.getLayoutInfo(itemCount - 1).rect;\n const endRect = end > 0 ? layoutInfoProvider.getLayoutInfo(end - 1).rect : { y: 0, height: 0 };\n\n return {\n start,\n end,\n offsetTop: Math.max(0, startRect.y),\n offsetBottom: Math.max(0, lastRect.y + lastRect.height - (endRect.y + endRect.height)),\n };\n}\n\n/** Indexes that must stay mounted off-screen without expanding the in-flow window. */\nexport function indexesOutsideRange(\n range: { start: number; end: number },\n indexes: number[],\n): number[] {\n return indexes.filter((index) => index < range.start || index >= range.end);\n}\n\nexport type DropTargetDelegate = {\n getDropTargetFromPoint: (\n x: number,\n y: number,\n isValidDropTarget: (target: DropTarget) => boolean,\n ) => DropTarget | null;\n getDropOperation: (\n target: DropTarget,\n types: DragTypes,\n allowedOperations: DropOperation[],\n ) => DropOperation;\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type JSX } from "solid-js";
1
+ import type { JSX } from "@solidjs/web";
2
2
  import type { DragItem, DragPreviewRenderer } from "@proyecto-viviana/solid-stately";
3
3
  export interface DragPreviewProps {
4
4
  ref?: {
@@ -1 +1 @@
1
- {"version":3,"file":"DragPreview.d.ts","sourceRoot":"","sources":["../src/DragPreview.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAErF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9C,QAAQ,EAAE,CACR,KAAK,EAAE,QAAQ,EAAE,KACd,GAAG,CAAC,OAAO,GAAG;QAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;CACxF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAoChE"}
1
+ {"version":3,"file":"DragPreview.d.ts","sourceRoot":"","sources":["../src/DragPreview.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAErF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9C,QAAQ,EAAE,CACR,KAAK,EAAE,QAAQ,EAAE,KACd,GAAG,CAAC,OAAO,GAAG;QAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;CACxF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAoChE"}
@@ -1,10 +1,4 @@
1
- /**
2
- * DropZone primitive for solidaria-components.
3
- *
4
- * A drop target area for drag and drop operations.
5
- * Parity target: react-aria-components/src/DropZone.tsx
6
- */
7
- import { type JSX } from "solid-js";
1
+ import type { JSX } from "@solidjs/web";
8
2
  import { type HoverEvents, type AriaDropOptions } from "@proyecto-viviana/solidaria";
9
3
  import { type ClassNameOrFunction, type StyleOrFunction, type RenderChildren, type SlotProps } from "./utils";
10
4
  export interface DropZoneRenderProps {
@@ -1 +1 @@
1
- {"version":3,"file":"DropZone.d.ts","sourceRoot":"","sources":["../src/DropZone.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,GAAG,EAOT,MAAM,UAAU,CAAC;AAClB,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aACf,SACE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,EACnF,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,EACtC,WAAW,EACX,SAAS;IACX,QAAQ,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;CAC9C;AAED,eAAO,MAAM,eAAe,kDAA4C,CAAC;AAgBzE;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAkK1D"}
1
+ {"version":3,"file":"DropZone.d.ts","sourceRoot":"","sources":["../src/DropZone.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,eAAe,EAGrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAIf,MAAM,SAAS,CAAC;AAKjB,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aACf,SACE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,EACnF,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,EACtC,WAAW,EACX,SAAS;IACX,QAAQ,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;CAC9C;AAED,eAAO,MAAM,eAAe,kDAA4C,CAAC;AAezE;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAqK1D"}
package/dist/DropZone.js CHANGED
@@ -1,18 +1,32 @@
1
- import { filterDOMProps, useRenderProps } from "./utils.js";
1
+ /*
2
+ * Copyright 2023 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
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/DropZone.tsx
13
+ import { dataAttr, filterDOMProps, useRenderProps } from "./utils.js";
2
14
  import { VisuallyHidden } from "./VisuallyHidden.js";
3
- import { createComponent, getNextElement, getNextMarker, insert, mergeProps, runHydrationEvents, spread, template, use } from "solid-js/web";
4
- import { createContext, createMemo, createSignal, mergeProps as mergeProps$1, splitProps, useContext } from "solid-js";
5
- import { createDrop, createFocusRing, createHover, readFromDataTransfer } from "@proyecto-viviana/solidaria";
15
+ import { t as racIntlStrings } from "./intl.js";
16
+ import { createComponent, getNextElement, getNextMarker, insert, ref, runHydrationEvents, scope, spread, template } from "@solidjs/web";
17
+ import { createContext, createMemo, createSignal, useContext } from "solid-js";
18
+ import { createDrop, createFocusRing, createHover, createStringFormatter, mergeProps as mergeProps$1, readFromDataTransfer } from "@proyecto-viviana/solidaria";
19
+ import { splitProps } from "@proyecto-viviana/solidaria/utils";
6
20
  //#region src/DropZone.tsx
7
21
  /**
8
22
  * DropZone primitive for solidaria-components.
9
23
  *
10
24
  * A drop target area for drag and drop operations.
11
- * Parity target: react-aria-components/src/DropZone.tsx
25
+ * Based on packages/react-aria-components/src/DropZone.tsx.
12
26
  */
13
- var _tmpl$ = /*#__PURE__*/ template(`<button>`), _tmpl$2 = /*#__PURE__*/ template(`<div><!$><!/><!$><!/>`);
27
+ var _tmpl$ = /* @__PURE__ */ template(`<button>`);
28
+ var _tmpl$2 = /* @__PURE__ */ template(`<div><!$><!/><!$><!/>`);
14
29
  const DropZoneContext = createContext(null);
15
- const DEFAULT_DROPZONE_LABEL = "Drop files";
16
30
  const FOCUSABLE_SELECTOR = [
17
31
  "a[href]",
18
32
  "button:not([disabled])",
@@ -29,7 +43,9 @@ function isFocusableElement(target) {
29
43
  * A drop zone is an area into which one or multiple objects can be dropped.
30
44
  */
31
45
  function DropZone(props) {
32
- const [local, dropProps, hoverEventProps, domProps] = splitProps(mergeProps$1(useContext(DropZoneContext) ?? {}, props), [
46
+ const contextProps = useContext(DropZoneContext);
47
+ const mergedProps = mergeProps$1(contextProps ?? {}, props);
48
+ const [local, dropProps, hoverEventProps, domProps] = splitProps(mergedProps, [
33
49
  "children",
34
50
  "class",
35
51
  "style",
@@ -50,6 +66,7 @@ function DropZone(props) {
50
66
  "onHoverEnd",
51
67
  "onHoverChange"
52
68
  ]);
69
+ const stringFormatter = createStringFormatter(racIntlStrings, "react-aria-components");
53
70
  const [dropZoneRef, setDropZoneRef] = createSignal(null);
54
71
  const [dropButtonRef, setDropButtonRef] = createSignal(null);
55
72
  const dropAria = createDrop(() => ({
@@ -132,13 +149,22 @@ function DropZone(props) {
132
149
  dropOperation: "copy"
133
150
  });
134
151
  };
135
- const dropButtonAriaLabel = createMemo(() => local["aria-label"] ?? (!local["aria-labelledby"] ? DEFAULT_DROPZONE_LABEL : void 0));
136
- return (() => {
137
- var _el$ = getNextElement(_tmpl$2), _el$3 = _el$.firstChild, [_el$4, _co$] = getNextMarker(_el$3.nextSibling), _el$5 = _el$4.nextSibling, [_el$6, _co$2] = getNextMarker(_el$5.nextSibling);
138
- use(setDropZoneRef, _el$);
139
- spread(_el$, mergeProps(filteredDomProps, cleanDropProps, cleanHoverProps, {
140
- "onClick": onRootClick,
141
- get ["class"]() {
152
+ const dropButtonAriaLabel = createMemo(() => local["aria-label"] ?? (!local["aria-labelledby"] ? stringFormatter().format("dropzoneLabel") : void 0));
153
+ var _el$ = getNextElement(_tmpl$2);
154
+ var _el$3 = _el$.firstChild;
155
+ var [_el$4, _el$5] = getNextMarker(_el$3.nextSibling);
156
+ var _el$6 = _el$4.nextSibling;
157
+ var [_el$7, _el$8] = getNextMarker(_el$6.nextSibling);
158
+ ref(() => {
159
+ return setDropZoneRef;
160
+ }, _el$);
161
+ spread(_el$, [
162
+ filteredDomProps,
163
+ cleanDropProps,
164
+ cleanHoverProps,
165
+ {
166
+ onClick: onRootClick,
167
+ get "class"() {
142
168
  return renderProps.class();
143
169
  },
144
170
  get style() {
@@ -147,41 +173,49 @@ function DropZone(props) {
147
173
  get slot() {
148
174
  return local.slot;
149
175
  },
150
- get ["data-hovered"]() {
151
- return isHovered() || void 0;
176
+ get "data-hovered"() {
177
+ return dataAttr(isHovered());
152
178
  },
153
- get ["data-focused"]() {
154
- return isFocused() || void 0;
179
+ get "data-focused"() {
180
+ return dataAttr(isFocused());
155
181
  },
156
- get ["data-focus-visible"]() {
157
- return isFocusVisible() || void 0;
182
+ get "data-focus-visible"() {
183
+ return dataAttr(isFocusVisible());
158
184
  },
159
- get ["data-drop-target"]() {
160
- return dropAria.isDropTarget || void 0;
185
+ get "data-drop-target"() {
186
+ return dataAttr(dropAria.isDropTarget);
161
187
  },
162
- get ["data-disabled"]() {
163
- return dropProps.isDisabled || void 0;
188
+ get "data-disabled"() {
189
+ return dataAttr(dropProps.isDisabled);
164
190
  }
165
- }), false, true);
166
- insert(_el$, createComponent(VisuallyHidden, { get children() {
167
- var _el$2 = getNextElement(_tmpl$);
168
- use(setDropButtonRef, _el$2);
169
- spread(_el$2, mergeProps(cleanDropButtonProps, cleanFocusProps, {
170
- get ["aria-label"]() {
191
+ }
192
+ ], true);
193
+ insert(_el$, createComponent(VisuallyHidden, { get children() {
194
+ var _el$2 = getNextElement(_tmpl$);
195
+ ref(() => {
196
+ return setDropButtonRef;
197
+ }, _el$2);
198
+ spread(_el$2, [
199
+ cleanDropButtonProps,
200
+ cleanFocusProps,
201
+ {
202
+ get "aria-label"() {
171
203
  return dropButtonAriaLabel();
172
204
  },
173
- get ["aria-labelledby"]() {
205
+ get "aria-labelledby"() {
174
206
  return local["aria-labelledby"];
175
207
  },
176
- "onPaste": onHiddenButtonPaste
177
- }), false, false);
178
- runHydrationEvents();
179
- return _el$2;
180
- } }), _el$4, _co$);
181
- insert(_el$, () => renderProps.renderChildren(), _el$6, _co$2);
208
+ onPaste: onHiddenButtonPaste
209
+ }
210
+ ], false);
182
211
  runHydrationEvents();
183
- return _el$;
184
- })();
212
+ return _el$2;
213
+ } }), _el$4, _el$5);
214
+ insert(_el$, scope(() => {
215
+ return renderProps.renderChildren();
216
+ }), _el$7, _el$8);
217
+ runHydrationEvents();
218
+ return _el$;
185
219
  }
186
220
  //#endregion
187
221
  export { DropZone, DropZoneContext };
@@ -1 +1 @@
1
- {"version":3,"file":"DropZone.js","names":["JSX","createContext","createMemo","createSignal","mergeProps","splitProps","useContext","createDrop","createFocusRing","createHover","readFromDataTransfer","HoverEvents","AriaDropOptions","ClassNameOrFunction","StyleOrFunction","RenderChildren","SlotProps","useRenderProps","filterDOMProps","VisuallyHidden","DropZoneRenderProps","isHovered","isFocused","isFocusVisible","isDropTarget","isDisabled","DropZoneProps","Omit","HTMLAttributes","HTMLDivElement","children","class","style","DropZoneContext","DEFAULT_DROPZONE_LABEL","FOCUSABLE_SELECTOR","join","isFocusableElement","target","Element","HTMLElement","matches","DropZone","props","contextProps","mergedProps","local","dropProps","hoverEventProps","domProps","dropZoneRef","setDropZoneRef","dropButtonRef","setDropButtonRef","HTMLButtonElement","dropAria","getDropOperation","getDropOperationForPoint","onDropEnter","onDropMove","onDropActivate","onDropExit","onDrop","hasDropButton","hoverProps","onHoverStart","onHoverEnd","onHoverChange","focusProps","renderValues","renderProps","defaultClassName","filteredDomProps","global","cleanDropProps","ref","_ref","rest","Record","cleanHoverProps","cleanFocusProps","cleanDropButtonProps","dropButtonProps","onRootClick","EventHandler","MouseEvent","e","onClick","defaultPrevented","root","hiddenButton","contains","focus","parentElement","onHiddenButtonPaste","ClipboardEvent","clipboardData","items","length","preventDefault","type","x","y","dropOperation","dropButtonAriaLabel","undefined","_el$","_$getNextElement","_tmpl$2","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","_$use","_$spread","_$mergeProps","slot","data-hovered","data-focused","data-focus-visible","data-drop-target","data-disabled","_$insert","_$createComponent","_el$2","_tmpl$","aria-label","aria-labelledby","_$runHydrationEvents","renderChildren"],"sources":["../src/DropZone.tsx"],"sourcesContent":["/**\n * DropZone primitive for solidaria-components.\n *\n * A drop target area for drag and drop operations.\n * Parity target: react-aria-components/src/DropZone.tsx\n */\n\nimport {\n type JSX,\n createContext,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport {\n createDrop,\n createFocusRing,\n createHover,\n readFromDataTransfer,\n type HoverEvents,\n type AriaDropOptions,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\n\nexport interface DropZoneRenderProps {\n isHovered: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDropTarget: boolean;\n isDisabled: boolean;\n}\n\nexport interface DropZoneProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onDrop\">,\n Omit<AriaDropOptions, \"hasDropButton\">,\n HoverEvents,\n SlotProps {\n children?: RenderChildren<DropZoneRenderProps>;\n class?: ClassNameOrFunction<DropZoneRenderProps>;\n style?: StyleOrFunction<DropZoneRenderProps>;\n}\n\nexport const DropZoneContext = createContext<DropZoneProps | null>(null);\nconst DEFAULT_DROPZONE_LABEL = \"Drop files\";\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n 'input:not([disabled]):not([type=\"hidden\"])',\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(\",\");\n\nfunction isFocusableElement(target: Element): boolean {\n return target instanceof HTMLElement && target.matches(FOCUSABLE_SELECTOR);\n}\n\n/**\n * A drop zone is an area into which one or multiple objects can be dropped.\n */\nexport function DropZone(props: DropZoneProps): JSX.Element {\n const contextProps = useContext(DropZoneContext);\n const mergedProps = mergeProps(contextProps ?? {}, props);\n const [local, dropProps, hoverEventProps, domProps] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"aria-label\", \"aria-labelledby\"],\n [\n \"getDropOperation\",\n \"getDropOperationForPoint\",\n \"onDropEnter\",\n \"onDropMove\",\n \"onDropActivate\",\n \"onDropExit\",\n \"onDrop\",\n \"isDisabled\",\n ],\n [\"onHoverStart\", \"onHoverEnd\", \"onHoverChange\"],\n );\n\n const [dropZoneRef, setDropZoneRef] = createSignal<HTMLDivElement | null>(null);\n const [dropButtonRef, setDropButtonRef] = createSignal<HTMLButtonElement | null>(null);\n\n const dropAria = createDrop(() => ({\n getDropOperation: dropProps.getDropOperation,\n getDropOperationForPoint: dropProps.getDropOperationForPoint,\n onDropEnter: dropProps.onDropEnter,\n onDropMove: dropProps.onDropMove,\n onDropActivate: dropProps.onDropActivate,\n onDropExit: dropProps.onDropExit,\n onDrop: dropProps.onDrop,\n hasDropButton: true,\n isDisabled: dropProps.isDisabled,\n }));\n\n const { isHovered, hoverProps } = createHover(() => ({\n isDisabled: dropProps.isDisabled,\n onHoverStart: hoverEventProps.onHoverStart,\n onHoverEnd: hoverEventProps.onHoverEnd,\n onHoverChange: hoverEventProps.onHoverChange,\n }));\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<DropZoneRenderProps>(() => ({\n isHovered: isHovered(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDropTarget: dropAria.isDropTarget,\n isDisabled: !!dropProps.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DropZone\",\n },\n renderValues,\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n const cleanDropProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanDropButtonProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropButtonProps as Record<string, unknown>;\n return rest;\n };\n\n const onRootClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n const onClick = (filteredDomProps() as JSX.HTMLAttributes<HTMLDivElement>).onClick as\n | JSX.EventHandler<HTMLDivElement, MouseEvent>\n | undefined;\n onClick?.(e);\n if (e.defaultPrevented || dropProps.isDisabled) {\n return;\n }\n\n const root = dropZoneRef();\n const hiddenButton = dropButtonRef();\n if (!root || !hiddenButton) {\n return;\n }\n\n let target: Element | null = e.target instanceof Element ? e.target : root;\n while (target && root.contains(target)) {\n if (isFocusableElement(target)) {\n return;\n }\n if (target === root) {\n hiddenButton.focus();\n return;\n }\n target = target.parentElement;\n }\n };\n\n const onHiddenButtonPaste: JSX.EventHandler<HTMLButtonElement, ClipboardEvent> = (e) => {\n if (dropProps.isDisabled || !e.clipboardData) {\n return;\n }\n\n const items = readFromDataTransfer(e.clipboardData);\n if (items.length === 0) {\n return;\n }\n\n e.preventDefault();\n dropProps.onDrop?.({\n type: \"drop\",\n x: 0,\n y: 0,\n items,\n dropOperation: \"copy\",\n });\n };\n\n const dropButtonAriaLabel = createMemo(\n () => local[\"aria-label\"] ?? (!local[\"aria-labelledby\"] ? DEFAULT_DROPZONE_LABEL : undefined),\n );\n\n return (\n <div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={isHovered() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-drop-target={dropAria.isDropTarget || undefined}\n data-disabled={dropProps.isDisabled || undefined}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAqDA,MAAaiC,kBAAkBhC,cAAoC,IAAI;AACvE,MAAMiC,yBAAyB;AAC/B,MAAMC,qBAAqB;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;AAA0B,CAC3B,CAACC,KAAK,GAAG;AAEV,SAASC,mBAAmBC,QAA0B;CACpD,OAAOA,kBAAkBE,eAAeF,OAAOG,QAAQN,kBAAkB;AAC3E;;;;AAKA,SAAgBO,SAASC,OAAmC;CAG1D,MAAM,CAACG,OAAOC,WAAWC,iBAAiBC,YAAY5C,WADlCD,aADCE,WAAW2B,eACDW,KAAgB,CAAC,GAAGD,KAEjDE,GACA;EAAC;EAAY;EAAS;EAAS;EAAQ;EAAc;CAAiB,GACtE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAY,GAEd;EAAC;EAAgB;EAAc;CAAe,CAChD;CAEA,MAAM,CAACK,aAAaC,kBAAkBhD,aAAoC,IAAI;CAC9E,MAAM,CAACiD,eAAeC,oBAAoBlD,aAAuC,IAAI;CAErF,MAAMoD,WAAWhD,kBAAkB;EACjCiD,kBAAkBT,UAAUS;EAC5BC,0BAA0BV,UAAUU;EACpCC,aAAaX,UAAUW;EACvBC,YAAYZ,UAAUY;EACtBC,gBAAgBb,UAAUa;EAC1BC,YAAYd,UAAUc;EACtBC,QAAQf,UAAUe;EAClBC,eAAe;EACftC,YAAYsB,UAAUtB;CACxB,EAAE;CAEF,MAAM,EAAEJ,WAAW2C,eAAevD,mBAAmB;EACnDgB,YAAYsB,UAAUtB;EACtBwC,cAAcjB,gBAAgBiB;EAC9BC,YAAYlB,gBAAgBkB;EAC5BC,eAAenB,gBAAgBmB;CACjC,EAAE;CACF,MAAM,EAAE7C,WAAWC,gBAAgB6C,eAAe5D,gBAAgB;CAElE,MAAM6D,eAAenE,kBAAuC;EAC1DmB,WAAWA,UAAU;EACrBC,WAAWA,UAAU;EACrBC,gBAAgBA,eAAe;EAC/BC,cAAc+B,SAAS/B;EACvBC,YAAY,CAAC,CAACsB,UAAUtB;CAC1B,EAAE;CAEF,MAAM6C,cAAcrD,eAClB;EACE,IAAIa,WAAW;GACb,OAAOgB,MAAMhB;EACf;EACAC,OAAOe,MAAMf;EACbC,OAAOc,MAAMd;EACbuC,kBAAkB;CACpB,GACAF,YACF;CAEA,MAAMG,mBAAmBtE,iBAAiBgB,eAAe+B,UAAU,EAAEwB,QAAQ,KAAK,CAAC,CAAC;CAEpF,MAAMC,uBAAuB;EAC3B,MAAM,EAAEC,KAAKC,MAAM,GAAGC,SAAStB,SAASR;EACxC,OAAO8B;CACT;CACA,MAAME,wBAAwB;EAC5B,MAAM,EAAEJ,KAAKC,MAAM,GAAGC,SAASb;EAC/B,OAAOa;CACT;CACA,MAAMG,wBAAwB;EAC5B,MAAM,EAAEL,KAAKC,MAAM,GAAGC,SAAST;EAC/B,OAAOS;CACT;CACA,MAAMI,6BAA6B;EACjC,MAAM,EAAEN,KAAKC,MAAM,GAAGC,SAAStB,SAAS2B;EACxC,OAAOL;CACT;CAEA,MAAMM,eAA6DG,MAAM;EACvE,MAAMC,UAAWf,iBAAiB,CAAC,CAAwCe;EAG3EA,UAAUD,CAAC;EACX,IAAIA,EAAEE,oBAAoBzC,UAAUtB,YAClC;EAGF,MAAMgE,OAAOvC,YAAY;EACzB,MAAMwC,eAAetC,cAAc;EACnC,IAAI,CAACqC,QAAQ,CAACC,cACZ;EAGF,IAAIpD,SAAyBgD,EAAEhD,kBAAkBC,UAAU+C,EAAEhD,SAASmD;EACtE,OAAOnD,UAAUmD,KAAKE,SAASrD,MAAM,GAAG;GACtC,IAAID,mBAAmBC,MAAM,GAC3B;GAEF,IAAIA,WAAWmD,MAAM;IACnBC,aAAaE,MAAM;IACnB;GACF;GACAtD,SAASA,OAAOuD;EAClB;CACF;CAEA,MAAMC,uBAA4ER,MAAM;EACtF,IAAIvC,UAAUtB,cAAc,CAAC6D,EAAEU,eAC7B;EAGF,MAAMC,QAAQvF,qBAAqB4E,EAAEU,aAAa;EAClD,IAAIC,MAAMC,WAAW,GACnB;EAGFZ,EAAEa,eAAe;EACjBpD,UAAUe,SAAS;GACjBsC,MAAM;GACNC,GAAG;GACHC,GAAG;GACHL;GACAM,eAAe;EACjB,CAAC;CACH;CAEA,MAAMC,sBAAsBtG,iBACpB4C,MAAM,kBAAkB,CAACA,MAAM,qBAAqBZ,yBAAyBuE,KAAAA,EACrF;CAEA,cAAA;EAAA,IAAAC,OAAAC,eAAAC,OAAA,GAAAC,QAAAH,KAAAI,YAAA,CAAAC,OAAAC,QAAAC,cAAAJ,MAAAK,WAAA,GAAAC,QAAAJ,MAAAG,aAAA,CAAAE,OAAAC,SAAAJ,cAAAE,MAAAD,WAAA;EAAAI,IAESnE,gBAAcuD,IAAA;EAAAa,OAAAb,MAAAc,WACfhD,kBACAE,gBACAK,iBAAe;GAAA,WACVI;GAAW,KAAA,WAAA;IAAA,OACbb,YAAYvC,MAAM;GAAC;GAAA,IAC1BC,QAAK;IAAA,OAAEsC,YAAYtC,MAAM;GAAC;GAAA,IAC1ByF,OAAI;IAAA,OAAE3E,MAAM2E;GAAI;GAAA,KAAA,kBAAA;IAAA,OACFpG,UAAU,KAAKoF,KAAAA;GAAS;GAAA,KAAA,kBAAA;IAAA,OACxBnF,UAAU,KAAKmF,KAAAA;GAAS;GAAA,KAAA,wBAAA;IAAA,OAClBlF,eAAe,KAAKkF,KAAAA;GAAS;GAAA,KAAA,sBAAA;IAAA,OAC/BlD,SAAS/B,gBAAgBiF,KAAAA;GAAS;GAAA,KAAA,mBAAA;IAAA,OACrC1D,UAAUtB,cAAcgF,KAAAA;GAAS;EAAA,CAAA,GAAA,OAAA,IAAA;EAAAsB,OAAArB,MAAAsB,gBAE/C7G,gBAAc,EAAA,IAAAW,WAAA;GAAA,IAAAmG,QAAAtB,eAAAuB,MAAA;GAAAZ,IAENjE,kBAAgB4E,KAAA;GAAAV,OAAAU,OAAAT,WACjBvC,sBACAD,iBAAe;IAAA,KAAA,gBAAA;KAAA,OACPwB,oBAAoB;IAAC;IAAA,KAAA,qBAAA;KAAA,OAChB1D,MAAM;IAAkB;IAAA,WAChCgD;GAAmB,CAAA,GAAA,OAAA,KAAA;GAAAuC,mBAAA;GAAA,OAAAJ;EAAA,EAAA,CAAA,GAAAlB,OAAAC,IAAA;EAAAe,OAAArB,YAG/BpC,YAAYgE,eAAe,GAAClB,OAAAC,KAAA;EAAAgB,mBAAA;EAAA,OAAA3B;CAAA,EAAA,CAAA;AAGnC"}
1
+ {"version":3,"file":"DropZone.js","names":["ref={setDropZoneRef}","onClick={onRootClick}","<VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>","ref={setDropButtonRef}","onPaste={onHiddenButtonPaste}","<button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />","<div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={dataAttr(isHovered())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n data-drop-target={dataAttr(dropAria.isDropTarget)}\n data-disabled={dataAttr(dropProps.isDisabled)}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>","{renderProps.renderChildren()}"],"sources":["../src/DropZone.tsx"],"sourcesContent":["/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/DropZone.tsx\n\n/**\n * DropZone primitive for solidaria-components.\n *\n * A drop target area for drag and drop operations.\n * Based on packages/react-aria-components/src/DropZone.tsx.\n */\n\nimport { createContext, createMemo, createSignal, useContext } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport {\n createDrop,\n createFocusRing,\n createHover,\n readFromDataTransfer,\n type HoverEvents,\n type AriaDropOptions,\n createStringFormatter,\n mergeProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\nimport { racIntlStrings } from \"./intl\";\nimport { splitProps } from \"@proyecto-viviana/solidaria/utils\";\n\nexport interface DropZoneRenderProps {\n isHovered: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDropTarget: boolean;\n isDisabled: boolean;\n}\n\nexport interface DropZoneProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onDrop\">,\n Omit<AriaDropOptions, \"hasDropButton\">,\n HoverEvents,\n SlotProps {\n children?: RenderChildren<DropZoneRenderProps>;\n class?: ClassNameOrFunction<DropZoneRenderProps>;\n style?: StyleOrFunction<DropZoneRenderProps>;\n}\n\nexport const DropZoneContext = createContext<DropZoneProps | null>(null);\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n 'input:not([disabled]):not([type=\"hidden\"])',\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(\",\");\n\nfunction isFocusableElement(target: Element): boolean {\n return target instanceof HTMLElement && target.matches(FOCUSABLE_SELECTOR);\n}\n\n/**\n * A drop zone is an area into which one or multiple objects can be dropped.\n */\nexport function DropZone(props: DropZoneProps): JSX.Element {\n const contextProps = useContext(DropZoneContext);\n const mergedProps = mergeProps<DropZoneProps>(contextProps ?? {}, props);\n const [local, dropProps, hoverEventProps, domProps] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"aria-label\", \"aria-labelledby\"],\n [\n \"getDropOperation\",\n \"getDropOperationForPoint\",\n \"onDropEnter\",\n \"onDropMove\",\n \"onDropActivate\",\n \"onDropExit\",\n \"onDrop\",\n \"isDisabled\",\n ],\n [\"onHoverStart\", \"onHoverEnd\", \"onHoverChange\"],\n );\n\n const stringFormatter = createStringFormatter(racIntlStrings, \"react-aria-components\");\n const [dropZoneRef, setDropZoneRef] = createSignal<HTMLDivElement | null>(null);\n const [dropButtonRef, setDropButtonRef] = createSignal<HTMLButtonElement | null>(null);\n\n const dropAria = createDrop(() => ({\n getDropOperation: dropProps.getDropOperation,\n getDropOperationForPoint: dropProps.getDropOperationForPoint,\n onDropEnter: dropProps.onDropEnter,\n onDropMove: dropProps.onDropMove,\n onDropActivate: dropProps.onDropActivate,\n onDropExit: dropProps.onDropExit,\n onDrop: dropProps.onDrop,\n hasDropButton: true,\n isDisabled: dropProps.isDisabled,\n }));\n\n const { isHovered, hoverProps } = createHover(() => ({\n isDisabled: dropProps.isDisabled,\n onHoverStart: hoverEventProps.onHoverStart,\n onHoverEnd: hoverEventProps.onHoverEnd,\n onHoverChange: hoverEventProps.onHoverChange,\n }));\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<DropZoneRenderProps>(() => ({\n isHovered: isHovered(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDropTarget: dropAria.isDropTarget,\n isDisabled: !!dropProps.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DropZone\",\n },\n renderValues,\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n const cleanDropProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanDropButtonProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropButtonProps as Record<string, unknown>;\n return rest;\n };\n\n const onRootClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n const onClick = (filteredDomProps() as JSX.HTMLAttributes<HTMLDivElement>).onClick as\n | JSX.EventHandler<HTMLDivElement, MouseEvent>\n | undefined;\n onClick?.(e);\n if (e.defaultPrevented || dropProps.isDisabled) {\n return;\n }\n\n const root = dropZoneRef();\n const hiddenButton = dropButtonRef();\n if (!root || !hiddenButton) {\n return;\n }\n\n let target: Element | null = e.target instanceof Element ? e.target : root;\n while (target && root.contains(target)) {\n if (isFocusableElement(target)) {\n return;\n }\n if (target === root) {\n hiddenButton.focus();\n return;\n }\n target = target.parentElement;\n }\n };\n\n const onHiddenButtonPaste: JSX.EventHandler<HTMLButtonElement, ClipboardEvent> = (e) => {\n if (dropProps.isDisabled || !e.clipboardData) {\n return;\n }\n\n const items = readFromDataTransfer(e.clipboardData);\n if (items.length === 0) {\n return;\n }\n\n e.preventDefault();\n dropProps.onDrop?.({\n type: \"drop\",\n x: 0,\n y: 0,\n items,\n dropOperation: \"copy\",\n });\n };\n\n const dropButtonAriaLabel = createMemo(\n () =>\n local[\"aria-label\"] ??\n (!local[\"aria-labelledby\"] ? stringFormatter().format(\"dropzoneLabel\") : undefined),\n );\n\n return (\n <div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={dataAttr(isHovered())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n data-drop-target={dataAttr(dropAria.isDropTarget)}\n data-disabled={dataAttr(dropProps.isDisabled)}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":"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"}
package/dist/DropZone.jsx CHANGED
@@ -1,16 +1,29 @@
1
- import { filterDOMProps, useRenderProps } from "./utils.jsx";
1
+ /*
2
+ * Copyright 2023 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
+ // Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/DropZone.tsx
13
+ import { dataAttr, filterDOMProps, useRenderProps } from "./utils.jsx";
2
14
  import { VisuallyHidden } from "./VisuallyHidden.jsx";
3
- import { createContext, createMemo, createSignal, mergeProps, splitProps, useContext } from "solid-js";
4
- import { createDrop, createFocusRing, createHover, readFromDataTransfer } from "@proyecto-viviana/solidaria";
15
+ import { t as racIntlStrings } from "./intl.jsx";
16
+ import { createContext, createMemo, createSignal, useContext } from "solid-js";
17
+ import { createDrop, createFocusRing, createHover, createStringFormatter, mergeProps, readFromDataTransfer } from "@proyecto-viviana/solidaria";
18
+ import { splitProps } from "@proyecto-viviana/solidaria/utils";
5
19
  //#region src/DropZone.tsx
6
20
  /**
7
21
  * DropZone primitive for solidaria-components.
8
22
  *
9
23
  * A drop target area for drag and drop operations.
10
- * Parity target: react-aria-components/src/DropZone.tsx
24
+ * Based on packages/react-aria-components/src/DropZone.tsx.
11
25
  */
12
26
  const DropZoneContext = createContext(null);
13
- const DEFAULT_DROPZONE_LABEL = "Drop files";
14
27
  const FOCUSABLE_SELECTOR = [
15
28
  "a[href]",
16
29
  "button:not([disabled])",
@@ -27,7 +40,9 @@ function isFocusableElement(target) {
27
40
  * A drop zone is an area into which one or multiple objects can be dropped.
28
41
  */
29
42
  function DropZone(props) {
30
- const [local, dropProps, hoverEventProps, domProps] = splitProps(mergeProps(useContext(DropZoneContext) ?? {}, props), [
43
+ const contextProps = useContext(DropZoneContext);
44
+ const mergedProps = mergeProps(contextProps ?? {}, props);
45
+ const [local, dropProps, hoverEventProps, domProps] = splitProps(mergedProps, [
31
46
  "children",
32
47
  "class",
33
48
  "style",
@@ -48,6 +63,7 @@ function DropZone(props) {
48
63
  "onHoverEnd",
49
64
  "onHoverChange"
50
65
  ]);
66
+ const stringFormatter = createStringFormatter(racIntlStrings, "react-aria-components");
51
67
  const [dropZoneRef, setDropZoneRef] = createSignal(null);
52
68
  const [dropButtonRef, setDropButtonRef] = createSignal(null);
53
69
  const dropAria = createDrop(() => ({
@@ -130,8 +146,8 @@ function DropZone(props) {
130
146
  dropOperation: "copy"
131
147
  });
132
148
  };
133
- const dropButtonAriaLabel = createMemo(() => local["aria-label"] ?? (!local["aria-labelledby"] ? DEFAULT_DROPZONE_LABEL : void 0));
134
- return <div ref={setDropZoneRef} {...filteredDomProps()} {...cleanDropProps()} {...cleanHoverProps()} onClick={onRootClick} class={renderProps.class()} style={renderProps.style()} slot={local.slot} data-hovered={isHovered() || void 0} data-focused={isFocused() || void 0} data-focus-visible={isFocusVisible() || void 0} data-drop-target={dropAria.isDropTarget || void 0} data-disabled={dropProps.isDisabled || void 0}>
149
+ const dropButtonAriaLabel = createMemo(() => local["aria-label"] ?? (!local["aria-labelledby"] ? stringFormatter().format("dropzoneLabel") : void 0));
150
+ return <div ref={setDropZoneRef} {...filteredDomProps()} {...cleanDropProps()} {...cleanHoverProps()} onClick={onRootClick} class={renderProps.class()} style={renderProps.style()} slot={local.slot} data-hovered={dataAttr(isHovered())} data-focused={dataAttr(isFocused())} data-focus-visible={dataAttr(isFocusVisible())} data-drop-target={dataAttr(dropAria.isDropTarget)} data-disabled={dataAttr(dropProps.isDisabled)}>
135
151
  <VisuallyHidden>
136
152
  <button ref={setDropButtonRef} {...cleanDropButtonProps()} {...cleanFocusProps()} aria-label={dropButtonAriaLabel()} aria-labelledby={local["aria-labelledby"]} onPaste={onHiddenButtonPaste} />
137
153
  </VisuallyHidden>
@@ -1 +1 @@
1
- {"version":3,"file":"DropZone.jsx","names":[],"sources":["../src/DropZone.tsx"],"sourcesContent":["/**\n * DropZone primitive for solidaria-components.\n *\n * A drop target area for drag and drop operations.\n * Parity target: react-aria-components/src/DropZone.tsx\n */\n\nimport {\n type JSX,\n createContext,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport {\n createDrop,\n createFocusRing,\n createHover,\n readFromDataTransfer,\n type HoverEvents,\n type AriaDropOptions,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\n\nexport interface DropZoneRenderProps {\n isHovered: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDropTarget: boolean;\n isDisabled: boolean;\n}\n\nexport interface DropZoneProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onDrop\">,\n Omit<AriaDropOptions, \"hasDropButton\">,\n HoverEvents,\n SlotProps {\n children?: RenderChildren<DropZoneRenderProps>;\n class?: ClassNameOrFunction<DropZoneRenderProps>;\n style?: StyleOrFunction<DropZoneRenderProps>;\n}\n\nexport const DropZoneContext = createContext<DropZoneProps | null>(null);\nconst DEFAULT_DROPZONE_LABEL = \"Drop files\";\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n 'input:not([disabled]):not([type=\"hidden\"])',\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(\",\");\n\nfunction isFocusableElement(target: Element): boolean {\n return target instanceof HTMLElement && target.matches(FOCUSABLE_SELECTOR);\n}\n\n/**\n * A drop zone is an area into which one or multiple objects can be dropped.\n */\nexport function DropZone(props: DropZoneProps): JSX.Element {\n const contextProps = useContext(DropZoneContext);\n const mergedProps = mergeProps(contextProps ?? {}, props);\n const [local, dropProps, hoverEventProps, domProps] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"aria-label\", \"aria-labelledby\"],\n [\n \"getDropOperation\",\n \"getDropOperationForPoint\",\n \"onDropEnter\",\n \"onDropMove\",\n \"onDropActivate\",\n \"onDropExit\",\n \"onDrop\",\n \"isDisabled\",\n ],\n [\"onHoverStart\", \"onHoverEnd\", \"onHoverChange\"],\n );\n\n const [dropZoneRef, setDropZoneRef] = createSignal<HTMLDivElement | null>(null);\n const [dropButtonRef, setDropButtonRef] = createSignal<HTMLButtonElement | null>(null);\n\n const dropAria = createDrop(() => ({\n getDropOperation: dropProps.getDropOperation,\n getDropOperationForPoint: dropProps.getDropOperationForPoint,\n onDropEnter: dropProps.onDropEnter,\n onDropMove: dropProps.onDropMove,\n onDropActivate: dropProps.onDropActivate,\n onDropExit: dropProps.onDropExit,\n onDrop: dropProps.onDrop,\n hasDropButton: true,\n isDisabled: dropProps.isDisabled,\n }));\n\n const { isHovered, hoverProps } = createHover(() => ({\n isDisabled: dropProps.isDisabled,\n onHoverStart: hoverEventProps.onHoverStart,\n onHoverEnd: hoverEventProps.onHoverEnd,\n onHoverChange: hoverEventProps.onHoverChange,\n }));\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<DropZoneRenderProps>(() => ({\n isHovered: isHovered(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDropTarget: dropAria.isDropTarget,\n isDisabled: !!dropProps.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DropZone\",\n },\n renderValues,\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n const cleanDropProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanDropButtonProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropButtonProps as Record<string, unknown>;\n return rest;\n };\n\n const onRootClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n const onClick = (filteredDomProps() as JSX.HTMLAttributes<HTMLDivElement>).onClick as\n | JSX.EventHandler<HTMLDivElement, MouseEvent>\n | undefined;\n onClick?.(e);\n if (e.defaultPrevented || dropProps.isDisabled) {\n return;\n }\n\n const root = dropZoneRef();\n const hiddenButton = dropButtonRef();\n if (!root || !hiddenButton) {\n return;\n }\n\n let target: Element | null = e.target instanceof Element ? e.target : root;\n while (target && root.contains(target)) {\n if (isFocusableElement(target)) {\n return;\n }\n if (target === root) {\n hiddenButton.focus();\n return;\n }\n target = target.parentElement;\n }\n };\n\n const onHiddenButtonPaste: JSX.EventHandler<HTMLButtonElement, ClipboardEvent> = (e) => {\n if (dropProps.isDisabled || !e.clipboardData) {\n return;\n }\n\n const items = readFromDataTransfer(e.clipboardData);\n if (items.length === 0) {\n return;\n }\n\n e.preventDefault();\n dropProps.onDrop?.({\n type: \"drop\",\n x: 0,\n y: 0,\n items,\n dropOperation: \"copy\",\n });\n };\n\n const dropButtonAriaLabel = createMemo(\n () => local[\"aria-label\"] ?? (!local[\"aria-labelledby\"] ? DEFAULT_DROPZONE_LABEL : undefined),\n );\n\n return (\n <div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={isHovered() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-drop-target={dropAria.isDropTarget || undefined}\n data-disabled={dropProps.isDisabled || undefined}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DropZone.jsx","names":[],"sources":["../src/DropZone.tsx"],"sourcesContent":["/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/DropZone.tsx\n\n/**\n * DropZone primitive for solidaria-components.\n *\n * A drop target area for drag and drop operations.\n * Based on packages/react-aria-components/src/DropZone.tsx.\n */\n\nimport { createContext, createMemo, createSignal, useContext } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport {\n createDrop,\n createFocusRing,\n createHover,\n readFromDataTransfer,\n type HoverEvents,\n type AriaDropOptions,\n createStringFormatter,\n mergeProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\nimport { racIntlStrings } from \"./intl\";\nimport { splitProps } from \"@proyecto-viviana/solidaria/utils\";\n\nexport interface DropZoneRenderProps {\n isHovered: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDropTarget: boolean;\n isDisabled: boolean;\n}\n\nexport interface DropZoneProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onDrop\">,\n Omit<AriaDropOptions, \"hasDropButton\">,\n HoverEvents,\n SlotProps {\n children?: RenderChildren<DropZoneRenderProps>;\n class?: ClassNameOrFunction<DropZoneRenderProps>;\n style?: StyleOrFunction<DropZoneRenderProps>;\n}\n\nexport const DropZoneContext = createContext<DropZoneProps | null>(null);\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n 'input:not([disabled]):not([type=\"hidden\"])',\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(\",\");\n\nfunction isFocusableElement(target: Element): boolean {\n return target instanceof HTMLElement && target.matches(FOCUSABLE_SELECTOR);\n}\n\n/**\n * A drop zone is an area into which one or multiple objects can be dropped.\n */\nexport function DropZone(props: DropZoneProps): JSX.Element {\n const contextProps = useContext(DropZoneContext);\n const mergedProps = mergeProps<DropZoneProps>(contextProps ?? {}, props);\n const [local, dropProps, hoverEventProps, domProps] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"aria-label\", \"aria-labelledby\"],\n [\n \"getDropOperation\",\n \"getDropOperationForPoint\",\n \"onDropEnter\",\n \"onDropMove\",\n \"onDropActivate\",\n \"onDropExit\",\n \"onDrop\",\n \"isDisabled\",\n ],\n [\"onHoverStart\", \"onHoverEnd\", \"onHoverChange\"],\n );\n\n const stringFormatter = createStringFormatter(racIntlStrings, \"react-aria-components\");\n const [dropZoneRef, setDropZoneRef] = createSignal<HTMLDivElement | null>(null);\n const [dropButtonRef, setDropButtonRef] = createSignal<HTMLButtonElement | null>(null);\n\n const dropAria = createDrop(() => ({\n getDropOperation: dropProps.getDropOperation,\n getDropOperationForPoint: dropProps.getDropOperationForPoint,\n onDropEnter: dropProps.onDropEnter,\n onDropMove: dropProps.onDropMove,\n onDropActivate: dropProps.onDropActivate,\n onDropExit: dropProps.onDropExit,\n onDrop: dropProps.onDrop,\n hasDropButton: true,\n isDisabled: dropProps.isDisabled,\n }));\n\n const { isHovered, hoverProps } = createHover(() => ({\n isDisabled: dropProps.isDisabled,\n onHoverStart: hoverEventProps.onHoverStart,\n onHoverEnd: hoverEventProps.onHoverEnd,\n onHoverChange: hoverEventProps.onHoverChange,\n }));\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<DropZoneRenderProps>(() => ({\n isHovered: isHovered(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDropTarget: dropAria.isDropTarget,\n isDisabled: !!dropProps.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DropZone\",\n },\n renderValues,\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n const cleanDropProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanDropButtonProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropButtonProps as Record<string, unknown>;\n return rest;\n };\n\n const onRootClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n const onClick = (filteredDomProps() as JSX.HTMLAttributes<HTMLDivElement>).onClick as\n | JSX.EventHandler<HTMLDivElement, MouseEvent>\n | undefined;\n onClick?.(e);\n if (e.defaultPrevented || dropProps.isDisabled) {\n return;\n }\n\n const root = dropZoneRef();\n const hiddenButton = dropButtonRef();\n if (!root || !hiddenButton) {\n return;\n }\n\n let target: Element | null = e.target instanceof Element ? e.target : root;\n while (target && root.contains(target)) {\n if (isFocusableElement(target)) {\n return;\n }\n if (target === root) {\n hiddenButton.focus();\n return;\n }\n target = target.parentElement;\n }\n };\n\n const onHiddenButtonPaste: JSX.EventHandler<HTMLButtonElement, ClipboardEvent> = (e) => {\n if (dropProps.isDisabled || !e.clipboardData) {\n return;\n }\n\n const items = readFromDataTransfer(e.clipboardData);\n if (items.length === 0) {\n return;\n }\n\n e.preventDefault();\n dropProps.onDrop?.({\n type: \"drop\",\n x: 0,\n y: 0,\n items,\n dropOperation: \"copy\",\n });\n };\n\n const dropButtonAriaLabel = createMemo(\n () =>\n local[\"aria-label\"] ??\n (!local[\"aria-labelledby\"] ? stringFormatter().format(\"dropzoneLabel\") : undefined),\n );\n\n return (\n <div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={dataAttr(isHovered())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n data-drop-target={dataAttr(dropAria.isDropTarget)}\n data-disabled={dataAttr(dropProps.isDisabled)}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,29 +1,18 @@
1
- import { type JSX } from "solid-js";
1
+ /**
2
+ * Local Solid helper for reactive HTML tags across SSR, hydration, and updates.
3
+ * The pinned React Aria Components source has no ElementTag counterpart.
4
+ */
5
+ import type { JSX } from "@solidjs/web";
2
6
  export interface ElementTagProps extends Record<string, unknown> {
3
7
  /** The HTML tag name to render. */
4
8
  tag: string;
5
9
  children?: JSX.Element;
6
10
  }
7
11
  /**
8
- * Renders a string tag as a *statically compiled* element.
9
- *
10
- * A drop-in replacement for `<Dynamic component={someString}>`, which is unsafe
11
- * anywhere that can render after hydration settles. Solid's `createDynamic`
12
- * string branch calls `getNextElement()` with **no** `template` argument
13
- * (solid-js 1.9.14, `web/dist/dev.js:771`). `getNextElement(template)` only
14
- * reaches the registry while `isHydrating()` holds; once `sharedConfig.done` is
15
- * set — hydration finished, but `sharedConfig.context` still live — it falls
16
- * through to `return template()` and throws `TypeError: template is not a
17
- * function`. Any deferred child lands on exactly that path: a `<Show>` that
18
- * flips, a Suspense resolution, a portal, a container that defers its children.
19
- *
20
- * Each branch below is real JSX, so the compiler emits a `template()` of its own
21
- * and hands it to `getNextElement(template)` — which adopts the SSR node from the
22
- * registry during hydration and clones the template afterwards. Both phases work.
23
- *
24
- * Props other than `tag` are spread through untouched, `children` included, so
25
- * this matches `<Dynamic>`'s behaviour exactly (`Dynamic` likewise splits only
26
- * `component` and spreads the rest onto the element).
12
+ * Solid 2's native dynamic helper adopts SSR elements during hydration and
13
+ * creates new elements after it settles. Its separate tag-source memo keeps
14
+ * unrelated reactive spread updates from replacing the element. Only `tag`
15
+ * selects the element; all other props, including children, are forwarded.
27
16
  */
28
17
  export declare function ElementTag(props: ElementTagProps): JSX.Element;
29
18
  //# sourceMappingURL=ElementTag.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElementTag.d.ts","sourceRoot":"","sources":["../src/ElementTag.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAA0B,MAAM,UAAU,CAAC;AAG5D,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAqF9D"}
1
+ {"version":3,"file":"ElementTag.d.ts","sourceRoot":"","sources":["../src/ElementTag.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAIxC,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAI9D"}