@react-spectrum/s2 0.11.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (566) hide show
  1. package/dist/Accordion.cjs +3 -3
  2. package/dist/Accordion.css +2 -2
  3. package/dist/Accordion.mjs +3 -3
  4. package/dist/ActionBar.cjs +61 -62
  5. package/dist/ActionBar.cjs.map +1 -1
  6. package/dist/ActionBar.css +62 -66
  7. package/dist/ActionBar.css.map +1 -1
  8. package/dist/ActionBar.mjs +61 -62
  9. package/dist/ActionBar.mjs.map +1 -1
  10. package/dist/ActionButton.cjs +356 -250
  11. package/dist/ActionButton.cjs.map +1 -1
  12. package/dist/ActionButton.css +208 -144
  13. package/dist/ActionButton.css.map +1 -1
  14. package/dist/ActionButton.mjs +357 -251
  15. package/dist/ActionButton.mjs.map +1 -1
  16. package/dist/ActionButtonGroup.cjs +16 -16
  17. package/dist/ActionButtonGroup.css +9 -9
  18. package/dist/ActionButtonGroup.mjs +16 -16
  19. package/dist/Add.cjs +10 -10
  20. package/dist/Add.css +6 -6
  21. package/dist/Add.mjs +10 -10
  22. package/dist/AlertDialog.cjs +3 -3
  23. package/dist/AlertDialog.css +3 -3
  24. package/dist/AlertDialog.mjs +3 -3
  25. package/dist/Asterisk.cjs +6 -6
  26. package/dist/Asterisk.css +4 -4
  27. package/dist/Asterisk.mjs +6 -6
  28. package/dist/Avatar.cjs +20 -16
  29. package/dist/Avatar.cjs.map +1 -1
  30. package/dist/Avatar.css +22 -14
  31. package/dist/Avatar.css.map +1 -1
  32. package/dist/Avatar.mjs +20 -16
  33. package/dist/Avatar.mjs.map +1 -1
  34. package/dist/AvatarGroup.cjs +135 -135
  35. package/dist/AvatarGroup.css +33 -33
  36. package/dist/AvatarGroup.mjs +135 -135
  37. package/dist/Badge.cjs +207 -207
  38. package/dist/Badge.css +127 -127
  39. package/dist/Badge.mjs +207 -207
  40. package/dist/Breadcrumbs.cjs +255 -255
  41. package/dist/Breadcrumbs.css +109 -109
  42. package/dist/Breadcrumbs.mjs +255 -255
  43. package/dist/Button.cjs +356 -354
  44. package/dist/Button.cjs.map +1 -1
  45. package/dist/Button.css +179 -179
  46. package/dist/Button.css.map +1 -1
  47. package/dist/Button.mjs +357 -356
  48. package/dist/Button.mjs.map +1 -1
  49. package/dist/ButtonGroup.cjs +21 -21
  50. package/dist/ButtonGroup.css +15 -15
  51. package/dist/ButtonGroup.mjs +21 -21
  52. package/dist/Calendar.cjs +127 -127
  53. package/dist/Calendar.cjs.map +1 -1
  54. package/dist/Calendar.css +134 -134
  55. package/dist/Calendar.css.map +1 -1
  56. package/dist/Calendar.mjs +127 -127
  57. package/dist/Calendar.mjs.map +1 -1
  58. package/dist/Card.cjs +335 -311
  59. package/dist/Card.cjs.map +1 -1
  60. package/dist/Card.css +213 -213
  61. package/dist/Card.css.map +1 -1
  62. package/dist/Card.mjs +335 -311
  63. package/dist/Card.mjs.map +1 -1
  64. package/dist/CardView.cjs +25 -19
  65. package/dist/CardView.cjs.map +1 -1
  66. package/dist/CardView.css +16 -16
  67. package/dist/CardView.css.map +1 -1
  68. package/dist/CardView.mjs +26 -20
  69. package/dist/CardView.mjs.map +1 -1
  70. package/dist/CenterBaseline.cjs +1 -1
  71. package/dist/CenterBaseline.css +2 -2
  72. package/dist/CenterBaseline.mjs +1 -1
  73. package/dist/Checkbox.cjs +171 -171
  74. package/dist/Checkbox.css +92 -92
  75. package/dist/Checkbox.mjs +171 -171
  76. package/dist/CheckboxGroup.cjs +46 -46
  77. package/dist/CheckboxGroup.css +38 -38
  78. package/dist/CheckboxGroup.mjs +46 -46
  79. package/dist/Checkmark.cjs +12 -12
  80. package/dist/Checkmark.css +8 -8
  81. package/dist/Checkmark.mjs +12 -12
  82. package/dist/Chevron.cjs +12 -12
  83. package/dist/Chevron.css +10 -10
  84. package/dist/Chevron.mjs +12 -12
  85. package/dist/ClearButton.cjs +29 -29
  86. package/dist/ClearButton.css +29 -29
  87. package/dist/ClearButton.mjs +29 -29
  88. package/dist/CloseButton.cjs +55 -55
  89. package/dist/CloseButton.css +46 -46
  90. package/dist/CloseButton.mjs +55 -55
  91. package/dist/ColorArea.cjs +25 -18
  92. package/dist/ColorArea.cjs.map +1 -1
  93. package/dist/ColorArea.css +16 -16
  94. package/dist/ColorArea.css.map +1 -1
  95. package/dist/ColorArea.mjs +26 -19
  96. package/dist/ColorArea.mjs.map +1 -1
  97. package/dist/ColorField.cjs +33 -33
  98. package/dist/ColorField.cjs.map +1 -1
  99. package/dist/ColorField.css +28 -28
  100. package/dist/ColorField.css.map +1 -1
  101. package/dist/ColorField.mjs +33 -33
  102. package/dist/ColorField.mjs.map +1 -1
  103. package/dist/ColorHandle.cjs +27 -27
  104. package/dist/ColorHandle.css +43 -43
  105. package/dist/ColorHandle.mjs +27 -27
  106. package/dist/ColorSlider.cjs +122 -121
  107. package/dist/ColorSlider.cjs.map +1 -1
  108. package/dist/ColorSlider.css +54 -54
  109. package/dist/ColorSlider.css.map +1 -1
  110. package/dist/ColorSlider.mjs +122 -121
  111. package/dist/ColorSlider.mjs.map +1 -1
  112. package/dist/ColorSwatch.cjs +30 -30
  113. package/dist/ColorSwatch.css +29 -29
  114. package/dist/ColorSwatch.mjs +30 -30
  115. package/dist/ColorSwatchPicker.cjs +28 -28
  116. package/dist/ColorSwatchPicker.css +46 -46
  117. package/dist/ColorSwatchPicker.mjs +28 -28
  118. package/dist/ColorWheel.cjs +26 -26
  119. package/dist/ColorWheel.css +17 -17
  120. package/dist/ColorWheel.mjs +26 -26
  121. package/dist/ComboBox.cjs +474 -452
  122. package/dist/ComboBox.cjs.map +1 -1
  123. package/dist/ComboBox.css +213 -185
  124. package/dist/ComboBox.css.map +1 -1
  125. package/dist/ComboBox.mjs +475 -453
  126. package/dist/ComboBox.mjs.map +1 -1
  127. package/dist/ContextualHelp.cjs +36 -33
  128. package/dist/ContextualHelp.cjs.map +1 -1
  129. package/dist/ContextualHelp.css +68 -60
  130. package/dist/ContextualHelp.css.map +1 -1
  131. package/dist/ContextualHelp.mjs +37 -34
  132. package/dist/ContextualHelp.mjs.map +1 -1
  133. package/dist/Cross.cjs +14 -14
  134. package/dist/Cross.css +10 -10
  135. package/dist/Cross.mjs +14 -14
  136. package/dist/CustomDialog.cjs +26 -26
  137. package/dist/CustomDialog.cjs.map +1 -1
  138. package/dist/CustomDialog.css +25 -25
  139. package/dist/CustomDialog.css.map +1 -1
  140. package/dist/CustomDialog.mjs +26 -26
  141. package/dist/CustomDialog.mjs.map +1 -1
  142. package/dist/Dash.cjs +10 -10
  143. package/dist/Dash.css +6 -6
  144. package/dist/Dash.mjs +10 -10
  145. package/dist/DateField.cjs +74 -74
  146. package/dist/DateField.cjs.map +1 -1
  147. package/dist/DateField.css +77 -77
  148. package/dist/DateField.css.map +1 -1
  149. package/dist/DateField.mjs +74 -74
  150. package/dist/DateField.mjs.map +1 -1
  151. package/dist/DatePicker.cjs +194 -191
  152. package/dist/DatePicker.cjs.map +1 -1
  153. package/dist/DatePicker.css +138 -126
  154. package/dist/DatePicker.css.map +1 -1
  155. package/dist/DatePicker.mjs +195 -192
  156. package/dist/DatePicker.mjs.map +1 -1
  157. package/dist/DateRangePicker.cjs +57 -57
  158. package/dist/DateRangePicker.cjs.map +1 -1
  159. package/dist/DateRangePicker.css +60 -60
  160. package/dist/DateRangePicker.css.map +1 -1
  161. package/dist/DateRangePicker.mjs +57 -57
  162. package/dist/DateRangePicker.mjs.map +1 -1
  163. package/dist/Dialog.cjs +17 -17
  164. package/dist/Dialog.cjs.map +1 -1
  165. package/dist/Dialog.css +88 -84
  166. package/dist/Dialog.css.map +1 -1
  167. package/dist/Dialog.mjs +17 -17
  168. package/dist/Dialog.mjs.map +1 -1
  169. package/dist/Disclosure.cjs +128 -147
  170. package/dist/Disclosure.cjs.map +1 -1
  171. package/dist/Disclosure.css +144 -112
  172. package/dist/Disclosure.css.map +1 -1
  173. package/dist/Disclosure.mjs +128 -147
  174. package/dist/Disclosure.mjs.map +1 -1
  175. package/dist/Divider.cjs +26 -26
  176. package/dist/Divider.css +25 -25
  177. package/dist/Divider.mjs +26 -26
  178. package/dist/DropZone.cjs +63 -63
  179. package/dist/DropZone.cjs.map +1 -1
  180. package/dist/DropZone.css +58 -58
  181. package/dist/DropZone.css.map +1 -1
  182. package/dist/DropZone.mjs +63 -63
  183. package/dist/DropZone.mjs.map +1 -1
  184. package/dist/Field.cjs +370 -370
  185. package/dist/Field.cjs.map +1 -1
  186. package/dist/Field.css +146 -142
  187. package/dist/Field.css.map +1 -1
  188. package/dist/Field.mjs +370 -370
  189. package/dist/Field.mjs.map +1 -1
  190. package/dist/Form.cjs +10 -10
  191. package/dist/Form.css +9 -9
  192. package/dist/Form.mjs +10 -10
  193. package/dist/FullscreenDialog.cjs +5 -5
  194. package/dist/FullscreenDialog.cjs.map +1 -1
  195. package/dist/FullscreenDialog.css +93 -93
  196. package/dist/FullscreenDialog.css.map +1 -1
  197. package/dist/FullscreenDialog.mjs +5 -5
  198. package/dist/FullscreenDialog.mjs.map +1 -1
  199. package/dist/IllustratedMessage.cjs +257 -257
  200. package/dist/IllustratedMessage.css +78 -78
  201. package/dist/IllustratedMessage.mjs +257 -257
  202. package/dist/Image.cjs +25 -17
  203. package/dist/Image.cjs.map +1 -1
  204. package/dist/Image.css +14 -14
  205. package/dist/Image.css.map +1 -1
  206. package/dist/Image.mjs +25 -17
  207. package/dist/Image.mjs.map +1 -1
  208. package/dist/InlineAlert.cjs +138 -153
  209. package/dist/InlineAlert.cjs.map +1 -1
  210. package/dist/InlineAlert.css +82 -151
  211. package/dist/InlineAlert.css.map +1 -1
  212. package/dist/InlineAlert.mjs +138 -153
  213. package/dist/InlineAlert.mjs.map +1 -1
  214. package/dist/Link.cjs +55 -55
  215. package/dist/Link.css +46 -46
  216. package/dist/Link.mjs +55 -55
  217. package/dist/LinkOut.cjs +8 -8
  218. package/dist/LinkOut.css +8 -8
  219. package/dist/LinkOut.mjs +8 -8
  220. package/dist/Menu.cjs +529 -501
  221. package/dist/Menu.cjs.map +1 -1
  222. package/dist/Menu.css +195 -191
  223. package/dist/Menu.css.map +1 -1
  224. package/dist/Menu.mjs +529 -502
  225. package/dist/Menu.mjs.map +1 -1
  226. package/dist/Meter.cjs +164 -164
  227. package/dist/Meter.css +93 -93
  228. package/dist/Meter.mjs +164 -164
  229. package/dist/Modal.cjs +90 -70
  230. package/dist/Modal.cjs.map +1 -1
  231. package/dist/Modal.css +76 -60
  232. package/dist/Modal.css.map +1 -1
  233. package/dist/Modal.mjs +90 -70
  234. package/dist/Modal.mjs.map +1 -1
  235. package/dist/NotificationBadge.cjs +59 -59
  236. package/dist/NotificationBadge.css +51 -51
  237. package/dist/NotificationBadge.mjs +59 -59
  238. package/dist/NumberField.cjs +116 -116
  239. package/dist/NumberField.cjs.map +1 -1
  240. package/dist/NumberField.css +100 -100
  241. package/dist/NumberField.css.map +1 -1
  242. package/dist/NumberField.mjs +116 -116
  243. package/dist/NumberField.mjs.map +1 -1
  244. package/dist/Picker.cjs +424 -349
  245. package/dist/Picker.cjs.map +1 -1
  246. package/dist/Picker.css +200 -180
  247. package/dist/Picker.css.map +1 -1
  248. package/dist/Picker.mjs +428 -353
  249. package/dist/Picker.mjs.map +1 -1
  250. package/dist/Popover.cjs +120 -116
  251. package/dist/Popover.cjs.map +1 -1
  252. package/dist/Popover.css +86 -82
  253. package/dist/Popover.css.map +1 -1
  254. package/dist/Popover.mjs +121 -118
  255. package/dist/Popover.mjs.map +1 -1
  256. package/dist/ProgressBar.cjs +174 -174
  257. package/dist/ProgressBar.css +101 -101
  258. package/dist/ProgressBar.mjs +174 -174
  259. package/dist/ProgressCircle.cjs +32 -32
  260. package/dist/ProgressCircle.css +24 -24
  261. package/dist/ProgressCircle.mjs +32 -32
  262. package/dist/Provider.cjs +11 -11
  263. package/dist/Provider.cjs.map +1 -1
  264. package/dist/Provider.css +13 -13
  265. package/dist/Provider.css.map +1 -1
  266. package/dist/Provider.mjs +11 -11
  267. package/dist/Provider.mjs.map +1 -1
  268. package/dist/Radio.cjs +155 -155
  269. package/dist/Radio.css +79 -79
  270. package/dist/Radio.mjs +155 -155
  271. package/dist/RadioGroup.cjs +43 -43
  272. package/dist/RadioGroup.css +38 -38
  273. package/dist/RadioGroup.mjs +43 -43
  274. package/dist/RangeCalendar.cjs +8 -8
  275. package/dist/RangeCalendar.cjs.map +1 -1
  276. package/dist/RangeCalendar.css +10 -10
  277. package/dist/RangeCalendar.css.map +1 -1
  278. package/dist/RangeCalendar.mjs +8 -8
  279. package/dist/RangeCalendar.mjs.map +1 -1
  280. package/dist/RangeSlider.cjs.map +1 -1
  281. package/dist/RangeSlider.mjs.map +1 -1
  282. package/dist/SearchField.cjs +43 -43
  283. package/dist/SearchField.cjs.map +1 -1
  284. package/dist/SearchField.css +46 -46
  285. package/dist/SearchField.css.map +1 -1
  286. package/dist/SearchField.mjs +43 -43
  287. package/dist/SearchField.mjs.map +1 -1
  288. package/dist/SegmentedControl.cjs +193 -224
  289. package/dist/SegmentedControl.cjs.map +1 -1
  290. package/dist/SegmentedControl.css +146 -118
  291. package/dist/SegmentedControl.css.map +1 -1
  292. package/dist/SegmentedControl.mjs +196 -227
  293. package/dist/SegmentedControl.mjs.map +1 -1
  294. package/dist/SelectBoxGroup.cjs +161 -159
  295. package/dist/SelectBoxGroup.cjs.map +1 -1
  296. package/dist/SelectBoxGroup.css +123 -123
  297. package/dist/SelectBoxGroup.css.map +1 -1
  298. package/dist/SelectBoxGroup.mjs +161 -159
  299. package/dist/SelectBoxGroup.mjs.map +1 -1
  300. package/dist/Slider.cjs +300 -300
  301. package/dist/Slider.css +151 -151
  302. package/dist/Slider.mjs +300 -300
  303. package/dist/StatusLight.cjs +126 -126
  304. package/dist/StatusLight.css +61 -61
  305. package/dist/StatusLight.mjs +126 -126
  306. package/dist/Switch.cjs +163 -163
  307. package/dist/Switch.css +74 -74
  308. package/dist/Switch.mjs +163 -163
  309. package/dist/TableView.cjs +340 -328
  310. package/dist/TableView.cjs.map +1 -1
  311. package/dist/TableView.css +176 -172
  312. package/dist/TableView.css.map +1 -1
  313. package/dist/TableView.mjs +340 -328
  314. package/dist/TableView.mjs.map +1 -1
  315. package/dist/Tabs.cjs +150 -190
  316. package/dist/Tabs.cjs.map +1 -1
  317. package/dist/Tabs.css +128 -100
  318. package/dist/Tabs.css.map +1 -1
  319. package/dist/Tabs.mjs +153 -193
  320. package/dist/Tabs.mjs.map +1 -1
  321. package/dist/TabsPicker.cjs +169 -161
  322. package/dist/TabsPicker.cjs.map +1 -1
  323. package/dist/TabsPicker.css +116 -124
  324. package/dist/TabsPicker.css.map +1 -1
  325. package/dist/TabsPicker.mjs +170 -162
  326. package/dist/TabsPicker.mjs.map +1 -1
  327. package/dist/TagGroup.cjs +226 -218
  328. package/dist/TagGroup.cjs.map +1 -1
  329. package/dist/TagGroup.css +147 -147
  330. package/dist/TagGroup.css.map +1 -1
  331. package/dist/TagGroup.mjs +226 -218
  332. package/dist/TagGroup.mjs.map +1 -1
  333. package/dist/TextField.cjs +65 -63
  334. package/dist/TextField.cjs.map +1 -1
  335. package/dist/TextField.css +58 -54
  336. package/dist/TextField.css.map +1 -1
  337. package/dist/TextField.mjs +65 -63
  338. package/dist/TextField.mjs.map +1 -1
  339. package/dist/TimeField.cjs +53 -53
  340. package/dist/TimeField.cjs.map +1 -1
  341. package/dist/TimeField.css +48 -48
  342. package/dist/TimeField.css.map +1 -1
  343. package/dist/TimeField.mjs +53 -53
  344. package/dist/TimeField.mjs.map +1 -1
  345. package/dist/Toast.cjs +120 -120
  346. package/dist/Toast.css +108 -108
  347. package/dist/Toast.mjs +120 -120
  348. package/dist/ToggleButton.cjs +3 -3
  349. package/dist/ToggleButton.css +12 -12
  350. package/dist/ToggleButton.mjs +3 -3
  351. package/dist/Tooltip.cjs +84 -83
  352. package/dist/Tooltip.cjs.map +1 -1
  353. package/dist/Tooltip.css +74 -70
  354. package/dist/Tooltip.css.map +1 -1
  355. package/dist/Tooltip.mjs +84 -83
  356. package/dist/Tooltip.mjs.map +1 -1
  357. package/dist/TreeView.cjs +150 -148
  358. package/dist/TreeView.cjs.map +1 -1
  359. package/dist/TreeView.css +147 -147
  360. package/dist/TreeView.css.map +1 -1
  361. package/dist/TreeView.mjs +151 -149
  362. package/dist/TreeView.mjs.map +1 -1
  363. package/dist/ar-AE.cjs +5 -0
  364. package/dist/ar-AE.cjs.map +1 -1
  365. package/dist/ar-AE.mjs +5 -0
  366. package/dist/ar-AE.mjs.map +1 -1
  367. package/dist/bg-BG.cjs +5 -0
  368. package/dist/bg-BG.cjs.map +1 -1
  369. package/dist/bg-BG.mjs +5 -0
  370. package/dist/bg-BG.mjs.map +1 -1
  371. package/dist/cs-CZ.cjs +5 -0
  372. package/dist/cs-CZ.cjs.map +1 -1
  373. package/dist/cs-CZ.mjs +5 -0
  374. package/dist/cs-CZ.mjs.map +1 -1
  375. package/dist/da-DK.cjs +5 -0
  376. package/dist/da-DK.cjs.map +1 -1
  377. package/dist/da-DK.mjs +5 -0
  378. package/dist/da-DK.mjs.map +1 -1
  379. package/dist/de-DE.cjs +5 -0
  380. package/dist/de-DE.cjs.map +1 -1
  381. package/dist/de-DE.mjs +5 -0
  382. package/dist/de-DE.mjs.map +1 -1
  383. package/dist/el-GR.cjs +5 -0
  384. package/dist/el-GR.cjs.map +1 -1
  385. package/dist/el-GR.mjs +5 -0
  386. package/dist/el-GR.mjs.map +1 -1
  387. package/dist/en-US.cjs +21 -16
  388. package/dist/en-US.cjs.map +1 -1
  389. package/dist/en-US.mjs +21 -16
  390. package/dist/en-US.mjs.map +1 -1
  391. package/dist/es-ES.cjs +5 -0
  392. package/dist/es-ES.cjs.map +1 -1
  393. package/dist/es-ES.mjs +5 -0
  394. package/dist/es-ES.mjs.map +1 -1
  395. package/dist/et-EE.cjs +5 -0
  396. package/dist/et-EE.cjs.map +1 -1
  397. package/dist/et-EE.mjs +5 -0
  398. package/dist/et-EE.mjs.map +1 -1
  399. package/dist/fi-FI.cjs +5 -0
  400. package/dist/fi-FI.cjs.map +1 -1
  401. package/dist/fi-FI.mjs +5 -0
  402. package/dist/fi-FI.mjs.map +1 -1
  403. package/dist/fr-FR.cjs +5 -0
  404. package/dist/fr-FR.cjs.map +1 -1
  405. package/dist/fr-FR.mjs +5 -0
  406. package/dist/fr-FR.mjs.map +1 -1
  407. package/dist/he-IL.cjs +5 -0
  408. package/dist/he-IL.cjs.map +1 -1
  409. package/dist/he-IL.mjs +5 -0
  410. package/dist/he-IL.mjs.map +1 -1
  411. package/dist/hr-HR.cjs +5 -0
  412. package/dist/hr-HR.cjs.map +1 -1
  413. package/dist/hr-HR.mjs +5 -0
  414. package/dist/hr-HR.mjs.map +1 -1
  415. package/dist/hu-HU.cjs +5 -0
  416. package/dist/hu-HU.cjs.map +1 -1
  417. package/dist/hu-HU.mjs +5 -0
  418. package/dist/hu-HU.mjs.map +1 -1
  419. package/dist/it-IT.cjs +5 -0
  420. package/dist/it-IT.cjs.map +1 -1
  421. package/dist/it-IT.mjs +5 -0
  422. package/dist/it-IT.mjs.map +1 -1
  423. package/dist/ja-JP.cjs +5 -0
  424. package/dist/ja-JP.cjs.map +1 -1
  425. package/dist/ja-JP.mjs +5 -0
  426. package/dist/ja-JP.mjs.map +1 -1
  427. package/dist/ko-KR.cjs +5 -0
  428. package/dist/ko-KR.cjs.map +1 -1
  429. package/dist/ko-KR.mjs +5 -0
  430. package/dist/ko-KR.mjs.map +1 -1
  431. package/dist/lt-LT.cjs +5 -0
  432. package/dist/lt-LT.cjs.map +1 -1
  433. package/dist/lt-LT.mjs +5 -0
  434. package/dist/lt-LT.mjs.map +1 -1
  435. package/dist/lv-LV.cjs +5 -0
  436. package/dist/lv-LV.cjs.map +1 -1
  437. package/dist/lv-LV.mjs +5 -0
  438. package/dist/lv-LV.mjs.map +1 -1
  439. package/dist/main.cjs +2 -0
  440. package/dist/main.cjs.map +1 -1
  441. package/dist/module.mjs +3 -3
  442. package/dist/module.mjs.map +1 -1
  443. package/dist/nb-NO.cjs +5 -0
  444. package/dist/nb-NO.cjs.map +1 -1
  445. package/dist/nb-NO.mjs +5 -0
  446. package/dist/nb-NO.mjs.map +1 -1
  447. package/dist/nl-NL.cjs +5 -0
  448. package/dist/nl-NL.cjs.map +1 -1
  449. package/dist/nl-NL.mjs +5 -0
  450. package/dist/nl-NL.mjs.map +1 -1
  451. package/dist/pl-PL.cjs +5 -0
  452. package/dist/pl-PL.cjs.map +1 -1
  453. package/dist/pl-PL.mjs +5 -0
  454. package/dist/pl-PL.mjs.map +1 -1
  455. package/dist/pt-BR.cjs +5 -0
  456. package/dist/pt-BR.cjs.map +1 -1
  457. package/dist/pt-BR.mjs +5 -0
  458. package/dist/pt-BR.mjs.map +1 -1
  459. package/dist/pt-PT.cjs +5 -0
  460. package/dist/pt-PT.cjs.map +1 -1
  461. package/dist/pt-PT.mjs +5 -0
  462. package/dist/pt-PT.mjs.map +1 -1
  463. package/dist/ro-RO.cjs +5 -0
  464. package/dist/ro-RO.cjs.map +1 -1
  465. package/dist/ro-RO.mjs +5 -0
  466. package/dist/ro-RO.mjs.map +1 -1
  467. package/dist/ru-RU.cjs +5 -0
  468. package/dist/ru-RU.cjs.map +1 -1
  469. package/dist/ru-RU.mjs +5 -0
  470. package/dist/ru-RU.mjs.map +1 -1
  471. package/dist/sk-SK.cjs +5 -0
  472. package/dist/sk-SK.cjs.map +1 -1
  473. package/dist/sk-SK.mjs +5 -0
  474. package/dist/sk-SK.mjs.map +1 -1
  475. package/dist/sl-SI.cjs +5 -0
  476. package/dist/sl-SI.cjs.map +1 -1
  477. package/dist/sl-SI.mjs +5 -0
  478. package/dist/sl-SI.mjs.map +1 -1
  479. package/dist/sr-SP.cjs +5 -0
  480. package/dist/sr-SP.cjs.map +1 -1
  481. package/dist/sr-SP.mjs +5 -0
  482. package/dist/sr-SP.mjs.map +1 -1
  483. package/dist/sv-SE.cjs +5 -0
  484. package/dist/sv-SE.cjs.map +1 -1
  485. package/dist/sv-SE.mjs +5 -0
  486. package/dist/sv-SE.mjs.map +1 -1
  487. package/dist/tr-TR.cjs +5 -0
  488. package/dist/tr-TR.cjs.map +1 -1
  489. package/dist/tr-TR.mjs +5 -0
  490. package/dist/tr-TR.mjs.map +1 -1
  491. package/dist/types.d.ts +147 -87
  492. package/dist/types.d.ts.map +1 -1
  493. package/dist/uk-UA.cjs +5 -0
  494. package/dist/uk-UA.cjs.map +1 -1
  495. package/dist/uk-UA.mjs +5 -0
  496. package/dist/uk-UA.mjs.map +1 -1
  497. package/dist/zh-CN.cjs +5 -0
  498. package/dist/zh-CN.cjs.map +1 -1
  499. package/dist/zh-CN.mjs +5 -0
  500. package/dist/zh-CN.mjs.map +1 -1
  501. package/dist/zh-TW.cjs +5 -0
  502. package/dist/zh-TW.cjs.map +1 -1
  503. package/dist/zh-TW.mjs +5 -0
  504. package/dist/zh-TW.mjs.map +1 -1
  505. package/icons/Icon.cjs +10 -10
  506. package/icons/Icon.css +9 -9
  507. package/icons/Icon.mjs +10 -10
  508. package/icons/Skeleton.cjs +2 -2
  509. package/icons/Skeleton.css +6 -6
  510. package/icons/Skeleton.mjs +2 -2
  511. package/package.json +20 -20
  512. package/page.css +7 -7
  513. package/src/ActionBar.tsx +5 -3
  514. package/src/ActionButton.tsx +112 -32
  515. package/src/Avatar.tsx +4 -1
  516. package/src/Button.tsx +27 -28
  517. package/src/Calendar.tsx +3 -0
  518. package/src/Card.tsx +22 -7
  519. package/src/CardView.tsx +9 -1
  520. package/src/ColorArea.tsx +10 -2
  521. package/src/ColorField.tsx +3 -2
  522. package/src/ColorSlider.tsx +3 -2
  523. package/src/ComboBox.tsx +69 -44
  524. package/src/ContextualHelp.tsx +36 -32
  525. package/src/CustomDialog.tsx +1 -1
  526. package/src/DateField.tsx +4 -0
  527. package/src/DatePicker.tsx +28 -20
  528. package/src/DateRangePicker.tsx +5 -1
  529. package/src/Dialog.tsx +6 -3
  530. package/src/Disclosure.tsx +20 -16
  531. package/src/DropZone.tsx +5 -2
  532. package/src/Field.tsx +4 -1
  533. package/src/FullscreenDialog.tsx +1 -1
  534. package/src/Image.tsx +30 -8
  535. package/src/InlineAlert.tsx +10 -27
  536. package/src/Menu.tsx +57 -45
  537. package/src/Modal.tsx +99 -74
  538. package/src/NumberField.tsx +3 -2
  539. package/src/Picker.tsx +114 -51
  540. package/src/Popover.tsx +57 -35
  541. package/src/Provider.tsx +1 -1
  542. package/src/RangeCalendar.tsx +3 -0
  543. package/src/RangeSlider.tsx +3 -0
  544. package/src/SearchField.tsx +2 -1
  545. package/src/SegmentedControl.tsx +16 -44
  546. package/src/SelectBoxGroup.tsx +21 -23
  547. package/src/TableView.tsx +7 -6
  548. package/src/Tabs.tsx +34 -70
  549. package/src/TabsPicker.tsx +35 -26
  550. package/src/TagGroup.tsx +44 -36
  551. package/src/TextField.tsx +11 -6
  552. package/src/TimeField.tsx +4 -0
  553. package/src/Tooltip.tsx +3 -0
  554. package/src/TreeView.tsx +2 -2
  555. package/src/index.ts +3 -2
  556. package/src/page.macro.ts +2 -2
  557. package/src/style-utils.ts +4 -3
  558. package/style/__tests__/style-macro.test.js +56 -56
  559. package/style/dist/spectrum-theme.cjs +36 -6
  560. package/style/dist/spectrum-theme.cjs.map +1 -1
  561. package/style/dist/spectrum-theme.mjs +36 -6
  562. package/style/dist/spectrum-theme.mjs.map +1 -1
  563. package/style/dist/types.d.ts +1 -0
  564. package/style/dist/types.d.ts.map +1 -1
  565. package/style/spectrum-theme.ts +10 -8
  566. package/style/tokens.ts +10 -0
