@solid2-aria/stately 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 (477) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -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/autocomplete/create-autocomplete-state.d.ts +46 -0
  7. package/dist/autocomplete/create-autocomplete-state.js +41 -0
  8. package/dist/autocomplete/create-autocomplete-state.js.map +1 -0
  9. package/dist/calendar/create-calendar-state.d.ts +62 -0
  10. package/dist/calendar/create-calendar-state.js +357 -0
  11. package/dist/calendar/create-calendar-state.js.map +1 -0
  12. package/dist/calendar/create-range-calendar-state.d.ts +63 -0
  13. package/dist/calendar/create-range-calendar-state.js +204 -0
  14. package/dist/calendar/create-range-calendar-state.js.map +1 -0
  15. package/dist/calendar/types.d.ts +222 -0
  16. package/dist/calendar/types.js +16 -0
  17. package/dist/calendar/utils.d.ts +27 -0
  18. package/dist/calendar/utils.js +81 -0
  19. package/dist/calendar/utils.js.map +1 -0
  20. package/dist/checkbox/create-checkbox-group-state.d.ts +60 -0
  21. package/dist/checkbox/create-checkbox-group-state.js +88 -0
  22. package/dist/checkbox/create-checkbox-group-state.js.map +1 -0
  23. package/dist/collections/collection-builder.d.ts +28 -0
  24. package/dist/collections/collection-builder.js +164 -0
  25. package/dist/collections/collection-builder.js.map +1 -0
  26. package/dist/collections/create-collection.d.ts +24 -0
  27. package/dist/collections/create-collection.js +35 -0
  28. package/dist/collections/create-collection.js.map +1 -0
  29. package/dist/collections/get-child-nodes.d.ts +25 -0
  30. package/dist/collections/get-child-nodes.js +67 -0
  31. package/dist/collections/get-child-nodes.js.map +1 -0
  32. package/dist/collections/get-item-count.d.ts +19 -0
  33. package/dist/collections/get-item-count.js +34 -0
  34. package/dist/collections/get-item-count.js.map +1 -0
  35. package/dist/collections/item.d.ts +29 -0
  36. package/dist/collections/item.js +68 -0
  37. package/dist/collections/item.js.map +1 -0
  38. package/dist/collections/section.d.ts +29 -0
  39. package/dist/collections/section.js +60 -0
  40. package/dist/collections/section.js.map +1 -0
  41. package/dist/collections/types.d.ts +46 -0
  42. package/dist/collections/types.js +29 -0
  43. package/dist/collections/types.js.map +1 -0
  44. package/dist/color/color/base-color.d.ts +40 -0
  45. package/dist/color/color/base-color.js +122 -0
  46. package/dist/color/color/base-color.js.map +1 -0
  47. package/dist/color/color/color-classes.d.ts +27 -0
  48. package/dist/color/color/color-classes.js +29 -0
  49. package/dist/color/color/color-classes.js.map +1 -0
  50. package/dist/color/color/color-constructors.d.ts +23 -0
  51. package/dist/color/color/color-constructors.js +16 -0
  52. package/dist/color/color/color.d.ts +3 -0
  53. package/dist/color/color/color.js +2 -0
  54. package/dist/color/color/hsb-color.d.ts +24 -0
  55. package/dist/color/color/hsb-color.js +183 -0
  56. package/dist/color/color/hsb-color.js.map +1 -0
  57. package/dist/color/color/hsl-color.d.ts +24 -0
  58. package/dist/color/color/hsl-color.js +184 -0
  59. package/dist/color/color/hsl-color.js.map +1 -0
  60. package/dist/color/color/normalize-hue.d.ts +18 -0
  61. package/dist/color/color/normalize-hue.js +24 -0
  62. package/dist/color/color/normalize-hue.js.map +1 -0
  63. package/dist/color/color/oklch.d.ts +19 -0
  64. package/dist/color/color/oklch.js +97 -0
  65. package/dist/color/color/oklch.js.map +1 -0
  66. package/dist/color/color/rgb-color.d.ts +24 -0
  67. package/dist/color/color/rgb-color.js +230 -0
  68. package/dist/color/color/rgb-color.js.map +1 -0
  69. package/dist/color/color.d.ts +25 -0
  70. package/dist/color/color.js +41 -0
  71. package/dist/color/color.js.map +1 -0
  72. package/dist/color/create-color-area-state.d.ts +105 -0
  73. package/dist/color/create-color-area-state.js +138 -0
  74. package/dist/color/create-color-area-state.js.map +1 -0
  75. package/dist/color/create-color-channel-field-state.d.ts +29 -0
  76. package/dist/color/create-color-channel-field-state.js +69 -0
  77. package/dist/color/create-color-channel-field-state.js.map +1 -0
  78. package/dist/color/create-color-field-state.d.ts +61 -0
  79. package/dist/color/create-color-field-state.js +113 -0
  80. package/dist/color/create-color-field-state.js.map +1 -0
  81. package/dist/color/create-color-picker-state.d.ts +16 -0
  82. package/dist/color/create-color-picker-state.js +26 -0
  83. package/dist/color/create-color-picker-state.js.map +1 -0
  84. package/dist/color/create-color-slider-state.d.ts +50 -0
  85. package/dist/color/create-color-slider-state.js +93 -0
  86. package/dist/color/create-color-slider-state.js.map +1 -0
  87. package/dist/color/create-color-wheel-state.d.ts +76 -0
  88. package/dist/color/create-color-wheel-state.js +130 -0
  89. package/dist/color/create-color-wheel-state.js.map +1 -0
  90. package/dist/color/create-color.d.ts +20 -0
  91. package/dist/color/create-color.js +33 -0
  92. package/dist/color/create-color.js.map +1 -0
  93. package/dist/color/types.d.ts +87 -0
  94. package/dist/color/types.js +5 -0
  95. package/dist/combobox/create-combo-box-state.d.ts +157 -0
  96. package/dist/combobox/create-combo-box-state.js +450 -0
  97. package/dist/combobox/create-combo-box-state.js.map +1 -0
  98. package/dist/data/create-async-list.d.ts +88 -0
  99. package/dist/data/create-async-list.js +276 -0
  100. package/dist/data/create-async-list.js.map +1 -0
  101. package/dist/data/create-list-data.d.ts +140 -0
  102. package/dist/data/create-list-data.js +250 -0
  103. package/dist/data/create-list-data.js.map +1 -0
  104. package/dist/data/create-tree-data.d.ts +134 -0
  105. package/dist/data/create-tree-data.js +364 -0
  106. package/dist/data/create-tree-data.js.map +1 -0
  107. package/dist/datepicker/create-date-field-state.d.ts +138 -0
  108. package/dist/datepicker/create-date-field-state.js +449 -0
  109. package/dist/datepicker/create-date-field-state.js.map +1 -0
  110. package/dist/datepicker/create-date-picker-state.d.ts +82 -0
  111. package/dist/datepicker/create-date-picker-state.js +191 -0
  112. package/dist/datepicker/create-date-picker-state.js.map +1 -0
  113. package/dist/datepicker/create-date-range-picker-state.d.ts +97 -0
  114. package/dist/datepicker/create-date-range-picker-state.js +305 -0
  115. package/dist/datepicker/create-date-range-picker-state.js.map +1 -0
  116. package/dist/datepicker/create-time-field-state.d.ts +34 -0
  117. package/dist/datepicker/create-time-field-state.js +128 -0
  118. package/dist/datepicker/create-time-field-state.js.map +1 -0
  119. package/dist/datepicker/incomplete-date.d.ts +71 -0
  120. package/dist/datepicker/incomplete-date.js +324 -0
  121. package/dist/datepicker/incomplete-date.js.map +1 -0
  122. package/dist/datepicker/placeholders.d.ts +18 -0
  123. package/dist/datepicker/placeholders.js +418 -0
  124. package/dist/datepicker/placeholders.js.map +1 -0
  125. package/dist/datepicker/types.d.ts +131 -0
  126. package/dist/datepicker/types.js +16 -0
  127. package/dist/datepicker/utils.d.ts +37 -0
  128. package/dist/datepicker/utils.js +168 -0
  129. package/dist/datepicker/utils.js.map +1 -0
  130. package/dist/disclosure/create-disclosure-group-state.d.ts +47 -0
  131. package/dist/disclosure/create-disclosure-group-state.js +62 -0
  132. package/dist/disclosure/create-disclosure-group-state.js.map +1 -0
  133. package/dist/disclosure/create-disclosure-state.d.ts +42 -0
  134. package/dist/disclosure/create-disclosure-state.js +49 -0
  135. package/dist/disclosure/create-disclosure-state.js.map +1 -0
  136. package/dist/dnd/create-draggable-collection-state.d.ts +63 -0
  137. package/dist/dnd/create-draggable-collection-state.js +136 -0
  138. package/dist/dnd/create-draggable-collection-state.js.map +1 -0
  139. package/dist/dnd/create-droppable-collection-state.d.ts +55 -0
  140. package/dist/dnd/create-droppable-collection-state.js +155 -0
  141. package/dist/dnd/create-droppable-collection-state.js.map +1 -0
  142. package/dist/flags/flags.d.ts +21 -0
  143. package/dist/flags/flags.js +34 -0
  144. package/dist/flags/flags.js.map +1 -0
  145. package/dist/form/create-form-validation-state.d.ts +37 -0
  146. package/dist/form/create-form-validation-state.js +152 -0
  147. package/dist/form/create-form-validation-state.js.map +1 -0
  148. package/dist/grid/create-grid-state.d.ts +38 -0
  149. package/dist/grid/create-grid-state.js +85 -0
  150. package/dist/grid/create-grid-state.js.map +1 -0
  151. package/dist/grid/grid-collection.d.ts +68 -0
  152. package/dist/grid/grid-collection.js +133 -0
  153. package/dist/grid/grid-collection.js.map +1 -0
  154. package/dist/index.d.ts +91 -0
  155. package/dist/index.js +86 -0
  156. package/dist/intl/color/ar-AE.js +44 -0
  157. package/dist/intl/color/ar-AE.js.map +1 -0
  158. package/dist/intl/color/bg-BG.js +44 -0
  159. package/dist/intl/color/bg-BG.js.map +1 -0
  160. package/dist/intl/color/cs-CZ.js +44 -0
  161. package/dist/intl/color/cs-CZ.js.map +1 -0
  162. package/dist/intl/color/da-DK.js +44 -0
  163. package/dist/intl/color/da-DK.js.map +1 -0
  164. package/dist/intl/color/de-DE.js +44 -0
  165. package/dist/intl/color/de-DE.js.map +1 -0
  166. package/dist/intl/color/el-GR.js +44 -0
  167. package/dist/intl/color/el-GR.js.map +1 -0
  168. package/dist/intl/color/en-US.js +44 -0
  169. package/dist/intl/color/en-US.js.map +1 -0
  170. package/dist/intl/color/es-ES.js +44 -0
  171. package/dist/intl/color/es-ES.js.map +1 -0
  172. package/dist/intl/color/et-EE.js +44 -0
  173. package/dist/intl/color/et-EE.js.map +1 -0
  174. package/dist/intl/color/fi-FI.js +44 -0
  175. package/dist/intl/color/fi-FI.js.map +1 -0
  176. package/dist/intl/color/fr-FR.js +44 -0
  177. package/dist/intl/color/fr-FR.js.map +1 -0
  178. package/dist/intl/color/he-IL.js +44 -0
  179. package/dist/intl/color/he-IL.js.map +1 -0
  180. package/dist/intl/color/hr-HR.js +44 -0
  181. package/dist/intl/color/hr-HR.js.map +1 -0
  182. package/dist/intl/color/hu-HU.js +44 -0
  183. package/dist/intl/color/hu-HU.js.map +1 -0
  184. package/dist/intl/color/index.js +75 -0
  185. package/dist/intl/color/index.js.map +1 -0
  186. package/dist/intl/color/it-IT.js +44 -0
  187. package/dist/intl/color/it-IT.js.map +1 -0
  188. package/dist/intl/color/ja-JP.js +44 -0
  189. package/dist/intl/color/ja-JP.js.map +1 -0
  190. package/dist/intl/color/ko-KR.js +44 -0
  191. package/dist/intl/color/ko-KR.js.map +1 -0
  192. package/dist/intl/color/lt-LT.js +44 -0
  193. package/dist/intl/color/lt-LT.js.map +1 -0
  194. package/dist/intl/color/lv-LV.js +44 -0
  195. package/dist/intl/color/lv-LV.js.map +1 -0
  196. package/dist/intl/color/nb-NO.js +44 -0
  197. package/dist/intl/color/nb-NO.js.map +1 -0
  198. package/dist/intl/color/nl-NL.js +44 -0
  199. package/dist/intl/color/nl-NL.js.map +1 -0
  200. package/dist/intl/color/pl-PL.js +44 -0
  201. package/dist/intl/color/pl-PL.js.map +1 -0
  202. package/dist/intl/color/pt-BR.js +44 -0
  203. package/dist/intl/color/pt-BR.js.map +1 -0
  204. package/dist/intl/color/pt-PT.js +44 -0
  205. package/dist/intl/color/pt-PT.js.map +1 -0
  206. package/dist/intl/color/ro-RO.js +44 -0
  207. package/dist/intl/color/ro-RO.js.map +1 -0
  208. package/dist/intl/color/ru-RU.js +44 -0
  209. package/dist/intl/color/ru-RU.js.map +1 -0
  210. package/dist/intl/color/sk-SK.js +44 -0
  211. package/dist/intl/color/sk-SK.js.map +1 -0
  212. package/dist/intl/color/sl-SI.js +44 -0
  213. package/dist/intl/color/sl-SI.js.map +1 -0
  214. package/dist/intl/color/sr-SP.js +44 -0
  215. package/dist/intl/color/sr-SP.js.map +1 -0
  216. package/dist/intl/color/sv-SE.js +44 -0
  217. package/dist/intl/color/sv-SE.js.map +1 -0
  218. package/dist/intl/color/tr-TR.js +44 -0
  219. package/dist/intl/color/tr-TR.js.map +1 -0
  220. package/dist/intl/color/uk-UA.js +44 -0
  221. package/dist/intl/color/uk-UA.js.map +1 -0
  222. package/dist/intl/color/zh-CN.js +44 -0
  223. package/dist/intl/color/zh-CN.js.map +1 -0
  224. package/dist/intl/color/zh-TW.js +44 -0
  225. package/dist/intl/color/zh-TW.js.map +1 -0
  226. package/dist/intl/datepicker/ar-AE.js +11 -0
  227. package/dist/intl/datepicker/ar-AE.js.map +1 -0
  228. package/dist/intl/datepicker/bg-BG.js +11 -0
  229. package/dist/intl/datepicker/bg-BG.js.map +1 -0
  230. package/dist/intl/datepicker/cs-CZ.js +11 -0
  231. package/dist/intl/datepicker/cs-CZ.js.map +1 -0
  232. package/dist/intl/datepicker/da-DK.js +11 -0
  233. package/dist/intl/datepicker/da-DK.js.map +1 -0
  234. package/dist/intl/datepicker/de-DE.js +11 -0
  235. package/dist/intl/datepicker/de-DE.js.map +1 -0
  236. package/dist/intl/datepicker/el-GR.js +11 -0
  237. package/dist/intl/datepicker/el-GR.js.map +1 -0
  238. package/dist/intl/datepicker/en-US.js +11 -0
  239. package/dist/intl/datepicker/en-US.js.map +1 -0
  240. package/dist/intl/datepicker/es-ES.js +11 -0
  241. package/dist/intl/datepicker/es-ES.js.map +1 -0
  242. package/dist/intl/datepicker/et-EE.js +11 -0
  243. package/dist/intl/datepicker/et-EE.js.map +1 -0
  244. package/dist/intl/datepicker/fi-FI.js +11 -0
  245. package/dist/intl/datepicker/fi-FI.js.map +1 -0
  246. package/dist/intl/datepicker/fr-FR.js +11 -0
  247. package/dist/intl/datepicker/fr-FR.js.map +1 -0
  248. package/dist/intl/datepicker/he-IL.js +11 -0
  249. package/dist/intl/datepicker/he-IL.js.map +1 -0
  250. package/dist/intl/datepicker/hr-HR.js +11 -0
  251. package/dist/intl/datepicker/hr-HR.js.map +1 -0
  252. package/dist/intl/datepicker/hu-HU.js +11 -0
  253. package/dist/intl/datepicker/hu-HU.js.map +1 -0
  254. package/dist/intl/datepicker/index.js +75 -0
  255. package/dist/intl/datepicker/index.js.map +1 -0
  256. package/dist/intl/datepicker/it-IT.js +11 -0
  257. package/dist/intl/datepicker/it-IT.js.map +1 -0
  258. package/dist/intl/datepicker/ja-JP.js +11 -0
  259. package/dist/intl/datepicker/ja-JP.js.map +1 -0
  260. package/dist/intl/datepicker/ko-KR.js +11 -0
  261. package/dist/intl/datepicker/ko-KR.js.map +1 -0
  262. package/dist/intl/datepicker/lt-LT.js +11 -0
  263. package/dist/intl/datepicker/lt-LT.js.map +1 -0
  264. package/dist/intl/datepicker/lv-LV.js +11 -0
  265. package/dist/intl/datepicker/lv-LV.js.map +1 -0
  266. package/dist/intl/datepicker/nb-NO.js +11 -0
  267. package/dist/intl/datepicker/nb-NO.js.map +1 -0
  268. package/dist/intl/datepicker/nl-NL.js +11 -0
  269. package/dist/intl/datepicker/nl-NL.js.map +1 -0
  270. package/dist/intl/datepicker/pl-PL.js +11 -0
  271. package/dist/intl/datepicker/pl-PL.js.map +1 -0
  272. package/dist/intl/datepicker/pt-BR.js +11 -0
  273. package/dist/intl/datepicker/pt-BR.js.map +1 -0
  274. package/dist/intl/datepicker/pt-PT.js +11 -0
  275. package/dist/intl/datepicker/pt-PT.js.map +1 -0
  276. package/dist/intl/datepicker/ro-RO.js +11 -0
  277. package/dist/intl/datepicker/ro-RO.js.map +1 -0
  278. package/dist/intl/datepicker/ru-RU.js +11 -0
  279. package/dist/intl/datepicker/ru-RU.js.map +1 -0
  280. package/dist/intl/datepicker/sk-SK.js +11 -0
  281. package/dist/intl/datepicker/sk-SK.js.map +1 -0
  282. package/dist/intl/datepicker/sl-SI.js +11 -0
  283. package/dist/intl/datepicker/sl-SI.js.map +1 -0
  284. package/dist/intl/datepicker/sr-SP.js +11 -0
  285. package/dist/intl/datepicker/sr-SP.js.map +1 -0
  286. package/dist/intl/datepicker/sv-SE.js +11 -0
  287. package/dist/intl/datepicker/sv-SE.js.map +1 -0
  288. package/dist/intl/datepicker/tr-TR.js +11 -0
  289. package/dist/intl/datepicker/tr-TR.js.map +1 -0
  290. package/dist/intl/datepicker/uk-UA.js +11 -0
  291. package/dist/intl/datepicker/uk-UA.js.map +1 -0
  292. package/dist/intl/datepicker/zh-CN.js +11 -0
  293. package/dist/intl/datepicker/zh-CN.js.map +1 -0
  294. package/dist/intl/datepicker/zh-TW.js +11 -0
  295. package/dist/intl/datepicker/zh-TW.js.map +1 -0
  296. package/dist/layout/grid-layout.d.ts +107 -0
  297. package/dist/layout/grid-layout.js +253 -0
  298. package/dist/layout/grid-layout.js.map +1 -0
  299. package/dist/layout/list-layout.d.ts +187 -0
  300. package/dist/layout/list-layout.js +488 -0
  301. package/dist/layout/list-layout.js.map +1 -0
  302. package/dist/layout/table-layout.d.ts +98 -0
  303. package/dist/layout/table-layout.js +476 -0
  304. package/dist/layout/table-layout.js.map +1 -0
  305. package/dist/layout/waterfall-layout.d.ts +85 -0
  306. package/dist/layout/waterfall-layout.js +225 -0
  307. package/dist/layout/waterfall-layout.js.map +1 -0
  308. package/dist/list/create-list-state.d.ts +48 -0
  309. package/dist/list/create-list-state.js +123 -0
  310. package/dist/list/create-list-state.js.map +1 -0
  311. package/dist/list/create-single-select-list-state.d.ts +38 -0
  312. package/dist/list/create-single-select-list-state.js +55 -0
  313. package/dist/list/create-single-select-list-state.js.map +1 -0
  314. package/dist/list/list-collection.d.ts +36 -0
  315. package/dist/list/list-collection.js +91 -0
  316. package/dist/list/list-collection.js.map +1 -0
  317. package/dist/menu/create-menu-trigger-state.d.ts +55 -0
  318. package/dist/menu/create-menu-trigger-state.js +58 -0
  319. package/dist/menu/create-menu-trigger-state.js.map +1 -0
  320. package/dist/menu/create-submenu-trigger-state.d.ts +47 -0
  321. package/dist/menu/create-submenu-trigger-state.js +59 -0
  322. package/dist/menu/create-submenu-trigger-state.js.map +1 -0
  323. package/dist/numberfield/create-number-field-state.d.ts +93 -0
  324. package/dist/numberfield/create-number-field-state.js +139 -0
  325. package/dist/numberfield/create-number-field-state.js.map +1 -0
  326. package/dist/overlays/create-overlay-trigger-state.d.ts +51 -0
  327. package/dist/overlays/create-overlay-trigger-state.js +56 -0
  328. package/dist/overlays/create-overlay-trigger-state.js.map +1 -0
  329. package/dist/radio/create-radio-group-state.d.ts +61 -0
  330. package/dist/radio/create-radio-group-state.js +71 -0
  331. package/dist/radio/create-radio-group-state.js.map +1 -0
  332. package/dist/searchfield/create-search-field-state.d.ts +35 -0
  333. package/dist/searchfield/create-search-field-state.js +34 -0
  334. package/dist/searchfield/create-search-field-state.js.map +1 -0
  335. package/dist/select/create-select-state.d.ts +116 -0
  336. package/dist/select/create-select-state.js +151 -0
  337. package/dist/select/create-select-state.js.map +1 -0
  338. package/dist/selection/create-multiple-selection-state.d.ts +39 -0
  339. package/dist/selection/create-multiple-selection-state.js +114 -0
  340. package/dist/selection/create-multiple-selection-state.js.map +1 -0
  341. package/dist/selection/selection-manager.d.ts +139 -0
  342. package/dist/selection/selection-manager.js +334 -0
  343. package/dist/selection/selection-manager.js.map +1 -0
  344. package/dist/selection/selection.d.ts +27 -0
  345. package/dist/selection/selection.js +38 -0
  346. package/dist/selection/selection.js.map +1 -0
  347. package/dist/selection/types.d.ts +116 -0
  348. package/dist/selection/types.js +16 -0
  349. package/dist/slider/create-slider-state.d.ts +182 -0
  350. package/dist/slider/create-slider-state.js +131 -0
  351. package/dist/slider/create-slider-state.js.map +1 -0
  352. package/dist/steplist/create-step-list-state.d.ts +40 -0
  353. package/dist/steplist/create-step-list-state.js +132 -0
  354. package/dist/steplist/create-step-list-state.js.map +1 -0
  355. package/dist/table/cell.d.ts +37 -0
  356. package/dist/table/cell.js +47 -0
  357. package/dist/table/cell.js.map +1 -0
  358. package/dist/table/collection-context.d.ts +4 -0
  359. package/dist/table/collection-context.js +8 -0
  360. package/dist/table/collection-context.js.map +1 -0
  361. package/dist/table/column.d.ts +66 -0
  362. package/dist/table/column.js +71 -0
  363. package/dist/table/column.js.map +1 -0
  364. package/dist/table/create-table-column-resize-state.d.ts +65 -0
  365. package/dist/table/create-table-column-resize-state.js +100 -0
  366. package/dist/table/create-table-column-resize-state.js.map +1 -0
  367. package/dist/table/create-table-state.d.ts +112 -0
  368. package/dist/table/create-table-state.js +122 -0
  369. package/dist/table/create-table-state.js.map +1 -0
  370. package/dist/table/create-tree-grid-state.d.ts +44 -0
  371. package/dist/table/create-tree-grid-state.js +145 -0
  372. package/dist/table/create-tree-grid-state.js.map +1 -0
  373. package/dist/table/row.d.ts +44 -0
  374. package/dist/table/row.js +91 -0
  375. package/dist/table/row.js.map +1 -0
  376. package/dist/table/table-body.d.ts +36 -0
  377. package/dist/table/table-body.js +57 -0
  378. package/dist/table/table-body.js.map +1 -0
  379. package/dist/table/table-collection.d.ts +62 -0
  380. package/dist/table/table-collection.js +274 -0
  381. package/dist/table/table-collection.js.map +1 -0
  382. package/dist/table/table-column-layout.d.ts +47 -0
  383. package/dist/table/table-column-layout.js +94 -0
  384. package/dist/table/table-column-layout.js.map +1 -0
  385. package/dist/table/table-header.d.ts +37 -0
  386. package/dist/table/table-header.js +52 -0
  387. package/dist/table/table-header.js.map +1 -0
  388. package/dist/table/table-utils.d.ts +60 -0
  389. package/dist/table/table-utils.js +203 -0
  390. package/dist/table/table-utils.js.map +1 -0
  391. package/dist/tabs/create-tab-list-state.d.ts +42 -0
  392. package/dist/tabs/create-tab-list-state.js +78 -0
  393. package/dist/tabs/create-tab-list-state.js.map +1 -0
  394. package/dist/toast/create-toast-state.d.ts +97 -0
  395. package/dist/toast/create-toast-state.js +166 -0
  396. package/dist/toast/create-toast-state.js.map +1 -0
  397. package/dist/toggle/create-toggle-group-state.d.ts +55 -0
  398. package/dist/toggle/create-toggle-group-state.js +62 -0
  399. package/dist/toggle/create-toggle-group-state.js.map +1 -0
  400. package/dist/toggle/create-toggle-state.d.ts +58 -0
  401. package/dist/toggle/create-toggle-state.js +43 -0
  402. package/dist/toggle/create-toggle-state.js.map +1 -0
  403. package/dist/tokenfield/create-token-field-state.d.ts +39 -0
  404. package/dist/tokenfield/create-token-field-state.js +44 -0
  405. package/dist/tokenfield/create-token-field-state.js.map +1 -0
  406. package/dist/tokenfield/token-field-value.d.ts +111 -0
  407. package/dist/tokenfield/token-field-value.js +327 -0
  408. package/dist/tokenfield/token-field-value.js.map +1 -0
  409. package/dist/tooltip/create-tooltip-trigger-state.d.ts +73 -0
  410. package/dist/tooltip/create-tooltip-trigger-state.js +136 -0
  411. package/dist/tooltip/create-tooltip-trigger-state.js.map +1 -0
  412. package/dist/tree/create-tree-state.d.ts +42 -0
  413. package/dist/tree/create-tree-state.js +75 -0
  414. package/dist/tree/create-tree-state.js.map +1 -0
  415. package/dist/tree/tree-collection.d.ts +36 -0
  416. package/dist/tree/tree-collection.js +84 -0
  417. package/dist/tree/tree-collection.js.map +1 -0
  418. package/dist/utils/create-controlled-signal.d.ts +23 -0
  419. package/dist/utils/create-controlled-signal.js +54 -0
  420. package/dist/utils/create-controlled-signal.js.map +1 -0
  421. package/dist/utils/get-item-key.d.ts +5 -0
  422. package/dist/utils/get-item-key.js +12 -0
  423. package/dist/utils/get-item-key.js.map +1 -0
  424. package/dist/utils/get-node-props.d.ts +23 -0
  425. package/dist/utils/get-node-props.js +38 -0
  426. package/dist/utils/get-node-props.js.map +1 -0
  427. package/dist/utils/has-content.d.ts +5 -0
  428. package/dist/utils/has-content.js +7 -0
  429. package/dist/utils/has-content.js.map +1 -0
  430. package/dist/utils/legacy-props.d.ts +10 -0
  431. package/dist/utils/legacy-props.js +17 -0
  432. package/dist/utils/legacy-props.js.map +1 -0
  433. package/dist/utils/number.d.ts +25 -0
  434. package/dist/utils/number.js +59 -0
  435. package/dist/utils/number.js.map +1 -0
  436. package/dist/utils/parse-calendar-identifier.d.ts +5 -0
  437. package/dist/utils/parse-calendar-identifier.js +31 -0
  438. package/dist/utils/parse-calendar-identifier.js.map +1 -0
  439. package/dist/utils/require-value.d.ts +4 -0
  440. package/dist/utils/require-value.js +10 -0
  441. package/dist/utils/require-value.js.map +1 -0
  442. package/dist/virtualizer/create-virtualizer-state.d.ts +44 -0
  443. package/dist/virtualizer/create-virtualizer-state.js +92 -0
  444. package/dist/virtualizer/create-virtualizer-state.js.map +1 -0
  445. package/dist/virtualizer/layout-info.d.ts +94 -0
  446. package/dist/virtualizer/layout-info.js +118 -0
  447. package/dist/virtualizer/layout-info.js.map +1 -0
  448. package/dist/virtualizer/layout.d.ts +91 -0
  449. package/dist/virtualizer/layout.js +71 -0
  450. package/dist/virtualizer/layout.js.map +1 -0
  451. package/dist/virtualizer/overscan-manager.d.ts +25 -0
  452. package/dist/virtualizer/overscan-manager.js +46 -0
  453. package/dist/virtualizer/overscan-manager.js.map +1 -0
  454. package/dist/virtualizer/point.d.ts +36 -0
  455. package/dist/virtualizer/point.js +48 -0
  456. package/dist/virtualizer/point.js.map +1 -0
  457. package/dist/virtualizer/rect.d.ts +103 -0
  458. package/dist/virtualizer/rect.js +156 -0
  459. package/dist/virtualizer/rect.js.map +1 -0
  460. package/dist/virtualizer/reusable-view.d.ts +51 -0
  461. package/dist/virtualizer/reusable-view.js +81 -0
  462. package/dist/virtualizer/reusable-view.js.map +1 -0
  463. package/dist/virtualizer/scroll-anchor.d.ts +98 -0
  464. package/dist/virtualizer/scroll-anchor.js +150 -0
  465. package/dist/virtualizer/scroll-anchor.js.map +1 -0
  466. package/dist/virtualizer/size.d.ts +34 -0
  467. package/dist/virtualizer/size.js +46 -0
  468. package/dist/virtualizer/size.js.map +1 -0
  469. package/dist/virtualizer/types.d.ts +47 -0
  470. package/dist/virtualizer/types.js +16 -0
  471. package/dist/virtualizer/utils.d.ts +19 -0
  472. package/dist/virtualizer/utils.js +27 -0
  473. package/dist/virtualizer/utils.js.map +1 -0
  474. package/dist/virtualizer/virtualizer.d.ts +99 -0
  475. package/dist/virtualizer/virtualizer.js +314 -0
  476. package/dist/virtualizer/virtualizer.js.map +1 -0
  477. package/package.json +174 -4
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright 2024 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ /*
13
+ * Derived from Adobe React Spectrum: packages/react-stately/src/autocomplete/useAutocompleteState.ts.
14
+ * Modified for Solid Aria: adapted state, collection descriptors, imports, and APIs for Solid 2.
15
+ * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.
16
+ */
17
+ import { Element } from "solid-js";
18
+ export interface AutocompleteState {
19
+ /** The current value of the autocomplete input. */
20
+ inputValue: string;
21
+ /** Sets the value of the autocomplete input. */
22
+ setInputValue: (value: string) => void;
23
+ /** The id of the current aria-activedescendant of the autocomplete input. */
24
+ focusedNodeId: string | null;
25
+ /** Sets the id of the current aria-activedescendant of the autocomplete input. */
26
+ setFocusedNodeId: (value: string | null) => void;
27
+ }
28
+ export interface AutocompleteProps {
29
+ /** The value of the autocomplete input (controlled). */
30
+ inputValue?: string;
31
+ /** The default value of the autocomplete input (uncontrolled). */
32
+ defaultInputValue?: string;
33
+ /** Handler that is called when the autocomplete input value changes. */
34
+ onInputChange?: (value: string) => void;
35
+ /**
36
+ * The children wrapped by the autocomplete. Consists of at least an input element and a
37
+ * collection element to filter.
38
+ */
39
+ children: Element;
40
+ }
41
+ export type AutocompleteStateOptions = Omit<AutocompleteProps, "children">;
42
+ /**
43
+ * Provides state management for an autocomplete component.
44
+ */
45
+ export declare function createAutocompleteState(props: AutocompleteStateOptions): AutocompleteState;
46
+ //# sourceMappingURL=create-autocomplete-state.d.ts.map
@@ -0,0 +1,41 @@
1
+ /*
2
+ * Copyright 2024 Adobe. All rights reserved.
3
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License. You may obtain a copy
5
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ *
7
+ * Unless required by applicable law or agreed to in writing, software distributed under
8
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ * OF ANY KIND, either express or implied. See the License for the specific language
10
+ * governing permissions and limitations under the License.
11
+ */
12
+ /*
13
+ * Derived from Adobe React Spectrum: packages/react-stately/src/autocomplete/useAutocompleteState.ts.
14
+ * Modified for Solid Aria: adapted state, collection descriptors, imports, and APIs for Solid 2.
15
+ * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.
16
+ */
17
+ import { createControlledSignal } from "../utils/create-controlled-signal.js";
18
+ import { createSignal, untrack } from "solid-js";
19
+ // src/autocomplete/create-autocomplete-state.ts
20
+ /**
21
+ * Provides state management for an autocomplete component.
22
+ */
23
+ function createAutocompleteState(props) {
24
+ const [focusedNodeId, setFocusedNodeId] = createSignal(null);
25
+ const [inputValue, setInputValue] = createControlledSignal(() => props.inputValue, untrack(() => props.defaultInputValue) ?? "", (value) => props.onInputChange?.(value));
26
+ return {
27
+ get focusedNodeId() {
28
+ return focusedNodeId();
29
+ },
30
+ get inputValue() {
31
+ return inputValue();
32
+ },
33
+ setFocusedNodeId(value) {
34
+ setFocusedNodeId(value);
35
+ },
36
+ setInputValue
37
+ };
38
+ }
39
+ export { createAutocompleteState };
40
+
41
+ //# sourceMappingURL=create-autocomplete-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-autocomplete-state.js","names":[],"sources":["../../src/autocomplete/create-autocomplete-state.ts"],"sourcesContent":["/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n/*\n * Derived from Adobe React Spectrum: packages/react-stately/src/autocomplete/useAutocompleteState.ts.\n * Modified for Solid Aria: adapted state, collection descriptors, imports, and APIs for Solid 2.\n * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.\n */\n\nimport type { Element as SolidElement } from \"solid-js\";\nimport { createSignal, untrack } from \"solid-js\";\n\nimport { createControlledSignal } from \"../utils/create-controlled-signal\";\n\nexport interface AutocompleteState {\n /** The current value of the autocomplete input. */\n inputValue: string;\n /** Sets the value of the autocomplete input. */\n setInputValue: (value: string) => void;\n /** The id of the current aria-activedescendant of the autocomplete input. */\n focusedNodeId: string | null;\n /** Sets the id of the current aria-activedescendant of the autocomplete input. */\n setFocusedNodeId: (value: string | null) => void;\n}\n\nexport interface AutocompleteProps {\n /** The value of the autocomplete input (controlled). */\n inputValue?: string;\n /** The default value of the autocomplete input (uncontrolled). */\n defaultInputValue?: string;\n /** Handler that is called when the autocomplete input value changes. */\n onInputChange?: (value: string) => void;\n /**\n * The children wrapped by the autocomplete. Consists of at least an input element and a\n * collection element to filter.\n */\n children: SolidElement;\n}\n\n// Emulate our other stately hooks which accept all \"base\" props even if not used\nexport type AutocompleteStateOptions = Omit<AutocompleteProps, \"children\">;\n\n/**\n * Provides state management for an autocomplete component.\n */\nexport function createAutocompleteState(\n props: AutocompleteStateOptions\n): AutocompleteState {\n const [focusedNodeId, setFocusedNodeId] = createSignal<string | null>(null);\n\n const [inputValue, setInputValue] = createControlledSignal(\n () => props.inputValue,\n untrack(() => props.defaultInputValue) ?? \"\",\n (value) => props.onInputChange?.(value)\n );\n\n return {\n get focusedNodeId() {\n return focusedNodeId();\n },\n get inputValue() {\n return inputValue();\n },\n setFocusedNodeId(value: string | null) {\n setFocusedNodeId(value);\n },\n setInputValue,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAqDA,SAAgB,wBACd,OACmB;CACnB,MAAM,CAAC,eAAe,oBAAoB,aAA4B,IAAI;CAE1E,MAAM,CAAC,YAAY,iBAAiB,6BAC5B,MAAM,YACZ,cAAc,MAAM,iBAAiB,KAAK,KACzC,UAAU,MAAM,gBAAgB,KAAK,CACxC;CAEA,OAAO;EACL,IAAI,gBAAgB;GAClB,OAAO,cAAc;EACvB;EACA,IAAI,aAAa;GACf,OAAO,WAAW;EACpB;EACA,iBAAiB,OAAsB;GACrC,iBAAiB,KAAK;EACxB;EACA;CACF;AACF"}
@@ -0,0 +1,62 @@
1
+ /*
2
+ * Copyright 2020 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-stately/src/calendar/useCalendarState.ts.
14
+ * Modified for Solid Aria: adapted state, collection descriptors, imports, and APIs for Solid 2.
15
+ * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.
16
+ */
17
+ import { CalendarPropsBase, CalendarSelectionMode, CalendarState, CalendarValueType, DateValue, MappedDateValue } from "./types.js";
18
+ import { Calendar, CalendarIdentifier, DateDuration } from "@internationalized/date";
19
+ import { ValueBase } from "@solid2-aria/types-shared";
20
+ export interface CalendarProps<T extends DateValue, M extends CalendarSelectionMode = "single"> extends CalendarPropsBase, ValueBase<CalendarValueType<T | null, M>, CalendarValueType<MappedDateValue<T>, M>> {
21
+ /**
22
+ * Whether single or multiple selection is enabled.
23
+ *
24
+ * @default 'single'
25
+ */
26
+ selectionMode?: M;
27
+ /**
28
+ * Callback that is called for each date of the calendar. If it returns true, then the date is
29
+ * unavailable.
30
+ */
31
+ isDateUnavailable?: (date: DateValue) => boolean;
32
+ }
33
+ export interface CalendarStateOptions<T extends DateValue = DateValue, M extends CalendarSelectionMode = "single"> extends CalendarProps<T, M> {
34
+ /** The locale to display and edit the value according to. */
35
+ locale: string;
36
+ /**
37
+ * A function that creates a [Calendar](../internationalized/date/Calendar.html)
38
+ * object for a given calendar identifier. Such a function may be imported from the
39
+ * `@internationalized/date` package, or manually implemented to include support for
40
+ * only certain calendars.
41
+ */
42
+ createCalendar: (name: CalendarIdentifier) => Calendar;
43
+ /**
44
+ * The amount of days that will be displayed at once. This affects how pagination works.
45
+ *
46
+ * @default { months: 1 }
47
+ */
48
+ visibleDuration?: DateDuration;
49
+ /**
50
+ * Determines the alignment of the visible months on initial render based on the current selection
51
+ * or current date if there is no selection.
52
+ *
53
+ * @default 'center'
54
+ */
55
+ selectionAlignment?: "start" | "center" | "end";
56
+ }
57
+ /**
58
+ * Provides state management for a calendar component.
59
+ * A calendar displays one or more date grids and allows users to select a single date.
60
+ */
61
+ export declare function createCalendarState<T extends DateValue = DateValue, M extends CalendarSelectionMode = "single">(props: CalendarStateOptions<T, M>): CalendarState<M>;
62
+ //# sourceMappingURL=create-calendar-state.d.ts.map
@@ -0,0 +1,357 @@
1
+ /*
2
+ * Copyright 2020 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-stately/src/calendar/useCalendarState.ts.
14
+ * Modified for Solid Aria: adapted state, collection descriptors, imports, and APIs for Solid 2.
15
+ * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.
16
+ */
17
+ import { createControlledSignal } from "../utils/create-controlled-signal.js";
18
+ import { getLegacyValidationState } from "../utils/legacy-props.js";
19
+ import { parseCalendarIdentifier } from "../utils/parse-calendar-identifier.js";
20
+ import { alignCenter, alignEnd, alignStart, constrainStart, constrainValue, isEqualDuration, isInvalid, previousAvailableDate } from "./utils.js";
21
+ import { createMemo, createRenderEffect, createSignal, untrack } from "solid-js";
22
+ import { CalendarDate, DateFormatter, GregorianCalendar, endOfMonth, endOfWeek, getDayOfWeek, getWeeksInMonth, isEqualCalendar, isSameDay, minDate, startOfMonth, startOfWeek, toCalendar, toCalendarDate, today } from "@internationalized/date";
23
+ // src/calendar/create-calendar-state.ts
24
+ /**
25
+ * Provides state management for a calendar component.
26
+ * A calendar displays one or more date grids and allows users to select a single date.
27
+ */
28
+ function createCalendarState(props) {
29
+ const defaultFormatter = createMemo(() => new DateFormatter(props.locale));
30
+ const resolvedOptions = createMemo(() => defaultFormatter().resolvedOptions());
31
+ const locale = createMemo(() => props.locale);
32
+ const createCalendar = createMemo(() => props.createCalendar);
33
+ const visibleDuration = createMemo(() => props.visibleDuration ?? { months: 1 });
34
+ const minValue = createMemo(() => props.minValue);
35
+ const maxValue = createMemo(() => props.maxValue);
36
+ const selectionAlignment = createMemo(() => props.selectionAlignment ?? "center");
37
+ const isDateUnavailable = createMemo(() => props.isDateUnavailable);
38
+ const pageBehavior = createMemo(() => props.pageBehavior ?? "visible");
39
+ const selectionMode = createMemo(() => props.selectionMode ?? "single");
40
+ const firstDayOfWeek = createMemo(() => props.firstDayOfWeek);
41
+ const weeksInMonth = createMemo(() => props.weeksInMonth);
42
+ const calendar = createMemo(() => createCalendar()(parseCalendarIdentifier(resolvedOptions().calendar)));
43
+ const [value, setControlledValue] = createControlledSignal(() => props.value, untrack(() => props.defaultValue) ?? null, (v) => props.onChange?.(v));
44
+ const calendarDateValue = createMemo(() => {
45
+ const currentValue = value();
46
+ if (Array.isArray(currentValue)) return currentValue.map((localValue) => toCalendar(toCalendarDate(localValue), calendar()));
47
+ return currentValue ? toCalendar(toCalendarDate(currentValue), calendar()) : null;
48
+ });
49
+ const timeZone = createMemo(() => {
50
+ const currentValue = value();
51
+ const val = Array.isArray(currentValue) ? currentValue[0] : currentValue;
52
+ return val && "timeZone" in val ? val.timeZone : resolvedOptions().timeZone;
53
+ });
54
+ const focusedCalendarDate = createMemo(() => props.focusedValue ? constrainValue(toCalendar(toCalendarDate(props.focusedValue), calendar()), minValue(), maxValue()) : void 0);
55
+ const defaultFocusedCalendarDate = createMemo(() => {
56
+ const currentCalendarDateValue = calendarDateValue();
57
+ if (props.defaultFocusedValue) return constrainValue(toCalendar(toCalendarDate(props.defaultFocusedValue), calendar()), minValue(), maxValue());
58
+ if (currentCalendarDateValue && (!Array.isArray(currentCalendarDateValue) || currentCalendarDateValue.length > 0)) return constrainValue((Array.isArray(currentCalendarDateValue) ? currentCalendarDateValue[0] : currentCalendarDateValue) ?? toCalendar(today(timeZone()), calendar()), minValue(), maxValue());
59
+ return constrainValue(toCalendar(today(timeZone()), calendar()), minValue(), maxValue());
60
+ });
61
+ const [focusedDate, setFocusedDate] = createControlledSignal(focusedCalendarDate, untrack(defaultFocusedCalendarDate), (v) => props.onFocusChange?.(v));
62
+ const getStartDate = () => {
63
+ const alignment = selectionAlignment();
64
+ let align = alignCenter;
65
+ if (alignment === "start") align = alignStart;
66
+ if (alignment === "end") align = alignEnd;
67
+ return align(focusedDate(), visibleDuration(), locale(), minValue(), maxValue());
68
+ };
69
+ const [startDate, setStartDate] = createSignal(untrack(getStartDate));
70
+ const [isFocused, setFocused] = createSignal(untrack(() => props.autoFocus === true));
71
+ const endDate = createMemo(() => {
72
+ const duration = { ...visibleDuration() };
73
+ if (duration.days !== void 0 && duration.days !== 0 && !Number.isNaN(duration.days)) duration.days -= 1;
74
+ else duration.days = -1;
75
+ return startDate().add(duration);
76
+ });
77
+ let lastVisibleDuration = untrack(visibleDuration);
78
+ let lastCalendar = untrack(calendar);
79
+ createRenderEffect(() => {
80
+ const duration = visibleDuration();
81
+ const currentCalendar = calendar();
82
+ const originalFocus = focusedDate();
83
+ const focus = constrainValue(toCalendar(originalFocus, currentCalendar), minValue(), maxValue());
84
+ let start = startDate();
85
+ if (!isEqualDuration(duration, lastVisibleDuration)) start = getStartDate();
86
+ if (!isEqualCalendar(currentCalendar, lastCalendar)) start = alignCenter(focus, duration, locale(), minValue(), maxValue());
87
+ const end = start.add({
88
+ ...duration,
89
+ days: (duration.days ?? 0) - 1
90
+ });
91
+ if (focus.compare(start) < 0) start = alignEnd(focus, duration, locale(), minValue(), maxValue());
92
+ else if (focus.compare(end) > 0) start = alignStart(focus, duration, locale(), minValue(), maxValue());
93
+ return {
94
+ currentCalendar,
95
+ duration,
96
+ focus,
97
+ start,
98
+ updateFocus: !isSameDay(focus, originalFocus) || !isEqualCalendar(focus.calendar, originalFocus.calendar),
99
+ updateStart: !isSameDay(start, startDate()) || !isEqualCalendar(start.calendar, startDate().calendar)
100
+ };
101
+ }, (next) => {
102
+ lastVisibleDuration = next.duration;
103
+ lastCalendar = next.currentCalendar;
104
+ if (next.updateFocus) setFocusedDate(next.focus);
105
+ if (next.updateStart) setStartDate(next.start);
106
+ });
107
+ function focusCell(initialDate) {
108
+ let date = initialDate;
109
+ date = constrainValue(date, minValue(), maxValue());
110
+ setFocusedDate(date);
111
+ }
112
+ function normalizeValue(newValue) {
113
+ const currentIsDateUnavailable = isDateUnavailable();
114
+ const currentValue = value();
115
+ const constrained = constrainValue(newValue, minValue(), maxValue());
116
+ const lowerBound = minValue() ?? minDate(constrained, startDate());
117
+ const prev = previousAvailableDate(constrained, lowerBound, currentIsDateUnavailable);
118
+ if (!prev) return null;
119
+ const baseValue = Array.isArray(currentValue) ? currentValue[0] : currentValue;
120
+ const calendarValue = toCalendar(prev, baseValue?.calendar ?? new GregorianCalendar());
121
+ if (baseValue && "hour" in baseValue) return baseValue.set(calendarValue);
122
+ return calendarValue;
123
+ }
124
+ function setValue(newValue) {
125
+ if (!(props.isDisabled === true) && !(props.isReadOnly === true)) {
126
+ if (newValue === null) {
127
+ setControlledValue(selectionMode() === "multiple" ? [] : null);
128
+ return;
129
+ }
130
+ if (newValue instanceof CalendarDate) {
131
+ const localValue = normalizeValue(newValue);
132
+ if (localValue) setControlledValue(localValue);
133
+ } else setControlledValue(newValue.filter((date) => date !== null).map(normalizeValue).filter((date) => date !== null));
134
+ }
135
+ }
136
+ const isUnavailable = createMemo(() => {
137
+ const currentCalendarDateValue = calendarDateValue();
138
+ const currentIsDateUnavailable = isDateUnavailable();
139
+ if (!currentCalendarDateValue) return false;
140
+ if (Array.isArray(currentCalendarDateValue)) return currentCalendarDateValue.some((date) => {
141
+ return isDateUnavailable()?.(date) === true || isInvalid(date, minValue(), maxValue());
142
+ });
143
+ return currentIsDateUnavailable?.(currentCalendarDateValue) === true || isInvalid(currentCalendarDateValue, minValue(), maxValue());
144
+ });
145
+ const isValueInvalid = createMemo(() => props.isInvalid === true || getLegacyValidationState(props) === "invalid" || isUnavailable());
146
+ const validationState = createMemo(() => isValueInvalid() ? "invalid" : null);
147
+ const pageDuration = createMemo(() => {
148
+ const currentVisibleDuration = visibleDuration();
149
+ if (pageBehavior() === "visible") return currentVisibleDuration;
150
+ return unitDuration(currentVisibleDuration);
151
+ });
152
+ return {
153
+ focusNextDay() {
154
+ focusCell(focusedDate().add({ days: 1 }));
155
+ },
156
+ focusNextPage() {
157
+ const currentFocusedDate = focusedDate();
158
+ const start = startDate().add(pageDuration());
159
+ setFocusedDate(constrainValue(currentFocusedDate.add(pageDuration()), minValue(), maxValue()));
160
+ setStartDate(alignStart(constrainStart(currentFocusedDate, start, pageDuration(), locale(), minValue(), maxValue()), pageDuration(), locale()));
161
+ },
162
+ focusNextRow() {
163
+ const currentVisibleDuration = visibleDuration();
164
+ const currentFocusedDate = focusedDate();
165
+ if (currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days)) this.focusNextPage();
166
+ else if (currentVisibleDuration.weeks !== void 0 && currentVisibleDuration.weeks !== 0 && !Number.isNaN(currentVisibleDuration.weeks) || currentVisibleDuration.months !== void 0 && currentVisibleDuration.months !== 0 && !Number.isNaN(currentVisibleDuration.months) || currentVisibleDuration.years !== void 0 && currentVisibleDuration.years !== 0 && !Number.isNaN(currentVisibleDuration.years)) focusCell(currentFocusedDate.add({ weeks: 1 }));
167
+ },
168
+ focusNextSection(larger) {
169
+ const currentVisibleDuration = visibleDuration();
170
+ const currentFocusedDate = focusedDate();
171
+ if (!(larger === true) && (currentVisibleDuration.days === void 0 || currentVisibleDuration.days === 0 || Number.isNaN(currentVisibleDuration.days))) {
172
+ focusCell(currentFocusedDate.add(unitDuration(currentVisibleDuration)));
173
+ return;
174
+ }
175
+ if (currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days)) this.focusNextPage();
176
+ else if (currentVisibleDuration.weeks !== void 0 && currentVisibleDuration.weeks !== 0 && !Number.isNaN(currentVisibleDuration.weeks)) focusCell(currentFocusedDate.add({ months: 1 }));
177
+ else if (currentVisibleDuration.months !== void 0 && currentVisibleDuration.months !== 0 && !Number.isNaN(currentVisibleDuration.months) || currentVisibleDuration.years !== void 0 && currentVisibleDuration.years !== 0 && !Number.isNaN(currentVisibleDuration.years)) focusCell(currentFocusedDate.add({ years: 1 }));
178
+ },
179
+ focusPreviousDay() {
180
+ focusCell(focusedDate().subtract({ days: 1 }));
181
+ },
182
+ focusPreviousPage() {
183
+ const currentFocusedDate = focusedDate();
184
+ const start = startDate().subtract(pageDuration());
185
+ setFocusedDate(constrainValue(currentFocusedDate.subtract(pageDuration()), minValue(), maxValue()));
186
+ setStartDate(alignStart(constrainStart(currentFocusedDate, start, pageDuration(), locale(), minValue(), maxValue()), pageDuration(), locale()));
187
+ },
188
+ focusPreviousRow() {
189
+ const currentVisibleDuration = visibleDuration();
190
+ const currentFocusedDate = focusedDate();
191
+ if (currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days)) this.focusPreviousPage();
192
+ else if (currentVisibleDuration.weeks !== void 0 && currentVisibleDuration.weeks !== 0 && !Number.isNaN(currentVisibleDuration.weeks) || currentVisibleDuration.months !== void 0 && currentVisibleDuration.months !== 0 && !Number.isNaN(currentVisibleDuration.months) || currentVisibleDuration.years !== void 0 && currentVisibleDuration.years !== 0 && !Number.isNaN(currentVisibleDuration.years)) focusCell(currentFocusedDate.subtract({ weeks: 1 }));
193
+ },
194
+ focusPreviousSection(larger) {
195
+ const currentVisibleDuration = visibleDuration();
196
+ const currentFocusedDate = focusedDate();
197
+ if (!(larger === true) && (currentVisibleDuration.days === void 0 || currentVisibleDuration.days === 0 || Number.isNaN(currentVisibleDuration.days))) {
198
+ focusCell(currentFocusedDate.subtract(unitDuration(currentVisibleDuration)));
199
+ return;
200
+ }
201
+ if (currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days)) this.focusPreviousPage();
202
+ else if (currentVisibleDuration.weeks !== void 0 && currentVisibleDuration.weeks !== 0 && !Number.isNaN(currentVisibleDuration.weeks)) focusCell(currentFocusedDate.subtract({ months: 1 }));
203
+ else if (currentVisibleDuration.months !== void 0 && currentVisibleDuration.months !== 0 && !Number.isNaN(currentVisibleDuration.months) || currentVisibleDuration.years !== void 0 && currentVisibleDuration.years !== 0 && !Number.isNaN(currentVisibleDuration.years)) focusCell(currentFocusedDate.subtract({ years: 1 }));
204
+ },
205
+ focusSectionEnd() {
206
+ const currentVisibleDuration = visibleDuration();
207
+ const currentFocusedDate = focusedDate();
208
+ if (currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days)) focusCell(endDate());
209
+ else if (currentVisibleDuration.weeks !== void 0 && currentVisibleDuration.weeks !== 0 && !Number.isNaN(currentVisibleDuration.weeks)) focusCell(endOfWeek(currentFocusedDate, locale()));
210
+ else if (currentVisibleDuration.months !== void 0 && currentVisibleDuration.months !== 0 && !Number.isNaN(currentVisibleDuration.months) || currentVisibleDuration.years !== void 0 && currentVisibleDuration.years !== 0 && !Number.isNaN(currentVisibleDuration.years)) focusCell(endOfMonth(currentFocusedDate));
211
+ },
212
+ focusSectionStart() {
213
+ const currentVisibleDuration = visibleDuration();
214
+ const currentFocusedDate = focusedDate();
215
+ if (currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days)) focusCell(startDate());
216
+ else if (currentVisibleDuration.weeks !== void 0 && currentVisibleDuration.weeks !== 0 && !Number.isNaN(currentVisibleDuration.weeks)) focusCell(startOfWeek(currentFocusedDate, locale()));
217
+ else if (currentVisibleDuration.months !== void 0 && currentVisibleDuration.months !== 0 && !Number.isNaN(currentVisibleDuration.months) || currentVisibleDuration.years !== void 0 && currentVisibleDuration.years !== 0 && !Number.isNaN(currentVisibleDuration.years)) focusCell(startOfMonth(currentFocusedDate));
218
+ },
219
+ get focusedDate() {
220
+ return focusedDate();
221
+ },
222
+ getDatesInWeek(weekIndex, from = startDate()) {
223
+ const currentVisibleDuration = visibleDuration();
224
+ let date = from.add({ weeks: weekIndex });
225
+ const dates = [];
226
+ const days = currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days) && currentVisibleDuration.days < 7 ? currentVisibleDuration.days : 7;
227
+ if (days === 7) {
228
+ date = startOfWeek(date, locale(), firstDayOfWeek());
229
+ const dayOfWeek = getDayOfWeek(date, locale(), firstDayOfWeek());
230
+ for (let i = 0; i < dayOfWeek; i += 1) dates.push(null);
231
+ }
232
+ while (dates.length < days) {
233
+ dates.push(date);
234
+ const nextDate = date.add({ days: 1 });
235
+ if (isSameDay(date, nextDate)) break;
236
+ date = nextDate;
237
+ }
238
+ while (dates.length < days) dates.push(null);
239
+ return dates;
240
+ },
241
+ getWeeksInMonth(date = startDate()) {
242
+ const currentVisibleDuration = visibleDuration();
243
+ let weeks = weeksInMonth() ?? getWeeksInMonth(date, locale(), firstDayOfWeek());
244
+ if (currentVisibleDuration.weeks !== void 0 && currentVisibleDuration.weeks !== 0 && !Number.isNaN(currentVisibleDuration.weeks) || currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days)) {
245
+ weeks = currentVisibleDuration.weeks ?? 0;
246
+ if (currentVisibleDuration.days !== void 0 && currentVisibleDuration.days !== 0 && !Number.isNaN(currentVisibleDuration.days)) weeks += Math.ceil(currentVisibleDuration.days / 7);
247
+ }
248
+ return weeks;
249
+ },
250
+ isCellDisabled(date) {
251
+ return props.isDisabled === true || date.compare(startDate()) < 0 || date.compare(endDate()) > 0 || this.isInvalid(date);
252
+ },
253
+ isCellFocused(date) {
254
+ const currentFocusedDate = focusedDate();
255
+ return isFocused() && Boolean(currentFocusedDate) && isSameDay(date, currentFocusedDate);
256
+ },
257
+ isCellUnavailable(date) {
258
+ return props.isDateUnavailable ? props.isDateUnavailable(date) : false;
259
+ },
260
+ get isDisabled() {
261
+ return props.isDisabled ?? false;
262
+ },
263
+ get isFocused() {
264
+ return isFocused();
265
+ },
266
+ isInvalid(date) {
267
+ return isInvalid(date, minValue(), maxValue());
268
+ },
269
+ isNextVisibleRangeInvalid() {
270
+ const next = endDate().add({ days: 1 });
271
+ return isSameDay(next, endDate()) || this.isInvalid(next);
272
+ },
273
+ isPreviousVisibleRangeInvalid() {
274
+ const prev = startDate().subtract({ days: 1 });
275
+ return isSameDay(prev, startDate()) || this.isInvalid(prev);
276
+ },
277
+ get isReadOnly() {
278
+ return props.isReadOnly ?? false;
279
+ },
280
+ isSelected(date) {
281
+ const currentCalendarDateValue = calendarDateValue();
282
+ if (!currentCalendarDateValue || this.isCellDisabled(date) || this.isCellUnavailable(date)) return false;
283
+ return Array.isArray(currentCalendarDateValue) ? currentCalendarDateValue.some((localValue) => isSameDay(localValue, date)) : isSameDay(date, currentCalendarDateValue);
284
+ },
285
+ get isValueInvalid() {
286
+ return isValueInvalid();
287
+ },
288
+ get maxValue() {
289
+ return maxValue();
290
+ },
291
+ get minValue() {
292
+ return minValue();
293
+ },
294
+ selectDate(date) {
295
+ const currentValue = value();
296
+ if (props.isDisabled === true || props.isReadOnly === true) return;
297
+ if (selectionMode() === "multiple" && date !== null && date !== void 0) {
298
+ const newDate = normalizeValue(date);
299
+ if (!newDate) return;
300
+ let baseValue = [];
301
+ if (Array.isArray(currentValue)) baseValue = currentValue;
302
+ else if (currentValue !== null && currentValue !== void 0) baseValue = [currentValue];
303
+ const index = baseValue.findIndex((localValue) => isSameDay(localValue, newDate));
304
+ const newValue = index === -1 ? [...baseValue, newDate] : [...baseValue.slice(0, index), ...baseValue.slice(index + 1)];
305
+ setControlledValue(newValue);
306
+ } else setValue(date);
307
+ },
308
+ selectFocusedDate() {
309
+ const currentIsDateUnavailable = isDateUnavailable();
310
+ const currentFocusedDate = focusedDate();
311
+ if (!currentIsDateUnavailable || !currentIsDateUnavailable(currentFocusedDate)) this.selectDate(currentFocusedDate);
312
+ },
313
+ get selectionMode() {
314
+ return selectionMode();
315
+ },
316
+ setFocused(focused) {
317
+ setFocused(focused);
318
+ },
319
+ setFocusedDate(date) {
320
+ focusCell(date);
321
+ },
322
+ get setValue() {
323
+ return setValue;
324
+ },
325
+ get timeZone() {
326
+ return timeZone();
327
+ },
328
+ get validationState() {
329
+ return validationState();
330
+ },
331
+ get value() {
332
+ return calendarDateValue();
333
+ },
334
+ get visibleDuration() {
335
+ return visibleDuration();
336
+ },
337
+ get visibleRange() {
338
+ return {
339
+ end: endDate(),
340
+ start: startDate()
341
+ };
342
+ }
343
+ };
344
+ }
345
+ function unitDuration(duration) {
346
+ const unit = { ...duration };
347
+ for (const key of [
348
+ "years",
349
+ "months",
350
+ "weeks",
351
+ "days"
352
+ ]) if (duration[key] !== void 0) unit[key] = 1;
353
+ return unit;
354
+ }
355
+ export { createCalendarState };
356
+
357
+ //# sourceMappingURL=create-calendar-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-calendar-state.js","names":[],"sources":["../../src/calendar/create-calendar-state.ts"],"sourcesContent":["/*\n * Copyright 2020 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-stately/src/calendar/useCalendarState.ts.\n * Modified for Solid Aria: adapted state, collection descriptors, imports, and APIs for Solid 2.\n * Licensed under Apache-2.0. See LICENSES/Apache-2.0.txt and NOTICE.txt at the repository root.\n */\n\nimport {\n CalendarDate,\n DateFormatter,\n endOfMonth,\n endOfWeek,\n getDayOfWeek,\n getWeeksInMonth,\n GregorianCalendar,\n isEqualCalendar,\n isSameDay,\n minDate,\n startOfMonth,\n startOfWeek,\n toCalendar,\n toCalendarDate,\n today,\n} from \"@internationalized/date\";\nimport type {\n Calendar,\n CalendarIdentifier,\n DateDuration,\n} from \"@internationalized/date\";\nimport type { ValueBase } from \"@solid2-aria/types-shared\";\nimport {\n createMemo,\n createSignal,\n createRenderEffect,\n untrack,\n} from \"solid-js\";\n\nimport { createControlledSignal } from \"../utils/create-controlled-signal\";\nimport { getLegacyValidationState } from \"../utils/legacy-props\";\nimport { parseCalendarIdentifier } from \"../utils/parse-calendar-identifier\";\nimport type {\n CalendarPropsBase,\n CalendarSelectionMode,\n CalendarState,\n CalendarValueType,\n DateValue,\n MappedDateValue,\n} from \"./types\";\nimport {\n alignCenter,\n alignEnd,\n alignStart,\n constrainStart,\n constrainValue,\n isEqualDuration,\n isInvalid,\n previousAvailableDate,\n} from \"./utils\";\n\nexport interface CalendarProps<\n T extends DateValue,\n M extends CalendarSelectionMode = \"single\",\n>\n extends\n CalendarPropsBase,\n ValueBase<\n CalendarValueType<T | null, M>,\n CalendarValueType<MappedDateValue<T>, M>\n > {\n /**\n * Whether single or multiple selection is enabled.\n *\n * @default 'single'\n */\n selectionMode?: M;\n /**\n * Callback that is called for each date of the calendar. If it returns true, then the date is\n * unavailable.\n */\n isDateUnavailable?: (date: DateValue) => boolean;\n}\n\nexport interface CalendarStateOptions<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = \"single\",\n> extends CalendarProps<T, M> {\n /** The locale to display and edit the value according to. */\n locale: string;\n /**\n * A function that creates a [Calendar](../internationalized/date/Calendar.html)\n * object for a given calendar identifier. Such a function may be imported from the\n * `@internationalized/date` package, or manually implemented to include support for\n * only certain calendars.\n */\n createCalendar: (name: CalendarIdentifier) => Calendar;\n /**\n * The amount of days that will be displayed at once. This affects how pagination works.\n *\n * @default { months: 1 }\n */\n visibleDuration?: DateDuration;\n /**\n * Determines the alignment of the visible months on initial render based on the current selection\n * or current date if there is no selection.\n *\n * @default 'center'\n */\n selectionAlignment?: \"start\" | \"center\" | \"end\";\n}\n\n/**\n * Provides state management for a calendar component.\n * A calendar displays one or more date grids and allows users to select a single date.\n */\nexport function createCalendarState<\n T extends DateValue = DateValue,\n M extends CalendarSelectionMode = \"single\",\n>(props: CalendarStateOptions<T, M>): CalendarState<M> {\n const defaultFormatter = createMemo(() => new DateFormatter(props.locale));\n\n const resolvedOptions = createMemo(() =>\n defaultFormatter().resolvedOptions()\n );\n\n const locale = createMemo(() => props.locale);\n const createCalendar = createMemo(() => props.createCalendar);\n\n const visibleDuration = createMemo(\n () => props.visibleDuration ?? { months: 1 }\n );\n\n const minValue = createMemo(() => props.minValue);\n const maxValue = createMemo(() => props.maxValue);\n\n const selectionAlignment = createMemo(\n () => props.selectionAlignment ?? \"center\"\n );\n\n const isDateUnavailable = createMemo(() => props.isDateUnavailable);\n const pageBehavior = createMemo(() => props.pageBehavior ?? \"visible\");\n\n const selectionMode = createMemo(\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: the default mode is single; explicit modes retain their M parameter.\n () => props.selectionMode ?? (\"single\" as M)\n );\n\n const firstDayOfWeek = createMemo(() => props.firstDayOfWeek);\n const weeksInMonth = createMemo(() => props.weeksInMonth);\n\n const calendar = createMemo(() =>\n createCalendar()(parseCalendarIdentifier(resolvedOptions().calendar))\n );\n\n const [value, setControlledValue] = createControlledSignal<T | T[] | null>(\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: selectionMode determines whether these typed props hold one date or an array; the array is never mutated.\n () => props.value as T | T[] | null | undefined,\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: selectionMode determines whether these typed props hold one date or an array; the array is never mutated.\n untrack(() => props.defaultValue as T | T[] | null) ?? null,\n (v) =>\n // oxlint-disable-next-line anti-slop/no-chained-type-assertions, typescript/no-unsafe-type-assertion -- SAFETY: values retain the input date class and selection shape; preserve the upstream mapped callback contract when clearing.\n props.onChange?.(v as unknown as CalendarValueType<MappedDateValue<T>, M>)\n );\n\n const calendarDateValue = createMemo(() => {\n const currentValue = value();\n\n if (Array.isArray(currentValue)) {\n return currentValue.map((localValue) =>\n toCalendar(toCalendarDate(localValue), calendar())\n );\n }\n\n return currentValue\n ? toCalendar(toCalendarDate(currentValue), calendar())\n : null;\n });\n\n const timeZone = createMemo(() => {\n const currentValue = value();\n const val = Array.isArray(currentValue) ? currentValue[0] : currentValue;\n\n return val && \"timeZone\" in val ? val.timeZone : resolvedOptions().timeZone;\n });\n\n const focusedCalendarDate = createMemo(() =>\n props.focusedValue\n ? constrainValue(\n toCalendar(toCalendarDate(props.focusedValue), calendar()),\n minValue(),\n maxValue()\n )\n : undefined\n );\n\n const defaultFocusedCalendarDate = createMemo(() => {\n const currentCalendarDateValue = calendarDateValue();\n\n if (props.defaultFocusedValue) {\n return constrainValue(\n toCalendar(toCalendarDate(props.defaultFocusedValue), calendar()),\n minValue(),\n maxValue()\n );\n }\n\n if (\n currentCalendarDateValue &&\n (!Array.isArray(currentCalendarDateValue) ||\n currentCalendarDateValue.length > 0)\n ) {\n return constrainValue(\n (Array.isArray(currentCalendarDateValue)\n ? currentCalendarDateValue[0]\n : currentCalendarDateValue) ??\n toCalendar(today(timeZone()), calendar()),\n minValue(),\n maxValue()\n );\n }\n\n return constrainValue(\n toCalendar(today(timeZone()), calendar()),\n minValue(),\n maxValue()\n );\n });\n\n const [focusedDate, setFocusedDate] = createControlledSignal(\n focusedCalendarDate,\n untrack(defaultFocusedCalendarDate),\n (v) => props.onFocusChange?.(v)\n );\n\n const getStartDate = () => {\n const alignment = selectionAlignment();\n let align = alignCenter;\n\n if (alignment === \"start\") {\n align = alignStart;\n }\n\n if (alignment === \"end\") {\n align = alignEnd;\n }\n\n return align(\n focusedDate(),\n visibleDuration(),\n locale(),\n minValue(),\n maxValue()\n );\n };\n\n const [startDate, setStartDate] = createSignal(untrack(getStartDate));\n\n const [isFocused, setFocused] = createSignal(\n untrack(() => props.autoFocus === true)\n );\n\n const endDate = createMemo(() => {\n const currentVisibleDuration = visibleDuration();\n const duration = { ...currentVisibleDuration };\n\n if (\n duration.days !== undefined &&\n duration.days !== 0 &&\n !Number.isNaN(duration.days)\n ) {\n duration.days -= 1;\n } else {\n duration.days = -1;\n }\n\n return startDate().add(duration);\n });\n\n let lastVisibleDuration = untrack(visibleDuration);\n let lastCalendar = untrack(calendar);\n createRenderEffect(\n () => {\n const duration = visibleDuration();\n const currentCalendar = calendar();\n const originalFocus = focusedDate();\n\n const focus = constrainValue(\n toCalendar(originalFocus, currentCalendar),\n minValue(),\n maxValue()\n );\n\n let start = startDate();\n\n if (!isEqualDuration(duration, lastVisibleDuration)) {\n start = getStartDate();\n }\n\n if (!isEqualCalendar(currentCalendar, lastCalendar)) {\n start = alignCenter(focus, duration, locale(), minValue(), maxValue());\n }\n\n const end = start.add({ ...duration, days: (duration.days ?? 0) - 1 });\n\n if (focus.compare(start) < 0) {\n start = alignEnd(focus, duration, locale(), minValue(), maxValue());\n } else if (focus.compare(end) > 0) {\n start = alignStart(focus, duration, locale(), minValue(), maxValue());\n }\n\n return {\n currentCalendar,\n duration,\n focus,\n start,\n updateFocus:\n !isSameDay(focus, originalFocus) ||\n !isEqualCalendar(focus.calendar, originalFocus.calendar),\n updateStart:\n !isSameDay(start, startDate()) ||\n !isEqualCalendar(start.calendar, startDate().calendar),\n };\n },\n (next) => {\n lastVisibleDuration = next.duration;\n lastCalendar = next.currentCalendar;\n\n if (next.updateFocus) {\n setFocusedDate(next.focus);\n }\n\n if (next.updateStart) {\n setStartDate(next.start);\n }\n }\n );\n\n // Sets focus to a specific cell date\n function focusCell(initialDate: CalendarDate) {\n let date = initialDate;\n date = constrainValue(date, minValue(), maxValue());\n setFocusedDate(date);\n }\n\n function normalizeValue(newValue: CalendarDate) {\n const currentIsDateUnavailable = isDateUnavailable();\n const currentValue = value();\n const constrained = constrainValue(newValue, minValue(), maxValue());\n const lowerBound = minValue() ?? minDate(constrained, startDate());\n\n const prev = previousAvailableDate(\n constrained,\n lowerBound,\n currentIsDateUnavailable\n );\n\n if (!prev) {\n return null;\n }\n\n // The display calendar should not have any effect on the emitted value.\n // Emit dates in the same calendar as the original value, if any, otherwise gregorian.\n const baseValue = Array.isArray(currentValue)\n ? currentValue[0]\n : currentValue;\n\n const calendarValue = toCalendar(\n prev,\n baseValue?.calendar ?? new GregorianCalendar()\n );\n\n // Preserve time if the input value had one.\n if (baseValue && \"hour\" in baseValue) {\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: conversion preserves the input calendar and date class, including time and time zone.\n return baseValue.set(calendarValue) as T;\n }\n\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: conversion preserves the input calendar and date class, including time and time zone.\n return calendarValue as T;\n }\n\n function setValue(\n newValue: CalendarDate | readonly (CalendarDate | null)[] | null\n ) {\n if (!(props.isDisabled === true) && !(props.isReadOnly === true)) {\n if (newValue === null) {\n setControlledValue(selectionMode() === \"multiple\" ? [] : null);\n\n return;\n }\n\n if (newValue instanceof CalendarDate) {\n const localValue = normalizeValue(newValue);\n\n if (localValue) {\n setControlledValue(localValue);\n }\n } else {\n setControlledValue(\n newValue\n .filter((date): date is CalendarDate => date !== null)\n .map(normalizeValue)\n .filter((date): date is T => date !== null)\n );\n }\n }\n }\n\n const isUnavailable = createMemo(() => {\n const currentCalendarDateValue = calendarDateValue();\n const currentIsDateUnavailable = isDateUnavailable();\n\n if (!currentCalendarDateValue) {\n return false;\n }\n\n if (Array.isArray(currentCalendarDateValue)) {\n return currentCalendarDateValue.some((date) => {\n const localCurrentIsDateUnavailable = isDateUnavailable();\n\n return (\n localCurrentIsDateUnavailable?.(date) === true ||\n isInvalid(date, minValue(), maxValue())\n );\n });\n }\n\n return (\n currentIsDateUnavailable?.(currentCalendarDateValue) === true ||\n isInvalid(currentCalendarDateValue, minValue(), maxValue())\n );\n });\n\n const isValueInvalid = createMemo(\n () =>\n props.isInvalid === true ||\n getLegacyValidationState(props) === \"invalid\" ||\n isUnavailable()\n );\n\n const validationState = createMemo(() =>\n isValueInvalid() ? \"invalid\" : null\n );\n\n const pageDuration = createMemo(() => {\n const currentVisibleDuration = visibleDuration();\n\n if (pageBehavior() === \"visible\") {\n return currentVisibleDuration;\n }\n\n return unitDuration(currentVisibleDuration);\n });\n\n return {\n focusNextDay() {\n const currentFocusedDate = focusedDate();\n focusCell(currentFocusedDate.add({ days: 1 }));\n },\n focusNextPage() {\n const currentFocusedDate = focusedDate();\n const start = startDate().add(pageDuration());\n setFocusedDate(\n constrainValue(\n currentFocusedDate.add(pageDuration()),\n minValue(),\n maxValue()\n )\n );\n setStartDate(\n alignStart(\n constrainStart(\n currentFocusedDate,\n start,\n pageDuration(),\n locale(),\n minValue(),\n maxValue()\n ),\n pageDuration(),\n locale()\n )\n );\n },\n focusNextRow() {\n const currentVisibleDuration = visibleDuration();\n const currentFocusedDate = focusedDate();\n\n if (\n currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days)\n ) {\n this.focusNextPage();\n } else if (\n (currentVisibleDuration.weeks !== undefined &&\n currentVisibleDuration.weeks !== 0 &&\n !Number.isNaN(currentVisibleDuration.weeks)) ||\n (currentVisibleDuration.months !== undefined &&\n currentVisibleDuration.months !== 0 &&\n !Number.isNaN(currentVisibleDuration.months)) ||\n (currentVisibleDuration.years !== undefined &&\n currentVisibleDuration.years !== 0 &&\n !Number.isNaN(currentVisibleDuration.years))\n ) {\n focusCell(currentFocusedDate.add({ weeks: 1 }));\n }\n },\n focusNextSection(larger) {\n const currentVisibleDuration = visibleDuration();\n const currentFocusedDate = focusedDate();\n\n if (\n !(larger === true) &&\n (currentVisibleDuration.days === undefined ||\n currentVisibleDuration.days === 0 ||\n Number.isNaN(currentVisibleDuration.days))\n ) {\n focusCell(currentFocusedDate.add(unitDuration(currentVisibleDuration)));\n\n return;\n }\n\n if (\n currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days)\n ) {\n this.focusNextPage();\n } else if (\n currentVisibleDuration.weeks !== undefined &&\n currentVisibleDuration.weeks !== 0 &&\n !Number.isNaN(currentVisibleDuration.weeks)\n ) {\n focusCell(currentFocusedDate.add({ months: 1 }));\n } else if (\n (currentVisibleDuration.months !== undefined &&\n currentVisibleDuration.months !== 0 &&\n !Number.isNaN(currentVisibleDuration.months)) ||\n (currentVisibleDuration.years !== undefined &&\n currentVisibleDuration.years !== 0 &&\n !Number.isNaN(currentVisibleDuration.years))\n ) {\n focusCell(currentFocusedDate.add({ years: 1 }));\n }\n },\n focusPreviousDay() {\n const currentFocusedDate = focusedDate();\n focusCell(currentFocusedDate.subtract({ days: 1 }));\n },\n focusPreviousPage() {\n const currentFocusedDate = focusedDate();\n const start = startDate().subtract(pageDuration());\n setFocusedDate(\n constrainValue(\n currentFocusedDate.subtract(pageDuration()),\n minValue(),\n maxValue()\n )\n );\n setStartDate(\n alignStart(\n constrainStart(\n currentFocusedDate,\n start,\n pageDuration(),\n locale(),\n minValue(),\n maxValue()\n ),\n pageDuration(),\n locale()\n )\n );\n },\n focusPreviousRow() {\n const currentVisibleDuration = visibleDuration();\n const currentFocusedDate = focusedDate();\n\n if (\n currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days)\n ) {\n this.focusPreviousPage();\n } else if (\n (currentVisibleDuration.weeks !== undefined &&\n currentVisibleDuration.weeks !== 0 &&\n !Number.isNaN(currentVisibleDuration.weeks)) ||\n (currentVisibleDuration.months !== undefined &&\n currentVisibleDuration.months !== 0 &&\n !Number.isNaN(currentVisibleDuration.months)) ||\n (currentVisibleDuration.years !== undefined &&\n currentVisibleDuration.years !== 0 &&\n !Number.isNaN(currentVisibleDuration.years))\n ) {\n focusCell(currentFocusedDate.subtract({ weeks: 1 }));\n }\n },\n focusPreviousSection(larger) {\n const currentVisibleDuration = visibleDuration();\n const currentFocusedDate = focusedDate();\n\n if (\n !(larger === true) &&\n (currentVisibleDuration.days === undefined ||\n currentVisibleDuration.days === 0 ||\n Number.isNaN(currentVisibleDuration.days))\n ) {\n focusCell(\n currentFocusedDate.subtract(unitDuration(currentVisibleDuration))\n );\n\n return;\n }\n\n if (\n currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days)\n ) {\n this.focusPreviousPage();\n } else if (\n currentVisibleDuration.weeks !== undefined &&\n currentVisibleDuration.weeks !== 0 &&\n !Number.isNaN(currentVisibleDuration.weeks)\n ) {\n focusCell(currentFocusedDate.subtract({ months: 1 }));\n } else if (\n (currentVisibleDuration.months !== undefined &&\n currentVisibleDuration.months !== 0 &&\n !Number.isNaN(currentVisibleDuration.months)) ||\n (currentVisibleDuration.years !== undefined &&\n currentVisibleDuration.years !== 0 &&\n !Number.isNaN(currentVisibleDuration.years))\n ) {\n focusCell(currentFocusedDate.subtract({ years: 1 }));\n }\n },\n focusSectionEnd() {\n const currentVisibleDuration = visibleDuration();\n const currentFocusedDate = focusedDate();\n\n if (\n currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days)\n ) {\n focusCell(endDate());\n } else if (\n currentVisibleDuration.weeks !== undefined &&\n currentVisibleDuration.weeks !== 0 &&\n !Number.isNaN(currentVisibleDuration.weeks)\n ) {\n focusCell(endOfWeek(currentFocusedDate, locale()));\n } else if (\n (currentVisibleDuration.months !== undefined &&\n currentVisibleDuration.months !== 0 &&\n !Number.isNaN(currentVisibleDuration.months)) ||\n (currentVisibleDuration.years !== undefined &&\n currentVisibleDuration.years !== 0 &&\n !Number.isNaN(currentVisibleDuration.years))\n ) {\n focusCell(endOfMonth(currentFocusedDate));\n }\n },\n focusSectionStart() {\n const currentVisibleDuration = visibleDuration();\n const currentFocusedDate = focusedDate();\n\n if (\n currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days)\n ) {\n focusCell(startDate());\n } else if (\n currentVisibleDuration.weeks !== undefined &&\n currentVisibleDuration.weeks !== 0 &&\n !Number.isNaN(currentVisibleDuration.weeks)\n ) {\n focusCell(startOfWeek(currentFocusedDate, locale()));\n } else if (\n (currentVisibleDuration.months !== undefined &&\n currentVisibleDuration.months !== 0 &&\n !Number.isNaN(currentVisibleDuration.months)) ||\n (currentVisibleDuration.years !== undefined &&\n currentVisibleDuration.years !== 0 &&\n !Number.isNaN(currentVisibleDuration.years))\n ) {\n focusCell(startOfMonth(currentFocusedDate));\n }\n },\n get focusedDate() {\n const currentFocusedDate = focusedDate();\n\n return currentFocusedDate;\n },\n getDatesInWeek(weekIndex, from = startDate()) {\n const currentVisibleDuration = visibleDuration();\n let date = from.add({ weeks: weekIndex });\n const dates: (CalendarDate | null)[] = [];\n\n const days =\n currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days) &&\n currentVisibleDuration.days < 7\n ? currentVisibleDuration.days\n : 7;\n\n if (days === 7) {\n date = startOfWeek(date, locale(), firstDayOfWeek());\n // startOfWeek will clamp dates within the calendar system's valid range, which may\n // start in the middle of a week. In this case, add null placeholders.\n const dayOfWeek = getDayOfWeek(date, locale(), firstDayOfWeek());\n\n for (let i = 0; i < dayOfWeek; i += 1) {\n dates.push(null);\n }\n }\n\n while (dates.length < days) {\n dates.push(date);\n const nextDate = date.add({ days: 1 });\n\n if (isSameDay(date, nextDate)) {\n // If the next day is the same, we have hit the end of the calendar system.\n break;\n }\n\n date = nextDate;\n }\n\n // Add null placeholders if at the end of the calendar system.\n while (dates.length < days) {\n dates.push(null);\n }\n\n return dates;\n },\n getWeeksInMonth(date = startDate()) {\n const currentVisibleDuration = visibleDuration();\n\n let weeks =\n weeksInMonth() ?? getWeeksInMonth(date, locale(), firstDayOfWeek());\n\n if (\n (currentVisibleDuration.weeks !== undefined &&\n currentVisibleDuration.weeks !== 0 &&\n !Number.isNaN(currentVisibleDuration.weeks)) ||\n (currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days))\n ) {\n weeks = currentVisibleDuration.weeks ?? 0;\n\n if (\n currentVisibleDuration.days !== undefined &&\n currentVisibleDuration.days !== 0 &&\n !Number.isNaN(currentVisibleDuration.days)\n ) {\n weeks += Math.ceil(currentVisibleDuration.days / 7);\n }\n }\n\n return weeks;\n },\n isCellDisabled(date) {\n return (\n props.isDisabled === true ||\n date.compare(startDate()) < 0 ||\n date.compare(endDate()) > 0 ||\n this.isInvalid(date)\n );\n },\n isCellFocused(date) {\n const currentFocusedDate = focusedDate();\n\n return (\n isFocused() &&\n Boolean(currentFocusedDate) &&\n isSameDay(date, currentFocusedDate)\n );\n },\n isCellUnavailable(date) {\n return props.isDateUnavailable ? props.isDateUnavailable(date) : false;\n },\n get isDisabled() {\n return props.isDisabled ?? false;\n },\n get isFocused() {\n return isFocused();\n },\n isInvalid(date) {\n return isInvalid(date, minValue(), maxValue());\n },\n isNextVisibleRangeInvalid() {\n // Adding may return the same date if we reached the end of time\n // according to the calendar system (e.g. 9999-12-31).\n const next = endDate().add({ days: 1 });\n\n return isSameDay(next, endDate()) || this.isInvalid(next);\n },\n isPreviousVisibleRangeInvalid() {\n const prev = startDate().subtract({ days: 1 });\n\n return isSameDay(prev, startDate()) || this.isInvalid(prev);\n },\n get isReadOnly() {\n return props.isReadOnly ?? false;\n },\n isSelected(date) {\n const currentCalendarDateValue = calendarDateValue();\n\n if (\n !currentCalendarDateValue ||\n this.isCellDisabled(date) ||\n this.isCellUnavailable(date)\n ) {\n return false;\n }\n\n return Array.isArray(currentCalendarDateValue)\n ? currentCalendarDateValue.some((localValue) =>\n isSameDay(localValue, date)\n )\n : isSameDay(date, currentCalendarDateValue);\n },\n get isValueInvalid() {\n return isValueInvalid();\n },\n get maxValue() {\n return maxValue();\n },\n get minValue() {\n return minValue();\n },\n selectDate(date) {\n const currentValue = value();\n\n if (props.isDisabled === true || props.isReadOnly === true) {\n return;\n }\n\n if (\n selectionMode() === \"multiple\" &&\n date !== null &&\n date !== undefined\n ) {\n const newDate = normalizeValue(date);\n\n if (!newDate) {\n return;\n }\n\n let baseValue: T[] = [];\n\n if (Array.isArray(currentValue)) {\n baseValue = currentValue;\n } else if (currentValue !== null && currentValue !== undefined) {\n baseValue = [currentValue];\n }\n\n const index = baseValue.findIndex((localValue) =>\n isSameDay(localValue, newDate)\n );\n\n const newValue =\n index === -1\n ? [...baseValue, newDate]\n : [...baseValue.slice(0, index), ...baseValue.slice(index + 1)];\n\n setControlledValue(newValue);\n } else {\n setValue(date);\n }\n },\n selectFocusedDate() {\n const currentIsDateUnavailable = isDateUnavailable();\n const currentFocusedDate = focusedDate();\n\n if (\n !currentIsDateUnavailable ||\n !currentIsDateUnavailable(currentFocusedDate)\n ) {\n this.selectDate(currentFocusedDate);\n }\n },\n get selectionMode() {\n return selectionMode();\n },\n setFocused(focused: boolean) {\n setFocused(focused);\n },\n setFocusedDate(date) {\n focusCell(date);\n },\n get setValue() {\n return setValue;\n },\n get timeZone() {\n return timeZone();\n },\n // oxlint-disable-next-line typescript/no-deprecated -- Preserve and test the upstream compatibility API.\n get validationState() {\n return validationState();\n },\n get value() {\n const currentCalendarDateValue = calendarDateValue();\n\n // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- SAFETY: the display value preserves the selection shape specified by M.\n return currentCalendarDateValue as CalendarValueType<\n CalendarDate | null,\n M\n >;\n },\n get visibleDuration() {\n const currentVisibleDuration = visibleDuration();\n\n return currentVisibleDuration;\n },\n get visibleRange() {\n return {\n end: endDate(),\n start: startDate(),\n };\n },\n };\n}\n\nfunction unitDuration(duration: DateDuration) {\n const unit = { ...duration };\n\n for (const key of [\"years\", \"months\", \"weeks\", \"days\"] as const) {\n if (duration[key] !== undefined) {\n unit[key] = 1;\n }\n }\n\n return unit;\n}\n"],"mappings":"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"}