@react-spectrum/s2 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/dist/Accordion.cjs +2 -2
  2. package/dist/Accordion.css +2 -2
  3. package/dist/Accordion.mjs +2 -2
  4. package/dist/ActionBar.cjs +62 -62
  5. package/dist/ActionBar.css +61 -61
  6. package/dist/ActionBar.mjs +62 -62
  7. package/dist/ActionButton.cjs +202 -202
  8. package/dist/ActionButton.css +138 -138
  9. package/dist/ActionButton.mjs +202 -202
  10. package/dist/ActionButtonGroup.cjs +15 -15
  11. package/dist/ActionButtonGroup.css +9 -9
  12. package/dist/ActionButtonGroup.mjs +15 -15
  13. package/dist/Add.cjs +10 -10
  14. package/dist/Add.css +6 -6
  15. package/dist/Add.mjs +10 -10
  16. package/dist/AlertDialog.cjs +3 -3
  17. package/dist/AlertDialog.css +3 -3
  18. package/dist/AlertDialog.mjs +3 -3
  19. package/dist/Asterisk.cjs +6 -6
  20. package/dist/Asterisk.css +4 -4
  21. package/dist/Asterisk.mjs +6 -6
  22. package/dist/Avatar.cjs +14 -14
  23. package/dist/Avatar.css +14 -14
  24. package/dist/Avatar.mjs +14 -14
  25. package/dist/AvatarGroup.cjs +134 -134
  26. package/dist/AvatarGroup.css +33 -33
  27. package/dist/AvatarGroup.mjs +134 -134
  28. package/dist/Badge.cjs +206 -206
  29. package/dist/Badge.css +127 -127
  30. package/dist/Badge.mjs +206 -206
  31. package/dist/Breadcrumbs.cjs +254 -254
  32. package/dist/Breadcrumbs.css +109 -109
  33. package/dist/Breadcrumbs.mjs +254 -254
  34. package/dist/Button.cjs +341 -341
  35. package/dist/Button.css +177 -177
  36. package/dist/Button.mjs +341 -341
  37. package/dist/ButtonGroup.cjs +20 -20
  38. package/dist/ButtonGroup.css +15 -15
  39. package/dist/ButtonGroup.mjs +20 -20
  40. package/dist/Calendar.cjs +151 -139
  41. package/dist/Calendar.cjs.map +1 -1
  42. package/dist/Calendar.css +134 -134
  43. package/dist/Calendar.css.map +1 -1
  44. package/dist/Calendar.mjs +153 -141
  45. package/dist/Calendar.mjs.map +1 -1
  46. package/dist/Card.cjs +304 -304
  47. package/dist/Card.css +209 -209
  48. package/dist/Card.mjs +304 -304
  49. package/dist/CardView.cjs +16 -16
  50. package/dist/CardView.css +16 -16
  51. package/dist/CardView.mjs +16 -16
  52. package/dist/CenterBaseline.cjs +1 -1
  53. package/dist/CenterBaseline.css +2 -2
  54. package/dist/CenterBaseline.mjs +1 -1
  55. package/dist/Checkbox.cjs +170 -170
  56. package/dist/Checkbox.css +92 -92
  57. package/dist/Checkbox.mjs +170 -170
  58. package/dist/CheckboxGroup.cjs +45 -45
  59. package/dist/CheckboxGroup.css +38 -38
  60. package/dist/CheckboxGroup.mjs +45 -45
  61. package/dist/Checkmark.cjs +12 -12
  62. package/dist/Checkmark.css +8 -8
  63. package/dist/Checkmark.mjs +12 -12
  64. package/dist/Chevron.cjs +12 -12
  65. package/dist/Chevron.css +10 -10
  66. package/dist/Chevron.mjs +12 -12
  67. package/dist/ClearButton.cjs +29 -29
  68. package/dist/ClearButton.css +29 -29
  69. package/dist/ClearButton.mjs +29 -29
  70. package/dist/CloseButton.cjs +54 -54
  71. package/dist/CloseButton.css +46 -46
  72. package/dist/CloseButton.mjs +54 -54
  73. package/dist/ColorArea.cjs +16 -16
  74. package/dist/ColorArea.css +16 -16
  75. package/dist/ColorArea.mjs +16 -16
  76. package/dist/ColorField.cjs +32 -32
  77. package/dist/ColorField.css +28 -28
  78. package/dist/ColorField.mjs +32 -32
  79. package/dist/ColorHandle.cjs +27 -27
  80. package/dist/ColorHandle.css +42 -42
  81. package/dist/ColorHandle.mjs +27 -27
  82. package/dist/ColorSlider.cjs +118 -118
  83. package/dist/ColorSlider.css +54 -54
  84. package/dist/ColorSlider.mjs +118 -118
  85. package/dist/ColorSwatch.cjs +29 -29
  86. package/dist/ColorSwatch.css +29 -29
  87. package/dist/ColorSwatch.mjs +29 -29
  88. package/dist/ColorSwatchPicker.cjs +27 -27
  89. package/dist/ColorSwatchPicker.css +46 -46
  90. package/dist/ColorSwatchPicker.mjs +27 -27
  91. package/dist/ColorWheel.cjs +26 -26
  92. package/dist/ColorWheel.css +17 -17
  93. package/dist/ColorWheel.mjs +26 -26
  94. package/dist/ComboBox.cjs +396 -396
  95. package/dist/ComboBox.css +181 -181
  96. package/dist/ComboBox.mjs +396 -396
  97. package/dist/ContextualHelp.cjs +5 -5
  98. package/dist/ContextualHelp.css +60 -60
  99. package/dist/ContextualHelp.mjs +5 -5
  100. package/dist/Cross.cjs +14 -14
  101. package/dist/Cross.css +10 -10
  102. package/dist/Cross.mjs +14 -14
  103. package/dist/CustomDialog.cjs +25 -25
  104. package/dist/CustomDialog.css +25 -25
  105. package/dist/CustomDialog.mjs +25 -25
  106. package/dist/Dash.cjs +10 -10
  107. package/dist/Dash.css +6 -6
  108. package/dist/Dash.mjs +10 -10
  109. package/dist/DateField.cjs +73 -73
  110. package/dist/DateField.css +77 -77
  111. package/dist/DateField.mjs +73 -73
  112. package/dist/DatePicker.cjs +180 -180
  113. package/dist/DatePicker.css +126 -126
  114. package/dist/DatePicker.mjs +180 -180
  115. package/dist/DateRangePicker.cjs +56 -56
  116. package/dist/DateRangePicker.css +60 -60
  117. package/dist/DateRangePicker.mjs +56 -56
  118. package/dist/Dialog.cjs +17 -17
  119. package/dist/Dialog.css +82 -82
  120. package/dist/Dialog.mjs +17 -17
  121. package/dist/Disclosure.cjs +135 -135
  122. package/dist/Disclosure.css +106 -106
  123. package/dist/Disclosure.mjs +135 -135
  124. package/dist/Divider.cjs +25 -25
  125. package/dist/Divider.css +25 -25
  126. package/dist/Divider.mjs +25 -25
  127. package/dist/DropZone.cjs +62 -62
  128. package/dist/DropZone.css +58 -58
  129. package/dist/DropZone.mjs +62 -62
  130. package/dist/Field.cjs +370 -370
  131. package/dist/Field.cjs.map +1 -1
  132. package/dist/Field.css +142 -142
  133. package/dist/Field.mjs +370 -370
  134. package/dist/Field.mjs.map +1 -1
  135. package/dist/Form.cjs +9 -9
  136. package/dist/Form.css +9 -9
  137. package/dist/Form.mjs +9 -9
  138. package/dist/FullscreenDialog.cjs +5 -5
  139. package/dist/FullscreenDialog.css +91 -91
  140. package/dist/FullscreenDialog.mjs +5 -5
  141. package/dist/IllustratedMessage.cjs +256 -256
  142. package/dist/IllustratedMessage.css +78 -78
  143. package/dist/IllustratedMessage.mjs +256 -256
  144. package/dist/Image.cjs +13 -13
  145. package/dist/Image.css +14 -14
  146. package/dist/Image.mjs +13 -13
  147. package/dist/InlineAlert.cjs +117 -117
  148. package/dist/InlineAlert.css +98 -98
  149. package/dist/InlineAlert.mjs +117 -117
  150. package/dist/Link.cjs +54 -54
  151. package/dist/Link.css +46 -46
  152. package/dist/Link.mjs +54 -54
  153. package/dist/LinkOut.cjs +8 -8
  154. package/dist/LinkOut.css +8 -8
  155. package/dist/LinkOut.mjs +8 -8
  156. package/dist/Menu.cjs +459 -459
  157. package/dist/Menu.css +185 -185
  158. package/dist/Menu.mjs +459 -459
  159. package/dist/Meter.cjs +163 -163
  160. package/dist/Meter.css +93 -93
  161. package/dist/Meter.mjs +163 -163
  162. package/dist/Modal.cjs +58 -58
  163. package/dist/Modal.css +50 -50
  164. package/dist/Modal.mjs +58 -58
  165. package/dist/NotificationBadge.cjs +58 -58
  166. package/dist/NotificationBadge.css +51 -51
  167. package/dist/NotificationBadge.mjs +58 -58
  168. package/dist/NumberField.cjs +115 -115
  169. package/dist/NumberField.css +100 -100
  170. package/dist/NumberField.mjs +115 -115
  171. package/dist/Picker.cjs +283 -283
  172. package/dist/Picker.css +169 -169
  173. package/dist/Picker.mjs +283 -283
  174. package/dist/Popover.cjs +86 -86
  175. package/dist/Popover.css +66 -66
  176. package/dist/Popover.mjs +86 -86
  177. package/dist/ProgressBar.cjs +173 -173
  178. package/dist/ProgressBar.css +101 -101
  179. package/dist/ProgressBar.mjs +173 -173
  180. package/dist/ProgressCircle.cjs +31 -31
  181. package/dist/ProgressCircle.css +24 -24
  182. package/dist/ProgressCircle.mjs +31 -31
  183. package/dist/Provider.cjs +11 -11
  184. package/dist/Provider.css +10 -10
  185. package/dist/Provider.mjs +11 -11
  186. package/dist/Radio.cjs +154 -154
  187. package/dist/Radio.css +79 -79
  188. package/dist/Radio.mjs +154 -154
  189. package/dist/RadioGroup.cjs +42 -42
  190. package/dist/RadioGroup.css +38 -38
  191. package/dist/RadioGroup.mjs +42 -42
  192. package/dist/RangeCalendar.cjs +32 -20
  193. package/dist/RangeCalendar.cjs.map +1 -1
  194. package/dist/RangeCalendar.css +10 -10
  195. package/dist/RangeCalendar.css.map +1 -1
  196. package/dist/RangeCalendar.mjs +34 -22
  197. package/dist/RangeCalendar.mjs.map +1 -1
  198. package/dist/SearchField.cjs +42 -42
  199. package/dist/SearchField.css +46 -46
  200. package/dist/SearchField.mjs +42 -42
  201. package/dist/SegmentedControl.cjs +181 -181
  202. package/dist/SegmentedControl.css +118 -118
  203. package/dist/SegmentedControl.mjs +181 -181
  204. package/dist/Slider.cjs +299 -299
  205. package/dist/Slider.css +151 -151
  206. package/dist/Slider.mjs +299 -299
  207. package/dist/StatusLight.cjs +125 -125
  208. package/dist/StatusLight.css +61 -61
  209. package/dist/StatusLight.mjs +125 -125
  210. package/dist/Switch.cjs +162 -162
  211. package/dist/Switch.css +74 -74
  212. package/dist/Switch.mjs +162 -162
  213. package/dist/TableView.cjs +319 -319
  214. package/dist/TableView.css +172 -172
  215. package/dist/TableView.mjs +319 -319
  216. package/dist/Tabs.cjs +115 -115
  217. package/dist/Tabs.css +99 -99
  218. package/dist/Tabs.mjs +115 -115
  219. package/dist/TabsPicker.cjs +127 -127
  220. package/dist/TabsPicker.css +111 -111
  221. package/dist/TabsPicker.mjs +127 -127
  222. package/dist/TagGroup.cjs +213 -213
  223. package/dist/TagGroup.css +147 -147
  224. package/dist/TagGroup.mjs +213 -213
  225. package/dist/TextField.cjs +59 -59
  226. package/dist/TextField.css +54 -54
  227. package/dist/TextField.mjs +59 -59
  228. package/dist/TimeField.cjs +52 -52
  229. package/dist/TimeField.css +48 -48
  230. package/dist/TimeField.mjs +52 -52
  231. package/dist/Toast.cjs +120 -120
  232. package/dist/Toast.css +107 -107
  233. package/dist/Toast.mjs +120 -120
  234. package/dist/ToggleButton.cjs +3 -3
  235. package/dist/ToggleButton.css +12 -12
  236. package/dist/ToggleButton.mjs +3 -3
  237. package/dist/Tooltip.cjs +83 -83
  238. package/dist/Tooltip.css +70 -70
  239. package/dist/Tooltip.mjs +83 -83
  240. package/dist/TreeView.cjs +146 -146
  241. package/dist/TreeView.css +147 -147
  242. package/dist/TreeView.mjs +146 -146
  243. package/dist/types.d.ts.map +1 -1
  244. package/icons/Icon.cjs +10 -10
  245. package/icons/Icon.css +9 -9
  246. package/icons/Icon.mjs +10 -10
  247. package/icons/Skeleton.cjs +2 -2
  248. package/icons/Skeleton.cjs.map +1 -1
  249. package/icons/Skeleton.css +6 -6
  250. package/icons/Skeleton.mjs +2 -2
  251. package/icons/Skeleton.mjs.map +1 -1
  252. package/package.json +2 -2
  253. package/src/Calendar.tsx +13 -6
  254. package/src/RangeCalendar.tsx +13 -6
  255. package/style/__tests__/style-macro.test.js +162 -166
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;CAUC;;;;;;;;;;;AAwDM,MAAM,0DAAkB,CAAA,GAAA,0BAAY,EAA6D;AAExG,MAAM;;;;;;;;;;;;;;;;AAQN,MAAM;AAON,MAAM;AAQN,MAAM;AASN,MAAM;AAeN,MAAM;;;;;;;;;;;;;;;;;;;;AA8BN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuGN,MAAM;AAWN,MAAM;AA0BC,MAAM,4CAAyB,AAAd,WAAW,GAAI,CAAA,GAAA,uBAAS,EAAqB,SAAS,SAA8B,KAAuB,EAAE,GAAiC;IACpK,CAAC,OAAO,IAAI,GAAG,CAAA,GAAA,iDAAsB,EAAE,OAAO,KAAK;IACnD,IAAI,iBACF,gBAAgB,iBAChB,YAAY,gBACZ,YAAY,oBACZ,gBAAgB,UAChB,MAAM,EACN,GAAG,YACJ,GAAG;IACJ,IAAI,kBAAkB,CAAA,GAAA,gDAA0B,EAAE,CAAA,GAAA,mDAAW,GAAG;IAChE,qBACE,gCAAC,CAAA,GAAA,mCAAW;QACT,GAAG,UAAU;QACd,KAAK;QACL,iBAAiB;YAAC,QAAQ;QAAa;QACvC,OAAO;QACP,WAAW,AAAC,CAAA,oBAAoB,EAAC,IAAK,qCAAe,MAAM;kBAC1D,CAAC,aAAC,SAAS,cAAE,UAAU,EAAC;YACvB,qBACE;;kCACE,iCAAC,CAAA,GAAA,gCAAK;wBAAE,QAAQ;;0CACd,gCAAC;gCAAe,MAAK;0CAAW,cAAA,gCAAC,CAAA,GAAA,iCAAc;;0CAC/C,gCAAC;0CACD,gCAAC;gCAAe,MAAK;0CAAO,cAAA,gCAAC,CAAA,GAAA,iCAAe;;;;kCAE9C,gCAAC;wBACC,SAAS;kCAOR,MAAM,IAAI,CAAC;4BAAC,QAAQ;wBAAa,GAAG,GAAG,CAAC,CAAC,GAAG,kBAC3C,gCAAC;gCAAa,QAAQ;+BAAQ;;oBAGjC,2BACC,gCAAC,CAAA,GAAA,+BAAG;wBAAE,MAAK;wBAAe,WAAW,CAAA,GAAA,wCAAa,EAAE;uCAAC;wCAAW;4BAAY,MAAM;wBAAG;kCAClF,gBAAgB,gBAAgB,MAAM,CAAC,6BAA6B;4BAAC,eAAe;wBAAC;;;;QAKhG;;AAGN;AAEO,MAAM,4CAAe,CAAC;IAC3B,qGAAqG;IACrG,qBACE,iCAAC,CAAA,GAAA,uCAAe;QACd,SAAS;QAKT,QAAQ;YAAC,QAAQ,MAAM,MAAM;QAAA;;0BAC7B,gCAAC,CAAA,GAAA,6CAAiB;0BACf,CAAC,oBACA,gCAAC;kCACE;;;0BAIP,gCAAC,CAAA,GAAA,2CAAe;0BACb,CAAC,qBACA,gCAAC;wBAAa,MAAM;wBAAM,gBAAgB,MAAM,cAAc;;;;;AAKxE;AAIO,MAAM,2CAAkB;IAC7B,IAAI,uBAAuB,CAAA,GAAA,uBAAS,EAAE,CAAA,GAAA,+CAAmB;IACzD,IAAI,4BAA4B,CAAA,GAAA,uBAAS,EAAE,CAAA,GAAA,oDAAwB;IACnE,IAAI,gBAAC,YAAY,YAAE,QAAQ,EAAC,GAAG,wBAAwB,6BAA6B,CAAC;IACrF,IAAI,eAAe,cAAc,SAAS,cAAc;IACxD,IAAI,iBAAiB,CAAA,GAAA,qCAAe,EAAE;QACpC,OAAO;QACP,MAAM;QACN,KAAK,gBAAgB,aAAa,QAAQ,CAAC,UAAU,KAAK,aAAa,aAAa,GAAG,KAAK,OAAO,UAAU;QAC7G,UAAU,cAAc,MAAM,SAAS;kBACvC;IACF;IACA,IAAI,SAAS,CAAA,GAAA,oBAAM,EAAE;QACnB,IAAI,CAAC,cACH,OAAO,EAAE;QAEX,IAAI,SAAmB,EAAE;QACzB,IAAK,IAAI,IAAI,aAAa,KAAK,EAAE,EAAE,OAAO,CAAC,aAAa,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC;YAAC,QAAQ;QAAC,GAAI;YACzF,0FAA0F;YAC1F,6CAA6C;YAC7C,IAAI,EAAE,KAAK,KAAK,aAAa,KAAK,CAAC,KAAK,EACtC,IAAI,EAAE,GAAG,CAAC;gBAAC,OAAO;YAAC;YAErB,OAAO,IAAI,CAAC,eAAe,MAAM,CAAC,EAAE,MAAM,CAAC;QAC7C;QACA,OAAO;IACT,GAAG;QAAC;QAAc;QAAgB;KAAS;IAE3C,qBACE,gCAAC,CAAA,GAAA,iCAAM;QAAE,QAAQ;kBACd,OAAO,GAAG,CAAC,CAAC,OAAO;YAClB,IAAI,MAAM,GACR,qBACE,gCAAC,CAAA,GAAA,qBAAO;0BACN,cAAA,gCAAC;oBAAI,WAAW;8BAAc;;eADjB;iBAKjB,qBACE,iCAAC,CAAA,GAAA,qBAAO;;kCAEN,gCAAC;wBAAI,SAAS;;kCACd,gCAAC;wBAAI,SAAS;;kCACd,gCAAC;wBAAI,SAAS;;kCACd,gCAAC;wBAAI,WAAW;kCAAc;;;eALjB;QASrB;;AAGN;AAEO,MAAM,4CAAiB,CAAC;IAC7B,IAAI,aAAC,SAAS,EAAC,GAAG,CAAA,GAAA,8BAAQ;IAC1B,qBACE,gCAAC;QACC,WACE;;;;;;;;;;;UAMG;uBAAC;QAAS;kBAEf,cAAA,gCAAC,CAAA,GAAA,sCAAW;YACT,GAAG,MAAK;YACT,OAAO;sBACN,OAAM,QAAQ;;;AAIvB;AAEA,MAAM,2CAAqB,CAAC;IAC1B,qBACE,gCAAC,CAAA,GAAA,6CAAqB;QAAE,WAAW;kBAChC,MAAM,QAAQ;;AAGrB;AAEA,MAAM,qCAAe,CAAC;IACpB,IAAI,UAAC,MAAM,EAAC,GAAG,CAAA,GAAA,8BAAQ;IACvB,IAAI,iBAAiB,MAAM,cAAc;IACzC,sDAAsD;IACtD,IAAI,YAAC,QAAQ,aAAE,SAAS,EAAC,GAAG,2CAAqB,MAAM,IAAI,EAAE,QAAQ;IAErE,IAAI,uBAAuB,CAAA,GAAA,uBAAS,EAAE,CAAA,GAAA,+CAAmB;IACzD,IAAI,4BAA4B,CAAA,GAAA,uBAAS,EAAE,CAAA,GAAA,oDAAwB;IACnE,IAAI,QAAS,wBAAwB;IAErC,IAAI,cAAc,cAAc;IAChC,IAAI,eAAe,aAAa;IAChC,IAAI,cAAc,aAAa;IAC/B,qBACE,gCAAC,CAAA,GAAA,uCAAe;QACd,MAAM,MAAM,IAAI;QAChB,WAAW,CAAC,cAAgB,iCAAW;gBAAC,GAAG,WAAW;8BAAE;6BAAc;6BAAa;YAAW;kBAC7F,CAAC,4BAAgB,gCAAC;gBAAmB,GAAG,KAAK;gBAAE,WAAW;gBAAW,UAAU;gBAAU,OAAO;gBAAO,kBAAkB,CAAC,CAAC;gBAA2B,aAAa;;;AAG1K;AAEA,MAAM,0CAAoB,CAAC;IACzB,IAAI,aAAC,SAAS,YAAE,QAAQ,QAAE,IAAI,eAAE,WAAW,SAAE,KAAK,oBAAE,gBAAgB,EAAC,GAAG;IACxE,IAAI,kBAAC,cAAc,EAAC,GAAG;IACvB,IAAI,MAAM,CAAA,GAAA,mBAAK,EAAkB;IACjC,IAAI,iBAAC,aAAa,iBAAE,aAAa,cAAE,UAAU,EAAC,GAAG;IACjD,IAAI,YAAY,CAAA,GAAA,yCAAW,EAAE;IAC7B,IAAI,cAAc,eAAe,WAAW;IAE5C,wGAAwG;IACxG,qFAAqF;IACrF,IAAI,+BAA+B,YAAY,KAAK,CAAC,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,MAAM;QAC/F,OAAO,QAAQ,IAAI,KAAM,CAAA,CAAC,MAAM,UAAU,CAAC,SAAS,KAAK,KAAK,KAAK,MAAM,IAAI,CAAC,KAAK,AAAD;IACpF;IACA,IAAI,gBAAgB;IACpB,IAAI,+BAA+B,MAAM,YACvC,gBAAgB,+BAA+B;SAC1C,IAAI,YACT,gBAAgB;IAGlB,IAAI,UAAU,KAAK,QAAQ,CAAC;QAAC,MAAM;IAAC;IACpC,IAAI,UAAU,KAAK,GAAG,CAAC;QAAC,MAAM;IAAC;IAC/B,IAAI,2BACF,cACG,oBACC,CAAA,MAAM,UAAU,CAAC,YACf,QAAQ,KAAK,KAAK,KAAK,KAAK,IAAI,MAAM,UAAU,CAAC,QAAQ;IAGjE,qBACE,iCAAC;QACC,SAAS;;0BAQT,iCAAC;gBACC,KAAK;gBACL,OAAO,CAAA,GAAA,oCAAS,EAAE,KAAK,CAAC,GAAG;gBAC3B,WAAW,sCAAgB;oBAAC,GAAG,WAAW;oBAAG,eAAe,mBAAmB,UAAU;gBAAQ;;kCACjG,gCAAC;kCACE;;oBAEF,+BAAiB,gCAAC;wBAAI,WAAW;wBAAmB,MAAK;;;;YAE3D,0CAA4B,gCAAC;gBAAI,OAAO;oBAAC,oBAAoB;gBAAa;gBAAoB,WAAW;gBAAqB,MAAK;;;;AAG1I;AAIA;;;;;;CAMC,GACD,SAAS,2CACP,IAAkB,EAClB,MAAc,EACd,cAA0B;IAE1B,IAAI,YAAC,QAAQ,aAAE,SAAS,EAAC,GAAG,CAAA,GAAA,oBAAM,EAAE;QAClC,0CAA0C;QAC1C,MAAM,WAAW,CAAA,GAAA,yCAAW,EAAE,MAAM,QAAQ;QAE5C,MAAM,aAAa,CAAA,GAAA,yCAAW,EAAE;QAEhC,sEAAsE;QACtE,mCAAmC;QACnC,MAAM,sBAAsB,CAAA,GAAA,yCAAW,EAAE,YAAY,QAAQ;QAC7D,MAAM,aAAa,KAAK,GAAG;QAE3B,MAAM,YAAY,KAAK,KAAK,CAAC,AAAC,CAAA,aAAa,sBAAsB,CAAA,IAAK;QAEtE,OAAO;uBACL;sBACA;QACF;IACF,GAAG;QAAC;QAAM;QAAQ;KAAe;IAEjC,OAAO;kBAAC;mBAAU;IAAS;AAC7B","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, Heading, 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 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 <Header styles={headerStyles}>\n <CalendarButton slot=\"previous\"><ChevronLeftIcon /></CalendarButton>\n <CalendarHeading />\n <CalendarButton slot=\"next\"><ChevronRightIcon /></CalendarButton>\n </Header>\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.cjs.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\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.cjs.map"}