@@ -1 +1 @@
1
- {"mappings":"ACqEuB;EAAA;;;;EAAA;;;;EAAA;;;;EAeD;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAQF;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EASK;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAeN;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA8BK;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAuGE;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAWE;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA2DH;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA2BR;;;;EAAA;;;;EAAA;;;;EAkEa;;;;EACA;;;;EAAA;;;;EAetB;;;;EAAA;;;;EAAA;;;;EA8ES;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AA9ZG;EASK;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA6CD;;;;EAAA;;;;;AAtDJ;EASK;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA6CD;;;;;AAtDJ;EASK;;;;EAAA;;;;EAAA;;;;EA6CD;;;;;AAtDJ;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAsDI;EAAA;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAkHI;;;;IAAA","sources":["2295035483c3fe80","packages/@react-spectrum/s2/src/Calendar.tsx"],"sourcesContent":["@import \"a4515f5bffb5f062\";\n@import \"92a594e88a8aef1b\";\n@import \"690c8ff771746c3e\";\n@import \"61eae6535d6fcdf4\";\n@import \"45a026ed74f55e85\";\n@import \"948f79e4cbbbc206\";\n@import \"6fbf78b81e66a464\";\n@import \"98b3aa52e9389b9d\";\n@import \"b5160d992ac49c4a\";\n@import \"84221aa63b6aa322\";\n@import \"898fc73cd9eb6ae4\";\n@import \"b3de9a7ca57d6dcd\";\n@import \"630d2c7b496b99dc\";\n@import \"4ba51db32e5676ac\";\n@import \"956185cd03a3f917\";\n@import \"b1221915ab95cea2\";\n","/*\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\nimport {ActionButton, Header, HeaderContext, Heading, HeadingContext, pressScale} from './';\nimport {\n Calendar as AriaCalendar,\n CalendarCell as AriaCalendarCell,\n CalendarGrid as AriaCalendarGrid,\n CalendarHeaderCell as AriaCalendarHeaderCell,\n CalendarProps as AriaCalendarProps,\n ButtonProps,\n CalendarCellProps,\n CalendarCellRenderProps,\n CalendarGridBody,\n CalendarGridHeader,\n CalendarHeaderCellProps,\n CalendarState,\n CalendarStateContext,\n ContextValue,\n DateValue,\n Provider,\n RangeCalendarState,\n RangeCalendarStateContext,\n Text\n} from 'react-aria-components';\nimport {AriaCalendarGridProps} from '@react-aria/calendar';\nimport {baseColor, focusRing, lightDark, style} from '../style' with {type: 'macro'};\nimport {\n CalendarDate,\n getDayOfWeek,\n startOfMonth\n} from '@internationalized/date';\nimport ChevronLeftIcon from '../s2wf-icons/S2_Icon_ChevronLeft_20_N.svg';\nimport ChevronRightIcon from '../s2wf-icons/S2_Icon_ChevronRight_20_N.svg';\nimport {forwardRefType, GlobalDOMAttributes} from '@react-types/shared';\nimport {getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};\nimport {helpTextStyles} from './Field';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport React, {createContext, CSSProperties, ForwardedRef, forwardRef, Fragment, PropsWithChildren, ReactElement, ReactNode, useContext, useMemo, useRef} from 'react';\nimport {useDateFormatter, useLocale, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\n\nexport interface CalendarProps<T extends DateValue>\n extends Omit<AriaCalendarProps<T>, 'visibleDuration' | 'style' | 'className' | 'styles' | keyof GlobalDOMAttributes>,\n StyleProps {\n /**\n * The error message to display when the calendar is invalid.\n */\n errorMessage?: ReactNode,\n /**\n * The number of months to display at once.\n * @default 1\n */\n visibleMonths?: number\n}\n\nexport const CalendarContext = createContext<ContextValue<Partial<CalendarProps<any>>, HTMLDivElement>>(null);\n\nconst calendarStyles = style({\n display: 'flex',\n flexDirection: 'column',\n gap: 24,\n width: 'fit',\n disableTapHighlight: true\n}, getAllowedOverrides());\n\nconst headerStyles = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: 'full'\n});\n\nconst headingStyles = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n margin: 0,\n width: 'full'\n});\n\nconst titleStyles = style({\n font: 'title-lg',\n textAlign: 'center',\n flexGrow: 1,\n flexShrink: 0,\n flexBasis: '0%',\n minWidth: 0\n});\n\nconst headerCellStyles = style({\n font: 'title-sm',\n cursor: 'default',\n textAlign: 'center',\n paddingStart: {\n default: 4,\n ':first-child': 0\n },\n paddingEnd: {\n default: 4,\n ':last-child': 0\n },\n paddingBottom: 12\n});\n\nconst cellStyles = style({\n outlineStyle: 'none',\n '--cell-gap': {\n type: 'paddingStart',\n value: 4\n },\n paddingStart: {\n default: 4,\n isFirstChild: 0\n },\n paddingEnd: {\n default: 4,\n isLastChild: 0\n },\n paddingTop: {\n default: 2,\n isFirstWeek: 0\n },\n paddingBottom: 2,\n position: 'relative',\n width: 32,\n height: 32,\n display: {\n default: 'flex',\n isOutsideMonth: 'none'\n },\n alignItems: 'center',\n justifyContent: 'center'\n});\n\nconst cellInnerStyles = style<CalendarCellRenderProps & {selectionMode: 'single' | 'range'}>({\n ...focusRing(),\n transition: {\n default: 'default',\n forcedColors: 'none'\n },\n outlineOffset: {\n default: -2,\n isToday: 2,\n isSelected: {\n selectionMode: {\n single: 2,\n range: -2\n }\n },\n isSelectionStart: 2,\n isSelectionEnd: 2\n },\n position: 'relative',\n font: 'body-sm',\n cursor: 'default',\n width: 'full',\n height: 32,\n borderRadius: 'full',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n forcedColorAdjust: 'none',\n backgroundColor: {\n default: 'transparent',\n isHovered: 'gray-100',\n isPressed: 'gray-100',\n isDisabled: 'transparent',\n isToday: {\n default: baseColor('gray-300'),\n isDisabled: 'disabled'\n },\n isSelected: {\n selectionMode: {\n single: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600'),\n isDisabled: 'transparent'\n },\n range: {\n isHovered: 'blue-500'\n }\n }\n },\n isSelectionStart: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n isSelectionEnd: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n isUnavailable: 'transparent',\n forcedColors: {\n default: 'transparent',\n isToday: 'ButtonFace',\n isHovered: 'Highlight',\n isSelected: {\n selectionMode: {\n single: 'Highlight',\n range: {\n isHovered: 'Highlight'\n }\n }\n },\n isSelectionStart: 'Highlight',\n isSelectionEnd: 'Highlight',\n isUnavailable: 'transparent'\n }\n },\n color: {\n default: 'neutral',\n isSelected: {\n default: 'white',\n selectionMode: {\n range: 'neutral'\n }\n },\n isSelectionStart: 'white',\n isSelectionEnd: 'white',\n isDisabled: 'disabled',\n forcedColors: {\n default: 'ButtonText',\n isToday: 'ButtonFace',\n isSelected: 'HighlightText',\n isSelectionStart: 'HighlightText',\n isSelectionEnd: 'HighlightText',\n isDisabled: 'GrayText'\n }\n }\n});\n\nconst unavailableStyles = style({\n position: 'absolute',\n top: 'calc(50% - 1px)',\n left: 'calc(25% - 1px)',\n right: 'calc(25% - 1px)',\n height: 2,\n transform: 'rotate(-16deg)',\n borderRadius: 'full',\n backgroundColor: '[currentColor]'\n});\n\nconst selectionSpanStyles = style({\n position: 'absolute',\n zIndex: -1,\n top: 0,\n insetStart: 'calc(-1 * var(--selection-span) * (var(--cell-width) + var(--cell-gap) + var(--cell-gap)))',\n insetEnd: 0,\n bottom: 0,\n borderWidth: 2,\n borderStyle: 'dashed',\n borderColor: {\n default: 'blue-800', // focus-indicator-color\n forcedColors: {\n default: 'ButtonText'\n }\n },\n borderStartRadius: 'full',\n borderEndRadius: 'full',\n backgroundColor: {\n default: 'blue-subtle',\n forcedColors: {\n default: 'Highlight'\n }\n },\n forcedColorAdjust: 'none'\n});\n\nexport const Calendar = /*#__PURE__*/ (forwardRef as forwardRefType)(function Calendar<T extends DateValue>(props: CalendarProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useSpectrumContextProps(props, ref, CalendarContext);\n let {\n visibleMonths = 1,\n errorMessage,\n UNSAFE_style,\n UNSAFE_className,\n styles,\n ...otherProps\n } = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n return (\n <AriaCalendar\n {...otherProps}\n ref={ref}\n visibleDuration={{months: visibleMonths}}\n style={UNSAFE_style}\n className={(UNSAFE_className || '') + calendarStyles(null, styles)}>\n {({isInvalid, isDisabled}) => {\n return (\n <>\n <Provider\n values={[\n [HeaderContext, null],\n [HeadingContext, null]\n ]}>\n <Header styles={headerStyles}>\n <CalendarButton slot=\"previous\"><ChevronLeftIcon /></CalendarButton>\n <CalendarHeading />\n <CalendarButton slot=\"next\"><ChevronRightIcon /></CalendarButton>\n </Header>\n </Provider>\n <div\n className={style({\n display: 'flex',\n flexDirection: 'row',\n gap: 24,\n width: 'full',\n alignItems: 'start'\n })}>\n {Array.from({length: visibleMonths}).map((_, i) => (\n <CalendarGrid months={i} key={i} />\n ))}\n </div>\n {isInvalid && (\n <Text slot=\"errorMessage\" className={helpTextStyles({isInvalid, isDisabled, size: 'M'})}>\n {errorMessage || stringFormatter.format('calendar.invalidSelection', {selectedCount: 1})}\n </Text>\n )}\n </>\n );\n }}\n </AriaCalendar>\n );\n});\n\nexport const CalendarGrid = (props: Omit<AriaCalendarGridProps, 'children'> & PropsWithChildren & {months: number}): ReactElement => {\n // use isolation to start a new stacking context so that we can use zIndex -1 for the selection span.\n return (\n <AriaCalendarGrid\n className={style({\n borderCollapse: 'collapse',\n borderSpacing: 0,\n isolation: 'isolate'\n })}\n offset={{months: props.months}}>\n <CalendarGridHeader>\n {(day) => (\n <CalendarHeaderCell>\n {day}\n </CalendarHeaderCell>\n )}\n </CalendarGridHeader>\n <CalendarGridBody>\n {(date) => (\n <CalendarCell date={date} firstDayOfWeek={props.firstDayOfWeek} />\n )}\n </CalendarGridBody>\n </AriaCalendarGrid>\n );\n};\n\n// Ordinarily the heading is a formatted date range, ie January 2025 - February 2025.\n// However, we want to show each month individually.\nexport const CalendarHeading = (): ReactElement => {\n let calendarStateContext = useContext(CalendarStateContext);\n let rangeCalendarStateContext = useContext(RangeCalendarStateContext);\n let {visibleRange, timeZone} = calendarStateContext ?? rangeCalendarStateContext ?? {};\n let currentMonth = visibleRange?.start ?? visibleRange?.end;\n let monthFormatter = useDateFormatter({\n month: 'long',\n year: 'numeric',\n era: currentMonth && currentMonth.calendar.identifier === 'gregory' && currentMonth.era === 'BC' ? 'short' : undefined,\n calendar: visibleRange?.start.calendar.identifier,\n timeZone\n });\n let months = useMemo(() => {\n if (!visibleRange) {\n return [];\n }\n let months: string[] = [];\n for (let i = visibleRange.start; i.compare(visibleRange.end) <= 0; i = i.add({months: 1})) {\n // TODO: account for the first week possibly overlapping, like with a custom 454 calendar.\n // there has to be a better way to do this...\n if (i.month === visibleRange.start.month) {\n i = i.add({weeks: 1});\n }\n months.push(monthFormatter.format(i.toDate(timeZone!)));\n }\n return months;\n }, [visibleRange, monthFormatter, timeZone]);\n\n return (\n <Heading styles={headingStyles}>\n {months.map((month, i) => {\n if (i === 0) {\n return (\n <Fragment key={month}>\n <div className={titleStyles}>{month}</div>\n </Fragment>\n );\n } else {\n return (\n <Fragment key={month}>\n {/* Spacers to account for Next/Previous buttons and gap, spelled out to show the math */}\n <div className={style({visibility: 'hidden', width: 32})} />\n <div className={style({visibility: 'hidden', width: 24})} />\n <div className={style({visibility: 'hidden', width: 32})} />\n <div className={titleStyles}>{month}</div>\n </Fragment>\n );\n }\n })}\n </Heading>\n );\n};\n\nexport const CalendarButton = (props: Omit<ButtonProps, 'children'> & {children: ReactNode}): ReactElement => {\n let {direction} = useLocale();\n return (\n <div\n className={\n style({\n scale: {\n direction: {\n rtl: -1\n }\n }\n })({direction})\n }>\n <ActionButton\n {...props}\n isQuiet>\n {props.children}\n </ActionButton>\n </div>\n );\n};\n\nconst CalendarHeaderCell = (props: Omit<CalendarHeaderCellProps, 'children'> & PropsWithChildren): ReactElement => {\n return (\n <AriaCalendarHeaderCell className={headerCellStyles}>\n {props.children}\n </AriaCalendarHeaderCell>\n );\n};\n\nconst CalendarCell = (props: Omit<CalendarCellProps, 'children'> & {firstDayOfWeek: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | undefined}): ReactElement => {\n let {locale} = useLocale();\n let firstDayOfWeek = props.firstDayOfWeek;\n // Calculate the day and week index based on the date.\n let {dayIndex, weekIndex} = useWeekAndDayIndices(props.date, locale, firstDayOfWeek);\n\n let calendarStateContext = useContext(CalendarStateContext);\n let rangeCalendarStateContext = useContext(RangeCalendarStateContext);\n let state = (calendarStateContext ?? rangeCalendarStateContext)!;\n\n let isFirstWeek = weekIndex === 0;\n let isFirstChild = dayIndex === 0;\n let isLastChild = dayIndex === 6;\n return (\n <AriaCalendarCell\n date={props.date}\n className={(renderProps) => cellStyles({...renderProps, isFirstChild, isLastChild, isFirstWeek})}>\n {(renderProps) => <CalendarCellInner {...props} weekIndex={weekIndex} dayIndex={dayIndex} state={state} isRangeSelection={!!rangeCalendarStateContext} renderProps={renderProps} />}\n </AriaCalendarCell>\n );\n};\n\nconst CalendarCellInner = (props: Omit<CalendarCellProps, 'children'> & {isRangeSelection: boolean, state: CalendarState | RangeCalendarState, weekIndex: number, dayIndex: number, renderProps?: CalendarCellRenderProps, date: DateValue}): ReactElement => {\n let {weekIndex, dayIndex, date, renderProps, state, isRangeSelection} = props;\n let {getDatesInWeek} = state;\n let ref = useRef<HTMLDivElement>(null);\n let {isUnavailable, formattedDate, isSelected} = renderProps!;\n let startDate = startOfMonth(date);\n let datesInWeek = getDatesInWeek(weekIndex, startDate);\n\n // Starting from the current day, find the first day before it in the current week that is not selected.\n // Then, the span of selected days is the current day minus the first unselected day.\n let firstUnselectedInRangeInWeek = datesInWeek.slice(0, dayIndex + 1).reverse().findIndex((date, i) => {\n return date && i > 0 && (!state.isSelected(date) || date.month !== props.date.month);\n });\n let selectionSpan = -1;\n if (firstUnselectedInRangeInWeek > -1 && isSelected) {\n selectionSpan = firstUnselectedInRangeInWeek - 1;\n } else if (isSelected) {\n selectionSpan = dayIndex;\n }\n\n let prevDay = date.subtract({days: 1});\n let nextDay = date.add({days: 1});\n let isBackgroundStyleApplied = (\n isSelected\n && isRangeSelection\n && (state.isSelected(prevDay)\n || (nextDay.month === date.month && state.isSelected(nextDay)))\n );\n\n return (\n <div\n className={style({\n position: 'relative',\n width: 32,\n '--cell-width': {\n type: 'width',\n value: '[self(width)]'\n }\n })}>\n <div\n ref={ref}\n style={pressScale(ref, {})(renderProps!)}\n className={cellInnerStyles({...renderProps!, selectionMode: isRangeSelection ? 'range' : 'single'})}>\n <div>\n {formattedDate}\n </div>\n {isUnavailable && <div className={unavailableStyles} role=\"presentation\" />}\n </div>\n {isBackgroundStyleApplied && <div style={{'--selection-span': selectionSpan} as CSSProperties} className={selectionSpanStyles} role=\"presentation\" />}\n </div>\n );\n};\n\ntype DayOfWeek = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat';\n\n/**\n * Calculate the week index (0-based) and day index (0-based) for a given date within a month in a calendar.\n * @param date - The date to calculate indices for.\n * @param locale - The locale string (e.g., 'en-US', 'fr-FR', 'hi-IN-u-ca-indian').\n * @param firstDayOfWeek - Optional override for the first day of the week ('sun', 'mon', 'tue', etc.).\n * @returns Object with weekIndex and dayIndex.\n */\nfunction useWeekAndDayIndices(\n date: CalendarDate,\n locale: string,\n firstDayOfWeek?: DayOfWeek\n) {\n let {dayIndex, weekIndex} = useMemo(() => {\n // Get the day index within the week (0-6)\n const dayIndex = getDayOfWeek(date, locale, firstDayOfWeek);\n\n const monthStart = startOfMonth(date);\n\n // Calculate the week index by finding which week this date falls into\n // within the month's calendar grid\n const monthStartDayOfWeek = getDayOfWeek(monthStart, locale, firstDayOfWeek);\n const dayOfMonth = date.day;\n\n const weekIndex = Math.floor((dayOfMonth + monthStartDayOfWeek - 1) / 7);\n\n return {\n weekIndex,\n dayIndex\n };\n }, [date, locale, firstDayOfWeek]);\n\n return {dayIndex, weekIndex};\n}\n"],"names":[],"version":3,"file":"Calendar.css.map"}
1
+ {"mappings":"ACqEuB;EAAA;;;;EAAA;;;;EAAA;;;;EAeD;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAQF;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EASK;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAeN;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA8BK;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAuGE;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAWE;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA8DH;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA2BR;;;;EAAA;;;;EAAA;;;;EAkEa;;;;EACA;;;;EAAA;;;;EAetB;;;;EAAA;;;;EAAA;;;;EA8ES;;;;EAAA;;;;EAAA;;;;EAAA;;;;;AAjaG;EASK;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA6CD;;;;EAAA;;;;;AAtDJ;EASK;;;;EAAA;;;;EAAA;;;;EAAA;;;;EA6CD;;;;;AAtDJ;EASK;;;;EAAA;;;;EAAA;;;;EA6CD;;;;;AAtDJ;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAAA;EAAA;;;;;AAsDI;EAAA;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAAA;;;;IAkHI;;;;IAAA","sources":["2295035483c3fe80","packages/@react-spectrum/s2/src/Calendar.tsx"],"sourcesContent":["@import \"a4515f5bffb5f062\";\n@import \"92a594e88a8aef1b\";\n@import \"690c8ff771746c3e\";\n@import \"61eae6535d6fcdf4\";\n@import \"45a026ed74f55e85\";\n@import \"948f79e4cbbbc206\";\n@import \"6fbf78b81e66a464\";\n@import \"98b3aa52e9389b9d\";\n@import \"b5160d992ac49c4a\";\n@import \"84221aa63b6aa322\";\n@import \"898fc73cd9eb6ae4\";\n@import \"b3de9a7ca57d6dcd\";\n@import \"630d2c7b496b99dc\";\n@import \"4ba51db32e5676ac\";\n@import \"956185cd03a3f917\";\n@import \"b1221915ab95cea2\";\n","/*\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\nimport {ActionButton, Header, HeaderContext, Heading, HeadingContext, pressScale} from './';\nimport {\n Calendar as AriaCalendar,\n CalendarCell as AriaCalendarCell,\n CalendarGrid as AriaCalendarGrid,\n CalendarHeaderCell as AriaCalendarHeaderCell,\n CalendarProps as AriaCalendarProps,\n ButtonProps,\n CalendarCellProps,\n CalendarCellRenderProps,\n CalendarGridBody,\n CalendarGridHeader,\n CalendarHeaderCellProps,\n CalendarState,\n CalendarStateContext,\n ContextValue,\n DateValue,\n Provider,\n RangeCalendarState,\n RangeCalendarStateContext,\n Text\n} from 'react-aria-components';\nimport {AriaCalendarGridProps} from '@react-aria/calendar';\nimport {baseColor, focusRing, lightDark, style} from '../style' with {type: 'macro'};\nimport {\n CalendarDate,\n getDayOfWeek,\n startOfMonth\n} from '@internationalized/date';\nimport ChevronLeftIcon from '../s2wf-icons/S2_Icon_ChevronLeft_20_N.svg';\nimport ChevronRightIcon from '../s2wf-icons/S2_Icon_ChevronRight_20_N.svg';\nimport {forwardRefType, GlobalDOMAttributes} from '@react-types/shared';\nimport {getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};\nimport {helpTextStyles} from './Field';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport React, {createContext, CSSProperties, ForwardedRef, forwardRef, Fragment, PropsWithChildren, ReactElement, ReactNode, useContext, useMemo, useRef} from 'react';\nimport {useDateFormatter, useLocale, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\n\nexport interface CalendarProps<T extends DateValue>\n extends Omit<AriaCalendarProps<T>, 'visibleDuration' | 'style' | 'className' | 'styles' | keyof GlobalDOMAttributes>,\n StyleProps {\n /**\n * The error message to display when the calendar is invalid.\n */\n errorMessage?: ReactNode,\n /**\n * The number of months to display at once.\n * @default 1\n */\n visibleMonths?: number\n}\n\nexport const CalendarContext = createContext<ContextValue<Partial<CalendarProps<any>>, HTMLDivElement>>(null);\n\nconst calendarStyles = style({\n display: 'flex',\n flexDirection: 'column',\n gap: 24,\n width: 'fit',\n disableTapHighlight: true\n}, getAllowedOverrides());\n\nconst headerStyles = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: 'full'\n});\n\nconst headingStyles = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n margin: 0,\n width: 'full'\n});\n\nconst titleStyles = style({\n font: 'title-lg',\n textAlign: 'center',\n flexGrow: 1,\n flexShrink: 0,\n flexBasis: '0%',\n minWidth: 0\n});\n\nconst headerCellStyles = style({\n font: 'title-sm',\n cursor: 'default',\n textAlign: 'center',\n paddingStart: {\n default: 4,\n ':first-child': 0\n },\n paddingEnd: {\n default: 4,\n ':last-child': 0\n },\n paddingBottom: 12\n});\n\nconst cellStyles = style({\n outlineStyle: 'none',\n '--cell-gap': {\n type: 'paddingStart',\n value: 4\n },\n paddingStart: {\n default: 4,\n isFirstChild: 0\n },\n paddingEnd: {\n default: 4,\n isLastChild: 0\n },\n paddingTop: {\n default: 2,\n isFirstWeek: 0\n },\n paddingBottom: 2,\n position: 'relative',\n width: 32,\n height: 32,\n display: {\n default: 'flex',\n isOutsideMonth: 'none'\n },\n alignItems: 'center',\n justifyContent: 'center'\n});\n\nconst cellInnerStyles = style<CalendarCellRenderProps & {selectionMode: 'single' | 'range'}>({\n ...focusRing(),\n transition: {\n default: 'default',\n forcedColors: 'none'\n },\n outlineOffset: {\n default: -2,\n isToday: 2,\n isSelected: {\n selectionMode: {\n single: 2,\n range: -2\n }\n },\n isSelectionStart: 2,\n isSelectionEnd: 2\n },\n position: 'relative',\n font: 'body-sm',\n cursor: 'default',\n width: 'full',\n height: 32,\n borderRadius: 'full',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n forcedColorAdjust: 'none',\n backgroundColor: {\n default: 'transparent',\n isHovered: 'gray-100',\n isPressed: 'gray-100',\n isDisabled: 'transparent',\n isToday: {\n default: baseColor('gray-300'),\n isDisabled: 'disabled'\n },\n isSelected: {\n selectionMode: {\n single: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600'),\n isDisabled: 'transparent'\n },\n range: {\n isHovered: 'blue-500'\n }\n }\n },\n isSelectionStart: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n isSelectionEnd: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n isUnavailable: 'transparent',\n forcedColors: {\n default: 'transparent',\n isToday: 'ButtonFace',\n isHovered: 'Highlight',\n isSelected: {\n selectionMode: {\n single: 'Highlight',\n range: {\n isHovered: 'Highlight'\n }\n }\n },\n isSelectionStart: 'Highlight',\n isSelectionEnd: 'Highlight',\n isUnavailable: 'transparent'\n }\n },\n color: {\n default: 'neutral',\n isSelected: {\n default: 'white',\n selectionMode: {\n range: 'neutral'\n }\n },\n isSelectionStart: 'white',\n isSelectionEnd: 'white',\n isDisabled: 'disabled',\n forcedColors: {\n default: 'ButtonText',\n isToday: 'ButtonFace',\n isSelected: 'HighlightText',\n isSelectionStart: 'HighlightText',\n isSelectionEnd: 'HighlightText',\n isDisabled: 'GrayText'\n }\n }\n});\n\nconst unavailableStyles = style({\n position: 'absolute',\n top: 'calc(50% - 1px)',\n left: 'calc(25% - 1px)',\n right: 'calc(25% - 1px)',\n height: 2,\n transform: 'rotate(-16deg)',\n borderRadius: 'full',\n backgroundColor: '[currentColor]'\n});\n\nconst selectionSpanStyles = style({\n position: 'absolute',\n zIndex: -1,\n top: 0,\n insetStart: 'calc(-1 * var(--selection-span) * (var(--cell-width) + var(--cell-gap) + var(--cell-gap)))',\n insetEnd: 0,\n bottom: 0,\n borderWidth: 2,\n borderStyle: 'dashed',\n borderColor: {\n default: 'blue-800', // focus-indicator-color\n forcedColors: {\n default: 'ButtonText'\n }\n },\n borderStartRadius: 'full',\n borderEndRadius: 'full',\n backgroundColor: {\n default: 'blue-subtle',\n forcedColors: {\n default: 'Highlight'\n }\n },\n forcedColorAdjust: 'none'\n});\n\n/**\n * Calendars display a grid of days in one or more months and allow users to select a single date.\n */\nexport const Calendar = /*#__PURE__*/ (forwardRef as forwardRefType)(function Calendar<T extends DateValue>(props: CalendarProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useSpectrumContextProps(props, ref, CalendarContext);\n let {\n visibleMonths = 1,\n errorMessage,\n UNSAFE_style,\n UNSAFE_className,\n styles,\n ...otherProps\n } = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n return (\n <AriaCalendar\n {...otherProps}\n ref={ref}\n visibleDuration={{months: visibleMonths}}\n style={UNSAFE_style}\n className={(UNSAFE_className || '') + calendarStyles(null, styles)}>\n {({isInvalid, isDisabled}) => {\n return (\n <>\n <Provider\n values={[\n [HeaderContext, null],\n [HeadingContext, null]\n ]}>\n <Header styles={headerStyles}>\n <CalendarButton slot=\"previous\"><ChevronLeftIcon /></CalendarButton>\n <CalendarHeading />\n <CalendarButton slot=\"next\"><ChevronRightIcon /></CalendarButton>\n </Header>\n </Provider>\n <div\n className={style({\n display: 'flex',\n flexDirection: 'row',\n gap: 24,\n width: 'full',\n alignItems: 'start'\n })}>\n {Array.from({length: visibleMonths}).map((_, i) => (\n <CalendarGrid months={i} key={i} />\n ))}\n </div>\n {isInvalid && (\n <Text slot=\"errorMessage\" className={helpTextStyles({isInvalid, isDisabled, size: 'M'})}>\n {errorMessage || stringFormatter.format('calendar.invalidSelection', {selectedCount: 1})}\n </Text>\n )}\n </>\n );\n }}\n </AriaCalendar>\n );\n});\n\nexport const CalendarGrid = (props: Omit<AriaCalendarGridProps, 'children'> & PropsWithChildren & {months: number}): ReactElement => {\n // use isolation to start a new stacking context so that we can use zIndex -1 for the selection span.\n return (\n <AriaCalendarGrid\n className={style({\n borderCollapse: 'collapse',\n borderSpacing: 0,\n isolation: 'isolate'\n })}\n offset={{months: props.months}}>\n <CalendarGridHeader>\n {(day) => (\n <CalendarHeaderCell>\n {day}\n </CalendarHeaderCell>\n )}\n </CalendarGridHeader>\n <CalendarGridBody>\n {(date) => (\n <CalendarCell date={date} firstDayOfWeek={props.firstDayOfWeek} />\n )}\n </CalendarGridBody>\n </AriaCalendarGrid>\n );\n};\n\n// Ordinarily the heading is a formatted date range, ie January 2025 - February 2025.\n// However, we want to show each month individually.\nexport const CalendarHeading = (): ReactElement => {\n let calendarStateContext = useContext(CalendarStateContext);\n let rangeCalendarStateContext = useContext(RangeCalendarStateContext);\n let {visibleRange, timeZone} = calendarStateContext ?? rangeCalendarStateContext ?? {};\n let currentMonth = visibleRange?.start ?? visibleRange?.end;\n let monthFormatter = useDateFormatter({\n month: 'long',\n year: 'numeric',\n era: currentMonth && currentMonth.calendar.identifier === 'gregory' && currentMonth.era === 'BC' ? 'short' : undefined,\n calendar: visibleRange?.start.calendar.identifier,\n timeZone\n });\n let months = useMemo(() => {\n if (!visibleRange) {\n return [];\n }\n let months: string[] = [];\n for (let i = visibleRange.start; i.compare(visibleRange.end) <= 0; i = i.add({months: 1})) {\n // TODO: account for the first week possibly overlapping, like with a custom 454 calendar.\n // there has to be a better way to do this...\n if (i.month === visibleRange.start.month) {\n i = i.add({weeks: 1});\n }\n months.push(monthFormatter.format(i.toDate(timeZone!)));\n }\n return months;\n }, [visibleRange, monthFormatter, timeZone]);\n\n return (\n <Heading styles={headingStyles}>\n {months.map((month, i) => {\n if (i === 0) {\n return (\n <Fragment key={month}>\n <div className={titleStyles}>{month}</div>\n </Fragment>\n );\n } else {\n return (\n <Fragment key={month}>\n {/* Spacers to account for Next/Previous buttons and gap, spelled out to show the math */}\n <div className={style({visibility: 'hidden', width: 32})} />\n <div className={style({visibility: 'hidden', width: 24})} />\n <div className={style({visibility: 'hidden', width: 32})} />\n <div className={titleStyles}>{month}</div>\n </Fragment>\n );\n }\n })}\n </Heading>\n );\n};\n\nexport const CalendarButton = (props: Omit<ButtonProps, 'children'> & {children: ReactNode}): ReactElement => {\n let {direction} = useLocale();\n return (\n <div\n className={\n style({\n scale: {\n direction: {\n rtl: -1\n }\n }\n })({direction})\n }>\n <ActionButton\n {...props}\n isQuiet>\n {props.children}\n </ActionButton>\n </div>\n );\n};\n\nconst CalendarHeaderCell = (props: Omit<CalendarHeaderCellProps, 'children'> & PropsWithChildren): ReactElement => {\n return (\n <AriaCalendarHeaderCell className={headerCellStyles}>\n {props.children}\n </AriaCalendarHeaderCell>\n );\n};\n\nconst CalendarCell = (props: Omit<CalendarCellProps, 'children'> & {firstDayOfWeek: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | undefined}): ReactElement => {\n let {locale} = useLocale();\n let firstDayOfWeek = props.firstDayOfWeek;\n // Calculate the day and week index based on the date.\n let {dayIndex, weekIndex} = useWeekAndDayIndices(props.date, locale, firstDayOfWeek);\n\n let calendarStateContext = useContext(CalendarStateContext);\n let rangeCalendarStateContext = useContext(RangeCalendarStateContext);\n let state = (calendarStateContext ?? rangeCalendarStateContext)!;\n\n let isFirstWeek = weekIndex === 0;\n let isFirstChild = dayIndex === 0;\n let isLastChild = dayIndex === 6;\n return (\n <AriaCalendarCell\n date={props.date}\n className={(renderProps) => cellStyles({...renderProps, isFirstChild, isLastChild, isFirstWeek})}>\n {(renderProps) => <CalendarCellInner {...props} weekIndex={weekIndex} dayIndex={dayIndex} state={state} isRangeSelection={!!rangeCalendarStateContext} renderProps={renderProps} />}\n </AriaCalendarCell>\n );\n};\n\nconst CalendarCellInner = (props: Omit<CalendarCellProps, 'children'> & {isRangeSelection: boolean, state: CalendarState | RangeCalendarState, weekIndex: number, dayIndex: number, renderProps?: CalendarCellRenderProps, date: DateValue}): ReactElement => {\n let {weekIndex, dayIndex, date, renderProps, state, isRangeSelection} = props;\n let {getDatesInWeek} = state;\n let ref = useRef<HTMLDivElement>(null);\n let {isUnavailable, formattedDate, isSelected} = renderProps!;\n let startDate = startOfMonth(date);\n let datesInWeek = getDatesInWeek(weekIndex, startDate);\n\n // Starting from the current day, find the first day before it in the current week that is not selected.\n // Then, the span of selected days is the current day minus the first unselected day.\n let firstUnselectedInRangeInWeek = datesInWeek.slice(0, dayIndex + 1).reverse().findIndex((date, i) => {\n return date && i > 0 && (!state.isSelected(date) || date.month !== props.date.month);\n });\n let selectionSpan = -1;\n if (firstUnselectedInRangeInWeek > -1 && isSelected) {\n selectionSpan = firstUnselectedInRangeInWeek - 1;\n } else if (isSelected) {\n selectionSpan = dayIndex;\n }\n\n let prevDay = date.subtract({days: 1});\n let nextDay = date.add({days: 1});\n let isBackgroundStyleApplied = (\n isSelected\n && isRangeSelection\n && (state.isSelected(prevDay)\n || (nextDay.month === date.month && state.isSelected(nextDay)))\n );\n\n return (\n <div\n className={style({\n position: 'relative',\n width: 32,\n '--cell-width': {\n type: 'width',\n value: '[self(width)]'\n }\n })}>\n <div\n ref={ref}\n style={pressScale(ref, {})(renderProps!)}\n className={cellInnerStyles({...renderProps!, selectionMode: isRangeSelection ? 'range' : 'single'})}>\n <div>\n {formattedDate}\n </div>\n {isUnavailable && <div className={unavailableStyles} role=\"presentation\" />}\n </div>\n {isBackgroundStyleApplied && <div style={{'--selection-span': selectionSpan} as CSSProperties} className={selectionSpanStyles} role=\"presentation\" />}\n </div>\n );\n};\n\ntype DayOfWeek = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat';\n\n/**\n * Calculate the week index (0-based) and day index (0-based) for a given date within a month in a calendar.\n * @param date - The date to calculate indices for.\n * @param locale - The locale string (e.g., 'en-US', 'fr-FR', 'hi-IN-u-ca-indian').\n * @param firstDayOfWeek - Optional override for the first day of the week ('sun', 'mon', 'tue', etc.).\n * @returns Object with weekIndex and dayIndex.\n */\nfunction useWeekAndDayIndices(\n date: CalendarDate,\n locale: string,\n firstDayOfWeek?: DayOfWeek\n) {\n let {dayIndex, weekIndex} = useMemo(() => {\n // Get the day index within the week (0-6)\n const dayIndex = getDayOfWeek(date, locale, firstDayOfWeek);\n\n const monthStart = startOfMonth(date);\n\n // Calculate the week index by finding which week this date falls into\n // within the month's calendar grid\n const monthStartDayOfWeek = getDayOfWeek(monthStart, locale, firstDayOfWeek);\n const dayOfMonth = date.day;\n\n const weekIndex = Math.floor((dayOfMonth + monthStartDayOfWeek - 1) / 7);\n\n return {\n weekIndex,\n dayIndex\n };\n }, [date, locale, firstDayOfWeek]);\n\n return {dayIndex, weekIndex};\n}\n"],"names":[],"version":3,"file":"Calendar.css.map"}
package/dist/Calendar.mjs CHANGED
@@ -42,150 +42,150 @@ const $f06f4d5597ad704c$export$3b805cea1f178355 = /*#__PURE__*/ (0, $gwkOZ$creat
42
42
  const $f06f4d5597ad704c$var$calendarStyles = function anonymous(props, overrides) {
43
43
  let rules = " ";
44
44
  let width = false;
45
- let matches = (overrides || '').matchAll(/(?:^|\s)(J|G|I|H|_u|_v|_s|__A|_d|_J|z|y|B|A|_P|_9|W|_l|_A|_z|Z|N|L)[^\s]+/g);
45
+ let matches = (overrides || '').matchAll(/(?:^|\s)(J|G|I|H|_u|_v|_s|__A|_d|_J|z|y|B|A|_P|_9|W|_l|_A|_z|_6|Z|N|L)[^\s]+/g);
46
46
  for (let p of matches){
47
47
  if (p[1] === "Z") width = true;
48
48
  rules += p[0];
49
49
  }
50
- rules += ' sd11';
51
- rules += ' _ta11';
52
- rules += ' Uj11';
53
- rules += ' qj11';
54
- if (!width) rules += ' ZJ11';
55
- rules += ' __ca11';
50
+ rules += ' sd12';
51
+ rules += ' _ta12';
52
+ rules += ' Uj12';
53
+ rules += ' qj12';
54
+ if (!width) rules += ' ZJ12';
55
+ rules += ' __ca12';
56
56
  return rules;
57
57
  };
58
- const $f06f4d5597ad704c$var$headerStyles = " sd11 eb11 _Ce11 Za11";
59
- const $f06f4d5597ad704c$var$headingStyles = " sd11 eb11 _Ce11 Jy11 Gy11 Iy11 Hy11 Za11";
60
- const $f06f4d5597ad704c$var$titleStyles = " uk11 uch11 udi11 uea11 ugb11 uhd11 uje11 u2NhKxcl11 uic11 -_6BNtrc-e11 vx11 wd11 xd11 _xa11 wX0cczbc11 xX0cczbc11 _xX0cczba11 wfd11 xfd11 _xfa11 wfX0cczbc11 xfX0cczbc11 _xfX0cczba11 _Fd11 _FezxGHba11 _FnuYUweb11 po11 _Wa11 _ub11 _va11 _sa11 Na11";
61
- const $f06f4d5597ad704c$var$headerCellStyles = " uk11 uch11 udi11 uea11 ugb11 uhd11 uje11 u2NhKxcl11 uic11 -_6BNtrc-c11 vx11 wd11 xd11 _xa11 wX0cczbc11 xX0cczbc11 _xX0cczba11 wfd11 xfd11 _xfa11 wfX0cczbc11 xfX0cczbc11 _xfX0cczba11 _Fd11 _FezxGHba11 _FnuYUweb11 po11 ri11 _Wa11 Sp11 Sbd11 Rp11 Rkd11 Qe11";
58
+ const $f06f4d5597ad704c$var$headerStyles = " sd12 eb12 _Ce12 Za12";
59
+ const $f06f4d5597ad704c$var$headingStyles = " sd12 eb12 _Ce12 Jy12 Gy12 Iy12 Hy12 Za12";
60
+ const $f06f4d5597ad704c$var$titleStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-e12 vx12 wd12 xd12 _xa12 wX0cczbc12 xX0cczbc12 _xX0cczba12 wfd12 xfd12 _xfa12 wfX0cczbc12 xfX0cczbc12 _xfX0cczba12 _Fd12 _FezxGHba12 _FnuYUweb12 po12 _Wa12 _ub12 _va12 _sa12 Na12";
61
+ const $f06f4d5597ad704c$var$headerCellStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-c12 vx12 wd12 xd12 _xa12 wX0cczbc12 xX0cczbc12 _xX0cczba12 wfd12 xfd12 _xfa12 wfX0cczbc12 xfX0cczbc12 _xfX0cczba12 _Fd12 _FezxGHba12 _FnuYUweb12 po12 ri12 _Wa12 Sp12 Sbd12 Rp12 Rkd12 Qe12";
62
62
  const $f06f4d5597ad704c$var$cellStyles = function anonymous(props) {
63
63
  let rules = " ";
64
- rules += ' _Le11';
65
- rules += ' -uq4sQ-Sp11';
66
- if (props.isFirstChild) rules += ' Sd11';
67
- else rules += ' Sp11';
68
- if (props.isLastChild) rules += ' Rd11';
69
- else rules += ' Rp11';
70
- if (props.isFirstWeek) rules += ' Td11';
71
- else rules += ' Tj11';
72
- rules += ' Qj11';
73
- rules += ' _Pc11';
74
- rules += ' ZC11';
75
- rules += ' Fx11';
76
- if (props.isOutsideMonth) rules += ' sk11';
77
- else rules += ' sd11';
78
- rules += ' eb11';
79
- rules += ' _Ca11';
64
+ rules += ' _Le12';
65
+ rules += ' -uq4sQ-Sp12';
66
+ if (props.isFirstChild) rules += ' Sd12';
67
+ else rules += ' Sp12';
68
+ if (props.isLastChild) rules += ' Rd12';
69
+ else rules += ' Rp12';
70
+ if (props.isFirstWeek) rules += ' Td12';
71
+ else rules += ' Tj12';
72
+ rules += ' Qj12';
73
+ rules += ' _Pc12';
74
+ rules += ' ZC12';
75
+ rules += ' Fx12';
76
+ if (props.isOutsideMonth) rules += ' sk12';
77
+ else rules += ' sd12';
78
+ rules += ' eb12';
79
+ rules += ' _Ca12';
80
80
  return rules;
81
81
  };
82
82
  const $f06f4d5597ad704c$var$cellInnerStyles = function anonymous(props) {
83
83
  let rules = " ";
84
- if (props.isFocusVisible) rules += ' _Lf11';
85
- else rules += ' _Le11';
86
- rules += ' Oh11';
87
- rules += ' _Mc11';
88
- if (props.isSelectionEnd) rules += ' _Kd11';
89
- else if (props.isSelectionStart) rules += ' _Kd11';
84
+ if (props.isFocusVisible) rules += ' _Lf12';
85
+ else rules += ' _Le12';
86
+ rules += ' Oh12';
87
+ rules += ' _Mc12';
88
+ if (props.isSelectionEnd) rules += ' _Kd12';
89
+ else if (props.isSelectionStart) rules += ' _Kd12';
90
90
  else if (props.isSelected) {
91
- if (props.selectionMode === "range") rules += ' _Kb11';
92
- else if (props.selectionMode === "single") rules += ' _Kd11';
93
- } else if (props.isToday) rules += ' _Kd11';
94
- else rules += ' _Kb11';
95
- rules += ' Yd11';
96
- rules += ' Yle11';
97
- rules += ' Xb11';
98
- rules += ' Xlb11';
99
- rules += ' _2b11';
100
- rules += ' _2lb11';
101
- rules += ' _Pc11';
102
- rules += ' uk11';
103
- rules += ' uch11';
104
- rules += ' udi11';
105
- rules += ' uea11';
106
- rules += ' ugb11';
107
- rules += ' uhd11';
108
- rules += ' uje11';
109
- rules += ' u2NhKxcl11';
110
- rules += ' uic11';
111
- rules += ' -_6BNtrc-c11';
112
- rules += ' vx11';
113
- rules += ' wb11';
114
- rules += ' xb11';
115
- rules += ' _xa11';
116
- rules += ' _Fb11';
117
- rules += ' _FnuYUwec11';
118
- if (props.isDisabled) rules += ' pp11';
119
- else if (props.isSelectionEnd) rules += ' px11';
120
- else if (props.isSelectionStart) rules += ' px11';
91
+ if (props.selectionMode === "range") rules += ' _Kb12';
92
+ else if (props.selectionMode === "single") rules += ' _Kd12';
93
+ } else if (props.isToday) rules += ' _Kd12';
94
+ else rules += ' _Kb12';
95
+ rules += ' Yd12';
96
+ rules += ' Yle12';
97
+ rules += ' Xb12';
98
+ rules += ' Xlb12';
99
+ rules += ' _2b12';
100
+ rules += ' _2lb12';
101
+ rules += ' _Pc12';
102
+ rules += ' uk12';
103
+ rules += ' uch12';
104
+ rules += ' udi12';
105
+ rules += ' uea12';
106
+ rules += ' ugb12';
107
+ rules += ' uhd12';
108
+ rules += ' uje12';
109
+ rules += ' u2NhKxcl12';
110
+ rules += ' uic12';
111
+ rules += ' -_6BNtrc-c12';
112
+ rules += ' vx12';
113
+ rules += ' wb12';
114
+ rules += ' xb12';
115
+ rules += ' _xa12';
116
+ rules += ' _Fb12';
117
+ rules += ' _FnuYUwec12';
118
+ if (props.isDisabled) rules += ' pp12';
119
+ else if (props.isSelectionEnd) rules += ' px12';
120
+ else if (props.isSelectionStart) rules += ' px12';
121
121
  else if (props.isSelected) {
122
- if (props.selectionMode === "range") rules += ' pt11';
123
- else rules += ' px11';
124
- } else rules += ' pt11';
125
- if (props.isDisabled) rules += ' plc11';
126
- else if (props.isSelectionEnd) rules += ' ple11';
127
- else if (props.isSelectionStart) rules += ' ple11';
128
- else if (props.isSelected) rules += ' ple11';
129
- else if (props.isToday) rules += ' pla11';
130
- else rules += ' plb11';
131
- rules += ' ri11';
132
- rules += ' Za11';
133
- rules += ' Fx11';
134
- rules += ' og11';
135
- rules += ' ng11';
136
- rules += ' kg11';
137
- rules += ' jg11';
138
- rules += ' sd11';
139
- rules += ' eb11';
140
- rules += ' _Ca11';
141
- rules += ' _yb11';
142
- if (props.isUnavailable) rules += ' g911';
122
+ if (props.selectionMode === "range") rules += ' pt12';
123
+ else rules += ' px12';
124
+ } else rules += ' pt12';
125
+ if (props.isDisabled) rules += ' plc12';
126
+ else if (props.isSelectionEnd) rules += ' ple12';
127
+ else if (props.isSelectionStart) rules += ' ple12';
128
+ else if (props.isSelected) rules += ' ple12';
129
+ else if (props.isToday) rules += ' pla12';
130
+ else rules += ' plb12';
131
+ rules += ' ri12';
132
+ rules += ' Za12';
133
+ rules += ' Fx12';
134
+ rules += ' og12';
135
+ rules += ' ng12';
136
+ rules += ' kg12';
137
+ rules += ' jg12';
138
+ rules += ' sd12';
139
+ rules += ' eb12';
140
+ rules += ' _Ca12';
141
+ rules += ' _yb12';
142
+ if (props.isUnavailable) rules += ' g912';
143
143
  else if (props.isSelectionEnd) {
144
- if (props.isFocusVisible) rules += ' gUgARdd11';
145
- else if (props.isPressed) rules += ' gUgARdd11';
146
- else if (props.isHovered) rules += ' gUgARdd11';
147
- else rules += ' g5qAiPc11';
144
+ if (props.isFocusVisible) rules += ' gUgARdd12';
145
+ else if (props.isPressed) rules += ' gUgARdd12';
146
+ else if (props.isHovered) rules += ' gUgARdd12';
147
+ else rules += ' g5qAiPc12';
148
148
  } else if (props.isSelectionStart) {
149
- if (props.isFocusVisible) rules += ' gUgARdd11';
150
- else if (props.isPressed) rules += ' gUgARdd11';
151
- else if (props.isHovered) rules += ' gUgARdd11';
152
- else rules += ' g5qAiPc11';
149
+ if (props.isFocusVisible) rules += ' gUgARdd12';
150
+ else if (props.isPressed) rules += ' gUgARdd12';
151
+ else if (props.isHovered) rules += ' gUgARdd12';
152
+ else rules += ' g5qAiPc12';
153
153
  } else if (props.isSelected) {
154
154
  if (props.selectionMode === "range") {
155
- if (props.isHovered) rules += ' gNAacne11';
155
+ if (props.isHovered) rules += ' gNAacne12';
156
156
  } else if (props.selectionMode === "single") {
157
- if (props.isDisabled) rules += ' g911';
158
- else if (props.isFocusVisible) rules += ' gUgARdd11';
159
- else if (props.isPressed) rules += ' gUgARdd11';
160
- else if (props.isHovered) rules += ' gUgARdd11';
161
- else rules += ' g5qAiPc11';
157
+ if (props.isDisabled) rules += ' g912';
158
+ else if (props.isFocusVisible) rules += ' gUgARdd12';
159
+ else if (props.isPressed) rules += ' gUgARdd12';
160
+ else if (props.isHovered) rules += ' gUgARdd12';
161
+ else rules += ' g5qAiPc12';
162
162
  }
163
163
  } else if (props.isToday) {
164
- if (props.isDisabled) rules += ' gH11';
164
+ if (props.isDisabled) rules += ' gH12';
165
165
  else {
166
- if (props.isPressed) rules += ' gw11';
167
- else if (props.isFocusVisible) rules += ' gw11';
168
- else if (props.isHovered) rules += ' gw11';
169
- else rules += ' gE11';
166
+ if (props.isPressed) rules += ' gw12';
167
+ else if (props.isFocusVisible) rules += ' gw12';
168
+ else if (props.isHovered) rules += ' gw12';
169
+ else rules += ' gE12';
170
170
  }
171
- } else if (props.isDisabled) rules += ' g911';
172
- else if (props.isPressed) rules += ' gH11';
173
- else if (props.isHovered) rules += ' gH11';
174
- else rules += ' g911';
175
- if (props.isUnavailable) rules += ' gl911';
176
- else if (props.isSelectionEnd) rules += ' gle11';
177
- else if (props.isSelectionStart) rules += ' gle11';
171
+ } else if (props.isDisabled) rules += ' g912';
172
+ else if (props.isPressed) rules += ' gH12';
173
+ else if (props.isHovered) rules += ' gH12';
174
+ else rules += ' g912';
175
+ if (props.isUnavailable) rules += ' gl912';
176
+ else if (props.isSelectionEnd) rules += ' gle12';
177
+ else if (props.isSelectionStart) rules += ' gle12';
178
178
  else if (props.isSelected) {
179
179
  if (props.selectionMode === "range") {
180
- if (props.isHovered) rules += ' gle11';
181
- } else if (props.selectionMode === "single") rules += ' gle11';
182
- } else if (props.isHovered) rules += ' gle11';
183
- else if (props.isToday) rules += ' glb11';
184
- else rules += ' gl911';
180
+ if (props.isHovered) rules += ' gle12';
181
+ } else if (props.selectionMode === "single") rules += ' gle12';
182
+ } else if (props.isHovered) rules += ' gle12';
183
+ else if (props.isToday) rules += ' glb12';
184
+ else rules += ' gl912';
185
185
  return rules;
