@solid2-aria/components 0.0.0-stage → 0.0.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 (514) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -2
  3. package/dist/LICENSES/Apache-2.0.txt +201 -0
  4. package/dist/LICENSES/react-spectrum-NOTICE.txt +242 -0
  5. package/dist/NOTICE.txt +636 -0
  6. package/dist/browser/autocomplete.d.ts +35 -0
  7. package/dist/browser/autocomplete.js +69 -0
  8. package/dist/browser/autocomplete.js.map +1 -0
  9. package/dist/browser/breadcrumbs.d.ts +71 -0
  10. package/dist/browser/breadcrumbs.js +121 -0
  11. package/dist/browser/breadcrumbs.js.map +1 -0
  12. package/dist/browser/button.d.ts +36 -0
  13. package/dist/browser/button.js +156 -0
  14. package/dist/browser/button.js.map +1 -0
  15. package/dist/browser/calendar.d.ts +103 -0
  16. package/dist/browser/calendar.js +581 -0
  17. package/dist/browser/calendar.js.map +1 -0
  18. package/dist/browser/checkbox.d.ts +67 -0
  19. package/dist/browser/checkbox.js +345 -0
  20. package/dist/browser/checkbox.js.map +1 -0
  21. package/dist/browser/collection-dnd.d.ts +56 -0
  22. package/dist/browser/collection-dnd.js +156 -0
  23. package/dist/browser/collection-dnd.js.map +1 -0
  24. package/dist/browser/collection.d.ts +153 -0
  25. package/dist/browser/collection.js +106 -0
  26. package/dist/browser/collection.js.map +1 -0
  27. package/dist/browser/color-area.d.ts +21 -0
  28. package/dist/browser/color-area.js +94 -0
  29. package/dist/browser/color-area.js.map +1 -0
  30. package/dist/browser/color-field.d.ts +39 -0
  31. package/dist/browser/color-field.js +232 -0
  32. package/dist/browser/color-field.js.map +1 -0
  33. package/dist/browser/color-picker.d.ts +30 -0
  34. package/dist/browser/color-picker.js +84 -0
  35. package/dist/browser/color-picker.js.map +1 -0
  36. package/dist/browser/color-slider.d.ts +23 -0
  37. package/dist/browser/color-slider.js +132 -0
  38. package/dist/browser/color-slider.js.map +1 -0
  39. package/dist/browser/color-swatch-picker.d.ts +29 -0
  40. package/dist/browser/color-swatch-picker.js +131 -0
  41. package/dist/browser/color-swatch-picker.js.map +1 -0
  42. package/dist/browser/color-swatch.d.ts +19 -0
  43. package/dist/browser/color-swatch.js +42 -0
  44. package/dist/browser/color-swatch.js.map +1 -0
  45. package/dist/browser/color-thumb.d.ts +42 -0
  46. package/dist/browser/color-thumb.js +114 -0
  47. package/dist/browser/color-thumb.js.map +1 -0
  48. package/dist/browser/color-wheel.d.ts +29 -0
  49. package/dist/browser/color-wheel.js +109 -0
  50. package/dist/browser/color-wheel.js.map +1 -0
  51. package/dist/browser/combo-box.d.ts +113 -0
  52. package/dist/browser/combo-box.js +394 -0
  53. package/dist/browser/combo-box.js.map +1 -0
  54. package/dist/browser/create-drag-and-drop.d.ts +61 -0
  55. package/dist/browser/create-drag-and-drop.js +56 -0
  56. package/dist/browser/create-drag-and-drop.js.map +1 -0
  57. package/dist/browser/date-field.d.ts +71 -0
  58. package/dist/browser/date-field.js +508 -0
  59. package/dist/browser/date-field.js.map +1 -0
  60. package/dist/browser/date-picker.d.ts +50 -0
  61. package/dist/browser/date-picker.js +403 -0
  62. package/dist/browser/date-picker.js.map +1 -0
  63. package/dist/browser/dialog.d.ts +35 -0
  64. package/dist/browser/dialog.js +148 -0
  65. package/dist/browser/dialog.js.map +1 -0
  66. package/dist/browser/disclosure.d.ts +56 -0
  67. package/dist/browser/disclosure.js +180 -0
  68. package/dist/browser/disclosure.js.map +1 -0
  69. package/dist/browser/drag-and-drop.d.ts +43 -0
  70. package/dist/browser/drag-and-drop.js +66 -0
  71. package/dist/browser/drag-and-drop.js.map +1 -0
  72. package/dist/browser/drop-zone.d.ts +33 -0
  73. package/dist/browser/drop-zone.js +161 -0
  74. package/dist/browser/drop-zone.js.map +1 -0
  75. package/dist/browser/field-error.d.ts +28 -0
  76. package/dist/browser/field-error.js +60 -0
  77. package/dist/browser/field-error.js.map +1 -0
  78. package/dist/browser/file-trigger.d.ts +30 -0
  79. package/dist/browser/file-trigger.js +66 -0
  80. package/dist/browser/file-trigger.js.map +1 -0
  81. package/dist/browser/form.d.ts +28 -0
  82. package/dist/browser/form.js +64 -0
  83. package/dist/browser/form.js.map +1 -0
  84. package/dist/browser/grid-layout.d.ts +22 -0
  85. package/dist/browser/grid-layout.js +30 -0
  86. package/dist/browser/grid-layout.js.map +1 -0
  87. package/dist/browser/grid-list.d.ts +95 -0
  88. package/dist/browser/grid-list.js +609 -0
  89. package/dist/browser/grid-list.js.map +1 -0
  90. package/dist/browser/group.d.ts +35 -0
  91. package/dist/browser/group.js +92 -0
  92. package/dist/browser/group.js.map +1 -0
  93. package/dist/browser/header.d.ts +25 -0
  94. package/dist/browser/header.js +57 -0
  95. package/dist/browser/header.js.map +1 -0
  96. package/dist/browser/heading.d.ts +26 -0
  97. package/dist/browser/heading.js +53 -0
  98. package/dist/browser/heading.js.map +1 -0
  99. package/dist/browser/hidden-date-input.d.ts +34 -0
  100. package/dist/browser/hidden-date-input.js +84 -0
  101. package/dist/browser/hidden-date-input.js.map +1 -0
  102. package/dist/browser/index.d.ts +133 -0
  103. package/dist/browser/index.js +98 -0
  104. package/dist/browser/input.d.ts +33 -0
  105. package/dist/browser/input.js +94 -0
  106. package/dist/browser/input.js.map +1 -0
  107. package/dist/browser/intl/ar-AE.js +11 -0
  108. package/dist/browser/intl/ar-AE.js.map +1 -0
  109. package/dist/browser/intl/bg-BG.js +11 -0
  110. package/dist/browser/intl/bg-BG.js.map +1 -0
  111. package/dist/browser/intl/cs-CZ.js +11 -0
  112. package/dist/browser/intl/cs-CZ.js.map +1 -0
  113. package/dist/browser/intl/da-DK.js +11 -0
  114. package/dist/browser/intl/da-DK.js.map +1 -0
  115. package/dist/browser/intl/de-DE.js +11 -0
  116. package/dist/browser/intl/de-DE.js.map +1 -0
  117. package/dist/browser/intl/el-GR.js +11 -0
  118. package/dist/browser/intl/el-GR.js.map +1 -0
  119. package/dist/browser/intl/en-US.js +11 -0
  120. package/dist/browser/intl/en-US.js.map +1 -0
  121. package/dist/browser/intl/es-ES.js +11 -0
  122. package/dist/browser/intl/es-ES.js.map +1 -0
  123. package/dist/browser/intl/et-EE.js +11 -0
  124. package/dist/browser/intl/et-EE.js.map +1 -0
  125. package/dist/browser/intl/fi-FI.js +11 -0
  126. package/dist/browser/intl/fi-FI.js.map +1 -0
  127. package/dist/browser/intl/fr-FR.js +11 -0
  128. package/dist/browser/intl/fr-FR.js.map +1 -0
  129. package/dist/browser/intl/he-IL.js +11 -0
  130. package/dist/browser/intl/he-IL.js.map +1 -0
  131. package/dist/browser/intl/hr-HR.js +11 -0
  132. package/dist/browser/intl/hr-HR.js.map +1 -0
  133. package/dist/browser/intl/hu-HU.js +11 -0
  134. package/dist/browser/intl/hu-HU.js.map +1 -0
  135. package/dist/browser/intl/index.js +75 -0
  136. package/dist/browser/intl/index.js.map +1 -0
  137. package/dist/browser/intl/it-IT.js +11 -0
  138. package/dist/browser/intl/it-IT.js.map +1 -0
  139. package/dist/browser/intl/ja-JP.js +11 -0
  140. package/dist/browser/intl/ja-JP.js.map +1 -0
  141. package/dist/browser/intl/ko-KR.js +11 -0
  142. package/dist/browser/intl/ko-KR.js.map +1 -0
  143. package/dist/browser/intl/lt-LT.js +11 -0
  144. package/dist/browser/intl/lt-LT.js.map +1 -0
  145. package/dist/browser/intl/lv-LV.js +11 -0
  146. package/dist/browser/intl/lv-LV.js.map +1 -0
  147. package/dist/browser/intl/nb-NO.js +11 -0
  148. package/dist/browser/intl/nb-NO.js.map +1 -0
  149. package/dist/browser/intl/nl-NL.js +11 -0
  150. package/dist/browser/intl/nl-NL.js.map +1 -0
  151. package/dist/browser/intl/pl-PL.js +11 -0
  152. package/dist/browser/intl/pl-PL.js.map +1 -0
  153. package/dist/browser/intl/pt-BR.js +11 -0
  154. package/dist/browser/intl/pt-BR.js.map +1 -0
  155. package/dist/browser/intl/pt-PT.js +11 -0
  156. package/dist/browser/intl/pt-PT.js.map +1 -0
  157. package/dist/browser/intl/ro-RO.js +11 -0
  158. package/dist/browser/intl/ro-RO.js.map +1 -0
  159. package/dist/browser/intl/ru-RU.js +11 -0
  160. package/dist/browser/intl/ru-RU.js.map +1 -0
  161. package/dist/browser/intl/sk-SK.js +11 -0
  162. package/dist/browser/intl/sk-SK.js.map +1 -0
  163. package/dist/browser/intl/sl-SI.js +11 -0
  164. package/dist/browser/intl/sl-SI.js.map +1 -0
  165. package/dist/browser/intl/sr-SP.js +11 -0
  166. package/dist/browser/intl/sr-SP.js.map +1 -0
  167. package/dist/browser/intl/sv-SE.js +11 -0
  168. package/dist/browser/intl/sv-SE.js.map +1 -0
  169. package/dist/browser/intl/tr-TR.js +11 -0
  170. package/dist/browser/intl/tr-TR.js.map +1 -0
  171. package/dist/browser/intl/uk-UA.js +11 -0
  172. package/dist/browser/intl/uk-UA.js.map +1 -0
  173. package/dist/browser/intl/zh-CN.js +11 -0
  174. package/dist/browser/intl/zh-CN.js.map +1 -0
  175. package/dist/browser/intl/zh-TW.js +11 -0
  176. package/dist/browser/intl/zh-TW.js.map +1 -0
  177. package/dist/browser/keyboard.d.ts +25 -0
  178. package/dist/browser/keyboard.js +50 -0
  179. package/dist/browser/keyboard.js.map +1 -0
  180. package/dist/browser/label.d.ts +26 -0
  181. package/dist/browser/label.js +53 -0
  182. package/dist/browser/label.js.map +1 -0
  183. package/dist/browser/link.d.ts +34 -0
  184. package/dist/browser/link.js +92 -0
  185. package/dist/browser/link.js.map +1 -0
  186. package/dist/browser/list-box.d.ts +171 -0
  187. package/dist/browser/list-box.js +547 -0
  188. package/dist/browser/list-box.js.map +1 -0
  189. package/dist/browser/menu.d.ts +150 -0
  190. package/dist/browser/menu.js +597 -0
  191. package/dist/browser/menu.js.map +1 -0
  192. package/dist/browser/meter.d.ts +29 -0
  193. package/dist/browser/meter.js +73 -0
  194. package/dist/browser/meter.js.map +1 -0
  195. package/dist/browser/modal.d.ts +48 -0
  196. package/dist/browser/modal.js +190 -0
  197. package/dist/browser/modal.js.map +1 -0
  198. package/dist/browser/navigation-tree.d.ts +54 -0
  199. package/dist/browser/navigation-tree.js +233 -0
  200. package/dist/browser/navigation-tree.js.map +1 -0
  201. package/dist/browser/number-field.d.ts +36 -0
  202. package/dist/browser/number-field.js +179 -0
  203. package/dist/browser/number-field.js.map +1 -0
  204. package/dist/browser/overlay-arrow.d.ts +32 -0
  205. package/dist/browser/overlay-arrow.js +65 -0
  206. package/dist/browser/overlay-arrow.js.map +1 -0
  207. package/dist/browser/overlay-contexts.d.ts +22 -0
  208. package/dist/browser/overlay-contexts.js +24 -0
  209. package/dist/browser/overlay-contexts.js.map +1 -0
  210. package/dist/browser/popover.d.ts +50 -0
  211. package/dist/browser/popover.js +255 -0
  212. package/dist/browser/popover.js.map +1 -0
  213. package/dist/browser/preview-trigger.d.ts +25 -0
  214. package/dist/browser/preview-trigger.js +93 -0
  215. package/dist/browser/preview-trigger.js.map +1 -0
  216. package/dist/browser/progress-bar.d.ts +30 -0
  217. package/dist/browser/progress-bar.js +76 -0
  218. package/dist/browser/progress-bar.js.map +1 -0
  219. package/dist/browser/radio-group.d.ts +67 -0
  220. package/dist/browser/radio-group.js +336 -0
  221. package/dist/browser/radio-group.js.map +1 -0
  222. package/dist/browser/search-field.d.ts +34 -0
  223. package/dist/browser/search-field.js +156 -0
  224. package/dist/browser/search-field.js.map +1 -0
  225. package/dist/browser/select.d.ts +115 -0
  226. package/dist/browser/select.js +351 -0
  227. package/dist/browser/select.js.map +1 -0
  228. package/dist/browser/selection-indicator.d.ts +25 -0
  229. package/dist/browser/selection-indicator.js +40 -0
  230. package/dist/browser/selection-indicator.js.map +1 -0
  231. package/dist/browser/separator.d.ts +30 -0
  232. package/dist/browser/separator.js +68 -0
  233. package/dist/browser/separator.js.map +1 -0
  234. package/dist/browser/shared-element-transition.d.ts +35 -0
  235. package/dist/browser/shared-element-transition.js +141 -0
  236. package/dist/browser/shared-element-transition.js.map +1 -0
  237. package/dist/browser/sheet.d.ts +64 -0
  238. package/dist/browser/sheet.js +982 -0
  239. package/dist/browser/sheet.js.map +1 -0
  240. package/dist/browser/slider.d.ts +77 -0
  241. package/dist/browser/slider.js +318 -0
  242. package/dist/browser/slider.js.map +1 -0
  243. package/dist/browser/switch.d.ts +54 -0
  244. package/dist/browser/switch.js +240 -0
  245. package/dist/browser/switch.js.map +1 -0
  246. package/dist/browser/table-layout.d.ts +22 -0
  247. package/dist/browser/table-layout.js +31 -0
  248. package/dist/browser/table-layout.js.map +1 -0
  249. package/dist/browser/table.d.ts +184 -0
  250. package/dist/browser/table.js +1268 -0
  251. package/dist/browser/table.js.map +1 -0
  252. package/dist/browser/tabs.d.ts +194 -0
  253. package/dist/browser/tabs.js +378 -0
  254. package/dist/browser/tabs.js.map +1 -0
  255. package/dist/browser/tag-group.d.ts +112 -0
  256. package/dist/browser/tag-group.js +291 -0
  257. package/dist/browser/tag-group.js.map +1 -0
  258. package/dist/browser/text-area.d.ts +16 -0
  259. package/dist/browser/text-area.js +75 -0
  260. package/dist/browser/text-area.js.map +1 -0
  261. package/dist/browser/text-field.d.ts +31 -0
  262. package/dist/browser/text-field.js +152 -0
  263. package/dist/browser/text-field.js.map +1 -0
  264. package/dist/browser/text.d.ts +25 -0
  265. package/dist/browser/text.js +52 -0
  266. package/dist/browser/text.js.map +1 -0
  267. package/dist/browser/toast.d.ts +66 -0
  268. package/dist/browser/toast.js +226 -0
  269. package/dist/browser/toast.js.map +1 -0
  270. package/dist/browser/toggle-button-group.d.ts +32 -0
  271. package/dist/browser/toggle-button-group.js +74 -0
  272. package/dist/browser/toggle-button-group.js.map +1 -0
  273. package/dist/browser/toggle-button.d.ts +33 -0
  274. package/dist/browser/toggle-button.js +119 -0
  275. package/dist/browser/toggle-button.js.map +1 -0
  276. package/dist/browser/token-field.d.ts +124 -0
  277. package/dist/browser/token-field.js +277 -0
  278. package/dist/browser/token-field.js.map +1 -0
  279. package/dist/browser/toolbar.d.ts +28 -0
  280. package/dist/browser/toolbar.js +51 -0
  281. package/dist/browser/toolbar.js.map +1 -0
  282. package/dist/browser/tooltip.d.ts +44 -0
  283. package/dist/browser/tooltip.js +183 -0
  284. package/dist/browser/tooltip.js.map +1 -0
  285. package/dist/browser/tree-drop-target-delegate.d.ts +33 -0
  286. package/dist/browser/tree-drop-target-delegate.js +178 -0
  287. package/dist/browser/tree-drop-target-delegate.js.map +1 -0
  288. package/dist/browser/tree.d.ts +98 -0
  289. package/dist/browser/tree.js +699 -0
  290. package/dist/browser/tree.js.map +1 -0
  291. package/dist/browser/utils.d.ts +94 -0
  292. package/dist/browser/utils.js +173 -0
  293. package/dist/browser/utils.js.map +1 -0
  294. package/dist/browser/virtualizer.d.ts +33 -0
  295. package/dist/browser/virtualizer.js +179 -0
  296. package/dist/browser/virtualizer.js.map +1 -0
  297. package/dist/server/autocomplete.js +125 -0
  298. package/dist/server/autocomplete.js.map +1 -0
  299. package/dist/server/breadcrumbs.js +185 -0
  300. package/dist/server/breadcrumbs.js.map +1 -0
  301. package/dist/server/button.js +252 -0
  302. package/dist/server/button.js.map +1 -0
  303. package/dist/server/calendar.js +1054 -0
  304. package/dist/server/calendar.js.map +1 -0
  305. package/dist/server/checkbox.js +595 -0
  306. package/dist/server/checkbox.js.map +1 -0
  307. package/dist/server/collection-dnd.js +217 -0
  308. package/dist/server/collection-dnd.js.map +1 -0
  309. package/dist/server/collection.js +106 -0
  310. package/dist/server/collection.js.map +1 -0
  311. package/dist/server/color-area.js +142 -0
  312. package/dist/server/color-area.js.map +1 -0
  313. package/dist/server/color-field.js +394 -0
  314. package/dist/server/color-field.js.map +1 -0
  315. package/dist/server/color-picker.js +170 -0
  316. package/dist/server/color-picker.js.map +1 -0
  317. package/dist/server/color-slider.js +328 -0
  318. package/dist/server/color-slider.js.map +1 -0
  319. package/dist/server/color-swatch-picker.js +234 -0
  320. package/dist/server/color-swatch-picker.js.map +1 -0
  321. package/dist/server/color-swatch.js +52 -0
  322. package/dist/server/color-swatch.js.map +1 -0
  323. package/dist/server/color-thumb.js +132 -0
  324. package/dist/server/color-thumb.js.map +1 -0
  325. package/dist/server/color-wheel.js +188 -0
  326. package/dist/server/color-wheel.js.map +1 -0
  327. package/dist/server/combo-box.js +914 -0
  328. package/dist/server/combo-box.js.map +1 -0
  329. package/dist/server/create-drag-and-drop.js +56 -0
  330. package/dist/server/create-drag-and-drop.js.map +1 -0
  331. package/dist/server/date-field.js +1055 -0
  332. package/dist/server/date-field.js.map +1 -0
  333. package/dist/server/date-picker.js +1079 -0
  334. package/dist/server/date-picker.js.map +1 -0
  335. package/dist/server/dialog.js +295 -0
  336. package/dist/server/dialog.js.map +1 -0
  337. package/dist/server/disclosure.js +292 -0
  338. package/dist/server/disclosure.js.map +1 -0
  339. package/dist/server/drag-and-drop.js +66 -0
  340. package/dist/server/drag-and-drop.js.map +1 -0
  341. package/dist/server/drop-zone.js +241 -0
  342. package/dist/server/drop-zone.js.map +1 -0
  343. package/dist/server/field-error.js +90 -0
  344. package/dist/server/field-error.js.map +1 -0
  345. package/dist/server/file-trigger.js +98 -0
  346. package/dist/server/file-trigger.js.map +1 -0
  347. package/dist/server/form.js +116 -0
  348. package/dist/server/form.js.map +1 -0
  349. package/dist/server/grid-layout.js +30 -0
  350. package/dist/server/grid-layout.js.map +1 -0
  351. package/dist/server/grid-list.js +1015 -0
  352. package/dist/server/grid-list.js.map +1 -0
  353. package/dist/server/group.js +146 -0
  354. package/dist/server/group.js.map +1 -0
  355. package/dist/server/header.js +72 -0
  356. package/dist/server/header.js.map +1 -0
  357. package/dist/server/heading.js +68 -0
  358. package/dist/server/heading.js.map +1 -0
  359. package/dist/server/hidden-date-input.js +79 -0
  360. package/dist/server/hidden-date-input.js.map +1 -0
  361. package/dist/server/index.js +98 -0
  362. package/dist/server/input.js +134 -0
  363. package/dist/server/input.js.map +1 -0
  364. package/dist/server/intl/ar-AE.js +11 -0
  365. package/dist/server/intl/ar-AE.js.map +1 -0
  366. package/dist/server/intl/bg-BG.js +11 -0
  367. package/dist/server/intl/bg-BG.js.map +1 -0
  368. package/dist/server/intl/cs-CZ.js +11 -0
  369. package/dist/server/intl/cs-CZ.js.map +1 -0
  370. package/dist/server/intl/da-DK.js +11 -0
  371. package/dist/server/intl/da-DK.js.map +1 -0
  372. package/dist/server/intl/de-DE.js +11 -0
  373. package/dist/server/intl/de-DE.js.map +1 -0
  374. package/dist/server/intl/el-GR.js +11 -0
  375. package/dist/server/intl/el-GR.js.map +1 -0
  376. package/dist/server/intl/en-US.js +11 -0
  377. package/dist/server/intl/en-US.js.map +1 -0
  378. package/dist/server/intl/es-ES.js +11 -0
  379. package/dist/server/intl/es-ES.js.map +1 -0
  380. package/dist/server/intl/et-EE.js +11 -0
  381. package/dist/server/intl/et-EE.js.map +1 -0
  382. package/dist/server/intl/fi-FI.js +11 -0
  383. package/dist/server/intl/fi-FI.js.map +1 -0
  384. package/dist/server/intl/fr-FR.js +11 -0
  385. package/dist/server/intl/fr-FR.js.map +1 -0
  386. package/dist/server/intl/he-IL.js +11 -0
  387. package/dist/server/intl/he-IL.js.map +1 -0
  388. package/dist/server/intl/hr-HR.js +11 -0
  389. package/dist/server/intl/hr-HR.js.map +1 -0
  390. package/dist/server/intl/hu-HU.js +11 -0
  391. package/dist/server/intl/hu-HU.js.map +1 -0
  392. package/dist/server/intl/index.js +75 -0
  393. package/dist/server/intl/index.js.map +1 -0
  394. package/dist/server/intl/it-IT.js +11 -0
  395. package/dist/server/intl/it-IT.js.map +1 -0
  396. package/dist/server/intl/ja-JP.js +11 -0
  397. package/dist/server/intl/ja-JP.js.map +1 -0
  398. package/dist/server/intl/ko-KR.js +11 -0
  399. package/dist/server/intl/ko-KR.js.map +1 -0
  400. package/dist/server/intl/lt-LT.js +11 -0
  401. package/dist/server/intl/lt-LT.js.map +1 -0
  402. package/dist/server/intl/lv-LV.js +11 -0
  403. package/dist/server/intl/lv-LV.js.map +1 -0
  404. package/dist/server/intl/nb-NO.js +11 -0
  405. package/dist/server/intl/nb-NO.js.map +1 -0
  406. package/dist/server/intl/nl-NL.js +11 -0
  407. package/dist/server/intl/nl-NL.js.map +1 -0
  408. package/dist/server/intl/pl-PL.js +11 -0
  409. package/dist/server/intl/pl-PL.js.map +1 -0
  410. package/dist/server/intl/pt-BR.js +11 -0
  411. package/dist/server/intl/pt-BR.js.map +1 -0
  412. package/dist/server/intl/pt-PT.js +11 -0
  413. package/dist/server/intl/pt-PT.js.map +1 -0
  414. package/dist/server/intl/ro-RO.js +11 -0
  415. package/dist/server/intl/ro-RO.js.map +1 -0
  416. package/dist/server/intl/ru-RU.js +11 -0
  417. package/dist/server/intl/ru-RU.js.map +1 -0
  418. package/dist/server/intl/sk-SK.js +11 -0
  419. package/dist/server/intl/sk-SK.js.map +1 -0
  420. package/dist/server/intl/sl-SI.js +11 -0
  421. package/dist/server/intl/sl-SI.js.map +1 -0
  422. package/dist/server/intl/sr-SP.js +11 -0
  423. package/dist/server/intl/sr-SP.js.map +1 -0
  424. package/dist/server/intl/sv-SE.js +11 -0
  425. package/dist/server/intl/sv-SE.js.map +1 -0
  426. package/dist/server/intl/tr-TR.js +11 -0
  427. package/dist/server/intl/tr-TR.js.map +1 -0
  428. package/dist/server/intl/uk-UA.js +11 -0
  429. package/dist/server/intl/uk-UA.js.map +1 -0
  430. package/dist/server/intl/zh-CN.js +11 -0
  431. package/dist/server/intl/zh-CN.js.map +1 -0
  432. package/dist/server/intl/zh-TW.js +11 -0
  433. package/dist/server/intl/zh-TW.js.map +1 -0
  434. package/dist/server/keyboard.js +65 -0
  435. package/dist/server/keyboard.js.map +1 -0
  436. package/dist/server/label.js +68 -0
  437. package/dist/server/label.js.map +1 -0
  438. package/dist/server/link.js +138 -0
  439. package/dist/server/link.js.map +1 -0
  440. package/dist/server/list-box.js +906 -0
  441. package/dist/server/list-box.js.map +1 -0
  442. package/dist/server/menu.js +1188 -0
  443. package/dist/server/menu.js.map +1 -0
  444. package/dist/server/meter.js +101 -0
  445. package/dist/server/meter.js.map +1 -0
  446. package/dist/server/modal.js +360 -0
  447. package/dist/server/modal.js.map +1 -0
  448. package/dist/server/navigation-tree.js +316 -0
  449. package/dist/server/navigation-tree.js.map +1 -0
  450. package/dist/server/number-field.js +371 -0
  451. package/dist/server/number-field.js.map +1 -0
  452. package/dist/server/overlay-arrow.js +81 -0
  453. package/dist/server/overlay-arrow.js.map +1 -0
  454. package/dist/server/overlay-contexts.js +24 -0
  455. package/dist/server/overlay-contexts.js.map +1 -0
  456. package/dist/server/popover.js +455 -0
  457. package/dist/server/popover.js.map +1 -0
  458. package/dist/server/preview-trigger.js +153 -0
  459. package/dist/server/preview-trigger.js.map +1 -0
  460. package/dist/server/progress-bar.js +104 -0
  461. package/dist/server/progress-bar.js.map +1 -0
  462. package/dist/server/radio-group.js +586 -0
  463. package/dist/server/radio-group.js.map +1 -0
  464. package/dist/server/search-field.js +288 -0
  465. package/dist/server/search-field.js.map +1 -0
  466. package/dist/server/select.js +771 -0
  467. package/dist/server/select.js.map +1 -0
  468. package/dist/server/selection-indicator.js +54 -0
  469. package/dist/server/selection-indicator.js.map +1 -0
  470. package/dist/server/separator.js +91 -0
  471. package/dist/server/separator.js.map +1 -0
  472. package/dist/server/shared-element-transition.js +189 -0
  473. package/dist/server/shared-element-transition.js.map +1 -0
  474. package/dist/server/sheet.js +1197 -0
  475. package/dist/server/sheet.js.map +1 -0
  476. package/dist/server/slider.js +581 -0
  477. package/dist/server/slider.js.map +1 -0
  478. package/dist/server/switch.js +400 -0
  479. package/dist/server/switch.js.map +1 -0
  480. package/dist/server/table-layout.js +31 -0
  481. package/dist/server/table-layout.js.map +1 -0
  482. package/dist/server/table.js +2075 -0
  483. package/dist/server/table.js.map +1 -0
  484. package/dist/server/tabs.js +668 -0
  485. package/dist/server/tabs.js.map +1 -0
  486. package/dist/server/tag-group.js +538 -0
  487. package/dist/server/tag-group.js.map +1 -0
  488. package/dist/server/text-area.js +115 -0
  489. package/dist/server/text-area.js.map +1 -0
  490. package/dist/server/text-field.js +272 -0
  491. package/dist/server/text-field.js.map +1 -0
  492. package/dist/server/text.js +67 -0
  493. package/dist/server/text.js.map +1 -0
  494. package/dist/server/toast.js +449 -0
  495. package/dist/server/toast.js.map +1 -0
  496. package/dist/server/toggle-button-group.js +125 -0
  497. package/dist/server/toggle-button-group.js.map +1 -0
  498. package/dist/server/toggle-button.js +183 -0
  499. package/dist/server/toggle-button.js.map +1 -0
  500. package/dist/server/token-field.js +457 -0
  501. package/dist/server/token-field.js.map +1 -0
  502. package/dist/server/toolbar.js +67 -0
  503. package/dist/server/toolbar.js.map +1 -0
  504. package/dist/server/tooltip.js +331 -0
  505. package/dist/server/tooltip.js.map +1 -0
  506. package/dist/server/tree-drop-target-delegate.js +178 -0
  507. package/dist/server/tree-drop-target-delegate.js.map +1 -0
  508. package/dist/server/tree.js +1096 -0
  509. package/dist/server/tree.js.map +1 -0
  510. package/dist/server/utils.js +184 -0
  511. package/dist/server/utils.js.map +1 -0
  512. package/dist/server/virtualizer.js +254 -0
  513. package/dist/server/virtualizer.js.map +1 -0
  514. package/package.json +437 -4
