@proyecto-viviana/solidaria-components 0.3.2 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/dist/ActionBar.d.ts.map +1 -1
  2. package/dist/ActionBar.js +175 -0
  3. package/dist/ActionBar.js.map +1 -0
  4. package/dist/ActionBar.jsx +119 -0
  5. package/dist/ActionBar.jsx.map +1 -0
  6. package/dist/ActionGroup.d.ts.map +1 -1
  7. package/dist/ActionGroup.js +179 -0
  8. package/dist/ActionGroup.js.map +1 -0
  9. package/dist/ActionGroup.jsx +129 -0
  10. package/dist/ActionGroup.jsx.map +1 -0
  11. package/dist/Alert.js +111 -0
  12. package/dist/Alert.js.map +1 -0
  13. package/dist/Alert.jsx +82 -0
  14. package/dist/Alert.jsx.map +1 -0
  15. package/dist/Autocomplete.d.ts +2 -2
  16. package/dist/Autocomplete.d.ts.map +1 -1
  17. package/dist/Autocomplete.js +130 -0
  18. package/dist/Autocomplete.js.map +1 -0
  19. package/dist/Autocomplete.jsx +116 -0
  20. package/dist/Autocomplete.jsx.map +1 -0
  21. package/dist/Breadcrumbs.d.ts.map +1 -1
  22. package/dist/Breadcrumbs.js +333 -0
  23. package/dist/Breadcrumbs.js.map +1 -0
  24. package/dist/Breadcrumbs.jsx +261 -0
  25. package/dist/Breadcrumbs.jsx.map +1 -0
  26. package/dist/Button.d.ts.map +1 -1
  27. package/dist/Button.js +348 -0
  28. package/dist/Button.js.map +1 -0
  29. package/dist/Button.jsx +314 -0
  30. package/dist/Button.jsx.map +1 -0
  31. package/dist/Calendar.d.ts +4 -4
  32. package/dist/Calendar.d.ts.map +1 -1
  33. package/dist/Calendar.js +573 -0
  34. package/dist/Calendar.js.map +1 -0
  35. package/dist/Calendar.jsx +342 -0
  36. package/dist/Calendar.jsx.map +1 -0
  37. package/dist/CalendarPicker.d.ts +33 -0
  38. package/dist/CalendarPicker.d.ts.map +1 -0
  39. package/dist/CalendarPicker.js +44 -0
  40. package/dist/CalendarPicker.js.map +1 -0
  41. package/dist/CalendarPicker.jsx +44 -0
  42. package/dist/CalendarPicker.jsx.map +1 -0
  43. package/dist/Checkbox.d.ts +83 -4
  44. package/dist/Checkbox.d.ts.map +1 -1
  45. package/dist/Checkbox.js +923 -0
  46. package/dist/Checkbox.js.map +1 -0
  47. package/dist/Checkbox.jsx +707 -0
  48. package/dist/Checkbox.jsx.map +1 -0
  49. package/dist/Collection.d.ts.map +1 -1
  50. package/dist/Collection.js +202 -0
  51. package/dist/Collection.js.map +1 -0
  52. package/dist/Collection.jsx +152 -0
  53. package/dist/Collection.jsx.map +1 -0
  54. package/dist/Color.d.ts.map +1 -1
  55. package/dist/Color.js +1717 -0
  56. package/dist/Color.js.map +1 -0
  57. package/dist/Color.jsx +1340 -0
  58. package/dist/Color.jsx.map +1 -0
  59. package/dist/ColorEditor.js +208 -0
  60. package/dist/ColorEditor.js.map +1 -0
  61. package/dist/ColorEditor.jsx +120 -0
  62. package/dist/ColorEditor.jsx.map +1 -0
  63. package/dist/ComboBox.d.ts +8 -4
  64. package/dist/ComboBox.d.ts.map +1 -1
  65. package/dist/ComboBox.js +1000 -0
  66. package/dist/ComboBox.js.map +1 -0
  67. package/dist/ComboBox.jsx +724 -0
  68. package/dist/ComboBox.jsx.map +1 -0
  69. package/dist/ContextualHelpTrigger.js +146 -0
  70. package/dist/ContextualHelpTrigger.js.map +1 -0
  71. package/dist/ContextualHelpTrigger.jsx +109 -0
  72. package/dist/ContextualHelpTrigger.jsx.map +1 -0
  73. package/dist/DateField.d.ts +14 -5
  74. package/dist/DateField.d.ts.map +1 -1
  75. package/dist/DateField.js +4 -0
  76. package/dist/DateField.jsx +4 -0
  77. package/dist/DateField2.js +502 -0
  78. package/dist/DateField2.js.map +1 -0
  79. package/dist/DateField2.jsx +354 -0
  80. package/dist/DateField2.jsx.map +1 -0
  81. package/dist/DatePicker.d.ts +46 -7
  82. package/dist/DatePicker.d.ts.map +1 -1
  83. package/dist/DatePicker.js +7 -0
  84. package/dist/DatePicker.jsx +7 -0
  85. package/dist/DatePicker2.js +1171 -0
  86. package/dist/DatePicker2.js.map +1 -0
  87. package/dist/DatePicker2.jsx +820 -0
  88. package/dist/DatePicker2.jsx.map +1 -0
  89. package/dist/DateRangePickerContext.d.ts +2 -0
  90. package/dist/DateRangePickerContext.d.ts.map +1 -1
  91. package/dist/Dialog.d.ts.map +1 -1
  92. package/dist/Dialog.js +337 -0
  93. package/dist/Dialog.js.map +1 -0
  94. package/dist/Dialog.jsx +192 -0
  95. package/dist/Dialog.jsx.map +1 -0
  96. package/dist/Disclosure.d.ts.map +1 -1
  97. package/dist/Disclosure.js +331 -0
  98. package/dist/Disclosure.js.map +1 -0
  99. package/dist/Disclosure.jsx +230 -0
  100. package/dist/Disclosure.jsx.map +1 -0
  101. package/dist/DragAndDrop.d.ts.map +1 -1
  102. package/dist/DragAndDrop.js +176 -0
  103. package/dist/DragAndDrop.js.map +1 -0
  104. package/dist/DragAndDrop.jsx +160 -0
  105. package/dist/DragAndDrop.jsx.map +1 -0
  106. package/dist/DropZone.d.ts.map +1 -1
  107. package/dist/DropZone.js +189 -0
  108. package/dist/DropZone.js.map +1 -0
  109. package/dist/DropZone.jsx +144 -0
  110. package/dist/DropZone.jsx.map +1 -0
  111. package/dist/FieldError.js +66 -0
  112. package/dist/FieldError.js.map +1 -0
  113. package/dist/FieldError.jsx +47 -0
  114. package/dist/FieldError.jsx.map +1 -0
  115. package/dist/FileTrigger.js +79 -0
  116. package/dist/FileTrigger.js.map +1 -0
  117. package/dist/FileTrigger.jsx +49 -0
  118. package/dist/FileTrigger.jsx.map +1 -0
  119. package/dist/Focusable.js +70 -0
  120. package/dist/Focusable.js.map +1 -0
  121. package/dist/Focusable.jsx +69 -0
  122. package/dist/Focusable.jsx.map +1 -0
  123. package/dist/Form.js +99 -0
  124. package/dist/Form.js.map +1 -0
  125. package/dist/Form.jsx +73 -0
  126. package/dist/Form.jsx.map +1 -0
  127. package/dist/GridList.d.ts +34 -2
  128. package/dist/GridList.d.ts.map +1 -1
  129. package/dist/GridList.js +723 -0
  130. package/dist/GridList.js.map +1 -0
  131. package/dist/GridList.jsx +552 -0
  132. package/dist/GridList.jsx.map +1 -0
  133. package/dist/Icon.d.ts.map +1 -1
  134. package/dist/Icon.js +127 -0
  135. package/dist/Icon.js.map +1 -0
  136. package/dist/Icon.jsx +72 -0
  137. package/dist/Icon.jsx.map +1 -0
  138. package/dist/Keyboard.js +30 -0
  139. package/dist/Keyboard.js.map +1 -0
  140. package/dist/Keyboard.jsx +24 -0
  141. package/dist/Keyboard.jsx.map +1 -0
  142. package/dist/Landmark.js +134 -0
  143. package/dist/Landmark.js.map +1 -0
  144. package/dist/Landmark.jsx +118 -0
  145. package/dist/Landmark.jsx.map +1 -0
  146. package/dist/Link.d.ts.map +1 -1
  147. package/dist/Link.js +219 -0
  148. package/dist/Link.js.map +1 -0
  149. package/dist/Link.jsx +189 -0
  150. package/dist/Link.jsx.map +1 -0
  151. package/dist/ListBox.d.ts +2 -2
  152. package/dist/ListBox.d.ts.map +1 -1
  153. package/dist/ListBox.js +831 -0
  154. package/dist/ListBox.js.map +1 -0
  155. package/dist/ListBox.jsx +644 -0
  156. package/dist/ListBox.jsx.map +1 -0
  157. package/dist/Menu.d.ts +27 -9
  158. package/dist/Menu.d.ts.map +1 -1
  159. package/dist/Menu.js +1254 -0
  160. package/dist/Menu.js.map +1 -0
  161. package/dist/Menu.jsx +1042 -0
  162. package/dist/Menu.jsx.map +1 -0
  163. package/dist/Meter.d.ts.map +1 -1
  164. package/dist/Meter.js +123 -0
  165. package/dist/Meter.js.map +1 -0
  166. package/dist/Meter.jsx +107 -0
  167. package/dist/Meter.jsx.map +1 -0
  168. package/dist/Modal.d.ts.map +1 -1
  169. package/dist/Modal.js +382 -0
  170. package/dist/Modal.js.map +1 -0
  171. package/dist/Modal.jsx +314 -0
  172. package/dist/Modal.jsx.map +1 -0
  173. package/dist/NumberField.d.ts +3 -3
  174. package/dist/NumberField.d.ts.map +1 -1
  175. package/dist/NumberField.js +573 -0
  176. package/dist/NumberField.js.map +1 -0
  177. package/dist/NumberField.jsx +443 -0
  178. package/dist/NumberField.jsx.map +1 -0
  179. package/dist/Popover.d.ts +10 -2
  180. package/dist/Popover.d.ts.map +1 -1
  181. package/dist/Popover.js +471 -0
  182. package/dist/Popover.js.map +1 -0
  183. package/dist/Popover.jsx +354 -0
  184. package/dist/Popover.jsx.map +1 -0
  185. package/dist/Pressable.js +69 -0
  186. package/dist/Pressable.js.map +1 -0
  187. package/dist/Pressable.jsx +68 -0
  188. package/dist/Pressable.jsx.map +1 -0
  189. package/dist/ProgressBar.d.ts.map +1 -1
  190. package/dist/ProgressBar.js +130 -0
  191. package/dist/ProgressBar.js.map +1 -0
  192. package/dist/ProgressBar.jsx +114 -0
  193. package/dist/ProgressBar.jsx.map +1 -0
  194. package/dist/RadioGroup.d.ts +82 -4
  195. package/dist/RadioGroup.d.ts.map +1 -1
  196. package/dist/RadioGroup.js +931 -0
  197. package/dist/RadioGroup.js.map +1 -0
  198. package/dist/RadioGroup.jsx +681 -0
  199. package/dist/RadioGroup.jsx.map +1 -0
  200. package/dist/RangeCalendar.d.ts.map +1 -1
  201. package/dist/RangeCalendar.js +546 -0
  202. package/dist/RangeCalendar.js.map +1 -0
  203. package/dist/RangeCalendar.jsx +323 -0
  204. package/dist/RangeCalendar.jsx.map +1 -0
  205. package/dist/RouterProvider.js +118 -0
  206. package/dist/RouterProvider.js.map +1 -0
  207. package/dist/RouterProvider.jsx +112 -0
  208. package/dist/RouterProvider.jsx.map +1 -0
  209. package/dist/SearchField.d.ts +2 -2
  210. package/dist/SearchField.d.ts.map +1 -1
  211. package/dist/SearchField.js +667 -0
  212. package/dist/SearchField.js.map +1 -0
  213. package/dist/SearchField.jsx +550 -0
  214. package/dist/SearchField.jsx.map +1 -0
  215. package/dist/Select.d.ts +7 -0
  216. package/dist/Select.d.ts.map +1 -1
  217. package/dist/Select.js +1044 -0
  218. package/dist/Select.js.map +1 -0
  219. package/dist/Select.jsx +759 -0
  220. package/dist/Select.jsx.map +1 -0
  221. package/dist/SelectionIndicator.d.ts.map +1 -1
  222. package/dist/SelectionIndicator.js +86 -0
  223. package/dist/SelectionIndicator.js.map +1 -0
  224. package/dist/SelectionIndicator.jsx +50 -0
  225. package/dist/SelectionIndicator.jsx.map +1 -0
  226. package/dist/Separator.js +97 -0
  227. package/dist/Separator.js.map +1 -0
  228. package/dist/Separator.jsx +85 -0
  229. package/dist/Separator.jsx.map +1 -0
  230. package/dist/SharedElementTransition.d.ts.map +1 -1
  231. package/dist/SharedElementTransition.js +167 -0
  232. package/dist/SharedElementTransition.js.map +1 -0
  233. package/dist/SharedElementTransition.jsx +140 -0
  234. package/dist/SharedElementTransition.jsx.map +1 -0
  235. package/dist/Slider.d.ts +33 -1
  236. package/dist/Slider.d.ts.map +1 -1
  237. package/dist/Slider.js +515 -0
  238. package/dist/Slider.js.map +1 -0
  239. package/dist/Slider.jsx +403 -0
  240. package/dist/Slider.jsx.map +1 -0
  241. package/dist/StepList.d.ts.map +1 -1
  242. package/dist/StepList.js +191 -0
  243. package/dist/StepList.js.map +1 -0
  244. package/dist/StepList.jsx +136 -0
  245. package/dist/StepList.jsx.map +1 -0
  246. package/dist/Switch.d.ts +65 -2
  247. package/dist/Switch.d.ts.map +1 -1
  248. package/dist/Switch.js +534 -0
  249. package/dist/Switch.js.map +1 -0
  250. package/dist/Switch.jsx +393 -0
  251. package/dist/Switch.jsx.map +1 -0
  252. package/dist/Table.d.ts +50 -0
  253. package/dist/Table.d.ts.map +1 -1
  254. package/dist/Table.js +1766 -0
  255. package/dist/Table.js.map +1 -0
  256. package/dist/Table.jsx +1355 -0
  257. package/dist/Table.jsx.map +1 -0
  258. package/dist/Tabs.d.ts +0 -4
  259. package/dist/Tabs.d.ts.map +1 -1
  260. package/dist/Tabs.js +598 -0
  261. package/dist/Tabs.js.map +1 -0
  262. package/dist/Tabs.jsx +367 -0
  263. package/dist/Tabs.jsx.map +1 -0
  264. package/dist/TagGroup.d.ts +3 -1
  265. package/dist/TagGroup.d.ts.map +1 -1
  266. package/dist/TagGroup.js +382 -0
  267. package/dist/TagGroup.js.map +1 -0
  268. package/dist/TagGroup.jsx +273 -0
  269. package/dist/TagGroup.jsx.map +1 -0
  270. package/dist/Text.d.ts +18 -6
  271. package/dist/Text.d.ts.map +1 -1
  272. package/dist/Text.js +42 -0
  273. package/dist/Text.js.map +1 -0
  274. package/dist/Text.jsx +35 -0
  275. package/dist/Text.jsx.map +1 -0
  276. package/dist/TextField.d.ts +6 -6
  277. package/dist/TextField.d.ts.map +1 -1
  278. package/dist/TextField.js +439 -0
  279. package/dist/TextField.js.map +1 -0
  280. package/dist/TextField.jsx +406 -0
  281. package/dist/TextField.jsx.map +1 -0
  282. package/dist/TimeField.d.ts +17 -53
  283. package/dist/TimeField.d.ts.map +1 -1
  284. package/dist/TimeField.js +278 -0
  285. package/dist/TimeField.js.map +1 -0
  286. package/dist/TimeField.jsx +218 -0
  287. package/dist/TimeField.jsx.map +1 -0
  288. package/dist/Toast.d.ts +14 -0
  289. package/dist/Toast.d.ts.map +1 -1
  290. package/dist/Toast.js +551 -0
  291. package/dist/Toast.js.map +1 -0
  292. package/dist/Toast.jsx +361 -0
  293. package/dist/Toast.jsx.map +1 -0
  294. package/dist/ToggleButton.d.ts.map +1 -1
  295. package/dist/ToggleButton.js +123 -0
  296. package/dist/ToggleButton.js.map +1 -0
  297. package/dist/ToggleButton.jsx +88 -0
  298. package/dist/ToggleButton.jsx.map +1 -0
  299. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  300. package/dist/ToggleButtonGroup.js +114 -0
  301. package/dist/ToggleButtonGroup.js.map +1 -0
  302. package/dist/ToggleButtonGroup.jsx +85 -0
  303. package/dist/ToggleButtonGroup.jsx.map +1 -0
  304. package/dist/Toolbar.js +112 -0
  305. package/dist/Toolbar.js.map +1 -0
  306. package/dist/Toolbar.jsx +92 -0
  307. package/dist/Toolbar.jsx.map +1 -0
  308. package/dist/Tooltip.d.ts.map +1 -1
  309. package/dist/Tooltip.js +539 -0
  310. package/dist/Tooltip.js.map +1 -0
  311. package/dist/Tooltip.jsx +465 -0
  312. package/dist/Tooltip.jsx.map +1 -0
  313. package/dist/Tree.d.ts +14 -2
  314. package/dist/Tree.d.ts.map +1 -1
  315. package/dist/Tree.js +1424 -0
  316. package/dist/Tree.js.map +1 -0
  317. package/dist/Tree.jsx +1172 -0
  318. package/dist/Tree.jsx.map +1 -0
  319. package/dist/Virtualizer.d.ts +16 -2
  320. package/dist/Virtualizer.d.ts.map +1 -1
  321. package/dist/Virtualizer.js +2 -0
  322. package/dist/Virtualizer.jsx +2 -0
  323. package/dist/Virtualizer2.js +751 -0
  324. package/dist/Virtualizer2.js.map +1 -0
  325. package/dist/Virtualizer2.jsx +730 -0
  326. package/dist/Virtualizer2.jsx.map +1 -0
  327. package/dist/VirtualizerLayouts.d.ts +18 -0
  328. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  329. package/dist/VisuallyHidden.js +42 -0
  330. package/dist/VisuallyHidden.js.map +1 -0
  331. package/dist/VisuallyHidden.jsx +35 -0
  332. package/dist/VisuallyHidden.jsx.map +1 -0
  333. package/dist/contexts.js +33 -0
  334. package/dist/contexts.js.map +1 -0
  335. package/dist/contexts.jsx +33 -0
  336. package/dist/contexts.jsx.map +1 -0
  337. package/dist/index.d.ts +9 -9
  338. package/dist/index.d.ts.map +1 -1
  339. package/dist/index.js +69 -23932
  340. package/dist/index.jsx +69 -18337
  341. package/dist/useDragAndDrop.d.ts +0 -8
  342. package/dist/useDragAndDrop.d.ts.map +1 -1
  343. package/dist/useDragAndDrop.js +2 -0
  344. package/dist/useDragAndDrop.jsx +2 -0
  345. package/dist/useDragAndDrop2.js +399 -0
  346. package/dist/useDragAndDrop2.js.map +1 -0
  347. package/dist/useDragAndDrop2.jsx +399 -0
  348. package/dist/useDragAndDrop2.jsx.map +1 -0
  349. package/dist/utils.d.ts +84 -11
  350. package/dist/utils.d.ts.map +1 -1
  351. package/dist/utils.js +285 -0
  352. package/dist/utils.js.map +1 -0
  353. package/dist/utils.jsx +277 -0
  354. package/dist/utils.jsx.map +1 -0
  355. package/dist/virtualizer/Layout.js +144 -0
  356. package/dist/virtualizer/Layout.js.map +1 -0
  357. package/dist/virtualizer/Layout.jsx +144 -0
  358. package/dist/virtualizer/Layout.jsx.map +1 -0
  359. package/package.json +395 -4
  360. package/src/ActionBar.tsx +10 -12
  361. package/src/ActionGroup.tsx +5 -3
  362. package/src/Autocomplete.tsx +14 -9
  363. package/src/Breadcrumbs.tsx +58 -39
  364. package/src/Button.tsx +22 -2
  365. package/src/Calendar.tsx +57 -11
  366. package/src/CalendarPicker.tsx +73 -0
  367. package/src/Checkbox.tsx +539 -3
  368. package/src/Collection.tsx +9 -3
  369. package/src/Color.tsx +84 -41
  370. package/src/ComboBox.tsx +97 -21
  371. package/src/DateField.tsx +304 -53
  372. package/src/DatePicker.tsx +402 -62
  373. package/src/DateRangePickerContext.tsx +2 -0
  374. package/src/Dialog.tsx +13 -5
  375. package/src/Disclosure.tsx +7 -1
  376. package/src/DragAndDrop.tsx +3 -1
  377. package/src/DropZone.tsx +3 -1
  378. package/src/GridList.tsx +133 -26
  379. package/src/Icon.tsx +3 -1
  380. package/src/Link.tsx +3 -1
  381. package/src/ListBox.tsx +354 -25
  382. package/src/Menu.tsx +252 -128
  383. package/src/Meter.tsx +3 -1
  384. package/src/Modal.tsx +120 -56
  385. package/src/NumberField.tsx +51 -8
  386. package/src/Popover.tsx +68 -17
  387. package/src/ProgressBar.tsx +3 -1
  388. package/src/RadioGroup.tsx +468 -4
  389. package/src/RangeCalendar.tsx +123 -2
  390. package/src/SearchField.tsx +80 -4
  391. package/src/Select.tsx +122 -26
  392. package/src/SelectionIndicator.tsx +3 -1
  393. package/src/SharedElementTransition.tsx +95 -37
  394. package/src/Slider.tsx +159 -13
  395. package/src/StepList.tsx +0 -7
  396. package/src/Switch.tsx +395 -2
  397. package/src/Table.tsx +428 -99
  398. package/src/Tabs.tsx +17 -45
  399. package/src/TagGroup.tsx +29 -7
  400. package/src/Text.tsx +31 -10
  401. package/src/TextField.tsx +44 -6
  402. package/src/TimeField.tsx +127 -192
  403. package/src/Toast.tsx +79 -14
  404. package/src/ToggleButton.tsx +3 -1
  405. package/src/ToggleButtonGroup.tsx +3 -1
  406. package/src/Tooltip.tsx +3 -1
  407. package/src/Tree.tsx +91 -13
  408. package/src/Virtualizer.tsx +180 -31
  409. package/src/VirtualizerLayouts.ts +45 -10
  410. package/src/index.ts +51 -8
  411. package/src/useDragAndDrop.ts +8 -10
  412. package/src/utils.tsx +246 -30
  413. package/dist/HiddenTimeInput.d.ts +0 -25
  414. package/dist/HiddenTimeInput.d.ts.map +0 -1
  415. package/dist/index.js.map +0 -1
  416. package/dist/index.jsx.map +0 -1
  417. package/src/HiddenTimeInput.tsx +0 -133
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../src/Icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,GAAG,EAA+C,MAAM,UAAU,CAAC;AACjF,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,YAAY,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAC3C,yCAAyC;IACzC,KAAK,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAC7C,wCAAwC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACzC,6BAA6B;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,WAAW,8CAAwC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAgElD"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../src/Icon.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,KAAK,GAAG,EAA+C,MAAM,UAAU,CAAC;AACjF,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,YAAY,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAC3C,yCAAyC;IACzC,KAAK,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAC7C,wCAAwC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACzC,6BAA6B;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,WAAW,8CAAwC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,OAAO,CAkElD"}
package/dist/Icon.js ADDED
@@ -0,0 +1,127 @@
1
+ import { filterDOMProps, useRenderProps } from "./utils.js";
2
+ import { Button } from "./Button.js";
3
+ import { createComponent, getNextElement, insert, mergeProps, runHydrationEvents, spread, template } from "solid-js/web";
4
+ import { Show, createContext, createMemo, splitProps } from "solid-js";
5
+ //#region src/Icon.tsx
6
+ /**
7
+ * Icon component for solidaria-components
8
+ *
9
+ * Minimal headless Icon that owns ARIA semantics:
10
+ * - Decorative (no label): aria-hidden="true"
11
+ * - Informative (aria-label): role="img" + aria-label
12
+ * - Interactive (onPress): wraps content in headless Button
13
+ *
14
+ * The UI layer consumes this for styling/composition only.
15
+ */
16
+ var _tmpl$ = /*#__PURE__*/ template(`<span>`);
17
+ const IconContext = createContext(null);
18
+ /**
19
+ * An icon wrapper that provides correct ARIA semantics.
20
+ *
21
+ * - **Decorative** (no `aria-label`): renders `<span aria-hidden="true">`
22
+ * - **Informative** (`aria-label` provided): renders `<span role="img" aria-label="...">`
23
+ * - **Interactive** (`onPress` provided): wraps in headless `Button`
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * // Decorative
28
+ * <Icon><SearchSvg /></Icon>
29
+ *
30
+ * // Informative
31
+ * <Icon aria-label="Search"><SearchSvg /></Icon>
32
+ *
33
+ * // Interactive
34
+ * <Icon onPress={handleSearch} aria-label="Search"><SearchSvg /></Icon>
35
+ * ```
36
+ */
37
+ function Icon(props) {
38
+ const [local, rest] = splitProps(props, [
39
+ "children",
40
+ "class",
41
+ "style",
42
+ "slot",
43
+ "onPress",
44
+ "aria-label",
45
+ "aria-labelledby"
46
+ ]);
47
+ const hasLabel = () => !!(local["aria-label"] || local["aria-labelledby"]);
48
+ const isInteractive = () => !!local.onPress;
49
+ const isDecorative = () => !hasLabel();
50
+ const renderValues = createMemo(() => ({
51
+ isDecorative: isDecorative(),
52
+ isInteractive: isInteractive()
53
+ }));
54
+ const renderProps = useRenderProps({
55
+ get children() {
56
+ return local.children;
57
+ },
58
+ class: local.class,
59
+ style: local.style,
60
+ defaultClassName: "solidaria-Icon"
61
+ }, renderValues);
62
+ const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
63
+ return createComponent(Show, {
64
+ get when() {
65
+ return isInteractive();
66
+ },
67
+ get fallback() {
68
+ return (() => {
69
+ var _el$ = getNextElement(_tmpl$);
70
+ spread(_el$, mergeProps(domProps, {
71
+ get role() {
72
+ return hasLabel() ? "img" : void 0;
73
+ },
74
+ get ["aria-hidden"]() {
75
+ return isDecorative() ? "true" : void 0;
76
+ },
77
+ get ["aria-label"]() {
78
+ return local["aria-label"];
79
+ },
80
+ get ["aria-labelledby"]() {
81
+ return local["aria-labelledby"];
82
+ },
83
+ get ["class"]() {
84
+ return renderProps.class();
85
+ },
86
+ get style() {
87
+ return renderProps.style();
88
+ },
89
+ "data-interactive": void 0,
90
+ get ["data-decorative"]() {
91
+ return isDecorative() || void 0;
92
+ }
93
+ }), false, true);
94
+ insert(_el$, () => renderProps.renderChildren());
95
+ runHydrationEvents();
96
+ return _el$;
97
+ })();
98
+ },
99
+ get children() {
100
+ return createComponent(Button, mergeProps(domProps, {
101
+ get onPress() {
102
+ return local.onPress;
103
+ },
104
+ get ["aria-label"]() {
105
+ return local["aria-label"];
106
+ },
107
+ get ["aria-labelledby"]() {
108
+ return local["aria-labelledby"];
109
+ },
110
+ get ["class"]() {
111
+ return renderProps.class();
112
+ },
113
+ get style() {
114
+ return renderProps.style();
115
+ },
116
+ "data-interactive": "",
117
+ get children() {
118
+ return renderProps.renderChildren();
119
+ }
120
+ }));
121
+ }
122
+ });
123
+ }
124
+ //#endregion
125
+ export { Icon, IconContext };
126
+
127
+ //# sourceMappingURL=Icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.js","names":["JSX","createContext","createMemo","Show","splitProps","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","Button","PressEvent","IconRenderProps","isDecorative","isInteractive","IconProps","onPress","e","children","class","style","id","IconContext","Icon","props","Element","local","rest","hasLabel","renderValues","renderProps","defaultClassName","domProps","global","_$createComponent","when","fallback","_el$","_$getNextElement","_tmpl$","_$spread","_$mergeProps","role","undefined","aria-hidden","aria-label","aria-labelledby","data-decorative","_$insert","renderChildren","_$runHydrationEvents"],"sources":["../src/Icon.tsx"],"sourcesContent":["/**\n * Icon component for solidaria-components\n *\n * Minimal headless Icon that owns ARIA semantics:\n * - Decorative (no label): aria-hidden=\"true\"\n * - Informative (aria-label): role=\"img\" + aria-label\n * - Interactive (onPress): wraps content in headless Button\n *\n * The UI layer consumes this for styling/composition only.\n */\n\nimport { type JSX, createContext, createMemo, Show, splitProps } from \"solid-js\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { Button } from \"./Button\";\nimport type { PressEvent } from \"@proyecto-viviana/solidaria\";\n\nexport interface IconRenderProps {\n /** Whether the icon is purely decorative (no label). */\n isDecorative: boolean;\n /** Whether the icon is interactive (has onPress). */\n isInteractive: boolean;\n}\n\nexport interface IconProps extends SlotProps {\n /** Handler called when the icon is pressed (makes it interactive). */\n onPress?: (e: PressEvent) => void;\n /** Accessible label for the icon. When provided, the icon is informative (role=\"img\"). */\n \"aria-label\"?: string;\n /** ID of an element that labels this icon. */\n \"aria-labelledby\"?: string;\n /** The children of the component. A function may be provided to receive render props. */\n children?: RenderChildren<IconRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<IconRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<IconRenderProps>;\n /** The id of the element. */\n id?: string;\n}\n\nexport const IconContext = createContext<IconProps | null>(null);\n\n/**\n * An icon wrapper that provides correct ARIA semantics.\n *\n * - **Decorative** (no `aria-label`): renders `<span aria-hidden=\"true\">`\n * - **Informative** (`aria-label` provided): renders `<span role=\"img\" aria-label=\"...\">`\n * - **Interactive** (`onPress` provided): wraps in headless `Button`\n *\n * @example\n * ```tsx\n * // Decorative\n * <Icon><SearchSvg /></Icon>\n *\n * // Informative\n * <Icon aria-label=\"Search\"><SearchSvg /></Icon>\n *\n * // Interactive\n * <Icon onPress={handleSearch} aria-label=\"Search\"><SearchSvg /></Icon>\n * ```\n */\nexport function Icon(props: IconProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"style\",\n \"slot\",\n \"onPress\",\n \"aria-label\",\n \"aria-labelledby\",\n ]);\n\n const hasLabel = () => !!(local[\"aria-label\"] || local[\"aria-labelledby\"]);\n const isInteractive = () => !!local.onPress;\n const isDecorative = () => !hasLabel();\n\n const renderValues = createMemo<IconRenderProps>(() => ({\n isDecorative: isDecorative(),\n isInteractive: isInteractive(),\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-Icon\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() => filterDOMProps(rest, { global: true }));\n\n return (\n <Show\n when={isInteractive()}\n fallback={\n <span\n {...domProps()}\n role={hasLabel() ? \"img\" : undefined}\n aria-hidden={isDecorative() ? \"true\" : undefined}\n aria-label={local[\"aria-label\"]}\n aria-labelledby={local[\"aria-labelledby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n data-interactive={undefined}\n data-decorative={isDecorative() || undefined}\n >\n {renderProps.renderChildren()}\n </span>\n }\n >\n <Button\n {...domProps()}\n onPress={local.onPress}\n aria-label={local[\"aria-label\"]}\n aria-labelledby={local[\"aria-labelledby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n data-interactive=\"\"\n >\n {renderProps.renderChildren()}\n </Button>\n </Show>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA+CA,MAAauB,cAActB,cAAgC,IAAI;;;;;;;;;;;;;;;;;;;;AAqB/D,SAAgBuB,KAAKC,OAA+B;CAClD,MAAM,CAACE,OAAOC,QAAQxB,WAAWqB,OAAO;EACtC;EACA;EACA;EACA;EACA;EACA;EACA;CAAiB,CAClB;CAED,MAAMI,iBAAiB,CAAC,EAAEF,MAAM,iBAAiBA,MAAM;CACvD,MAAMZ,sBAAsB,CAAC,CAACY,MAAMV;CACpC,MAAMH,qBAAqB,CAACe,SAAS;CAErC,MAAMC,eAAe5B,kBAAmC;EACtDY,cAAcA,aAAa;EAC3BC,eAAeA,cAAc;CAC/B,EAAE;CAEF,MAAMgB,cAActB,eAClB;EACE,IAAIU,WAAW;GACb,OAAOQ,MAAMR;EACf;EACAC,OAAOO,MAAMP;EACbC,OAAOM,MAAMN;EACbW,kBAAkB;CACpB,GACAF,YACF;CAEA,MAAMG,WAAW/B,iBAAiBQ,eAAekB,MAAM,EAAEM,QAAQ,KAAK,CAAC,CAAC;CAExE,OAAAC,gBACGhC,MAAI;EAAA,IACHiC,OAAI;GAAA,OAAErB,cAAc;EAAC;EAAA,IACrBsB,WAAQ;GAAA,cAAA;IAAA,IAAAC,OAAAC,eAAAC,MAAA;IAAAC,OAAAH,MAAAI,WAEAT,UAAQ;KAAA,IACZU,OAAI;MAAA,OAAEd,SAAS,IAAI,QAAQe,KAAAA;KAAS;KAAA,KAAA,iBAAA;MAAA,OACvB9B,aAAa,IAAI,SAAS8B,KAAAA;KAAS;KAAA,KAAA,gBAAA;MAAA,OACpCjB,MAAM;KAAa;KAAA,KAAA,qBAAA;MAAA,OACdA,MAAM;KAAkB;KAAA,KAAA,WAAA;MAAA,OAClCI,YAAYX,MAAM;KAAC;KAAA,IAC1BC,QAAK;MAAA,OAAEU,YAAYV,MAAM;KAAC;KAAA,oBACRuB,KAAAA;KAAS,KAAA,qBAAA;MAAA,OACV9B,aAAa,KAAK8B,KAAAA;KAAS;IAAA,CAAA,GAAA,OAAA,IAAA;IAAAK,OAAAX,YAE3CP,YAAYmB,eAAe,CAAC;IAAAC,mBAAA;IAAA,OAAAb;GAAA,EAAA,CAAA;EAAA;EAAA,IAAAnB,WAAA;GAAA,OAAAgB,gBAIhCxB,QAAM+B,WACDT,UAAQ;IAAA,IACZhB,UAAO;KAAA,OAAEU,MAAMV;IAAO;IAAA,KAAA,gBAAA;KAAA,OACVU,MAAM;IAAa;IAAA,KAAA,qBAAA;KAAA,OACdA,MAAM;IAAkB;IAAA,KAAA,WAAA;KAAA,OAClCI,YAAYX,MAAM;IAAC;IAAA,IAC1BC,QAAK;KAAA,OAAEU,YAAYV,MAAM;IAAC;IAAA,oBAAA;IAAA,IAAAF,WAAA;KAAA,OAGzBY,YAAYmB,eAAe;IAAC;GAAA,CAAA,CAAA;EAAA;CAAA,CAAA;AAIrC"}
package/dist/Icon.jsx ADDED
@@ -0,0 +1,72 @@
1
+ import { filterDOMProps, useRenderProps } from "./utils.jsx";
2
+ import { Button } from "./Button.jsx";
3
+ import { Show, createContext, createMemo, splitProps } from "solid-js";
4
+ //#region src/Icon.tsx
5
+ /**
6
+ * Icon component for solidaria-components
7
+ *
8
+ * Minimal headless Icon that owns ARIA semantics:
9
+ * - Decorative (no label): aria-hidden="true"
10
+ * - Informative (aria-label): role="img" + aria-label
11
+ * - Interactive (onPress): wraps content in headless Button
12
+ *
13
+ * The UI layer consumes this for styling/composition only.
14
+ */
15
+ const IconContext = createContext(null);
16
+ /**
17
+ * An icon wrapper that provides correct ARIA semantics.
18
+ *
19
+ * - **Decorative** (no `aria-label`): renders `<span aria-hidden="true">`
20
+ * - **Informative** (`aria-label` provided): renders `<span role="img" aria-label="...">`
21
+ * - **Interactive** (`onPress` provided): wraps in headless `Button`
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * // Decorative
26
+ * <Icon><SearchSvg /></Icon>
27
+ *
28
+ * // Informative
29
+ * <Icon aria-label="Search"><SearchSvg /></Icon>
30
+ *
31
+ * // Interactive
32
+ * <Icon onPress={handleSearch} aria-label="Search"><SearchSvg /></Icon>
33
+ * ```
34
+ */
35
+ function Icon(props) {
36
+ const [local, rest] = splitProps(props, [
37
+ "children",
38
+ "class",
39
+ "style",
40
+ "slot",
41
+ "onPress",
42
+ "aria-label",
43
+ "aria-labelledby"
44
+ ]);
45
+ const hasLabel = () => !!(local["aria-label"] || local["aria-labelledby"]);
46
+ const isInteractive = () => !!local.onPress;
47
+ const isDecorative = () => !hasLabel();
48
+ const renderValues = createMemo(() => ({
49
+ isDecorative: isDecorative(),
50
+ isInteractive: isInteractive()
51
+ }));
52
+ const renderProps = useRenderProps({
53
+ get children() {
54
+ return local.children;
55
+ },
56
+ class: local.class,
57
+ style: local.style,
58
+ defaultClassName: "solidaria-Icon"
59
+ }, renderValues);
60
+ const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
61
+ return <Show when={isInteractive()} fallback={<span {...domProps()} role={hasLabel() ? "img" : void 0} aria-hidden={isDecorative() ? "true" : void 0} aria-label={local["aria-label"]} aria-labelledby={local["aria-labelledby"]} class={renderProps.class()} style={renderProps.style()} data-interactive={void 0} data-decorative={isDecorative() || void 0}>
62
+ {renderProps.renderChildren()}
63
+ </span>}>
64
+ <Button {...domProps()} onPress={local.onPress} aria-label={local["aria-label"]} aria-labelledby={local["aria-labelledby"]} class={renderProps.class()} style={renderProps.style()} data-interactive="">
65
+ {renderProps.renderChildren()}
66
+ </Button>
67
+ </Show>;
68
+ }
69
+ //#endregion
70
+ export { Icon, IconContext };
71
+
72
+ //# sourceMappingURL=Icon.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.jsx","names":[],"sources":["../src/Icon.tsx"],"sourcesContent":["/**\n * Icon component for solidaria-components\n *\n * Minimal headless Icon that owns ARIA semantics:\n * - Decorative (no label): aria-hidden=\"true\"\n * - Informative (aria-label): role=\"img\" + aria-label\n * - Interactive (onPress): wraps content in headless Button\n *\n * The UI layer consumes this for styling/composition only.\n */\n\nimport { type JSX, createContext, createMemo, Show, splitProps } from \"solid-js\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { Button } from \"./Button\";\nimport type { PressEvent } from \"@proyecto-viviana/solidaria\";\n\nexport interface IconRenderProps {\n /** Whether the icon is purely decorative (no label). */\n isDecorative: boolean;\n /** Whether the icon is interactive (has onPress). */\n isInteractive: boolean;\n}\n\nexport interface IconProps extends SlotProps {\n /** Handler called when the icon is pressed (makes it interactive). */\n onPress?: (e: PressEvent) => void;\n /** Accessible label for the icon. When provided, the icon is informative (role=\"img\"). */\n \"aria-label\"?: string;\n /** ID of an element that labels this icon. */\n \"aria-labelledby\"?: string;\n /** The children of the component. A function may be provided to receive render props. */\n children?: RenderChildren<IconRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<IconRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<IconRenderProps>;\n /** The id of the element. */\n id?: string;\n}\n\nexport const IconContext = createContext<IconProps | null>(null);\n\n/**\n * An icon wrapper that provides correct ARIA semantics.\n *\n * - **Decorative** (no `aria-label`): renders `<span aria-hidden=\"true\">`\n * - **Informative** (`aria-label` provided): renders `<span role=\"img\" aria-label=\"...\">`\n * - **Interactive** (`onPress` provided): wraps in headless `Button`\n *\n * @example\n * ```tsx\n * // Decorative\n * <Icon><SearchSvg /></Icon>\n *\n * // Informative\n * <Icon aria-label=\"Search\"><SearchSvg /></Icon>\n *\n * // Interactive\n * <Icon onPress={handleSearch} aria-label=\"Search\"><SearchSvg /></Icon>\n * ```\n */\nexport function Icon(props: IconProps): JSX.Element {\n const [local, rest] = splitProps(props, [\n \"children\",\n \"class\",\n \"style\",\n \"slot\",\n \"onPress\",\n \"aria-label\",\n \"aria-labelledby\",\n ]);\n\n const hasLabel = () => !!(local[\"aria-label\"] || local[\"aria-labelledby\"]);\n const isInteractive = () => !!local.onPress;\n const isDecorative = () => !hasLabel();\n\n const renderValues = createMemo<IconRenderProps>(() => ({\n isDecorative: isDecorative(),\n isInteractive: isInteractive(),\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-Icon\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() => filterDOMProps(rest, { global: true }));\n\n return (\n <Show\n when={isInteractive()}\n fallback={\n <span\n {...domProps()}\n role={hasLabel() ? \"img\" : undefined}\n aria-hidden={isDecorative() ? \"true\" : undefined}\n aria-label={local[\"aria-label\"]}\n aria-labelledby={local[\"aria-labelledby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n data-interactive={undefined}\n data-decorative={isDecorative() || undefined}\n >\n {renderProps.renderChildren()}\n </span>\n }\n >\n <Button\n {...domProps()}\n onPress={local.onPress}\n aria-label={local[\"aria-label\"]}\n aria-labelledby={local[\"aria-labelledby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n data-interactive=\"\"\n >\n {renderProps.renderChildren()}\n </Button>\n </Show>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AA+CA,MAAa,cAAc,cAAgC,IAAI;;;;;;;;;;;;;;;;;;;;AAqB/D,SAAgB,KAAK,OAA+B;CAClD,MAAM,CAAC,OAAO,QAAQ,WAAW,OAAO;EACtC;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,iBAAiB,CAAC,EAAE,MAAM,iBAAiB,MAAM;CACvD,MAAM,sBAAsB,CAAC,CAAC,MAAM;CACpC,MAAM,qBAAqB,CAAC,SAAS;CAErC,MAAM,eAAe,kBAAmC;EACtD,cAAc,aAAa;EAC3B,eAAe,cAAc;CAC/B,EAAE;CAEF,MAAM,cAAc,eAClB;EACE,IAAI,WAAW;GACb,OAAO,MAAM;EACf;EACA,OAAO,MAAM;EACb,OAAO,MAAM;EACb,kBAAkB;CACpB,GACA,YACF;CAEA,MAAM,WAAW,iBAAiB,eAAe,MAAM,EAAE,QAAQ,KAAK,CAAC,CAAC;CAExE,OACE,CAAC,KACC,MAAM,cAAc,GACpB,UACE,CAAC,SACK,SAAS,GACb,MAAM,SAAS,IAAI,QAAQ,KAAA,GAC3B,aAAa,aAAa,IAAI,SAAS,KAAA,GACvC,YAAY,MAAM,eAClB,iBAAiB,MAAM,oBACvB,OAAO,YAAY,MAAM,GACzB,OAAO,YAAY,MAAM,GACzB,kBAAkB,KAAA,GAClB,iBAAiB,aAAa,KAAK,KAAA,GACpC;WACE,YAAY,eAAe,EAAE;QAChC,EAAE,OAEL;MACC,CAAC,WACK,SAAS,GACb,SAAS,MAAM,SACf,YAAY,MAAM,eAClB,iBAAiB,MAAM,oBACvB,OAAO,YAAY,MAAM,GACzB,OAAO,YAAY,MAAM,GACzB,oBACD;SACE,YAAY,eAAe,EAAE;MAChC,EAAE,OAAO;IACX,EAAE;AAEN"}
@@ -0,0 +1,30 @@
1
+ import { getNextElement, insert, runHydrationEvents, spread, template } from "solid-js/web";
2
+ import { createContext, splitProps, useContext } from "solid-js";
3
+ //#region src/Keyboard.tsx
4
+ /**
5
+ * Keyboard primitive for solidaria-components.
6
+ *
7
+ * Displays keyboard key hints with semantic <kbd> markup.
8
+ * Port direction: react-aria-components/src/Keyboard.tsx
9
+ */
10
+ var _tmpl$ = /*#__PURE__*/ template(`<kbd dir=ltr>`);
11
+ const KeyboardContext = createContext(null);
12
+ function Keyboard(props) {
13
+ const context = useContext(KeyboardContext);
14
+ const merged = () => ({
15
+ ...context,
16
+ ...props
17
+ });
18
+ const [local, domProps] = splitProps(merged(), ["children"]);
19
+ return (() => {
20
+ var _el$ = getNextElement(_tmpl$);
21
+ spread(_el$, domProps, false, true);
22
+ insert(_el$, () => local.children);
23
+ runHydrationEvents();
24
+ return _el$;
25
+ })();
26
+ }
27
+ //#endregion
28
+ export { Keyboard, KeyboardContext };
29
+
30
+ //# sourceMappingURL=Keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Keyboard.js","names":["JSX","createContext","splitProps","useContext","KeyboardProps","HTMLAttributes","HTMLElement","children","Element","KeyboardContext","Keyboard","props","context","merged","local","domProps","_el$","_$getNextElement","_tmpl$","_$spread","_$insert","_$runHydrationEvents"],"sources":["../src/Keyboard.tsx"],"sourcesContent":["/**\n * Keyboard primitive for solidaria-components.\n *\n * Displays keyboard key hints with semantic <kbd> markup.\n * Port direction: react-aria-components/src/Keyboard.tsx\n */\n\nimport { type JSX, createContext, splitProps, useContext } from \"solid-js\";\n\nexport interface KeyboardProps extends JSX.HTMLAttributes<HTMLElement> {\n children?: JSX.Element;\n}\n\nexport const KeyboardContext = createContext<KeyboardProps | null>(null);\n\nexport function Keyboard(props: KeyboardProps): JSX.Element {\n const context = useContext(KeyboardContext);\n const merged = () => ({ ...context, ...props });\n const [local, domProps] = splitProps(merged(), [\"children\"]);\n\n return (\n <kbd dir=\"ltr\" {...domProps}>\n {local.children}\n </kbd>\n );\n}\n"],"mappings":";;;;;;;;;;AAaA,MAAaS,kBAAkBR,cAAoC,IAAI;AAEvE,SAAgBS,SAASC,OAAmC;CAC1D,MAAMC,UAAUT,WAAWM,eAAe;CAC1C,MAAMI,gBAAgB;EAAE,GAAGD;EAAS,GAAGD;CAAM;CAC7C,MAAM,CAACG,OAAOC,YAAYb,WAAWW,OAAO,GAAG,CAAC,UAAU,CAAC;CAE3D,cAAA;EAAA,IAAAG,OAAAC,eAAAC,MAAA;EAAAC,OAAAH,MACqBD,UAAQ,OAAA,IAAA;EAAAK,OAAAJ,YACxBF,MAAMP,QAAQ;EAAAc,mBAAA;EAAA,OAAAL;CAAA,EAAA,CAAA;AAGrB"}
@@ -0,0 +1,24 @@
1
+ import { createContext, splitProps, useContext } from "solid-js";
2
+ //#region src/Keyboard.tsx
3
+ /**
4
+ * Keyboard primitive for solidaria-components.
5
+ *
6
+ * Displays keyboard key hints with semantic <kbd> markup.
7
+ * Port direction: react-aria-components/src/Keyboard.tsx
8
+ */
9
+ const KeyboardContext = createContext(null);
10
+ function Keyboard(props) {
11
+ const context = useContext(KeyboardContext);
12
+ const merged = () => ({
13
+ ...context,
14
+ ...props
15
+ });
16
+ const [local, domProps] = splitProps(merged(), ["children"]);
17
+ return <kbd dir="ltr" {...domProps}>
18
+ {local.children}
19
+ </kbd>;
20
+ }
21
+ //#endregion
22
+ export { Keyboard, KeyboardContext };
23
+
24
+ //# sourceMappingURL=Keyboard.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Keyboard.jsx","names":[],"sources":["../src/Keyboard.tsx"],"sourcesContent":["/**\n * Keyboard primitive for solidaria-components.\n *\n * Displays keyboard key hints with semantic <kbd> markup.\n * Port direction: react-aria-components/src/Keyboard.tsx\n */\n\nimport { type JSX, createContext, splitProps, useContext } from \"solid-js\";\n\nexport interface KeyboardProps extends JSX.HTMLAttributes<HTMLElement> {\n children?: JSX.Element;\n}\n\nexport const KeyboardContext = createContext<KeyboardProps | null>(null);\n\nexport function Keyboard(props: KeyboardProps): JSX.Element {\n const context = useContext(KeyboardContext);\n const merged = () => ({ ...context, ...props });\n const [local, domProps] = splitProps(merged(), [\"children\"]);\n\n return (\n <kbd dir=\"ltr\" {...domProps}>\n {local.children}\n </kbd>\n );\n}\n"],"mappings":";;;;;;;;AAaA,MAAa,kBAAkB,cAAoC,IAAI;AAEvE,SAAgB,SAAS,OAAmC;CAC1D,MAAM,UAAU,WAAW,eAAe;CAC1C,MAAM,gBAAgB;EAAE,GAAG;EAAS,GAAG;CAAM;CAC7C,MAAM,CAAC,OAAO,YAAY,WAAW,OAAO,GAAG,CAAC,UAAU,CAAC;CAE3D,OACE,CAAC,IAAI,cAAc,UAAU;OAC1B,MAAM,SAAS;IAClB,EAAE;AAEN"}
@@ -0,0 +1,134 @@
1
+ import { filterDOMProps } from "./utils.js";
2
+ import { Dynamic, createComponent, mergeProps } from "solid-js/web";
3
+ import { createContext, createMemo, createSignal, splitProps } from "solid-js";
4
+ import { createLandmark, getLandmarkController } from "@proyecto-viviana/solidaria";
5
+ //#region src/Landmark.tsx
6
+ /**
7
+ * Landmark component for solidaria-components
8
+ *
9
+ * Pre-wired headless landmark component that combines aria hooks.
10
+ * Enables F6 keyboard navigation between major page sections.
11
+ */
12
+ const LandmarkContext = createContext(null);
13
+ /**
14
+ * Maps ARIA landmark roles to their semantic HTML elements.
15
+ * Using semantic elements is preferred when possible.
16
+ */
17
+ const roleToSemanticElement = {
18
+ main: "main",
19
+ navigation: "nav",
20
+ search: "search",
21
+ banner: "header",
22
+ contentinfo: "footer",
23
+ complementary: "aside",
24
+ form: "form",
25
+ region: "section"
26
+ };
27
+ /**
28
+ * A landmark is a region of the page that helps screen reader users navigate.
29
+ * Press F6 to cycle through landmarks, or Shift+F6 to go backwards.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * // Main content area
34
+ * <Landmark role="main" aria-label="Main content">
35
+ * <h1>Welcome</h1>
36
+ * <p>Page content here...</p>
37
+ * </Landmark>
38
+ *
39
+ * // Navigation
40
+ * <Landmark role="navigation" aria-label="Primary navigation">
41
+ * <nav>...</nav>
42
+ * </Landmark>
43
+ *
44
+ * // Search
45
+ * <Landmark role="search" aria-label="Site search">
46
+ * <form>...</form>
47
+ * </Landmark>
48
+ *
49
+ * // Custom element type
50
+ * <Landmark role="region" aria-label="Featured content" elementType="div">
51
+ * ...
52
+ * </Landmark>
53
+ * ```
54
+ */
55
+ function Landmark(props) {
56
+ const [local, ariaProps] = splitProps(props, [
57
+ "class",
58
+ "style",
59
+ "slot",
60
+ "children",
61
+ "elementType"
62
+ ]);
63
+ const [ref, setRef] = createSignal();
64
+ const elementType = createMemo(() => {
65
+ if (local.elementType) return local.elementType;
66
+ return roleToSemanticElement[ariaProps.role] ?? "div";
67
+ });
68
+ const landmarkAria = createLandmark({
69
+ get role() {
70
+ return ariaProps.role;
71
+ },
72
+ get "aria-label"() {
73
+ return ariaProps["aria-label"];
74
+ },
75
+ get "aria-labelledby"() {
76
+ return ariaProps["aria-labelledby"];
77
+ },
78
+ get id() {
79
+ return ariaProps.id;
80
+ },
81
+ get focus() {
82
+ return ariaProps.focus;
83
+ }
84
+ }, ref);
85
+ const renderValues = createMemo(() => ({ role: ariaProps.role }));
86
+ const resolvedClass = createMemo(() => {
87
+ const cls = local.class;
88
+ if (typeof cls === "function") return cls(renderValues());
89
+ return cls ?? `solidaria-Landmark solidaria-Landmark--${ariaProps.role}`;
90
+ });
91
+ const resolvedStyle = createMemo(() => {
92
+ const style = local.style;
93
+ if (typeof style === "function") return style(renderValues());
94
+ return style;
95
+ });
96
+ const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
97
+ return createComponent(Dynamic, mergeProps({
98
+ get component() {
99
+ return elementType();
100
+ },
101
+ ref: setRef
102
+ }, domProps, () => landmarkAria.landmarkProps, {
103
+ get ["class"]() {
104
+ return resolvedClass();
105
+ },
106
+ get style() {
107
+ return resolvedStyle();
108
+ },
109
+ get slot() {
110
+ return local.slot;
111
+ },
112
+ get children() {
113
+ return props.children;
114
+ }
115
+ }));
116
+ }
117
+ /**
118
+ * Returns a controller for programmatic landmark navigation.
119
+ *
120
+ * @example
121
+ * ```tsx
122
+ * const controller = useLandmarkController();
123
+ *
124
+ * <button onClick={() => controller.focusMain()}>Skip to main content</button>
125
+ * <button onClick={() => controller.focusNext()}>Next landmark</button>
126
+ * ```
127
+ */
128
+ function useLandmarkController() {
129
+ return getLandmarkController();
130
+ }
131
+ //#endregion
132
+ export { Landmark, LandmarkContext, useLandmarkController };
133
+
134
+ //# sourceMappingURL=Landmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Landmark.js","names":["JSX","createContext","createMemo","createSignal","splitProps","Dynamic","createLandmark","getLandmarkController","AriaLandmarkProps","AriaLandmarkRole","LandmarkController","SlotProps","filterDOMProps","LandmarkRenderProps","role","LandmarkProps","elementType","IntrinsicElements","class","renderProps","style","CSSProperties","children","Element","LandmarkContext","roleToSemanticElement","Partial","Record","main","navigation","search","banner","contentinfo","complementary","form","region","Landmark","props","local","ariaProps","ref","setRef","HTMLElement","landmarkAria","aria-label","aria-labelledby","id","focus","renderValues","resolvedClass","cls","resolvedStyle","domProps","global","_$createComponent","_$mergeProps","component","landmarkProps","slot","useLandmarkController"],"sources":["../src/Landmark.tsx"],"sourcesContent":["/**\n * Landmark component for solidaria-components\n *\n * Pre-wired headless landmark component that combines aria hooks.\n * Enables F6 keyboard navigation between major page sections.\n */\n\nimport { type JSX, createContext, createMemo, createSignal, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport {\n createLandmark,\n getLandmarkController,\n type AriaLandmarkProps,\n type AriaLandmarkRole,\n type LandmarkController,\n} from \"@proyecto-viviana/solidaria\";\nimport { type SlotProps, filterDOMProps } from \"./utils\";\n\nexport interface LandmarkRenderProps {\n /** The ARIA landmark role. */\n role: AriaLandmarkRole;\n}\n\nexport interface LandmarkProps extends AriaLandmarkProps, SlotProps {\n /**\n * The HTML element type to render.\n * @default 'div' (or semantic element based on role)\n */\n elementType?: keyof JSX.IntrinsicElements;\n /** The CSS className for the element. A function may be provided to receive render props. */\n class?: string | ((renderProps: LandmarkRenderProps) => string);\n /** The inline style for the element. A function may be provided to receive render props. */\n style?: JSX.CSSProperties | ((renderProps: LandmarkRenderProps) => JSX.CSSProperties);\n /** Children content. */\n children?: JSX.Element;\n}\n\nexport type { AriaLandmarkRole, LandmarkController };\n\nexport const LandmarkContext = createContext<LandmarkProps | null>(null);\n\n/**\n * Maps ARIA landmark roles to their semantic HTML elements.\n * Using semantic elements is preferred when possible.\n */\nconst roleToSemanticElement: Partial<Record<AriaLandmarkRole, keyof JSX.IntrinsicElements>> = {\n main: \"main\",\n navigation: \"nav\",\n search: \"search\", // HTML5.3 <search> element\n banner: \"header\",\n contentinfo: \"footer\",\n complementary: \"aside\",\n form: \"form\",\n region: \"section\",\n};\n\n/**\n * A landmark is a region of the page that helps screen reader users navigate.\n * Press F6 to cycle through landmarks, or Shift+F6 to go backwards.\n *\n * @example\n * ```tsx\n * // Main content area\n * <Landmark role=\"main\" aria-label=\"Main content\">\n * <h1>Welcome</h1>\n * <p>Page content here...</p>\n * </Landmark>\n *\n * // Navigation\n * <Landmark role=\"navigation\" aria-label=\"Primary navigation\">\n * <nav>...</nav>\n * </Landmark>\n *\n * // Search\n * <Landmark role=\"search\" aria-label=\"Site search\">\n * <form>...</form>\n * </Landmark>\n *\n * // Custom element type\n * <Landmark role=\"region\" aria-label=\"Featured content\" elementType=\"div\">\n * ...\n * </Landmark>\n * ```\n */\nexport function Landmark(props: LandmarkProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n \"class\",\n \"style\",\n \"slot\",\n \"children\",\n \"elementType\",\n ]);\n\n // Element ref\n const [ref, setRef] = createSignal<HTMLElement>();\n\n // Determine the element type - use semantic element for the role if not specified\n const elementType = createMemo(() => {\n if (local.elementType) {\n return local.elementType;\n }\n return roleToSemanticElement[ariaProps.role] ?? \"div\";\n });\n\n // Create landmark aria props\n const landmarkAria = createLandmark(\n {\n get role() {\n return ariaProps.role;\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n get id() {\n return ariaProps.id;\n },\n get focus() {\n return ariaProps.focus;\n },\n },\n ref,\n );\n\n const renderValues = createMemo<LandmarkRenderProps>(() => ({\n role: ariaProps.role,\n }));\n\n const resolvedClass = createMemo(() => {\n const cls = local.class;\n if (typeof cls === \"function\") {\n return cls(renderValues());\n }\n return cls ?? `solidaria-Landmark solidaria-Landmark--${ariaProps.role}`;\n });\n\n const resolvedStyle = createMemo(() => {\n const style = local.style;\n if (typeof style === \"function\") {\n return style(renderValues());\n }\n return style;\n });\n\n const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));\n\n return (\n <Dynamic\n component={elementType()}\n ref={setRef}\n {...domProps()}\n {...landmarkAria.landmarkProps}\n class={resolvedClass()}\n style={resolvedStyle()}\n slot={local.slot}\n >\n {props.children}\n </Dynamic>\n );\n}\n\n/**\n * Returns a controller for programmatic landmark navigation.\n *\n * @example\n * ```tsx\n * const controller = useLandmarkController();\n *\n * <button onClick={() => controller.focusMain()}>Skip to main content</button>\n * <button onClick={() => controller.focusNext()}>Next landmark</button>\n * ```\n */\nexport function useLandmarkController(): LandmarkController {\n return getLandmarkController();\n}\n"],"mappings":";;;;;;;;;;;AAuCA,MAAawB,kBAAkBvB,cAAoC,IAAI;;;;;AAMvE,MAAMwB,wBAAwF;CAC5FG,MAAM;CACNC,YAAY;CACZC,QAAQ;CACRC,QAAQ;CACRC,aAAa;CACbC,eAAe;CACfC,MAAM;CACNC,QAAQ;AACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgBC,SAASC,OAAmC;CAC1D,MAAM,CAACC,OAAOC,aAAanC,WAAWiC,OAAO;EAC3C;EACA;EACA;EACA;EACA;CAAa,CACd;CAGD,MAAM,CAACG,KAAKC,UAAUtC,aAA0B;CAGhD,MAAMa,cAAcd,iBAAiB;EACnC,IAAIoC,MAAMtB,aACR,OAAOsB,MAAMtB;EAEf,OAAOS,sBAAsBc,UAAUzB,SAAS;CAClD,CAAC;CAGD,MAAM6B,eAAerC,eACnB;EACE,IAAIQ,OAAO;GACT,OAAOyB,UAAUzB;EACnB;EACA,IAAI,eAAe;GACjB,OAAOyB,UAAU;EACnB;EACA,IAAI,oBAAoB;GACtB,OAAOA,UAAU;EACnB;EACA,IAAIO,KAAK;GACP,OAAOP,UAAUO;EACnB;EACA,IAAIC,QAAQ;GACV,OAAOR,UAAUQ;EACnB;CACF,GACAP,GACF;CAEA,MAAMQ,eAAe9C,kBAAuC,EAC1DY,MAAMyB,UAAUzB,KAClB,EAAE;CAEF,MAAMmC,gBAAgB/C,iBAAiB;EACrC,MAAMgD,MAAMZ,MAAMpB;EAClB,IAAI,OAAOgC,QAAQ,YACjB,OAAOA,IAAIF,aAAa,CAAC;EAE3B,OAAOE,OAAO,0CAA0CX,UAAUzB;CACpE,CAAC;CAED,MAAMqC,gBAAgBjD,iBAAiB;EACrC,MAAMkB,QAAQkB,MAAMlB;EACpB,IAAI,OAAOA,UAAU,YACnB,OAAOA,MAAM4B,aAAa,CAAC;EAE7B,OAAO5B;CACT,CAAC;CAED,MAAMgC,WAAWlD,iBAAiBU,eAAe2B,WAAW,EAAEc,QAAQ,KAAK,CAAC,CAAC;CAE7E,OAAAC,gBACGjD,SAAOkD,WAAA;EAAA,IACNC,YAAS;GAAA,OAAExC,YAAY;EAAC;EAAAwB,KACnBC;CAAM,GACPW,gBACAT,aAAac,eAAa;EAAA,KAAA,WAAA;GAAA,OACvBR,cAAc;EAAC;EAAA,IACtB7B,QAAK;GAAA,OAAE+B,cAAc;EAAC;EAAA,IACtBO,OAAI;GAAA,OAAEpB,MAAMoB;EAAI;EAAA,IAAApC,WAAA;GAAA,OAEfe,MAAMf;EAAQ;CAAA,CAAA,CAAA;AAGrB;;;;;;;;;;;;AAaA,SAAgBqC,wBAA4C;CAC1D,OAAOpD,sBAAsB;AAC/B"}
@@ -0,0 +1,118 @@
1
+ import { filterDOMProps } from "./utils.jsx";
2
+ import { createContext, createMemo, createSignal, splitProps } from "solid-js";
3
+ import { Dynamic } from "solid-js/web";
4
+ import { createLandmark, getLandmarkController } from "@proyecto-viviana/solidaria";
5
+ //#region src/Landmark.tsx
6
+ /**
7
+ * Landmark component for solidaria-components
8
+ *
9
+ * Pre-wired headless landmark component that combines aria hooks.
10
+ * Enables F6 keyboard navigation between major page sections.
11
+ */
12
+ const LandmarkContext = createContext(null);
13
+ /**
14
+ * Maps ARIA landmark roles to their semantic HTML elements.
15
+ * Using semantic elements is preferred when possible.
16
+ */
17
+ const roleToSemanticElement = {
18
+ main: "main",
19
+ navigation: "nav",
20
+ search: "search",
21
+ banner: "header",
22
+ contentinfo: "footer",
23
+ complementary: "aside",
24
+ form: "form",
25
+ region: "section"
26
+ };
27
+ /**
28
+ * A landmark is a region of the page that helps screen reader users navigate.
29
+ * Press F6 to cycle through landmarks, or Shift+F6 to go backwards.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * // Main content area
34
+ * <Landmark role="main" aria-label="Main content">
35
+ * <h1>Welcome</h1>
36
+ * <p>Page content here...</p>
37
+ * </Landmark>
38
+ *
39
+ * // Navigation
40
+ * <Landmark role="navigation" aria-label="Primary navigation">
41
+ * <nav>...</nav>
42
+ * </Landmark>
43
+ *
44
+ * // Search
45
+ * <Landmark role="search" aria-label="Site search">
46
+ * <form>...</form>
47
+ * </Landmark>
48
+ *
49
+ * // Custom element type
50
+ * <Landmark role="region" aria-label="Featured content" elementType="div">
51
+ * ...
52
+ * </Landmark>
53
+ * ```
54
+ */
55
+ function Landmark(props) {
56
+ const [local, ariaProps] = splitProps(props, [
57
+ "class",
58
+ "style",
59
+ "slot",
60
+ "children",
61
+ "elementType"
62
+ ]);
63
+ const [ref, setRef] = createSignal();
64
+ const elementType = createMemo(() => {
65
+ if (local.elementType) return local.elementType;
66
+ return roleToSemanticElement[ariaProps.role] ?? "div";
67
+ });
68
+ const landmarkAria = createLandmark({
69
+ get role() {
70
+ return ariaProps.role;
71
+ },
72
+ get "aria-label"() {
73
+ return ariaProps["aria-label"];
74
+ },
75
+ get "aria-labelledby"() {
76
+ return ariaProps["aria-labelledby"];
77
+ },
78
+ get id() {
79
+ return ariaProps.id;
80
+ },
81
+ get focus() {
82
+ return ariaProps.focus;
83
+ }
84
+ }, ref);
85
+ const renderValues = createMemo(() => ({ role: ariaProps.role }));
86
+ const resolvedClass = createMemo(() => {
87
+ const cls = local.class;
88
+ if (typeof cls === "function") return cls(renderValues());
89
+ return cls ?? `solidaria-Landmark solidaria-Landmark--${ariaProps.role}`;
90
+ });
91
+ const resolvedStyle = createMemo(() => {
92
+ const style = local.style;
93
+ if (typeof style === "function") return style(renderValues());
94
+ return style;
95
+ });
96
+ const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
97
+ return <Dynamic component={elementType()} ref={setRef} {...domProps()} {...landmarkAria.landmarkProps} class={resolvedClass()} style={resolvedStyle()} slot={local.slot}>
98
+ {props.children}
99
+ </Dynamic>;
100
+ }
101
+ /**
102
+ * Returns a controller for programmatic landmark navigation.
103
+ *
104
+ * @example
105
+ * ```tsx
106
+ * const controller = useLandmarkController();
107
+ *
108
+ * <button onClick={() => controller.focusMain()}>Skip to main content</button>
109
+ * <button onClick={() => controller.focusNext()}>Next landmark</button>
110
+ * ```
111
+ */
112
+ function useLandmarkController() {
113
+ return getLandmarkController();
114
+ }
115
+ //#endregion
116
+ export { Landmark, LandmarkContext, useLandmarkController };
117
+
118
+ //# sourceMappingURL=Landmark.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Landmark.jsx","names":[],"sources":["../src/Landmark.tsx"],"sourcesContent":["/**\n * Landmark component for solidaria-components\n *\n * Pre-wired headless landmark component that combines aria hooks.\n * Enables F6 keyboard navigation between major page sections.\n */\n\nimport { type JSX, createContext, createMemo, createSignal, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport {\n createLandmark,\n getLandmarkController,\n type AriaLandmarkProps,\n type AriaLandmarkRole,\n type LandmarkController,\n} from \"@proyecto-viviana/solidaria\";\nimport { type SlotProps, filterDOMProps } from \"./utils\";\n\nexport interface LandmarkRenderProps {\n /** The ARIA landmark role. */\n role: AriaLandmarkRole;\n}\n\nexport interface LandmarkProps extends AriaLandmarkProps, SlotProps {\n /**\n * The HTML element type to render.\n * @default 'div' (or semantic element based on role)\n */\n elementType?: keyof JSX.IntrinsicElements;\n /** The CSS className for the element. A function may be provided to receive render props. */\n class?: string | ((renderProps: LandmarkRenderProps) => string);\n /** The inline style for the element. A function may be provided to receive render props. */\n style?: JSX.CSSProperties | ((renderProps: LandmarkRenderProps) => JSX.CSSProperties);\n /** Children content. */\n children?: JSX.Element;\n}\n\nexport type { AriaLandmarkRole, LandmarkController };\n\nexport const LandmarkContext = createContext<LandmarkProps | null>(null);\n\n/**\n * Maps ARIA landmark roles to their semantic HTML elements.\n * Using semantic elements is preferred when possible.\n */\nconst roleToSemanticElement: Partial<Record<AriaLandmarkRole, keyof JSX.IntrinsicElements>> = {\n main: \"main\",\n navigation: \"nav\",\n search: \"search\", // HTML5.3 <search> element\n banner: \"header\",\n contentinfo: \"footer\",\n complementary: \"aside\",\n form: \"form\",\n region: \"section\",\n};\n\n/**\n * A landmark is a region of the page that helps screen reader users navigate.\n * Press F6 to cycle through landmarks, or Shift+F6 to go backwards.\n *\n * @example\n * ```tsx\n * // Main content area\n * <Landmark role=\"main\" aria-label=\"Main content\">\n * <h1>Welcome</h1>\n * <p>Page content here...</p>\n * </Landmark>\n *\n * // Navigation\n * <Landmark role=\"navigation\" aria-label=\"Primary navigation\">\n * <nav>...</nav>\n * </Landmark>\n *\n * // Search\n * <Landmark role=\"search\" aria-label=\"Site search\">\n * <form>...</form>\n * </Landmark>\n *\n * // Custom element type\n * <Landmark role=\"region\" aria-label=\"Featured content\" elementType=\"div\">\n * ...\n * </Landmark>\n * ```\n */\nexport function Landmark(props: LandmarkProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n \"class\",\n \"style\",\n \"slot\",\n \"children\",\n \"elementType\",\n ]);\n\n // Element ref\n const [ref, setRef] = createSignal<HTMLElement>();\n\n // Determine the element type - use semantic element for the role if not specified\n const elementType = createMemo(() => {\n if (local.elementType) {\n return local.elementType;\n }\n return roleToSemanticElement[ariaProps.role] ?? \"div\";\n });\n\n // Create landmark aria props\n const landmarkAria = createLandmark(\n {\n get role() {\n return ariaProps.role;\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n get id() {\n return ariaProps.id;\n },\n get focus() {\n return ariaProps.focus;\n },\n },\n ref,\n );\n\n const renderValues = createMemo<LandmarkRenderProps>(() => ({\n role: ariaProps.role,\n }));\n\n const resolvedClass = createMemo(() => {\n const cls = local.class;\n if (typeof cls === \"function\") {\n return cls(renderValues());\n }\n return cls ?? `solidaria-Landmark solidaria-Landmark--${ariaProps.role}`;\n });\n\n const resolvedStyle = createMemo(() => {\n const style = local.style;\n if (typeof style === \"function\") {\n return style(renderValues());\n }\n return style;\n });\n\n const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));\n\n return (\n <Dynamic\n component={elementType()}\n ref={setRef}\n {...domProps()}\n {...landmarkAria.landmarkProps}\n class={resolvedClass()}\n style={resolvedStyle()}\n slot={local.slot}\n >\n {props.children}\n </Dynamic>\n );\n}\n\n/**\n * Returns a controller for programmatic landmark navigation.\n *\n * @example\n * ```tsx\n * const controller = useLandmarkController();\n *\n * <button onClick={() => controller.focusMain()}>Skip to main content</button>\n * <button onClick={() => controller.focusNext()}>Next landmark</button>\n * ```\n */\nexport function useLandmarkController(): LandmarkController {\n return getLandmarkController();\n}\n"],"mappings":";;;;;;;;;;;AAuCA,MAAa,kBAAkB,cAAoC,IAAI;;;;;AAMvE,MAAM,wBAAwF;CAC5F,MAAM;CACN,YAAY;CACZ,QAAQ;CACR,QAAQ;CACR,aAAa;CACb,eAAe;CACf,MAAM;CACN,QAAQ;AACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,SAAgB,SAAS,OAAmC;CAC1D,MAAM,CAAC,OAAO,aAAa,WAAW,OAAO;EAC3C;EACA;EACA;EACA;EACA;CACF,CAAC;CAGD,MAAM,CAAC,KAAK,UAAU,aAA0B;CAGhD,MAAM,cAAc,iBAAiB;EACnC,IAAI,MAAM,aACR,OAAO,MAAM;EAEf,OAAO,sBAAsB,UAAU,SAAS;CAClD,CAAC;CAGD,MAAM,eAAe,eACnB;EACE,IAAI,OAAO;GACT,OAAO,UAAU;EACnB;EACA,IAAI,eAAe;GACjB,OAAO,UAAU;EACnB;EACA,IAAI,oBAAoB;GACtB,OAAO,UAAU;EACnB;EACA,IAAI,KAAK;GACP,OAAO,UAAU;EACnB;EACA,IAAI,QAAQ;GACV,OAAO,UAAU;EACnB;CACF,GACA,GACF;CAEA,MAAM,eAAe,kBAAuC,EAC1D,MAAM,UAAU,KAClB,EAAE;CAEF,MAAM,gBAAgB,iBAAiB;EACrC,MAAM,MAAM,MAAM;EAClB,IAAI,OAAO,QAAQ,YACjB,OAAO,IAAI,aAAa,CAAC;EAE3B,OAAO,OAAO,0CAA0C,UAAU;CACpE,CAAC;CAED,MAAM,gBAAgB,iBAAiB;EACrC,MAAM,QAAQ,MAAM;EACpB,IAAI,OAAO,UAAU,YACnB,OAAO,MAAM,aAAa,CAAC;EAE7B,OAAO;CACT,CAAC;CAED,MAAM,WAAW,iBAAiB,eAAe,WAAW,EAAE,QAAQ,KAAK,CAAC,CAAC;CAE7E,OACE,CAAC,QACC,WAAW,YAAY,GACvB,KAAK,YACD,SAAS,OACT,aAAa,eACjB,OAAO,cAAc,GACrB,OAAO,cAAc,GACrB,MAAM,MAAM,MACb;OACE,MAAM,SAAS;IAClB,EAAE;AAEN;;;;;;;;;;;;AAaA,SAAgB,wBAA4C;CAC1D,OAAO,sBAAsB;AAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../src/Link.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,WAAW,EAAyC,MAAM,UAAU,CAAC;AAE7F,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAGjB,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,CAAC;AAWzE,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,cAAc,EAAE,OAAO,CAAC;IACxB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,WAAW,EAAE,SAAS;IAC3F,yFAAyF;IACzF,QAAQ,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAC3C,yCAAyC;IACzC,KAAK,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAC7C,wCAAwC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACzC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,WAAW,8CAAwC,CAAC;AAEjE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,OAAO,CAoL/D"}
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../src/Link.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,WAAW,EAAyC,MAAM,UAAU,CAAC;AAE7F,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAGjB,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,CAAC;AAWzE,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAC;IACnB,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,cAAc,EAAE,OAAO,CAAC;IACxB,oCAAoC;IACpC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,WAAW,EAAE,SAAS;IAC3F,yFAAyF;IACzF,QAAQ,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IAC3C,yCAAyC;IACzC,KAAK,CAAC,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAC7C,wCAAwC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACzC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,WAAW,8CAAwC,CAAC;AAEjE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,OAAO,CAsL/D"}