186
186
  };
187
- const $f06f4d5597ad704c$var$unavailableStyles = " _Pa11 WzErnCb11 _EjhYzGc11 _RjhYzGc11 FlAZvq11 _ZN7ydnb11 og11 ng11 kg11 jg11 g5ZbAob11";
188
- const $f06f4d5597ad704c$var$selectionSpanStyles = " _Pa11 _9a11 Wr11 _AOJNuv11 _zr11 _lr11 _kc11 hc11 mc11 lc11 _ja11 ix11 ilb11 og11 kg11 ng11 jg11 gG11 gle11 _yb11";
187
+ const $f06f4d5597ad704c$var$unavailableStyles = " _Pa12 WzErnCb12 _EjhYzGc12 _RjhYzGc12 FlAZvq12 _ZN7ydnb12 og12 ng12 kg12 jg12 g5ZbAob12";
188
+ const $f06f4d5597ad704c$var$selectionSpanStyles = " _Pa12 _9a12 Wr12 _AOJNuv12 _zr12 _lr12 _kc12 hc12 mc12 lc12 _ja12 ix12 ilb12 og12 kg12 ng12 jg12 gG12 gle12 _yb12";
189
189
  const $f06f4d5597ad704c$export$e1aef45b828286de = /*#__PURE__*/ (0, $gwkOZ$forwardRef)(function Calendar(props, ref) {
190
190
  [props, ref] = (0, $5ce63c423902f47d$export$764f6146fadd77f7)(props, ref, $f06f4d5597ad704c$export$3b805cea1f178355);
191
191
  let { visibleMonths: visibleMonths = 1, errorMessage: errorMessage, UNSAFE_style: UNSAFE_style, UNSAFE_className: UNSAFE_className, styles: styles, ...otherProps } = props;
@@ -228,7 +228,7 @@ const $f06f4d5597ad704c$export$e1aef45b828286de = /*#__PURE__*/ (0, $gwkOZ$forwa
228
228
  })
229
229
  }),