@@ -0,0 +1,54 @@
1
+ /*
2
+ * Copyright 2026 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ /*
13
+ * Derived from Adobe React Spectrum: packages/react-aria-components/src/NavigationTree.tsx.
14
+ * Modified for Solid Aria: route synchronization, link slots and render values use Solid contexts and reactive getters; uses Solid class props.
15
+ * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.
16
+ */
17
+ import { ChildrenOrFunction, ClassOrFunction, ContextValue, Ref, StyleRenderProps } from "./utils.js";
18
+ import { TreeHeaderProps, TreeItemProps, TreeItemRenderProps, TreeProps, TreeRenderProps, TreeSectionProps } from "./tree.js";
19
+ import { JSX } from "@solidjs/web";
20
+ export type NavigationTreeRenderProps = Pick<TreeRenderProps, "isEmpty" | "isFocused" | "isFocusVisible" | "state">;
21
+ export interface NavigationTreeProps<T> extends Omit<TreeProps<T>, "selectionMode" | "selectionBehavior" | "selectedKeys" | "defaultSelectedKeys" | "onSelectionChange" | "disallowEmptySelection" | "disabledBehavior" | "keyboardNavigationBehavior" | "escapeKeyBehavior" | "shouldSelectOnPressUp" | "dragAndDropHooks" | "renderEmptyState" | "onAction" | "class" | "style" | "render">, StyleRenderProps<NavigationTreeRenderProps> {
22
+ class?: ClassOrFunction<NavigationTreeRenderProps>;
23
+ selectedRoute?: string | null;
24
+ }
25
+ export interface NavigationTreeItemRenderProps extends TreeItemRenderProps {
26
+ isCurrent: boolean;
27
+ isCurrentAncestor: boolean;
28
+ }
29
+ export interface NavigationTreeItemProps<T = object> extends Omit<TreeItemProps<T>, "class" | "style" | "render" | "onAction" | "allowsArrowNavigation" | "value">, StyleRenderProps<NavigationTreeItemRenderProps> {
30
+ class?: ClassOrFunction<NavigationTreeItemRenderProps>;
31
+ children: JSX.Element;
32
+ }
33
+ export type NavigationTreeItemContentRenderProps = NavigationTreeItemRenderProps;
34
+ export interface NavigationTreeItemContentProps {
35
+ children: ChildrenOrFunction<NavigationTreeItemContentRenderProps>;
36
+ }
37
+ export type NavigationTreeSectionProps<T> = Omit<TreeSectionProps<T>, "value">;
38
+ export type NavigationTreeHeaderProps = TreeHeaderProps;
39
+ export declare const NavigationTreeContext: import("solid-js").Context<ContextValue<NavigationTreeProps<any>, HTMLDivElement>>;
40
+ export declare const NavigationTreeItemStateContext: import("solid-js").Context<{
41
+ isCurrentAncestor: boolean;
42
+ }>;
43
+ export declare function NavigationTree<T>(input: NavigationTreeProps<T> & {
44
+ ref?: Ref<HTMLDivElement>;
45
+ }): JSX.Element;
46
+ export declare function NavigationTreeItem<T>(props: NavigationTreeItemProps<T> & {
47
+ ref?: Ref<HTMLDivElement>;
48
+ }): JSX.Element;
49
+ export declare function NavigationTreeItemContent(props: NavigationTreeItemContentProps): JSX.Element;
50
+ export declare function NavigationTreeSection<T>(props: NavigationTreeSectionProps<T>): JSX.Element;
51
+ export declare function NavigationTreeHeader(props: NavigationTreeHeaderProps & {
52
+ ref?: Ref<HTMLDivElement>;
53
+ }): JSX.Element;
54
+ //# sourceMappingURL=navigation-tree.d.ts.map
@@ -0,0 +1,233 @@
1
+ /*
2
+ * Copyright 2026 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ /*
13
+ * Derived from Adobe React Spectrum: packages/react-aria-components/src/NavigationTree.tsx.
14
+ * Modified for Solid Aria: route synchronization, link slots and render values use Solid contexts and reactive getters; uses Solid class props.
15
+ * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.
16
+ */
17
+ import { assignRef, createContextProps, dom } from "./utils.js";
18
+ import { LinkContext } from "./link.js";
19
+ import { Tree, TreeHeader, TreeItem, TreeItemContent, TreeSection } from "./tree.js";
20
+ import { createComponent, memo, mergeProps } from "@solidjs/web";
21
+ import { mergeProps as mergeProps$1 } from "@solid2-aria/core/utils/merge-props";
22
+ import { createContext, createEffect, createSignal, merge, omit, untrack, useContext } from "solid-js";
23
+ import { isTruthy } from "@solid2-aria/core/utils/truthy";
24
+ import { isPresent } from "@solid2-aria/core/utils/is-present";
25
+ import { getNodeProps } from "@solid2-aria/stately/utils/get-node-props";
26
+ // src/navigation-tree.tsx
27
+ const NavigationTreeContext = createContext(null);
28
+ const NavigationTreeItemStateContext = createContext({ isCurrentAncestor: false });
29
+ const RouteContext = createContext({});
30
+ const ItemLinkContext = createContext({
31
+ isCurrent: false,
32
+ isLinkFocused: false,
33
+ setLinkFocused: () => {}
34
+ });
35
+ function NavigationTree(input) {
36
+ const [props, , setRef] = createContextProps(input, untrack(() => input.ref), NavigationTreeContext);
37
+ return createComponent(RouteContext, {
38
+ value: {
39
+ get selectedRoute() {
40
+ return props.selectedRoute;
41
+ },
42
+ syncedRoute: void 0
43
+ },
44
+ get children() {
45
+ return createComponent(Tree, mergeProps(() => {
46
+ return omit(props, "selectedRoute");
47
+ }, {
48
+ ref: (element) => {
49
+ setRef(element);
50
+ },
51
+ get "class"() {
52
+ return props.class ?? "solid2-aria-NavigationTree";
53
+ },
54
+ selectionMode: "none",
55
+ keyboardNavigationBehavior: "tab"
56
+ }));
57
+ }
58
+ });
59
+ }
60
+ function selectedAncestors(state, route) {
61
+ const result = /* @__PURE__ */ new Set();
62
+ if (!isPresent(route)) return result;
63
+ for (const key of state.collection.getKeys()) if (getNodeProps(state.collection.getItem(key)).href === route) {
64
+ let node = state.collection.getItem(key);
65
+ while (isPresent(node?.parentKey) && !result.has(node.parentKey)) {
66
+ result.add(node.parentKey);
67
+ node = state.collection.getItem(node.parentKey);
68
+ }
69
+ break;
70
+ }
71
+ return result;
72
+ }
73
+ function NavigationTreeItem(props) {
74
+ const route = useContext(RouteContext);
75
+ const [focused, setFocused] = createSignal(false);
76
+ const link = mergeProps$1(props, {
77
+ get isCurrent() {
78
+ return isTruthy(props.href) && props.href === route.selectedRoute;
79
+ },
80
+ get isLinkFocused() {
81
+ return focused();
82
+ },
83
+ setLinkFocused: setFocused
84
+ });
85
+ const values = (tree) => mergeProps$1(tree, {
86
+ get isCurrent() {
87
+ return link.isCurrent;
88
+ },
89
+ get isCurrentAncestor() {
90
+ return selectedAncestors(tree.state, route.selectedRoute).has(tree.id);
91
+ },
92
+ get isFocusVisible() {
93
+ return tree.isFocusVisible || tree.isFocusVisibleWithin && focused();
94
+ }
95
+ });
96
+ return createComponent(ItemLinkContext, {
97
+ value: link,
98
+ get children() {
99
+ return createComponent(TreeItem, mergeProps(() => {
100
+ return omit(props, "class", "style", "render", "ref");
101
+ }, {
102
+ ref: (element) => {
103
+ assignRef(untrack(() => props.ref), element);
104
+ },
105
+ get focusMode() {
106
+ return isTruthy(props.href) ? "child" : void 0;
107
+ },
108
+ allowsArrowNavigation: true,
109
+ get "data-current"() {
110
+ return link.isCurrent || void 0;
111
+ },
112
+ class: (state) => {
113
+ const classValue = props.class;
114
+ return typeof classValue === "function" ? classValue(mergeProps$1(values(state), { get defaultClass() {
115
+ return state.defaultClass;
116
+ } })) : classValue ?? "solid2-aria-NavigationTreeItem";
117
+ },
118
+ style: (state) => {
119
+ if (typeof props.style === "function") return props.style(mergeProps$1(values(state), { get defaultStyle() {
120
+ return state.defaultStyle;
121
+ } }));
122
+ return typeof props.style === "object" ? props.style : void 0;
123
+ },
124
+ render: (domProps, state) => {
125
+ const value = values(state);
126
+ const content = createComponent(NavigationTreeItemStateContext, {
127
+ value,
128
+ get children() {
129
+ return domProps.children;
130
+ }
131
+ });
132
+ const forwarded = mergeProps$1(domProps, {
133
+ children: content,
134
+ "data-current": value.isCurrent || void 0,
135
+ "data-current-ancestor": value.isCurrentAncestor || void 0,
136
+ "data-focus-visible": value.isFocusVisible || void 0
137
+ });
138
+ return props.render ? props.render(forwarded, value) : createComponent(dom.div, forwarded);
139
+ }
140
+ }));
141
+ }
142
+ });
143
+ }
144
+ function NavigationTreeItemContent(props) {
145
+ const link = useContext(ItemLinkContext);
146
+ const route = useContext(RouteContext);
147
+ return createComponent(TreeItemContent, { children: (tree) => createComponent(NavigationTreeContentInner, {
148
+ tree,
149
+ link,
150
+ route,
151
+ get children() {
152
+ return props.children;
153
+ }
154
+ }) });
155
+ }
156
+ function NavigationTreeContentInner(props) {
157
+ const ancestor = useContext(NavigationTreeItemStateContext);
158
+ createEffect(() => {
159
+ const routeContext = props.route;
160
+ const route = routeContext.selectedRoute;
161
+ const { state } = props.tree;
162
+ const manager = state.selectionManager;
163
+ let target;
164
+ if (isPresent(route) && routeContext.syncedRoute !== route) {
165
+ for (const key of state.collection.getKeys()) if (getNodeProps(state.collection.getItem(key)).href === route) {
166
+ target = key;
167
+ let node = state.collection.getItem(key);
168
+ while (isPresent(node?.parentKey)) {
169
+ const parent = state.collection.getItem(node.parentKey);
170
+ if (parent?.type === "item" && !state.expandedKeys.has(node.parentKey)) target = node.parentKey;
171
+ node = parent;
172
+ }
173
+ break;
174
+ }
175
+ }
176
+ return {
177
+ manager,
178
+ route,
179
+ routeContext,
180
+ target
181
+ };
182
+ }, (next) => {
183
+ if (next.target !== void 0 && isPresent(next.route)) {
184
+ next.routeContext.syncedRoute = next.route;
185
+ next.manager.setFocusedKey(next.target);
186
+ }
187
+ });
188
+ const values = mergeProps$1(merge(() => props.tree ?? {}), {
189
+ defaultChildren: void 0,
190
+ get isCurrent() {
191
+ return props.link.isCurrent;
192
+ },
193
+ get isCurrentAncestor() {
194
+ return ancestor.isCurrentAncestor;
195
+ },
196
+ get isFocusVisible() {
197
+ return props.tree.isFocusVisible || props.tree.isFocusVisibleWithin && props.link.isLinkFocused;
198
+ }
199
+ });
200
+ return createComponent(LinkContext, {
201
+ get value() {
202
+ return mergeProps$1(omit(props.link, "isCurrent", "isLinkFocused", "setLinkFocused"), {
203
+ get "aria-current"() {
204
+ return props.link.isCurrent ? "page" : void 0;
205
+ },
206
+ get onFocusChange() {
207
+ return props.link.setLinkFocused;
208
+ },
209
+ onPress: () => {
210
+ if (!isTruthy(props.link.href) && props.tree.hasChildItems) props.tree.state.toggleKey(props.tree.id);
211
+ }
212
+ });
213
+ },
214
+ get children() {
215
+ return memo(() => {
216
+ return typeof props.children === "function";
217
+ })() ? props.children(values) : props.children;
218
+ }
219
+ });
220
+ }
221
+ function NavigationTreeSection(props) {
222
+ return createComponent(TreeSection, props);
223
+ }
224
+ function NavigationTreeHeader(props) {
225
+ return createComponent(TreeHeader, mergeProps(() => {
226
+ return omit(props, "ref");
227
+ }, { ref: (element) => {
228
+ assignRef(untrack(() => props.ref), element);
229
+ } }));
230
+ }
231
+ export { NavigationTree, NavigationTreeContext, NavigationTreeHeader, NavigationTreeItem, NavigationTreeItemContent, NavigationTreeItemStateContext, NavigationTreeSection };
232
+
233
+ //# sourceMappingURL=navigation-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-tree.js","names":["<RouteContext value={route}>\n <Tree\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(props, \"selectedRoute\")\n // oxlint-enable solid/reactivity\n }\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n class={props.class ?? \"solid2-aria-NavigationTree\"}\n selectionMode=\"none\"\n keyboardNavigationBehavior=\"tab\"\n />\n </RouteContext>","value={route}","<Tree\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(props, \"selectedRoute\")\n // oxlint-enable solid/reactivity\n }\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n class={props.class ?? \"solid2-aria-NavigationTree\"}\n selectionMode=\"none\"\n keyboardNavigationBehavior=\"tab\"\n />","ref={(element: HTMLDivElement) => {\n setRef(element);\n }}","selectionMode=\"none\"","keyboardNavigationBehavior=\"tab\"","<ItemLinkContext value={link}>\n <TreeItem\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(props, \"class\", \"style\", \"render\", \"ref\")\n // oxlint-enable solid/reactivity\n }\n ref={(element: HTMLDivElement) => {\n assignRef(\n untrack(() => props.ref),\n element\n );\n }}\n focusMode={isTruthy(props.href) ? \"child\" : undefined}\n allowsArrowNavigation\n data-current={link.isCurrent || undefined}\n class={(state) => {\n const classValue = props.class;\n\n return typeof classValue === \"function\"\n ? classValue(\n mergeProps(values(state), {\n get defaultClass() {\n return state.defaultClass;\n },\n })\n )\n : (classValue ?? \"solid2-aria-NavigationTreeItem\");\n }}\n style={(state) => {\n if (typeof props.style === \"function\") {\n return props.style(\n mergeProps(values(state), {\n get defaultStyle() {\n return state.defaultStyle;\n },\n })\n );\n }\n\n return typeof props.style === \"object\" ? props.style : undefined;\n }}\n render={(domProps, state) => {\n const value = values(state);\n\n const content = (\n <NavigationTreeItemStateContext value={value}>\n {domProps.children}\n </NavigationTreeItemStateContext>\n );\n\n const forwarded = mergeProps(domProps, {\n children: content,\n \"data-current\": value.isCurrent || undefined,\n \"data-current-ancestor\": value.isCurrentAncestor || undefined,\n \"data-focus-visible\": value.isFocusVisible || undefined,\n });\n\n return props.render ? (\n props.render(forwarded, value)\n ) : (\n <dom.div {...forwarded} />\n );\n }}\n />\n </ItemLinkContext>","value={link}","<TreeItem\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(props, \"class\", \"style\", \"render\", \"ref\")\n // oxlint-enable solid/reactivity\n }\n ref={(element: HTMLDivElement) => {\n assignRef(\n untrack(() => props.ref),\n element\n );\n }}\n focusMode={isTruthy(props.href) ? \"child\" : undefined}\n allowsArrowNavigation\n data-current={link.isCurrent || undefined}\n class={(state) => {\n const classValue = props.class;\n\n return typeof classValue === \"function\"\n ? classValue(\n mergeProps(values(state), {\n get defaultClass() {\n return state.defaultClass;\n },\n })\n )\n : (classValue ?? \"solid2-aria-NavigationTreeItem\");\n }}\n style={(state) => {\n if (typeof props.style === \"function\") {\n return props.style(\n mergeProps(values(state), {\n get defaultStyle() {\n return state.defaultStyle;\n },\n })\n );\n }\n\n return typeof props.style === \"object\" ? props.style : undefined;\n }}\n render={(domProps, state) => {\n const value = values(state);\n\n const content = (\n <NavigationTreeItemStateContext value={value}>\n {domProps.children}\n </NavigationTreeItemStateContext>\n );\n\n const forwarded = mergeProps(domProps, {\n children: content,\n \"data-current\": value.isCurrent || undefined,\n \"data-current-ancestor\": value.isCurrentAncestor || undefined,\n \"data-focus-visible\": value.isFocusVisible || undefined,\n });\n\n return props.render ? (\n props.render(forwarded, value)\n ) : (\n <dom.div {...forwarded} />\n );\n }}\n />","ref={(element: HTMLDivElement) => {\n assignRef(\n untrack(() => props.ref),\n element\n );\n }}","class={(state) => {\n const classValue = props.class;\n\n return typeof classValue === \"function\"\n ? classValue(\n mergeProps(values(state), {\n get defaultClass() {\n return state.defaultClass;\n },\n })\n )\n : (classValue ?? \"solid2-aria-NavigationTreeItem\");\n }}","style={(state) => {\n if (typeof props.style === \"function\") {\n return props.style(\n mergeProps(values(state), {\n get defaultStyle() {\n return state.defaultStyle;\n },\n })\n );\n }\n\n return typeof props.style === \"object\" ? props.style : undefined;\n }}","render={(domProps, state) => {\n const value = values(state);\n\n const content = (\n <NavigationTreeItemStateContext value={value}>\n {domProps.children}\n </NavigationTreeItemStateContext>\n );\n\n const forwarded = mergeProps(domProps, {\n children: content,\n \"data-current\": value.isCurrent || undefined,\n \"data-current-ancestor\": value.isCurrentAncestor || undefined,\n \"data-focus-visible\": value.isFocusVisible || undefined,\n });\n\n return props.render ? (\n props.render(forwarded, value)\n ) : (\n <dom.div {...forwarded} />\n );\n }}","<NavigationTreeItemStateContext value={value}>\n {domProps.children}\n </NavigationTreeItemStateContext>","<dom.div {...forwarded} />","dom.div","<TreeItemContent>\n {(tree) => (\n <NavigationTreeContentInner tree={tree} link={link} route={route}>\n {props.children}\n </NavigationTreeContentInner>\n )}\n </TreeItemContent>","<NavigationTreeContentInner tree={tree} link={link} route={route}>\n {props.children}\n </NavigationTreeContentInner>","<LinkContext\n value={mergeProps(\n omit(props.link, \"isCurrent\", \"isLinkFocused\", \"setLinkFocused\"),\n {\n get \"aria-current\"() {\n return props.link.isCurrent ? \"page\" : undefined;\n },\n get onFocusChange() {\n return props.link.setLinkFocused;\n },\n onPress: () => {\n if (!isTruthy(props.link.href) && props.tree.hasChildItems) {\n props.tree.state.toggleKey(props.tree.id);\n }\n },\n }\n )}\n >\n {typeof props.children === \"function\"\n ? props.children(values)\n : props.children}\n </LinkContext>","{typeof props.children === \"function\"\n ? props.children(values)\n : props.children}","<TreeSection {...props} />","<TreeHeader\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(props, \"ref\")\n // oxlint-enable solid/reactivity\n }\n ref={(element: HTMLDivElement) => {\n assignRef(\n untrack(() => props.ref),\n element\n );\n }}\n />","ref={(element: HTMLDivElement) => {\n assignRef(\n untrack(() => props.ref),\n element\n );\n }}","_$createComponent","_$mergeProps","mergeProps","_$memo"],"sources":["../../src/navigation-tree.tsx"],"sourcesContent":["/*\n * Copyright 2026 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 * Derived from Adobe React Spectrum: packages/react-aria-components/src/NavigationTree.tsx.\n * Modified for Solid Aria: route synchronization, link slots and render values use Solid contexts and reactive getters; uses Solid class props.\n * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.\n */\n\nimport { isPresent } from \"@solid2-aria/core/utils/is-present\";\nimport { mergeProps } from \"@solid2-aria/core/utils/merge-props\";\nimport { isTruthy } from \"@solid2-aria/core/utils/truthy\";\nimport type { TreeState } from \"@solid2-aria/stately/tree/create-tree-state\";\nimport { getNodeProps } from \"@solid2-aria/stately/utils/get-node-props\";\nimport type { Key, LinkDOMProps } from \"@solid2-aria/types-shared\";\nimport type { JSX } from \"@solidjs/web\";\nimport {\n merge,\n untrack,\n createContext,\n useContext,\n createSignal,\n createEffect,\n omit,\n} from \"solid-js\";\n\nimport { LinkContext } from \"./link\";\nimport {\n Tree,\n TreeItem,\n TreeItemContent,\n TreeSection,\n TreeHeader,\n} from \"./tree\";\nimport type {\n TreeProps,\n TreeItemProps,\n TreeItemRenderProps,\n TreeRenderProps,\n TreeSectionProps,\n TreeHeaderProps,\n} from \"./tree\";\nimport { assignRef, dom, createContextProps } from \"./utils\";\nimport type {\n Ref,\n ContextValue,\n ClassOrFunction,\n StyleRenderProps,\n ChildrenOrFunction,\n} from \"./utils\";\n\nexport type NavigationTreeRenderProps = Pick<\n TreeRenderProps,\n \"isEmpty\" | \"isFocused\" | \"isFocusVisible\" | \"state\"\n>;\n\nexport interface NavigationTreeProps<T>\n extends\n Omit<\n TreeProps<T>,\n | \"selectionMode\"\n | \"selectionBehavior\"\n | \"selectedKeys\"\n | \"defaultSelectedKeys\"\n | \"onSelectionChange\"\n | \"disallowEmptySelection\"\n | \"disabledBehavior\"\n | \"keyboardNavigationBehavior\"\n | \"escapeKeyBehavior\"\n | \"shouldSelectOnPressUp\"\n | \"dragAndDropHooks\"\n | \"renderEmptyState\"\n | \"onAction\"\n | \"class\"\n | \"style\"\n | \"render\"\n >,\n StyleRenderProps<NavigationTreeRenderProps> {\n class?: ClassOrFunction<NavigationTreeRenderProps>;\n\n selectedRoute?: string | null;\n}\n\nexport interface NavigationTreeItemRenderProps extends TreeItemRenderProps {\n isCurrent: boolean;\n\n isCurrentAncestor: boolean;\n}\n\nexport interface NavigationTreeItemProps<T = object>\n extends\n Omit<\n TreeItemProps<T>,\n | \"class\"\n | \"style\"\n | \"render\"\n | \"onAction\"\n | \"allowsArrowNavigation\"\n | \"value\"\n >,\n StyleRenderProps<NavigationTreeItemRenderProps> {\n class?: ClassOrFunction<NavigationTreeItemRenderProps>;\n\n children: JSX.Element;\n}\n\nexport type NavigationTreeItemContentRenderProps =\n NavigationTreeItemRenderProps;\n\nexport interface NavigationTreeItemContentProps {\n children: ChildrenOrFunction<NavigationTreeItemContentRenderProps>;\n}\n\nexport type NavigationTreeSectionProps<T> = Omit<TreeSectionProps<T>, \"value\">;\n\nexport type NavigationTreeHeaderProps = TreeHeaderProps;\n\nexport const NavigationTreeContext =\n // oxlint-disable-next-line typescript/no-explicit-any -- The collection owner and its descendants share one item type through this context.\n createContext<ContextValue<NavigationTreeProps<any>, HTMLDivElement>>(null);\n\nexport const NavigationTreeItemStateContext = createContext<{\n isCurrentAncestor: boolean;\n}>({ isCurrentAncestor: false });\n\ninterface NavigationRoute {\n selectedRoute?: string | null;\n syncedRoute?: string;\n}\n\nconst RouteContext = createContext<NavigationRoute>({});\n\nconst ItemLinkContext = createContext<\n LinkDOMProps & {\n isCurrent: boolean;\n isLinkFocused: boolean;\n setLinkFocused: (value: boolean) => void;\n }\n>({\n isCurrent: false,\n isLinkFocused: false,\n setLinkFocused: () => {\n /* empty */\n },\n});\n\nexport function NavigationTree<T>(\n input: NavigationTreeProps<T> & { ref?: Ref<HTMLDivElement> }\n) {\n const [props, , setRef] = createContextProps(\n input,\n untrack(() => input.ref),\n NavigationTreeContext\n );\n\n const route: NavigationRoute = {\n get selectedRoute() {\n return props.selectedRoute;\n },\n syncedRoute: undefined,\n };\n\n return (\n <RouteContext value={route}>\n <Tree\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(props, \"selectedRoute\")\n // oxlint-enable solid/reactivity\n }\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n class={props.class ?? \"solid2-aria-NavigationTree\"}\n selectionMode=\"none\"\n keyboardNavigationBehavior=\"tab\"\n />\n </RouteContext>\n );\n}\n\nfunction selectedAncestors(\n state: TreeState<unknown>,\n route: string | null | undefined\n): Set<Key> {\n const result = new Set<Key>();\n\n if (!isPresent(route)) {\n return result;\n }\n\n for (const key of state.collection.getKeys()) {\n if (getNodeProps(state.collection.getItem(key)).href === route) {\n let node = state.collection.getItem(key);\n\n while (isPresent(node?.parentKey) && !result.has(node.parentKey)) {\n result.add(node.parentKey);\n node = state.collection.getItem(node.parentKey);\n }\n\n break;\n }\n }\n\n return result;\n}\n\nexport function NavigationTreeItem<T>(\n props: NavigationTreeItemProps<T> & { ref?: Ref<HTMLDivElement> }\n) {\n const route = useContext(RouteContext);\n const [focused, setFocused] = createSignal(false);\n\n const link = mergeProps(props, {\n get isCurrent() {\n return isTruthy(props.href) && props.href === route.selectedRoute;\n },\n get isLinkFocused() {\n return focused();\n },\n setLinkFocused: setFocused,\n });\n\n const values = (tree: TreeItemRenderProps): NavigationTreeItemRenderProps =>\n mergeProps(tree, {\n get isCurrent() {\n return link.isCurrent;\n },\n get isCurrentAncestor() {\n return selectedAncestors(tree.state, route.selectedRoute).has(tree.id);\n },\n get isFocusVisible() {\n return tree.isFocusVisible || (tree.isFocusVisibleWithin && focused());\n },\n });\n\n return (\n <ItemLinkContext value={link}>\n <TreeItem\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(props, \"class\", \"style\", \"render\", \"ref\")\n // oxlint-enable solid/reactivity\n }\n ref={(element: HTMLDivElement) => {\n assignRef(\n untrack(() => props.ref),\n element\n );\n }}\n focusMode={isTruthy(props.href) ? \"child\" : undefined}\n allowsArrowNavigation\n data-current={link.isCurrent || undefined}\n class={(state) => {\n const classValue = props.class;\n\n return typeof classValue === \"function\"\n ? classValue(\n mergeProps(values(state), {\n get defaultClass() {\n return state.defaultClass;\n },\n })\n )\n : (classValue ?? \"solid2-aria-NavigationTreeItem\");\n }}\n style={(state) => {\n if (typeof props.style === \"function\") {\n return props.style(\n mergeProps(values(state), {\n get defaultStyle() {\n return state.defaultStyle;\n },\n })\n );\n }\n\n return typeof props.style === \"object\" ? props.style : undefined;\n }}\n render={(domProps, state) => {\n const value = values(state);\n\n const content = (\n <NavigationTreeItemStateContext value={value}>\n {domProps.children}\n </NavigationTreeItemStateContext>\n );\n\n const forwarded = mergeProps(domProps, {\n children: content,\n \"data-current\": value.isCurrent || undefined,\n \"data-current-ancestor\": value.isCurrentAncestor || undefined,\n \"data-focus-visible\": value.isFocusVisible || undefined,\n });\n\n return props.render ? (\n props.render(forwarded, value)\n ) : (\n <dom.div {...forwarded} />\n );\n }}\n />\n </ItemLinkContext>\n );\n}\n\nexport function NavigationTreeItemContent(\n props: NavigationTreeItemContentProps\n) {\n const link = useContext(ItemLinkContext);\n const route = useContext(RouteContext);\n\n return (\n <TreeItemContent>\n {(tree) => (\n <NavigationTreeContentInner tree={tree} link={link} route={route}>\n {props.children}\n </NavigationTreeContentInner>\n )}\n </TreeItemContent>\n );\n}\n\nfunction NavigationTreeContentInner(props: {\n tree: TreeItemRenderProps;\n link: LinkDOMProps & {\n isCurrent: boolean;\n isLinkFocused: boolean;\n setLinkFocused: (value: boolean) => void;\n };\n route: { selectedRoute?: string | null; syncedRoute?: string };\n children: ChildrenOrFunction<NavigationTreeItemContentRenderProps>;\n}) {\n const ancestor = useContext(NavigationTreeItemStateContext);\n createEffect(\n () => {\n const routeContext = props.route;\n const route = routeContext.selectedRoute;\n const { state } = props.tree;\n const manager = state.selectionManager;\n let target: Key | undefined;\n\n if (isPresent(route) && routeContext.syncedRoute !== route) {\n for (const key of state.collection.getKeys()) {\n if (getNodeProps(state.collection.getItem(key)).href === route) {\n target = key;\n let node = state.collection.getItem(key);\n\n while (isPresent(node?.parentKey)) {\n const parent = state.collection.getItem(node.parentKey);\n\n if (\n parent?.type === \"item\" &&\n !state.expandedKeys.has(node.parentKey)\n ) {\n target = node.parentKey;\n }\n\n node = parent;\n }\n\n break;\n }\n }\n }\n\n return { manager, route, routeContext, target };\n },\n (next) => {\n if (next.target !== undefined && isPresent(next.route)) {\n next.routeContext.syncedRoute = next.route;\n next.manager.setFocusedKey(next.target);\n }\n }\n );\n\n const values = mergeProps(\n merge(() => props.tree ?? {}),\n {\n defaultChildren: undefined,\n get isCurrent() {\n return props.link.isCurrent;\n },\n get isCurrentAncestor() {\n return ancestor.isCurrentAncestor;\n },\n get isFocusVisible() {\n return (\n props.tree.isFocusVisible ||\n (props.tree.isFocusVisibleWithin && props.link.isLinkFocused)\n );\n },\n }\n );\n\n return (\n <LinkContext\n value={mergeProps(\n omit(props.link, \"isCurrent\", \"isLinkFocused\", \"setLinkFocused\"),\n {\n get \"aria-current\"() {\n return props.link.isCurrent ? \"page\" : undefined;\n },\n get onFocusChange() {\n return props.link.setLinkFocused;\n },\n onPress: () => {\n if (!isTruthy(props.link.href) && props.tree.hasChildItems) {\n props.tree.state.toggleKey(props.tree.id);\n }\n },\n }\n )}\n >\n {typeof props.children === \"function\"\n ? props.children(values)\n : props.children}\n </LinkContext>\n );\n}\n\nexport function NavigationTreeSection<T>(props: NavigationTreeSectionProps<T>) {\n return <TreeSection {...props} />;\n}\n\nexport function NavigationTreeHeader(\n props: NavigationTreeHeaderProps & { ref?: Ref<HTMLDivElement> }\n) {\n return (\n <TreeHeader\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(props, \"ref\")\n // oxlint-enable solid/reactivity\n }\n ref={(element: HTMLDivElement) => {\n assignRef(\n untrack(() => props.ref),\n element\n );\n }}\n />\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /*
2
+ * Copyright 2022 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ /*
13
+ * Derived from Adobe React Spectrum: packages/react-aria-components/src/NumberField.tsx.
14
+ * Modified for Solid Aria: composed Solid Aria and Stately primitives with Solid 2 contexts, reactive getters, and DOM refs; uses Solid class props.
15
+ * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.
16
+ */
17
+ import { ContextValue, RACValidation, Ref, RenderProps, SlotProps } from "./utils.js";
18
+ import { JSX } from "@solidjs/web";
19
+ import { AriaNumberFieldProps } from "@solid2-aria/core/numberfield/create-number-field";
20
+ import { NumberFieldState } from "@solid2-aria/stately/numberfield/create-number-field-state";
21
+ import { InputDOMProps } from "@solid2-aria/types-shared";
22
+ import { GlobalDOMAttributes } from "@solid2-aria/types-shared-web";
23
+ export interface NumberFieldRenderProps {
24
+ isDisabled: boolean;
25
+ isInvalid: boolean;
26
+ isReadOnly: boolean;
27
+ isRequired: boolean;
28
+ state: NumberFieldState;
29
+ }
30
+ export interface NumberFieldProps extends Omit<AriaNumberFieldProps, "label" | "placeholder" | "description" | "errorMessage" | "validationState" | "validationBehavior">, RACValidation, InputDOMProps, RenderProps<NumberFieldRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {
31
+ ref?: Ref<HTMLDivElement>;
32
+ }
33
+ export declare const NumberFieldContext: import("solid-js").Context<ContextValue<NumberFieldProps, HTMLDivElement>>;
34
+ export declare const NumberFieldStateContext: import("solid-js").Context<NumberFieldState | null>;
35
+ export declare function NumberField(input: NumberFieldProps): JSX.Element;
36
+ //# sourceMappingURL=number-field.d.ts.map
@@ -0,0 +1,179 @@
1
+ /*
2
+ * Copyright 2022 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ /*
13
+ * Derived from Adobe React Spectrum: packages/react-aria-components/src/NumberField.tsx.
14
+ * Modified for Solid Aria: composed Solid Aria and Stately primitives with Solid 2 contexts, reactive getters, and DOM refs; uses Solid class props.
15
+ * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.
16
+ */
17
+ import { createContextProps, createRenderProps, createSlot, createSlottedContext, dom, removeDataAttributes } from "./utils.js";
18
+ import { LabelContext } from "./label.js";
19
+ import { ButtonContext } from "./button.js";
20
+ import { TextContext } from "./text.js";
21
+ import { FieldErrorContext } from "./field-error.js";
22
+ import { FormContext } from "./form.js";
23
+ import { GroupContext } from "./group.js";
24
+ import { InputContext } from "./input.js";
25
+ import { createComponent, effect, getNextElement, memo, mergeProps, setAttribute, setProperty, template } from "@solidjs/web";
26
+ import { mergeProps as mergeProps$1 } from "@solid2-aria/core/utils/merge-props";
27
+ import { createContext, createSignal, merge, omit, untrack } from "solid-js";
28
+ import { filterDOMProps } from "@solid2-aria/core/utils/filter-dom-props";
29
+ import { createLocale } from "@solid2-aria/core/i18n/i18n-provider";
30
+ import { createNumberField } from "@solid2-aria/core/numberfield/create-number-field";
31
+ import { createNumberFieldState } from "@solid2-aria/stately/numberfield/create-number-field-state";
32
+ // src/number-field.tsx
33
+ var _tmpl$ = /* @__PURE__ */ template(`<input type=hidden>`);
34
+ const NumberFieldContext = createContext(null);
35
+ const NumberFieldStateContext = createContext(null);
36
+ function NumberField(input) {
37
+ const [props, , setRef] = createContextProps(input, untrack(() => input.ref), NumberFieldContext);
38
+ const locale = createLocale();
39
+ const form = createSlottedContext(FormContext);
40
+ const options = mergeProps$1(props, {
41
+ get locale() {
42
+ return locale.locale;
43
+ },
44
+ get validationBehavior() {
45
+ return props.validationBehavior ?? form?.validationBehavior ?? "native";
46
+ }
47
+ });
48
+ const state = createNumberFieldState(options);
49
+ const [inputRef, setInputRef] = createSignal(null, { ownedWrite: true });
50
+ const [registerLabel, label] = createSlot(() => (props["aria-label"]?.length ?? 0) === 0 && (props["aria-labelledby"]?.length ?? 0) === 0);
51
+ const aria = createNumberField(mergeProps$1(removeDataAttributes(options), { get label() {
52
+ return label();
53
+ } }), state, inputRef);
54
+ const render = createRenderProps(mergeProps$1(props, {
55
+ defaultClass: "solid2-aria-NumberField",
56
+ values: {
57
+ get isDisabled() {
58
+ return props.isDisabled ?? false;
59
+ },
60
+ get isInvalid() {
61
+ return aria.isInvalid;
62
+ },
63
+ get isReadOnly() {
64
+ return props.isReadOnly ?? false;
65
+ },
66
+ get isRequired() {
67
+ return props.isRequired ?? false;
68
+ },
69
+ state
70
+ }
71
+ }));
72
+ return createComponent(NumberFieldStateContext, {
73
+ value: state,
74
+ get children() {
75
+ return createComponent(GroupContext, {
76
+ get value() {
77
+ return merge(() => aria.groupProps);
78
+ },
79
+ get children() {
80
+ return createComponent(InputContext, {
81
+ get value() {
82
+ return mergeProps$1(merge(() => aria.inputProps), { ref: (element) => {
83
+ setInputRef(element);
84
+ } });
85
+ },
86
+ get children() {
87
+ return createComponent(LabelContext, {
88
+ get value() {
89
+ return mergeProps$1(merge(() => aria.labelProps), { registerSlot: registerLabel });
90
+ },
91
+ get children() {
92
+ return createComponent(ButtonContext, {
93
+ value: { slots: {
94
+ get decrement() {
95
+ return aria.decrementButtonProps;
96
+ },
97
+ get increment() {
98
+ return aria.incrementButtonProps;
99
+ }
100
+ } },
101
+ get children() {
102
+ return createComponent(TextContext, {
103
+ value: { slots: {
104
+ get description() {
105
+ return aria.descriptionProps;
106
+ },
107
+ get errorMessage() {
108
+ return aria.errorMessageProps;
109
+ }
110
+ } },
111
+ get children() {
112
+ return createComponent(FieldErrorContext, {
113
+ value: aria,
114
+ get children() {
115
+ return [createComponent(dom.div, mergeProps(() => {
116
+ return omit(filterDOMProps(props, { global: true }), "id");
117
+ }, render, {
118
+ ref: (element) => {
119
+ setRef(element);
120
+ },
121
+ get slot() {
122
+ return memo(() => {
123
+ return !!(typeof props.slot === "string" && props.slot.length > 0);
124
+ })() ? props.slot : void 0;
125
+ },
126
+ get "data-disabled"() {
127
+ return props.isDisabled === true ? true : void 0;
128
+ },
129
+ get "data-readonly"() {
130
+ return props.isReadOnly === true ? true : void 0;
131
+ },
132
+ get "data-required"() {
133
+ return props.isRequired === true ? true : void 0;
134
+ },
135
+ get "data-invalid"() {
136
+ return aria.isInvalid || void 0;
137
+ },
138
+ get children() {
139
+ return render.children;
140
+ }
141
+ })), memo(() => {
142
+ return memo(() => {
143
+ return (props.name?.length ?? 0) > 0;
144
+ })() && (() => {
145
+ var _el$ = getNextElement(_tmpl$);
146
+ effect(() => {
147
+ return {
148
+ e: props.name,
149
+ t: props.form,
150
+ a: Number.isNaN(state.numberValue) ? "" : state.numberValue,
151
+ o: props.isDisabled
152
+ };
153
+ }, ({ e, t, a, o }, _p$) => {
154
+ e !== _p$?.e && setAttribute(_el$, "name", e);
155
+ t !== _p$?.t && setAttribute(_el$, "form", t);
156
+ setProperty(_el$, "value", a);
157
+ o !== _p$?.o && setAttribute(_el$, "disabled", o);
158
+ });
159
+ return _el$;
160
+ })();
161
+ })];
162
+ }
163
+ });
164
+ }
165
+ });
166
+ }
167
+ });
168
+ }
169
+ });
170
+ }
171
+ });
172
+ }
173
+ });
174
+ }
175
+ });
176
+ }
177
+ export { NumberField, NumberFieldContext, NumberFieldStateContext };
178
+
179
+ //# sourceMappingURL=number-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"number-field.js","names":["<NumberFieldStateContext value={state}>\n <GroupContext\n value={\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n merge(() => aria.groupProps)\n // oxlint-enable solid/reactivity\n }\n >\n <InputContext\n value={mergeProps(\n merge(() => aria.inputProps),\n {\n ref: (element: HTMLInputElement) => {\n setInputRef(element);\n },\n }\n )}\n >\n <LabelContext\n value={mergeProps(\n merge(() => aria.labelProps),\n { registerSlot: registerLabel }\n )}\n >\n <ButtonContext\n value={{\n slots: {\n get decrement() {\n return aria.decrementButtonProps;\n },\n get increment() {\n return aria.incrementButtonProps;\n },\n },\n }}\n >\n <TextContext\n value={{\n slots: {\n get description() {\n return aria.descriptionProps;\n },\n get errorMessage() {\n return aria.errorMessageProps;\n },\n },\n }}\n >\n <FieldErrorContext value={aria}>\n <dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>\n {(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}\n </FieldErrorContext>\n </TextContext>\n </ButtonContext>\n </LabelContext>\n </InputContext>\n </GroupContext>\n </NumberFieldStateContext>","value={state}","<GroupContext\n value={\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n merge(() => aria.groupProps)\n // oxlint-enable solid/reactivity\n }\n >\n <InputContext\n value={mergeProps(\n merge(() => aria.inputProps),\n {\n ref: (element: HTMLInputElement) => {\n setInputRef(element);\n },\n }\n )}\n >\n <LabelContext\n value={mergeProps(\n merge(() => aria.labelProps),\n { registerSlot: registerLabel }\n )}\n >\n <ButtonContext\n value={{\n slots: {\n get decrement() {\n return aria.decrementButtonProps;\n },\n get increment() {\n return aria.incrementButtonProps;\n },\n },\n }}\n >\n <TextContext\n value={{\n slots: {\n get description() {\n return aria.descriptionProps;\n },\n get errorMessage() {\n return aria.errorMessageProps;\n },\n },\n }}\n >\n <FieldErrorContext value={aria}>\n <dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>\n {(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}\n </FieldErrorContext>\n </TextContext>\n </ButtonContext>\n </LabelContext>\n </InputContext>\n </GroupContext>","<InputContext\n value={mergeProps(\n merge(() => aria.inputProps),\n {\n ref: (element: HTMLInputElement) => {\n setInputRef(element);\n },\n }\n )}\n >\n <LabelContext\n value={mergeProps(\n merge(() => aria.labelProps),\n { registerSlot: registerLabel }\n )}\n >\n <ButtonContext\n value={{\n slots: {\n get decrement() {\n return aria.decrementButtonProps;\n },\n get increment() {\n return aria.incrementButtonProps;\n },\n },\n }}\n >\n <TextContext\n value={{\n slots: {\n get description() {\n return aria.descriptionProps;\n },\n get errorMessage() {\n return aria.errorMessageProps;\n },\n },\n }}\n >\n <FieldErrorContext value={aria}>\n <dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>\n {(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}\n </FieldErrorContext>\n </TextContext>\n </ButtonContext>\n </LabelContext>\n </InputContext>","<LabelContext\n value={mergeProps(\n merge(() => aria.labelProps),\n { registerSlot: registerLabel }\n )}\n >\n <ButtonContext\n value={{\n slots: {\n get decrement() {\n return aria.decrementButtonProps;\n },\n get increment() {\n return aria.incrementButtonProps;\n },\n },\n }}\n >\n <TextContext\n value={{\n slots: {\n get description() {\n return aria.descriptionProps;\n },\n get errorMessage() {\n return aria.errorMessageProps;\n },\n },\n }}\n >\n <FieldErrorContext value={aria}>\n <dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>\n {(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}\n </FieldErrorContext>\n </TextContext>\n </ButtonContext>\n </LabelContext>","<ButtonContext\n value={{\n slots: {\n get decrement() {\n return aria.decrementButtonProps;\n },\n get increment() {\n return aria.incrementButtonProps;\n },\n },\n }}\n >\n <TextContext\n value={{\n slots: {\n get description() {\n return aria.descriptionProps;\n },\n get errorMessage() {\n return aria.errorMessageProps;\n },\n },\n }}\n >\n <FieldErrorContext value={aria}>\n <dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>\n {(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}\n </FieldErrorContext>\n </TextContext>\n </ButtonContext>","value={{\n slots: {\n get decrement() {\n return aria.decrementButtonProps;\n },\n get increment() {\n return aria.incrementButtonProps;\n },\n },\n }}","<TextContext\n value={{\n slots: {\n get description() {\n return aria.descriptionProps;\n },\n get errorMessage() {\n return aria.errorMessageProps;\n },\n },\n }}\n >\n <FieldErrorContext value={aria}>\n <dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>\n {(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}\n </FieldErrorContext>\n </TextContext>","value={{\n slots: {\n get description() {\n return aria.descriptionProps;\n },\n get errorMessage() {\n return aria.errorMessageProps;\n },\n },\n }}","<FieldErrorContext value={aria}>\n <dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>\n {(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}\n </FieldErrorContext>","value={aria}","<dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>","dom.div","ref={(element: HTMLDivElement) => {\n setRef(element);\n }}","typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined","{(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}","form={props.form}","value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }","disabled={props.isDisabled}","mergeProps","_$createComponent","_$mergeProps","_$memo","_$getNextElement","_$setAttribute"],"sources":["../../src/number-field.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 * Derived from Adobe React Spectrum: packages/react-aria-components/src/NumberField.tsx.\n * Modified for Solid Aria: composed Solid Aria and Stately primitives with Solid 2 contexts, reactive getters, and DOM refs; uses Solid class props.\n * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.\n */\n\nimport { createLocale } from \"@solid2-aria/core/i18n/i18n-provider\";\nimport { createNumberField } from \"@solid2-aria/core/numberfield/create-number-field\";\nimport type { AriaNumberFieldProps } from \"@solid2-aria/core/numberfield/create-number-field\";\nimport { filterDOMProps } from \"@solid2-aria/core/utils/filter-dom-props\";\nimport { mergeProps } from \"@solid2-aria/core/utils/merge-props\";\nimport { createNumberFieldState } from \"@solid2-aria/stately/numberfield/create-number-field-state\";\nimport type { NumberFieldState } from \"@solid2-aria/stately/numberfield/create-number-field-state\";\nimport type { InputDOMProps } from \"@solid2-aria/types-shared\";\nimport type { GlobalDOMAttributes } from \"@solid2-aria/types-shared-web\";\nimport type { JSX } from \"@solidjs/web\";\nimport { untrack, createSignal, merge, createContext, omit } from \"solid-js\";\n\nimport { ButtonContext } from \"./button\";\nimport { FieldErrorContext } from \"./field-error\";\nimport { FormContext } from \"./form\";\nimport { GroupContext } from \"./group\";\nimport { InputContext } from \"./input\";\nimport { LabelContext } from \"./label\";\nimport { TextContext } from \"./text\";\nimport {\n dom,\n createContextProps,\n createRenderProps,\n createSlot,\n createSlottedContext,\n removeDataAttributes,\n} from \"./utils\";\nimport type {\n ContextValue,\n RenderProps,\n SlotProps,\n Ref,\n RACValidation,\n} from \"./utils\";\n\nexport interface NumberFieldRenderProps {\n isDisabled: boolean;\n isInvalid: boolean;\n isReadOnly: boolean;\n isRequired: boolean;\n state: NumberFieldState;\n}\n\nexport interface NumberFieldProps\n extends\n Omit<\n AriaNumberFieldProps,\n | \"label\"\n | \"placeholder\"\n | \"description\"\n | \"errorMessage\"\n | \"validationState\"\n | \"validationBehavior\"\n >,\n RACValidation,\n InputDOMProps,\n RenderProps<NumberFieldRenderProps>,\n SlotProps,\n GlobalDOMAttributes<HTMLDivElement> {\n ref?: Ref<HTMLDivElement>;\n}\n\nexport const NumberFieldContext =\n createContext<ContextValue<NumberFieldProps, HTMLDivElement>>(null);\n\nexport const NumberFieldStateContext = createContext<NumberFieldState | null>(\n null\n);\n\nexport function NumberField(input: NumberFieldProps): JSX.Element {\n const [props, , setRef] = createContextProps(\n input,\n untrack(() => input.ref),\n NumberFieldContext\n );\n\n const locale = createLocale();\n const form = createSlottedContext(FormContext);\n\n const options = mergeProps(props, {\n get locale() {\n return locale.locale;\n },\n get validationBehavior() {\n return props.validationBehavior ?? form?.validationBehavior ?? \"native\";\n },\n });\n\n const state = createNumberFieldState(options);\n\n const [inputRef, setInputRef] = createSignal<HTMLInputElement | null>(null, {\n ownedWrite: true,\n });\n\n const [registerLabel, label] = createSlot(\n () =>\n (props[\"aria-label\"]?.length ?? 0) === 0 &&\n (props[\"aria-labelledby\"]?.length ?? 0) === 0\n );\n\n const aria = createNumberField(\n mergeProps(removeDataAttributes(options), {\n get label() {\n return label();\n },\n }),\n state,\n inputRef\n );\n\n const values: NumberFieldRenderProps = {\n get isDisabled() {\n return props.isDisabled ?? false;\n },\n get isInvalid() {\n return aria.isInvalid;\n },\n get isReadOnly() {\n return props.isReadOnly ?? false;\n },\n get isRequired() {\n return props.isRequired ?? false;\n },\n state,\n };\n\n const render = createRenderProps(\n mergeProps(props, { defaultClass: \"solid2-aria-NumberField\", values })\n );\n\n return (\n <NumberFieldStateContext value={state}>\n <GroupContext\n value={\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n merge(() => aria.groupProps)\n // oxlint-enable solid/reactivity\n }\n >\n <InputContext\n value={mergeProps(\n merge(() => aria.inputProps),\n {\n ref: (element: HTMLInputElement) => {\n setInputRef(element);\n },\n }\n )}\n >\n <LabelContext\n value={mergeProps(\n merge(() => aria.labelProps),\n { registerSlot: registerLabel }\n )}\n >\n <ButtonContext\n value={{\n slots: {\n get decrement() {\n return aria.decrementButtonProps;\n },\n get increment() {\n return aria.incrementButtonProps;\n },\n },\n }}\n >\n <TextContext\n value={{\n slots: {\n get description() {\n return aria.descriptionProps;\n },\n get errorMessage() {\n return aria.errorMessageProps;\n },\n },\n }}\n >\n <FieldErrorContext value={aria}>\n <dom.div\n {\n // oxlint-disable solid/reactivity -- Keep prop filtering in the renderer's lazy evaluation.\n ...omit(filterDOMProps(props, { global: true }), \"id\")\n // oxlint-enable solid/reactivity\n }\n {...render}\n ref={(element: HTMLDivElement) => {\n setRef(element);\n }}\n slot={\n typeof props.slot === \"string\" && props.slot.length > 0\n ? props.slot\n : undefined\n }\n data-disabled={props.isDisabled === true ? true : undefined}\n data-readonly={props.isReadOnly === true ? true : undefined}\n data-required={props.isRequired === true ? true : undefined}\n data-invalid={aria.isInvalid || undefined}\n >\n {render.children}\n </dom.div>\n {(props.name?.length ?? 0) > 0 && (\n <input\n type=\"hidden\"\n name={props.name}\n form={props.form}\n value={\n Number.isNaN(state.numberValue) ? \"\" : state.numberValue\n }\n disabled={props.isDisabled}\n />\n )}\n </FieldErrorContext>\n </TextContext>\n </ButtonContext>\n </LabelContext>\n </InputContext>\n </GroupContext>\n </NumberFieldStateContext>\n );\n}\n"],"mappings":"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"}