230
230
  /*#__PURE__*/ (0, $gwkOZ$jsx)("div", {
231
- className: " sd11 _tc11 Uj11 qj11 Za11 ed11",
231
+ className: " sd12 _tc12 Uj12 qj12 Za12 ed12",
232
232
  children: Array.from({
233
233
  length: visibleMonths
234
234
  }).map((_, i)=>/*#__PURE__*/ (0, $gwkOZ$jsx)($f06f4d5597ad704c$export$5bd780d491cfc46c, {
@@ -254,7 +254,7 @@ const $f06f4d5597ad704c$export$e1aef45b828286de = /*#__PURE__*/ (0, $gwkOZ$forwa
254
254
  const $f06f4d5597ad704c$export$5bd780d491cfc46c = (props)=>{
255
255
  // use isolation to start a new stacking context so that we can use zIndex -1 for the selection span.
256
256
  return /*#__PURE__*/ (0, $gwkOZ$jsxs)((0, $gwkOZ$CalendarGrid), {
257
- className: " __na11 __oe11 _Bb11",
257
+ className: " __na12 __oe12 _Bb12",
258
258
  offset: {
259
259
  months: props.months
260
260
  },
@@ -316,13 +316,13 @@ const $f06f4d5597ad704c$export$77af08ed164baa7 = ()=>{
316
316
  else return /*#__PURE__*/ (0, $gwkOZ$jsxs)((0, $gwkOZ$Fragment1), {
317
317
  children: [
318
318
  /*#__PURE__*/ (0, $gwkOZ$jsx)("div", {
319
- className: " _6b11 ZC11"
319
+ className: " _6b12 ZC12"
320
320
  }),
321
321
  /*#__PURE__*/ (0, $gwkOZ$jsx)("div", {
322
- className: " _6b11 Zo11"
322
+ className: " _6b12 Zo12"
323
323
  }),
324
324
  /*#__PURE__*/ (0, $gwkOZ$jsx)("div", {
325
- className: " _6b11 ZC11"
325
+ className: " _6b12 ZC12"
326
326
  }),
327
327
  /*#__PURE__*/ (0, $gwkOZ$jsx)("div", {
328
328
  className: $f06f4d5597ad704c$var$titleStyles,
@@ -339,12 +339,12 @@ const $f06f4d5597ad704c$export$adb29da0ac001538 = (props1)=>{
339
339
  className: function anonymous(props) {
340
340
  let rules = " ";
341
341
  if (props.direction === "rtl") {
342
- rules += ' -Z4Pn4c-a11';
343
- rules += ' __Ha11';
342
+ rules += ' -Z4Pn4c-a12';
343
+ rules += ' __Ha12';
344
344
  }
345
345
  if (props.direction === "rtl") {
346
- rules += ' -_04Pn4c-a11';
347
- rules += ' __Ha11';
346
+ rules += ' -_04Pn4c-a12';
347
+ rules += ' __Ha12';
348
348
  }
349
349
  return rules;
350
350
  }({
@@ -415,7 +415,7 @@ const $f06f4d5597ad704c$var$CalendarCellInner = (props)=>{
415
415
  });
416
416
  let isBackgroundStyleApplied = isSelected && isRangeSelection && (state.isSelected(prevDay) || nextDay.month === date.month && state.isSelected(nextDay));
417
417
  return /*#__PURE__*/ (0, $gwkOZ$jsxs)("div", {
418
- className: " _Pc11 ZvFFGYc11 -_4Isswc-ZvFFGYc11 -Z_-ZC11",
418
+ className: " _Pc12 ZvFFGYc12 -_4Isswc-ZvFFGYc12 -Z_-ZC12",
419
419
  children: [
420
420
  /*#__PURE__*/ (0, $gwkOZ$jsxs)("div", {
421
421
  ref: ref,
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-spectrum/s2/src/Calendar.tsx"],"sourcesContent":["/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ActionButton, Header, HeaderContext, Heading, HeadingContext, pressScale} from './';\nimport {\n Calendar as AriaCalendar,\n CalendarCell as AriaCalendarCell,\n CalendarGrid as AriaCalendarGrid,\n CalendarHeaderCell as AriaCalendarHeaderCell,\n CalendarProps as AriaCalendarProps,\n ButtonProps,\n CalendarCellProps,\n CalendarCellRenderProps,\n CalendarGridBody,\n CalendarGridHeader,\n CalendarHeaderCellProps,\n CalendarState,\n CalendarStateContext,\n ContextValue,\n DateValue,\n Provider,\n RangeCalendarState,\n RangeCalendarStateContext,\n Text\n} from 'react-aria-components';\nimport {AriaCalendarGridProps} from '@react-aria/calendar';\nimport {baseColor, focusRing, lightDark, style} from '../style' with {type: 'macro'};\nimport {\n CalendarDate,\n getDayOfWeek,\n startOfMonth\n} from '@internationalized/date';\nimport ChevronLeftIcon from '../s2wf-icons/S2_Icon_ChevronLeft_20_N.svg';\nimport ChevronRightIcon from '../s2wf-icons/S2_Icon_ChevronRight_20_N.svg';\nimport {forwardRefType, GlobalDOMAttributes} from '@react-types/shared';\nimport {getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};\nimport {helpTextStyles} from './Field';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport React, {createContext, CSSProperties, ForwardedRef, forwardRef, Fragment, PropsWithChildren, ReactElement, ReactNode, useContext, useMemo, useRef} from 'react';\nimport {useDateFormatter, useLocale, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\n\nexport interface CalendarProps<T extends DateValue>\n extends Omit<AriaCalendarProps<T>, 'visibleDuration' | 'style' | 'className' | 'styles' | keyof GlobalDOMAttributes>,\n StyleProps {\n /**\n * The error message to display when the calendar is invalid.\n */\n errorMessage?: ReactNode,\n /**\n * The number of months to display at once.\n * @default 1\n */\n visibleMonths?: number\n}\n\nexport const CalendarContext = createContext<ContextValue<Partial<CalendarProps<any>>, HTMLDivElement>>(null);\n\nconst calendarStyles = style({\n display: 'flex',\n flexDirection: 'column',\n gap: 24,\n width: 'fit',\n disableTapHighlight: true\n}, getAllowedOverrides());\n\nconst headerStyles = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: 'full'\n});\n\nconst headingStyles = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n margin: 0,\n width: 'full'\n});\n\nconst titleStyles = style({\n font: 'title-lg',\n textAlign: 'center',\n flexGrow: 1,\n flexShrink: 0,\n flexBasis: '0%',\n minWidth: 0\n});\n\nconst headerCellStyles = style({\n font: 'title-sm',\n cursor: 'default',\n textAlign: 'center',\n paddingStart: {\n default: 4,\n ':first-child': 0\n },\n paddingEnd: {\n default: 4,\n ':last-child': 0\n },\n paddingBottom: 12\n});\n\nconst cellStyles = style({\n outlineStyle: 'none',\n '--cell-gap': {\n type: 'paddingStart',\n value: 4\n },\n paddingStart: {\n default: 4,\n isFirstChild: 0\n },\n paddingEnd: {\n default: 4,\n isLastChild: 0\n },\n paddingTop: {\n default: 2,\n isFirstWeek: 0\n },\n paddingBottom: 2,\n position: 'relative',\n width: 32,\n height: 32,\n display: {\n default: 'flex',\n isOutsideMonth: 'none'\n },\n alignItems: 'center',\n justifyContent: 'center'\n});\n\nconst cellInnerStyles = style<CalendarCellRenderProps & {selectionMode: 'single' | 'range'}>({\n ...focusRing(),\n transition: {\n default: 'default',\n forcedColors: 'none'\n },\n outlineOffset: {\n default: -2,\n isToday: 2,\n isSelected: {\n selectionMode: {\n single: 2,\n range: -2\n }\n },\n isSelectionStart: 2,\n isSelectionEnd: 2\n },\n position: 'relative',\n font: 'body-sm',\n cursor: 'default',\n width: 'full',\n height: 32,\n borderRadius: 'full',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n forcedColorAdjust: 'none',\n backgroundColor: {\n default: 'transparent',\n isHovered: 'gray-100',\n isPressed: 'gray-100',\n isDisabled: 'transparent',\n isToday: {\n default: baseColor('gray-300'),\n isDisabled: 'disabled'\n },\n isSelected: {\n selectionMode: {\n single: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600'),\n isDisabled: 'transparent'\n },\n range: {\n isHovered: 'blue-500'\n }\n }\n },\n isSelectionStart: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n isSelectionEnd: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n isUnavailable: 'transparent',\n forcedColors: {\n default: 'transparent',\n isToday: 'ButtonFace',\n isHovered: 'Highlight',\n isSelected: {\n selectionMode: {\n single: 'Highlight',\n range: {\n isHovered: 'Highlight'\n }\n }\n },\n isSelectionStart: 'Highlight',\n isSelectionEnd: 'Highlight',\n isUnavailable: 'transparent'\n }\n },\n color: {\n default: 'neutral',\n isSelected: {\n default: 'white',\n selectionMode: {\n range: 'neutral'\n }\n },\n isSelectionStart: 'white',\n isSelectionEnd: 'white',\n isDisabled: 'disabled',\n forcedColors: {\n default: 'ButtonText',\n isToday: 'ButtonFace',\n isSelected: 'HighlightText',\n isSelectionStart: 'HighlightText',\n isSelectionEnd: 'HighlightText',\n isDisabled: 'GrayText'\n }\n }\n});\n\nconst unavailableStyles = style({\n position: 'absolute',\n top: 'calc(50% - 1px)',\n left: 'calc(25% - 1px)',\n right: 'calc(25% - 1px)',\n height: 2,\n transform: 'rotate(-16deg)',\n borderRadius: 'full',\n backgroundColor: '[currentColor]'\n});\n\nconst selectionSpanStyles = style({\n position: 'absolute',\n zIndex: -1,\n top: 0,\n insetStart: 'calc(-1 * var(--selection-span) * (var(--cell-width) + var(--cell-gap) + var(--cell-gap)))',\n insetEnd: 0,\n bottom: 0,\n borderWidth: 2,\n borderStyle: 'dashed',\n borderColor: {\n default: 'blue-800', // focus-indicator-color\n forcedColors: {\n default: 'ButtonText'\n }\n },\n borderStartRadius: 'full',\n borderEndRadius: 'full',\n backgroundColor: {\n default: 'blue-subtle',\n forcedColors: {\n default: 'Highlight'\n }\n },\n forcedColorAdjust: 'none'\n});\n\nexport const Calendar = /*#__PURE__*/ (forwardRef as forwardRefType)(function Calendar<T extends DateValue>(props: CalendarProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useSpectrumContextProps(props, ref, CalendarContext);\n let {\n visibleMonths = 1,\n errorMessage,\n UNSAFE_style,\n UNSAFE_className,\n styles,\n ...otherProps\n } = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n return (\n <AriaCalendar\n {...otherProps}\n ref={ref}\n visibleDuration={{months: visibleMonths}}\n style={UNSAFE_style}\n className={(UNSAFE_className || '') + calendarStyles(null, styles)}>\n {({isInvalid, isDisabled}) => {\n return (\n <>\n <Provider\n values={[\n [HeaderContext, null],\n [HeadingContext, null]\n ]}>\n <Header styles={headerStyles}>\n <CalendarButton slot=\"previous\"><ChevronLeftIcon /></CalendarButton>\n <CalendarHeading />\n <CalendarButton slot=\"next\"><ChevronRightIcon /></CalendarButton>\n </Header>\n </Provider>\n <div\n className={style({\n display: 'flex',\n flexDirection: 'row',\n gap: 24,\n width: 'full',\n alignItems: 'start'\n })}>\n {Array.from({length: visibleMonths}).map((_, i) => (\n <CalendarGrid months={i} key={i} />\n ))}\n </div>\n {isInvalid && (\n <Text slot=\"errorMessage\" className={helpTextStyles({isInvalid, isDisabled, size: 'M'})}>\n {errorMessage || stringFormatter.format('calendar.invalidSelection', {selectedCount: 1})}\n </Text>\n )}\n </>\n );\n }}\n </AriaCalendar>\n );\n});\n\nexport const CalendarGrid = (props: Omit<AriaCalendarGridProps, 'children'> & PropsWithChildren & {months: number}): ReactElement => {\n // use isolation to start a new stacking context so that we can use zIndex -1 for the selection span.\n return (\n <AriaCalendarGrid\n className={style({\n borderCollapse: 'collapse',\n borderSpacing: 0,\n isolation: 'isolate'\n })}\n offset={{months: props.months}}>\n <CalendarGridHeader>\n {(day) => (\n <CalendarHeaderCell>\n {day}\n </CalendarHeaderCell>\n )}\n </CalendarGridHeader>\n <CalendarGridBody>\n {(date) => (\n <CalendarCell date={date} firstDayOfWeek={props.firstDayOfWeek} />\n )}\n </CalendarGridBody>\n </AriaCalendarGrid>\n );\n};\n\n// Ordinarily the heading is a formatted date range, ie January 2025 - February 2025.\n// However, we want to show each month individually.\nexport const CalendarHeading = (): ReactElement => {\n let calendarStateContext = useContext(CalendarStateContext);\n let rangeCalendarStateContext = useContext(RangeCalendarStateContext);\n let {visibleRange, timeZone} = calendarStateContext ?? rangeCalendarStateContext ?? {};\n let currentMonth = visibleRange?.start ?? visibleRange?.end;\n let monthFormatter = useDateFormatter({\n month: 'long',\n year: 'numeric',\n era: currentMonth && currentMonth.calendar.identifier === 'gregory' && currentMonth.era === 'BC' ? 'short' : undefined,\n calendar: visibleRange?.start.calendar.identifier,\n timeZone\n });\n let months = useMemo(() => {\n if (!visibleRange) {\n return [];\n }\n let months: string[] = [];\n for (let i = visibleRange.start; i.compare(visibleRange.end) <= 0; i = i.add({months: 1})) {\n // TODO: account for the first week possibly overlapping, like with a custom 454 calendar.\n // there has to be a better way to do this...\n if (i.month === visibleRange.start.month) {\n i = i.add({weeks: 1});\n }\n months.push(monthFormatter.format(i.toDate(timeZone!)));\n }\n return months;\n }, [visibleRange, monthFormatter, timeZone]);\n\n return (\n <Heading styles={headingStyles}>\n {months.map((month, i) => {\n if (i === 0) {\n return (\n <Fragment key={month}>\n <div className={titleStyles}>{month}</div>\n </Fragment>\n );\n } else {\n return (\n <Fragment key={month}>\n {/* Spacers to account for Next/Previous buttons and gap, spelled out to show the math */}\n <div className={style({visibility: 'hidden', width: 32})} />\n <div className={style({visibility: 'hidden', width: 24})} />\n <div className={style({visibility: 'hidden', width: 32})} />\n <div className={titleStyles}>{month}</div>\n </Fragment>\n );\n }\n })}\n </Heading>\n );\n};\n\nexport const CalendarButton = (props: Omit<ButtonProps, 'children'> & {children: ReactNode}): ReactElement => {\n let {direction} = useLocale();\n return (\n <div\n className={\n style({\n scale: {\n direction: {\n rtl: -1\n }\n }\n })({direction})\n }>\n <ActionButton\n {...props}\n isQuiet>\n {props.children}\n </ActionButton>\n </div>\n );\n};\n\nconst CalendarHeaderCell = (props: Omit<CalendarHeaderCellProps, 'children'> & PropsWithChildren): ReactElement => {\n return (\n <AriaCalendarHeaderCell className={headerCellStyles}>\n {props.children}\n </AriaCalendarHeaderCell>\n );\n};\n\nconst CalendarCell = (props: Omit<CalendarCellProps, 'children'> & {firstDayOfWeek: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | undefined}): ReactElement => {\n let {locale} = useLocale();\n let firstDayOfWeek = props.firstDayOfWeek;\n // Calculate the day and week index based on the date.\n let {dayIndex, weekIndex} = useWeekAndDayIndices(props.date, locale, firstDayOfWeek);\n\n let calendarStateContext = useContext(CalendarStateContext);\n let rangeCalendarStateContext = useContext(RangeCalendarStateContext);\n let state = (calendarStateContext ?? rangeCalendarStateContext)!;\n\n let isFirstWeek = weekIndex === 0;\n let isFirstChild = dayIndex === 0;\n let isLastChild = dayIndex === 6;\n return (\n <AriaCalendarCell\n date={props.date}\n className={(renderProps) => cellStyles({...renderProps, isFirstChild, isLastChild, isFirstWeek})}>\n {(renderProps) => <CalendarCellInner {...props} weekIndex={weekIndex} dayIndex={dayIndex} state={state} isRangeSelection={!!rangeCalendarStateContext} renderProps={renderProps} />}\n </AriaCalendarCell>\n );\n};\n\nconst CalendarCellInner = (props: Omit<CalendarCellProps, 'children'> & {isRangeSelection: boolean, state: CalendarState | RangeCalendarState, weekIndex: number, dayIndex: number, renderProps?: CalendarCellRenderProps, date: DateValue}): ReactElement => {\n let {weekIndex, dayIndex, date, renderProps, state, isRangeSelection} = props;\n let {getDatesInWeek} = state;\n let ref = useRef<HTMLDivElement>(null);\n let {isUnavailable, formattedDate, isSelected} = renderProps!;\n let startDate = startOfMonth(date);\n let datesInWeek = getDatesInWeek(weekIndex, startDate);\n\n // Starting from the current day, find the first day before it in the current week that is not selected.\n // Then, the span of selected days is the current day minus the first unselected day.\n let firstUnselectedInRangeInWeek = datesInWeek.slice(0, dayIndex + 1).reverse().findIndex((date, i) => {\n return date && i > 0 && (!state.isSelected(date) || date.month !== props.date.month);\n });\n let selectionSpan = -1;\n if (firstUnselectedInRangeInWeek > -1 && isSelected) {\n selectionSpan = firstUnselectedInRangeInWeek - 1;\n } else if (isSelected) {\n selectionSpan = dayIndex;\n }\n\n let prevDay = date.subtract({days: 1});\n let nextDay = date.add({days: 1});\n let isBackgroundStyleApplied = (\n isSelected\n && isRangeSelection\n && (state.isSelected(prevDay)\n || (nextDay.month === date.month && state.isSelected(nextDay)))\n );\n\n return (\n <div\n className={style({\n position: 'relative',\n width: 32,\n '--cell-width': {\n type: 'width',\n value: '[self(width)]'\n }\n })}>\n <div\n ref={ref}\n style={pressScale(ref, {})(renderProps!)}\n className={cellInnerStyles({...renderProps!, selectionMode: isRangeSelection ? 'range' : 'single'})}>\n <div>\n {formattedDate}\n </div>\n {isUnavailable && <div className={unavailableStyles} role=\"presentation\" />}\n </div>\n {isBackgroundStyleApplied && <div style={{'--selection-span': selectionSpan} as CSSProperties} className={selectionSpanStyles} role=\"presentation\" />}\n </div>\n );\n};\n\ntype DayOfWeek = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat';\n\n/**\n * Calculate the week index (0-based) and day index (0-based) for a given date within a month in a calendar.\n * @param date - The date to calculate indices for.\n * @param locale - The locale string (e.g., 'en-US', 'fr-FR', 'hi-IN-u-ca-indian').\n * @param firstDayOfWeek - Optional override for the first day of the week ('sun', 'mon', 'tue', etc.).\n * @returns Object with weekIndex and dayIndex.\n */\nfunction useWeekAndDayIndices(\n date: CalendarDate,\n locale: string,\n firstDayOfWeek?: DayOfWeek\n) {\n let {dayIndex, weekIndex} = useMemo(() => {\n // Get the day index within the week (0-6)\n const dayIndex = getDayOfWeek(date, locale, firstDayOfWeek);\n\n const monthStart = startOfMonth(date);\n\n // Calculate the week index by finding which week this date falls into\n // within the month's calendar grid\n const monthStartDayOfWeek = getDayOfWeek(monthStart, locale, firstDayOfWeek);\n const dayOfMonth = date.day;\n\n const weekIndex = Math.floor((dayOfMonth + monthStartDayOfWeek - 1) / 7);\n\n return {\n weekIndex,\n dayIndex\n };\n }, [date, locale, firstDayOfWeek]);\n\n return {dayIndex, weekIndex};\n}\n"],"names":[],"version":3,"file":"Calendar.mjs.map"}
1
+ {"mappings":"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","sources":["packages/@react-spectrum/s2/src/Calendar.tsx"],"sourcesContent":["/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ActionButton, Header, HeaderContext, Heading, HeadingContext, pressScale} from './';\nimport {\n Calendar as AriaCalendar,\n CalendarCell as AriaCalendarCell,\n CalendarGrid as AriaCalendarGrid,\n CalendarHeaderCell as AriaCalendarHeaderCell,\n CalendarProps as AriaCalendarProps,\n ButtonProps,\n CalendarCellProps,\n CalendarCellRenderProps,\n CalendarGridBody,\n CalendarGridHeader,\n CalendarHeaderCellProps,\n CalendarState,\n CalendarStateContext,\n ContextValue,\n DateValue,\n Provider,\n RangeCalendarState,\n RangeCalendarStateContext,\n Text\n} from 'react-aria-components';\nimport {AriaCalendarGridProps} from '@react-aria/calendar';\nimport {baseColor, focusRing, lightDark, style} from '../style' with {type: 'macro'};\nimport {\n CalendarDate,\n getDayOfWeek,\n startOfMonth\n} from '@internationalized/date';\nimport ChevronLeftIcon from '../s2wf-icons/S2_Icon_ChevronLeft_20_N.svg';\nimport ChevronRightIcon from '../s2wf-icons/S2_Icon_ChevronRight_20_N.svg';\nimport {forwardRefType, GlobalDOMAttributes} from '@react-types/shared';\nimport {getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};\nimport {helpTextStyles} from './Field';\n// @ts-ignore\nimport intlMessages from '../intl/*.json';\nimport React, {createContext, CSSProperties, ForwardedRef, forwardRef, Fragment, PropsWithChildren, ReactElement, ReactNode, useContext, useMemo, useRef} from 'react';\nimport {useDateFormatter, useLocale, useLocalizedStringFormatter} from '@react-aria/i18n';\nimport {useSpectrumContextProps} from './useSpectrumContextProps';\n\n\nexport interface CalendarProps<T extends DateValue>\n extends Omit<AriaCalendarProps<T>, 'visibleDuration' | 'style' | 'className' | 'styles' | keyof GlobalDOMAttributes>,\n StyleProps {\n /**\n * The error message to display when the calendar is invalid.\n */\n errorMessage?: ReactNode,\n /**\n * The number of months to display at once.\n * @default 1\n */\n visibleMonths?: number\n}\n\nexport const CalendarContext = createContext<ContextValue<Partial<CalendarProps<any>>, HTMLDivElement>>(null);\n\nconst calendarStyles = style({\n display: 'flex',\n flexDirection: 'column',\n gap: 24,\n width: 'fit',\n disableTapHighlight: true\n}, getAllowedOverrides());\n\nconst headerStyles = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: 'full'\n});\n\nconst headingStyles = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n margin: 0,\n width: 'full'\n});\n\nconst titleStyles = style({\n font: 'title-lg',\n textAlign: 'center',\n flexGrow: 1,\n flexShrink: 0,\n flexBasis: '0%',\n minWidth: 0\n});\n\nconst headerCellStyles = style({\n font: 'title-sm',\n cursor: 'default',\n textAlign: 'center',\n paddingStart: {\n default: 4,\n ':first-child': 0\n },\n paddingEnd: {\n default: 4,\n ':last-child': 0\n },\n paddingBottom: 12\n});\n\nconst cellStyles = style({\n outlineStyle: 'none',\n '--cell-gap': {\n type: 'paddingStart',\n value: 4\n },\n paddingStart: {\n default: 4,\n isFirstChild: 0\n },\n paddingEnd: {\n default: 4,\n isLastChild: 0\n },\n paddingTop: {\n default: 2,\n isFirstWeek: 0\n },\n paddingBottom: 2,\n position: 'relative',\n width: 32,\n height: 32,\n display: {\n default: 'flex',\n isOutsideMonth: 'none'\n },\n alignItems: 'center',\n justifyContent: 'center'\n});\n\nconst cellInnerStyles = style<CalendarCellRenderProps & {selectionMode: 'single' | 'range'}>({\n ...focusRing(),\n transition: {\n default: 'default',\n forcedColors: 'none'\n },\n outlineOffset: {\n default: -2,\n isToday: 2,\n isSelected: {\n selectionMode: {\n single: 2,\n range: -2\n }\n },\n isSelectionStart: 2,\n isSelectionEnd: 2\n },\n position: 'relative',\n font: 'body-sm',\n cursor: 'default',\n width: 'full',\n height: 32,\n borderRadius: 'full',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n forcedColorAdjust: 'none',\n backgroundColor: {\n default: 'transparent',\n isHovered: 'gray-100',\n isPressed: 'gray-100',\n isDisabled: 'transparent',\n isToday: {\n default: baseColor('gray-300'),\n isDisabled: 'disabled'\n },\n isSelected: {\n selectionMode: {\n single: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600'),\n isDisabled: 'transparent'\n },\n range: {\n isHovered: 'blue-500'\n }\n }\n },\n isSelectionStart: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n isSelectionEnd: {\n default: lightDark('accent-900', 'accent-700'),\n isHovered: lightDark('accent-1000', 'accent-600'),\n isPressed: lightDark('accent-1000', 'accent-600'),\n isFocusVisible: lightDark('accent-1000', 'accent-600')\n },\n isUnavailable: 'transparent',\n forcedColors: {\n default: 'transparent',\n isToday: 'ButtonFace',\n isHovered: 'Highlight',\n isSelected: {\n selectionMode: {\n single: 'Highlight',\n range: {\n isHovered: 'Highlight'\n }\n }\n },\n isSelectionStart: 'Highlight',\n isSelectionEnd: 'Highlight',\n isUnavailable: 'transparent'\n }\n },\n color: {\n default: 'neutral',\n isSelected: {\n default: 'white',\n selectionMode: {\n range: 'neutral'\n }\n },\n isSelectionStart: 'white',\n isSelectionEnd: 'white',\n isDisabled: 'disabled',\n forcedColors: {\n default: 'ButtonText',\n isToday: 'ButtonFace',\n isSelected: 'HighlightText',\n isSelectionStart: 'HighlightText',\n isSelectionEnd: 'HighlightText',\n isDisabled: 'GrayText'\n }\n }\n});\n\nconst unavailableStyles = style({\n position: 'absolute',\n top: 'calc(50% - 1px)',\n left: 'calc(25% - 1px)',\n right: 'calc(25% - 1px)',\n height: 2,\n transform: 'rotate(-16deg)',\n borderRadius: 'full',\n backgroundColor: '[currentColor]'\n});\n\nconst selectionSpanStyles = style({\n position: 'absolute',\n zIndex: -1,\n top: 0,\n insetStart: 'calc(-1 * var(--selection-span) * (var(--cell-width) + var(--cell-gap) + var(--cell-gap)))',\n insetEnd: 0,\n bottom: 0,\n borderWidth: 2,\n borderStyle: 'dashed',\n borderColor: {\n default: 'blue-800', // focus-indicator-color\n forcedColors: {\n default: 'ButtonText'\n }\n },\n borderStartRadius: 'full',\n borderEndRadius: 'full',\n backgroundColor: {\n default: 'blue-subtle',\n forcedColors: {\n default: 'Highlight'\n }\n },\n forcedColorAdjust: 'none'\n});\n\n/**\n * Calendars display a grid of days in one or more months and allow users to select a single date.\n */\nexport const Calendar = /*#__PURE__*/ (forwardRef as forwardRefType)(function Calendar<T extends DateValue>(props: CalendarProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n [props, ref] = useSpectrumContextProps(props, ref, CalendarContext);\n let {\n visibleMonths = 1,\n errorMessage,\n UNSAFE_style,\n UNSAFE_className,\n styles,\n ...otherProps\n } = props;\n let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');\n return (\n <AriaCalendar\n {...otherProps}\n ref={ref}\n visibleDuration={{months: visibleMonths}}\n style={UNSAFE_style}\n className={(UNSAFE_className || '') + calendarStyles(null, styles)}>\n {({isInvalid, isDisabled}) => {\n return (\n <>\n <Provider\n values={[\n [HeaderContext, null],\n [HeadingContext, null]\n ]}>\n <Header styles={headerStyles}>\n <CalendarButton slot=\"previous\"><ChevronLeftIcon /></CalendarButton>\n <CalendarHeading />\n <CalendarButton slot=\"next\"><ChevronRightIcon /></CalendarButton>\n </Header>\n </Provider>\n <div\n className={style({\n display: 'flex',\n flexDirection: 'row',\n gap: 24,\n width: 'full',\n alignItems: 'start'\n })}>\n {Array.from({length: visibleMonths}).map((_, i) => (\n <CalendarGrid months={i} key={i} />\n ))}\n </div>\n {isInvalid && (\n <Text slot=\"errorMessage\" className={helpTextStyles({isInvalid, isDisabled, size: 'M'})}>\n {errorMessage || stringFormatter.format('calendar.invalidSelection', {selectedCount: 1})}\n </Text>\n )}\n </>\n );\n }}\n </AriaCalendar>\n );\n});\n\nexport const CalendarGrid = (props: Omit<AriaCalendarGridProps, 'children'> & PropsWithChildren & {months: number}): ReactElement => {\n // use isolation to start a new stacking context so that we can use zIndex -1 for the selection span.\n return (\n <AriaCalendarGrid\n className={style({\n borderCollapse: 'collapse',\n borderSpacing: 0,\n isolation: 'isolate'\n })}\n offset={{months: props.months}}>\n <CalendarGridHeader>\n {(day) => (\n <CalendarHeaderCell>\n {day}\n </CalendarHeaderCell>\n )}\n </CalendarGridHeader>\n <CalendarGridBody>\n {(date) => (\n <CalendarCell date={date} firstDayOfWeek={props.firstDayOfWeek} />\n )}\n </CalendarGridBody>\n </AriaCalendarGrid>\n );\n};\n\n// Ordinarily the heading is a formatted date range, ie January 2025 - February 2025.\n// However, we want to show each month individually.\nexport const CalendarHeading = (): ReactElement => {\n let calendarStateContext = useContext(CalendarStateContext);\n let rangeCalendarStateContext = useContext(RangeCalendarStateContext);\n let {visibleRange, timeZone} = calendarStateContext ?? rangeCalendarStateContext ?? {};\n let currentMonth = visibleRange?.start ?? visibleRange?.end;\n let monthFormatter = useDateFormatter({\n month: 'long',\n year: 'numeric',\n era: currentMonth && currentMonth.calendar.identifier === 'gregory' && currentMonth.era === 'BC' ? 'short' : undefined,\n calendar: visibleRange?.start.calendar.identifier,\n timeZone\n });\n let months = useMemo(() => {\n if (!visibleRange) {\n return [];\n }\n let months: string[] = [];\n for (let i = visibleRange.start; i.compare(visibleRange.end) <= 0; i = i.add({months: 1})) {\n // TODO: account for the first week possibly overlapping, like with a custom 454 calendar.\n // there has to be a better way to do this...\n if (i.month === visibleRange.start.month) {\n i = i.add({weeks: 1});\n }\n months.push(monthFormatter.format(i.toDate(timeZone!)));\n }\n return months;\n }, [visibleRange, monthFormatter, timeZone]);\n\n return (\n <Heading styles={headingStyles}>\n {months.map((month, i) => {\n if (i === 0) {\n return (\n <Fragment key={month}>\n <div className={titleStyles}>{month}</div>\n </Fragment>\n );\n } else {\n return (\n <Fragment key={month}>\n {/* Spacers to account for Next/Previous buttons and gap, spelled out to show the math */}\n <div className={style({visibility: 'hidden', width: 32})} />\n <div className={style({visibility: 'hidden', width: 24})} />\n <div className={style({visibility: 'hidden', width: 32})} />\n <div className={titleStyles}>{month}</div>\n </Fragment>\n );\n }\n })}\n </Heading>\n );\n};\n\nexport const CalendarButton = (props: Omit<ButtonProps, 'children'> & {children: ReactNode}): ReactElement => {\n let {direction} = useLocale();\n return (\n <div\n className={\n style({\n scale: {\n direction: {\n rtl: -1\n }\n }\n })({direction})\n }>\n <ActionButton\n {...props}\n isQuiet>\n {props.children}\n </ActionButton>\n </div>\n );\n};\n\nconst CalendarHeaderCell = (props: Omit<CalendarHeaderCellProps, 'children'> & PropsWithChildren): ReactElement => {\n return (\n <AriaCalendarHeaderCell className={headerCellStyles}>\n {props.children}\n </AriaCalendarHeaderCell>\n );\n};\n\nconst CalendarCell = (props: Omit<CalendarCellProps, 'children'> & {firstDayOfWeek: 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | undefined}): ReactElement => {\n let {locale} = useLocale();\n let firstDayOfWeek = props.firstDayOfWeek;\n // Calculate the day and week index based on the date.\n let {dayIndex, weekIndex} = useWeekAndDayIndices(props.date, locale, firstDayOfWeek);\n\n let calendarStateContext = useContext(CalendarStateContext);\n let rangeCalendarStateContext = useContext(RangeCalendarStateContext);\n let state = (calendarStateContext ?? rangeCalendarStateContext)!;\n\n let isFirstWeek = weekIndex === 0;\n let isFirstChild = dayIndex === 0;\n let isLastChild = dayIndex === 6;\n return (\n <AriaCalendarCell\n date={props.date}\n className={(renderProps) => cellStyles({...renderProps, isFirstChild, isLastChild, isFirstWeek})}>\n {(renderProps) => <CalendarCellInner {...props} weekIndex={weekIndex} dayIndex={dayIndex} state={state} isRangeSelection={!!rangeCalendarStateContext} renderProps={renderProps} />}\n </AriaCalendarCell>\n );\n};\n\nconst CalendarCellInner = (props: Omit<CalendarCellProps, 'children'> & {isRangeSelection: boolean, state: CalendarState | RangeCalendarState, weekIndex: number, dayIndex: number, renderProps?: CalendarCellRenderProps, date: DateValue}): ReactElement => {\n let {weekIndex, dayIndex, date, renderProps, state, isRangeSelection} = props;\n let {getDatesInWeek} = state;\n let ref = useRef<HTMLDivElement>(null);\n let {isUnavailable, formattedDate, isSelected} = renderProps!;\n let startDate = startOfMonth(date);\n let datesInWeek = getDatesInWeek(weekIndex, startDate);\n\n // Starting from the current day, find the first day before it in the current week that is not selected.\n // Then, the span of selected days is the current day minus the first unselected day.\n let firstUnselectedInRangeInWeek = datesInWeek.slice(0, dayIndex + 1).reverse().findIndex((date, i) => {\n return date && i > 0 && (!state.isSelected(date) || date.month !== props.date.month);\n });\n let selectionSpan = -1;\n if (firstUnselectedInRangeInWeek > -1 && isSelected) {\n selectionSpan = firstUnselectedInRangeInWeek - 1;\n } else if (isSelected) {\n selectionSpan = dayIndex;\n }\n\n let prevDay = date.subtract({days: 1});\n let nextDay = date.add({days: 1});\n let isBackgroundStyleApplied = (\n isSelected\n && isRangeSelection\n && (state.isSelected(prevDay)\n || (nextDay.month === date.month && state.isSelected(nextDay)))\n );\n\n return (\n <div\n className={style({\n position: 'relative',\n width: 32,\n '--cell-width': {\n type: 'width',\n value: '[self(width)]'\n }\n })}>\n <div\n ref={ref}\n style={pressScale(ref, {})(renderProps!)}\n className={cellInnerStyles({...renderProps!, selectionMode: isRangeSelection ? 'range' : 'single'})}>\n <div>\n {formattedDate}\n </div>\n {isUnavailable && <div className={unavailableStyles} role=\"presentation\" />}\n </div>\n {isBackgroundStyleApplied && <div style={{'--selection-span': selectionSpan} as CSSProperties} className={selectionSpanStyles} role=\"presentation\" />}\n </div>\n );\n};\n\ntype DayOfWeek = 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat';\n\n/**\n * Calculate the week index (0-based) and day index (0-based) for a given date within a month in a calendar.\n * @param date - The date to calculate indices for.\n * @param locale - The locale string (e.g., 'en-US', 'fr-FR', 'hi-IN-u-ca-indian').\n * @param firstDayOfWeek - Optional override for the first day of the week ('sun', 'mon', 'tue', etc.).\n * @returns Object with weekIndex and dayIndex.\n */\nfunction useWeekAndDayIndices(\n date: CalendarDate,\n locale: string,\n firstDayOfWeek?: DayOfWeek\n) {\n let {dayIndex, weekIndex} = useMemo(() => {\n // Get the day index within the week (0-6)\n const dayIndex = getDayOfWeek(date, locale, firstDayOfWeek);\n\n const monthStart = startOfMonth(date);\n\n // Calculate the week index by finding which week this date falls into\n // within the month's calendar grid\n const monthStartDayOfWeek = getDayOfWeek(monthStart, locale, firstDayOfWeek);\n const dayOfMonth = date.day;\n\n const weekIndex = Math.floor((dayOfMonth + monthStartDayOfWeek - 1) / 7);\n\n return {\n weekIndex,\n dayIndex\n };\n }, [date, locale, firstDayOfWeek]);\n\n return {dayIndex, weekIndex};\n}\n"],"names":[],"version":3,"file":"Calendar.mjs.map"}