@astryxdesign/lab 0.0.0-bootstrap.0 → 0.1.2-canary.04e71b2

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 (513) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/LICENSE +21 -0
  3. package/README.md +47 -1
  4. package/dist/Chart/Chart.d.ts +77 -0
  5. package/dist/Chart/Chart.d.ts.map +1 -0
  6. package/dist/Chart/Chart.js +247 -0
  7. package/dist/Chart/ChartArea.d.ts +28 -0
  8. package/dist/Chart/ChartArea.d.ts.map +1 -0
  9. package/dist/Chart/ChartArea.js +71 -0
  10. package/dist/Chart/ChartAxis.d.ts +27 -0
  11. package/dist/Chart/ChartAxis.d.ts.map +1 -0
  12. package/dist/Chart/ChartAxis.js +147 -0
  13. package/dist/Chart/ChartBar.d.ts +19 -0
  14. package/dist/Chart/ChartBar.d.ts.map +1 -0
  15. package/dist/Chart/ChartBar.js +61 -0
  16. package/dist/Chart/ChartBrush.d.ts +59 -0
  17. package/dist/Chart/ChartBrush.d.ts.map +1 -0
  18. package/dist/Chart/ChartBrush.js +197 -0
  19. package/dist/Chart/ChartCandlestick.d.ts +50 -0
  20. package/dist/Chart/ChartCandlestick.d.ts.map +1 -0
  21. package/dist/Chart/ChartCandlestick.js +138 -0
  22. package/dist/Chart/ChartContext.d.ts +5 -0
  23. package/dist/Chart/ChartContext.d.ts.map +1 -0
  24. package/dist/Chart/ChartContext.js +20 -0
  25. package/dist/Chart/ChartDot.d.ts +18 -0
  26. package/dist/Chart/ChartDot.d.ts.map +1 -0
  27. package/dist/Chart/ChartDot.js +43 -0
  28. package/dist/Chart/ChartDotGL.d.ts +16 -0
  29. package/dist/Chart/ChartDotGL.d.ts.map +1 -0
  30. package/dist/Chart/ChartDotGL.js +135 -0
  31. package/dist/Chart/ChartDotGLInteractive.d.ts +41 -0
  32. package/dist/Chart/ChartDotGLInteractive.d.ts.map +1 -0
  33. package/dist/Chart/ChartDotGLInteractive.js +446 -0
  34. package/dist/Chart/ChartErrorBar.d.ts +23 -0
  35. package/dist/Chart/ChartErrorBar.d.ts.map +1 -0
  36. package/dist/Chart/ChartErrorBar.js +68 -0
  37. package/dist/Chart/ChartGrid.d.ts +17 -0
  38. package/dist/Chart/ChartGrid.d.ts.map +1 -0
  39. package/dist/Chart/ChartGrid.js +67 -0
  40. package/dist/Chart/ChartHeatmapGL.d.ts +10 -0
  41. package/dist/Chart/ChartHeatmapGL.d.ts.map +1 -0
  42. package/dist/Chart/ChartHeatmapGL.js +171 -0
  43. package/dist/Chart/ChartLegend.d.ts +60 -0
  44. package/dist/Chart/ChartLegend.d.ts.map +1 -0
  45. package/dist/Chart/ChartLegend.js +161 -0
  46. package/dist/Chart/ChartLine.d.ts +23 -0
  47. package/dist/Chart/ChartLine.d.ts.map +1 -0
  48. package/dist/Chart/ChartLine.js +64 -0
  49. package/dist/Chart/ChartReferenceLine.d.ts +11 -0
  50. package/dist/Chart/ChartReferenceLine.d.ts.map +1 -0
  51. package/dist/Chart/ChartReferenceLine.js +109 -0
  52. package/dist/Chart/ChartSelect.d.ts +9 -0
  53. package/dist/Chart/ChartSelect.d.ts.map +1 -0
  54. package/dist/Chart/ChartSelect.js +90 -0
  55. package/dist/Chart/ChartStreamGL.d.ts +17 -0
  56. package/dist/Chart/ChartStreamGL.d.ts.map +1 -0
  57. package/dist/Chart/ChartStreamGL.js +157 -0
  58. package/dist/Chart/ChartTooltip.d.ts +85 -0
  59. package/dist/Chart/ChartTooltip.d.ts.map +1 -0
  60. package/dist/Chart/ChartTooltip.js +335 -0
  61. package/dist/Chart/ChartZoom.d.ts +23 -0
  62. package/dist/Chart/ChartZoom.d.ts.map +1 -0
  63. package/dist/Chart/ChartZoom.js +314 -0
  64. package/dist/Chart/formatters.d.ts +33 -0
  65. package/dist/Chart/formatters.d.ts.map +1 -0
  66. package/dist/Chart/formatters.js +101 -0
  67. package/dist/Chart/getChartColors.d.ts +56 -0
  68. package/dist/Chart/getChartColors.d.ts.map +1 -0
  69. package/dist/Chart/getChartColors.js +150 -0
  70. package/dist/Chart/index.d.ts +29 -0
  71. package/dist/Chart/index.d.ts.map +1 -0
  72. package/dist/Chart/index.js +29 -0
  73. package/dist/Chart/m4.d.ts +36 -0
  74. package/dist/Chart/m4.d.ts.map +1 -0
  75. package/dist/Chart/m4.js +106 -0
  76. package/dist/Chart/types.d.ts +55 -0
  77. package/dist/Chart/types.d.ts.map +1 -0
  78. package/dist/Chart/types.js +1 -0
  79. package/dist/Chart/useChartColors.d.ts +16 -0
  80. package/dist/Chart/useChartColors.d.ts.map +1 -0
  81. package/dist/Chart/useChartColors.js +30 -0
  82. package/dist/Chart/useChartRange.d.ts +50 -0
  83. package/dist/Chart/useChartRange.d.ts.map +1 -0
  84. package/dist/Chart/useChartRange.js +90 -0
  85. package/dist/Chart/utils.d.ts +15 -0
  86. package/dist/Chart/utils.d.ts.map +1 -0
  87. package/dist/Chart/utils.js +24 -0
  88. package/dist/Chart/webgl.d.ts +62 -0
  89. package/dist/Chart/webgl.d.ts.map +1 -0
  90. package/dist/Chart/webgl.js +169 -0
  91. package/dist/ChartV2/Chart.d.ts +32 -0
  92. package/dist/ChartV2/Chart.d.ts.map +1 -0
  93. package/dist/ChartV2/Chart.js +281 -0
  94. package/dist/ChartV2/ChartAxis.d.ts +36 -0
  95. package/dist/ChartV2/ChartAxis.d.ts.map +1 -0
  96. package/dist/ChartV2/ChartAxis.js +161 -0
  97. package/dist/ChartV2/ChartGrid.d.ts +20 -0
  98. package/dist/ChartV2/ChartGrid.d.ts.map +1 -0
  99. package/dist/ChartV2/ChartGrid.js +76 -0
  100. package/dist/ChartV2/ChartLegend.d.ts +14 -0
  101. package/dist/ChartV2/ChartLegend.d.ts.map +1 -0
  102. package/dist/ChartV2/ChartLegend.js +54 -0
  103. package/dist/ChartV2/ChartSwatch.d.ts +36 -0
  104. package/dist/ChartV2/ChartSwatch.d.ts.map +1 -0
  105. package/dist/ChartV2/ChartSwatch.js +82 -0
  106. package/dist/ChartV2/ChartTooltip.d.ts +46 -0
  107. package/dist/ChartV2/ChartTooltip.d.ts.map +1 -0
  108. package/dist/ChartV2/ChartTooltip.js +267 -0
  109. package/dist/ChartV2/ChartV2Context.d.ts +4 -0
  110. package/dist/ChartV2/ChartV2Context.d.ts.map +1 -0
  111. package/dist/ChartV2/ChartV2Context.js +12 -0
  112. package/dist/ChartV2/index.d.ts +13 -0
  113. package/dist/ChartV2/index.d.ts.map +1 -0
  114. package/dist/ChartV2/index.js +10 -0
  115. package/dist/ChartV2/layout.d.ts +25 -0
  116. package/dist/ChartV2/layout.d.ts.map +1 -0
  117. package/dist/ChartV2/layout.js +195 -0
  118. package/dist/ChartV2/legend.d.ts +18 -0
  119. package/dist/ChartV2/legend.d.ts.map +1 -0
  120. package/dist/ChartV2/legend.js +24 -0
  121. package/dist/ChartV2/marks/area.d.ts +19 -0
  122. package/dist/ChartV2/marks/area.d.ts.map +1 -0
  123. package/dist/ChartV2/marks/area.js +109 -0
  124. package/dist/ChartV2/marks/band.d.ts +9 -0
  125. package/dist/ChartV2/marks/band.d.ts.map +1 -0
  126. package/dist/ChartV2/marks/band.js +59 -0
  127. package/dist/ChartV2/marks/bar.d.ts +17 -0
  128. package/dist/ChartV2/marks/bar.d.ts.map +1 -0
  129. package/dist/ChartV2/marks/bar.js +120 -0
  130. package/dist/ChartV2/marks/candlestick.d.ts +15 -0
  131. package/dist/ChartV2/marks/candlestick.d.ts.map +1 -0
  132. package/dist/ChartV2/marks/candlestick.js +83 -0
  133. package/dist/ChartV2/marks/dot.d.ts +15 -0
  134. package/dist/ChartV2/marks/dot.d.ts.map +1 -0
  135. package/dist/ChartV2/marks/dot.js +65 -0
  136. package/dist/ChartV2/marks/dotGL.d.ts +16 -0
  137. package/dist/ChartV2/marks/dotGL.d.ts.map +1 -0
  138. package/dist/ChartV2/marks/dotGL.js +178 -0
  139. package/dist/ChartV2/marks/dotGLInteractive.d.ts +30 -0
  140. package/dist/ChartV2/marks/dotGLInteractive.d.ts.map +1 -0
  141. package/dist/ChartV2/marks/dotGLInteractive.js +464 -0
  142. package/dist/ChartV2/marks/errorBar.d.ts +27 -0
  143. package/dist/ChartV2/marks/errorBar.d.ts.map +1 -0
  144. package/dist/ChartV2/marks/errorBar.js +87 -0
  145. package/dist/ChartV2/marks/heatmapGL.d.ts +23 -0
  146. package/dist/ChartV2/marks/heatmapGL.d.ts.map +1 -0
  147. package/dist/ChartV2/marks/heatmapGL.js +242 -0
  148. package/dist/ChartV2/marks/index.d.ts +13 -0
  149. package/dist/ChartV2/marks/index.d.ts.map +1 -0
  150. package/dist/ChartV2/marks/index.js +14 -0
  151. package/dist/ChartV2/marks/line.d.ts +18 -0
  152. package/dist/ChartV2/marks/line.d.ts.map +1 -0
  153. package/dist/ChartV2/marks/line.js +76 -0
  154. package/dist/ChartV2/marks/referenceLine.d.ts +35 -0
  155. package/dist/ChartV2/marks/referenceLine.d.ts.map +1 -0
  156. package/dist/ChartV2/marks/referenceLine.js +186 -0
  157. package/dist/ChartV2/marks/streamGL.d.ts +36 -0
  158. package/dist/ChartV2/marks/streamGL.d.ts.map +1 -0
  159. package/dist/ChartV2/marks/streamGL.js +204 -0
  160. package/dist/ChartV2/tooltip.d.ts +38 -0
  161. package/dist/ChartV2/tooltip.d.ts.map +1 -0
  162. package/dist/ChartV2/tooltip.js +54 -0
  163. package/dist/ChartV2/types.d.ts +115 -0
  164. package/dist/ChartV2/types.d.ts.map +1 -0
  165. package/dist/ChartV2/types.js +35 -0
  166. package/dist/ChatReasoning/ChatReasoning.d.ts +51 -0
  167. package/dist/ChatReasoning/ChatReasoning.d.ts.map +1 -0
  168. package/dist/ChatReasoning/ChatReasoning.js +236 -0
  169. package/dist/CircularProgress/CircularProgress.d.ts +101 -0
  170. package/dist/CircularProgress/CircularProgress.d.ts.map +1 -0
  171. package/dist/CircularProgress/CircularProgress.js +263 -0
  172. package/dist/CircularProgress/index.d.ts +6 -0
  173. package/dist/CircularProgress/index.d.ts.map +1 -0
  174. package/dist/CircularProgress/index.js +8 -0
  175. package/dist/CodeBlock/index.d.ts +8 -0
  176. package/dist/CodeBlock/index.d.ts.map +1 -0
  177. package/dist/CodeBlock/index.js +9 -0
  178. package/dist/CodeEditor/CodeEditor.d.ts +46 -0
  179. package/dist/CodeEditor/CodeEditor.d.ts.map +1 -0
  180. package/dist/CodeEditor/CodeEditor.js +396 -0
  181. package/dist/CodeEditor/index.d.ts +6 -0
  182. package/dist/CodeEditor/index.d.ts.map +1 -0
  183. package/dist/CodeEditor/index.js +7 -0
  184. package/dist/Radial/RadialArea.d.ts +25 -0
  185. package/dist/Radial/RadialArea.d.ts.map +1 -0
  186. package/dist/Radial/RadialArea.js +91 -0
  187. package/dist/Radial/RadialAxis.d.ts +14 -0
  188. package/dist/Radial/RadialAxis.d.ts.map +1 -0
  189. package/dist/Radial/RadialAxis.js +55 -0
  190. package/dist/Radial/RadialChart.d.ts +70 -0
  191. package/dist/Radial/RadialChart.d.ts.map +1 -0
  192. package/dist/Radial/RadialChart.js +174 -0
  193. package/dist/Radial/RadialContext.d.ts +5 -0
  194. package/dist/Radial/RadialContext.d.ts.map +1 -0
  195. package/dist/Radial/RadialContext.js +19 -0
  196. package/dist/Radial/RadialGrid.d.ts +14 -0
  197. package/dist/Radial/RadialGrid.d.ts.map +1 -0
  198. package/dist/Radial/RadialGrid.js +70 -0
  199. package/dist/Radial/RadialSlice.d.ts +23 -0
  200. package/dist/Radial/RadialSlice.d.ts.map +1 -0
  201. package/dist/Radial/RadialSlice.js +85 -0
  202. package/dist/Radial/RadialTooltip.d.ts +44 -0
  203. package/dist/Radial/RadialTooltip.d.ts.map +1 -0
  204. package/dist/Radial/RadialTooltip.js +284 -0
  205. package/dist/Radial/index.d.ts +9 -0
  206. package/dist/Radial/index.d.ts.map +1 -0
  207. package/dist/Radial/index.js +9 -0
  208. package/dist/Radial/types.d.ts +39 -0
  209. package/dist/Radial/types.d.ts.map +1 -0
  210. package/dist/Radial/types.js +1 -0
  211. package/dist/SVGIcon/SVGIcon.d.ts +87 -0
  212. package/dist/SVGIcon/SVGIcon.d.ts.map +1 -0
  213. package/dist/SVGIcon/SVGIcon.js +299 -0
  214. package/dist/SVGIcon/icons.d.ts +49 -0
  215. package/dist/SVGIcon/icons.d.ts.map +1 -0
  216. package/dist/SVGIcon/icons.js +326 -0
  217. package/dist/SVGIcon/index.d.ts +15 -0
  218. package/dist/SVGIcon/index.d.ts.map +1 -0
  219. package/dist/SVGIcon/index.js +22 -0
  220. package/dist/SVGIcon/pathTransforms.d.ts +35 -0
  221. package/dist/SVGIcon/pathTransforms.d.ts.map +1 -0
  222. package/dist/SVGIcon/pathTransforms.js +644 -0
  223. package/dist/SVGIcon/tokens.stylex.d.ts +37 -0
  224. package/dist/SVGIcon/tokens.stylex.d.ts.map +1 -0
  225. package/dist/SVGIcon/tokens.stylex.js +40 -0
  226. package/dist/SVGIcon/variations.stylex.d.ts +44 -0
  227. package/dist/SVGIcon/variations.stylex.d.ts.map +1 -0
  228. package/dist/SVGIcon/variations.stylex.js +119 -0
  229. package/dist/SVGIcon/xif-examples.d.ts +22 -0
  230. package/dist/SVGIcon/xif-examples.d.ts.map +1 -0
  231. package/dist/SVGIcon/xif-examples.js +202 -0
  232. package/dist/SVGIcon/xif-types.d.ts +129 -0
  233. package/dist/SVGIcon/xif-types.d.ts.map +1 -0
  234. package/dist/SVGIcon/xif-types.js +1 -0
  235. package/dist/Sankey/SankeyChart.d.ts +72 -0
  236. package/dist/Sankey/SankeyChart.d.ts.map +1 -0
  237. package/dist/Sankey/SankeyChart.js +162 -0
  238. package/dist/Sankey/SankeyContext.d.ts +5 -0
  239. package/dist/Sankey/SankeyContext.d.ts.map +1 -0
  240. package/dist/Sankey/SankeyContext.js +20 -0
  241. package/dist/Sankey/SankeyGrid.d.ts +20 -0
  242. package/dist/Sankey/SankeyGrid.d.ts.map +1 -0
  243. package/dist/Sankey/SankeyGrid.js +53 -0
  244. package/dist/Sankey/SankeyLabel.d.ts +11 -0
  245. package/dist/Sankey/SankeyLabel.d.ts.map +1 -0
  246. package/dist/Sankey/SankeyLabel.js +179 -0
  247. package/dist/Sankey/SankeyLink.d.ts +29 -0
  248. package/dist/Sankey/SankeyLink.d.ts.map +1 -0
  249. package/dist/Sankey/SankeyLink.js +139 -0
  250. package/dist/Sankey/SankeyNode.d.ts +15 -0
  251. package/dist/Sankey/SankeyNode.d.ts.map +1 -0
  252. package/dist/Sankey/SankeyNode.js +56 -0
  253. package/dist/Sankey/index.d.ts +8 -0
  254. package/dist/Sankey/index.d.ts.map +1 -0
  255. package/dist/Sankey/index.js +8 -0
  256. package/dist/Sankey/layout.d.ts +26 -0
  257. package/dist/Sankey/layout.d.ts.map +1 -0
  258. package/dist/Sankey/layout.js +157 -0
  259. package/dist/Sankey/types.d.ts +84 -0
  260. package/dist/Sankey/types.d.ts.map +1 -0
  261. package/dist/Sankey/types.js +1 -0
  262. package/dist/Schedule/CalendarEvent.d.ts +36 -0
  263. package/dist/Schedule/CalendarEvent.d.ts.map +1 -0
  264. package/dist/Schedule/CalendarEvent.js +35 -0
  265. package/dist/Schedule/DayView.d.ts +8 -0
  266. package/dist/Schedule/DayView.d.ts.map +1 -0
  267. package/dist/Schedule/DayView.js +105 -0
  268. package/dist/Schedule/ListView.d.ts +6 -0
  269. package/dist/Schedule/ListView.d.ts.map +1 -0
  270. package/dist/Schedule/ListView.js +171 -0
  271. package/dist/Schedule/MonthlyView.d.ts +6 -0
  272. package/dist/Schedule/MonthlyView.d.ts.map +1 -0
  273. package/dist/Schedule/MonthlyView.js +270 -0
  274. package/dist/Schedule/Schedule.d.ts +22 -0
  275. package/dist/Schedule/Schedule.d.ts.map +1 -0
  276. package/dist/Schedule/Schedule.js +185 -0
  277. package/dist/Schedule/TimeGridView.d.ts +12 -0
  278. package/dist/Schedule/TimeGridView.d.ts.map +1 -0
  279. package/dist/Schedule/TimeGridView.js +364 -0
  280. package/dist/Schedule/WeeklyView.d.ts +9 -0
  281. package/dist/Schedule/WeeklyView.d.ts.map +1 -0
  282. package/dist/Schedule/WeeklyView.js +112 -0
  283. package/dist/Schedule/context.d.ts +20 -0
  284. package/dist/Schedule/context.d.ts.map +1 -0
  285. package/dist/Schedule/context.js +19 -0
  286. package/dist/Schedule/dateMath.d.ts +21 -0
  287. package/dist/Schedule/dateMath.d.ts.map +1 -0
  288. package/dist/Schedule/dateMath.js +63 -0
  289. package/dist/Schedule/index.d.ts +19 -0
  290. package/dist/Schedule/index.d.ts.map +1 -0
  291. package/dist/Schedule/index.js +17 -0
  292. package/dist/Schedule/plugins/PaginationPlugin.d.ts +7 -0
  293. package/dist/Schedule/plugins/PaginationPlugin.d.ts.map +1 -0
  294. package/dist/Schedule/plugins/PaginationPlugin.js +81 -0
  295. package/dist/Schedule/plugins/ViewSelectorPlugin.d.ts +11 -0
  296. package/dist/Schedule/plugins/ViewSelectorPlugin.d.ts.map +1 -0
  297. package/dist/Schedule/plugins/ViewSelectorPlugin.js +78 -0
  298. package/dist/Schedule/plugins/index.d.ts +5 -0
  299. package/dist/Schedule/plugins/index.d.ts.map +1 -0
  300. package/dist/Schedule/plugins/index.js +14 -0
  301. package/dist/Schedule/shared.d.ts +923 -0
  302. package/dist/Schedule/shared.d.ts.map +1 -0
  303. package/dist/Schedule/shared.js +1325 -0
  304. package/dist/Schedule/types.d.ts +51 -0
  305. package/dist/Schedule/types.d.ts.map +1 -0
  306. package/dist/Schedule/types.js +1 -0
  307. package/dist/Schedule/useCurrentTime.d.ts +3 -0
  308. package/dist/Schedule/useCurrentTime.d.ts.map +1 -0
  309. package/dist/Schedule/useCurrentTime.js +43 -0
  310. package/dist/Schedule/zonedDateTime.d.ts +20 -0
  311. package/dist/Schedule/zonedDateTime.d.ts.map +1 -0
  312. package/dist/Schedule/zonedDateTime.js +31 -0
  313. package/dist/Stepper/Step.d.ts +120 -0
  314. package/dist/Stepper/Step.d.ts.map +1 -0
  315. package/dist/Stepper/Step.js +573 -0
  316. package/dist/Stepper/StepStatus.d.ts +24 -0
  317. package/dist/Stepper/StepStatus.d.ts.map +1 -0
  318. package/dist/Stepper/StepStatus.js +1 -0
  319. package/dist/Stepper/Stepper.d.ts +77 -0
  320. package/dist/Stepper/Stepper.d.ts.map +1 -0
  321. package/dist/Stepper/Stepper.js +104 -0
  322. package/dist/Stepper/StepperContext.d.ts +12 -0
  323. package/dist/Stepper/StepperContext.d.ts.map +1 -0
  324. package/dist/Stepper/StepperContext.js +24 -0
  325. package/dist/Stepper/index.d.ts +8 -0
  326. package/dist/Stepper/index.d.ts.map +1 -0
  327. package/dist/Stepper/index.js +7 -0
  328. package/dist/ThreeD/ThreeDAxis.d.ts +6 -0
  329. package/dist/ThreeD/ThreeDAxis.d.ts.map +1 -0
  330. package/dist/ThreeD/ThreeDAxis.js +75 -0
  331. package/dist/ThreeD/ThreeDBar.d.ts +7 -0
  332. package/dist/ThreeD/ThreeDBar.d.ts.map +1 -0
  333. package/dist/ThreeD/ThreeDBar.js +98 -0
  334. package/dist/ThreeD/ThreeDChart.d.ts +24 -0
  335. package/dist/ThreeD/ThreeDChart.d.ts.map +1 -0
  336. package/dist/ThreeD/ThreeDChart.js +202 -0
  337. package/dist/ThreeD/ThreeDContext.d.ts +5 -0
  338. package/dist/ThreeD/ThreeDContext.d.ts.map +1 -0
  339. package/dist/ThreeD/ThreeDContext.js +19 -0
  340. package/dist/ThreeD/ThreeDGrid.d.ts +5 -0
  341. package/dist/ThreeD/ThreeDGrid.d.ts.map +1 -0
  342. package/dist/ThreeD/ThreeDGrid.js +55 -0
  343. package/dist/ThreeD/ThreeDScatter.d.ts +7 -0
  344. package/dist/ThreeD/ThreeDScatter.d.ts.map +1 -0
  345. package/dist/ThreeD/ThreeDScatter.js +57 -0
  346. package/dist/ThreeD/ThreeDScatterGL.d.ts +7 -0
  347. package/dist/ThreeD/ThreeDScatterGL.d.ts.map +1 -0
  348. package/dist/ThreeD/ThreeDScatterGL.js +243 -0
  349. package/dist/ThreeD/ThreeDSurface.d.ts +15 -0
  350. package/dist/ThreeD/ThreeDSurface.d.ts.map +1 -0
  351. package/dist/ThreeD/ThreeDSurface.js +97 -0
  352. package/dist/ThreeD/index.d.ts +10 -0
  353. package/dist/ThreeD/index.d.ts.map +1 -0
  354. package/dist/ThreeD/index.js +10 -0
  355. package/dist/ThreeD/types.d.ts +57 -0
  356. package/dist/ThreeD/types.d.ts.map +1 -0
  357. package/dist/ThreeD/types.js +1 -0
  358. package/dist/index.d.ts +26 -0
  359. package/dist/index.d.ts.map +1 -0
  360. package/dist/index.js +47 -0
  361. package/dist/lab.css +423 -0
  362. package/package.json +69 -4
  363. package/src/Chart/Chart.tsx +312 -0
  364. package/src/Chart/ChartArea.doc.mjs +16 -0
  365. package/src/Chart/ChartArea.tsx +91 -0
  366. package/src/Chart/ChartAxis.tsx +186 -0
  367. package/src/Chart/ChartBar.doc.mjs +16 -0
  368. package/src/Chart/ChartBar.tsx +71 -0
  369. package/src/Chart/ChartBrush.tsx +237 -0
  370. package/src/Chart/ChartCandlestick.doc.mjs +16 -0
  371. package/src/Chart/ChartCandlestick.tsx +186 -0
  372. package/src/Chart/ChartContext.ts +23 -0
  373. package/src/Chart/ChartDot.doc.mjs +16 -0
  374. package/src/Chart/ChartDot.tsx +44 -0
  375. package/src/Chart/ChartDotGL.doc.mjs +16 -0
  376. package/src/Chart/ChartDotGL.tsx +151 -0
  377. package/src/Chart/ChartDotGLInteractive.doc.mjs +16 -0
  378. package/src/Chart/ChartDotGLInteractive.tsx +519 -0
  379. package/src/Chart/ChartErrorBar.tsx +84 -0
  380. package/src/Chart/ChartGrid.tsx +86 -0
  381. package/src/Chart/ChartHeatmapGL.doc.mjs +16 -0
  382. package/src/Chart/ChartHeatmapGL.tsx +219 -0
  383. package/src/Chart/ChartLegend.tsx +181 -0
  384. package/src/Chart/ChartLine.doc.mjs +16 -0
  385. package/src/Chart/ChartLine.tsx +70 -0
  386. package/src/Chart/ChartReferenceLine.tsx +76 -0
  387. package/src/Chart/ChartSelect.tsx +111 -0
  388. package/src/Chart/ChartStreamGL.doc.mjs +16 -0
  389. package/src/Chart/ChartStreamGL.tsx +189 -0
  390. package/src/Chart/ChartTooltip.tsx +451 -0
  391. package/src/Chart/ChartZoom.tsx +400 -0
  392. package/src/Chart/formatters.ts +95 -0
  393. package/src/Chart/getChartColors.ts +249 -0
  394. package/src/Chart/index.ts +90 -0
  395. package/src/Chart/m4.test.ts +66 -0
  396. package/src/Chart/m4.ts +128 -0
  397. package/src/Chart/types.ts +64 -0
  398. package/src/Chart/useChartColors.ts +34 -0
  399. package/src/Chart/useChartRange.test.ts +101 -0
  400. package/src/Chart/useChartRange.ts +146 -0
  401. package/src/Chart/utils.ts +31 -0
  402. package/src/Chart/webgl.ts +192 -0
  403. package/src/ChartV2/Chart.tsx +348 -0
  404. package/src/ChartV2/ChartAxis.tsx +209 -0
  405. package/src/ChartV2/ChartGrid.tsx +99 -0
  406. package/src/ChartV2/ChartLegend.tsx +69 -0
  407. package/src/ChartV2/ChartSwatch.doc.mjs +17 -0
  408. package/src/ChartV2/ChartSwatch.tsx +86 -0
  409. package/src/ChartV2/ChartTooltip.tsx +382 -0
  410. package/src/ChartV2/ChartV2.doc.mjs +16 -0
  411. package/src/ChartV2/ChartV2Context.ts +15 -0
  412. package/src/ChartV2/index.ts +62 -0
  413. package/src/ChartV2/layout.ts +223 -0
  414. package/src/ChartV2/legend.ts +32 -0
  415. package/src/ChartV2/marks/area.tsx +122 -0
  416. package/src/ChartV2/marks/band.tsx +70 -0
  417. package/src/ChartV2/marks/bar.tsx +159 -0
  418. package/src/ChartV2/marks/candlestick.tsx +106 -0
  419. package/src/ChartV2/marks/dot.tsx +64 -0
  420. package/src/ChartV2/marks/dotGL.tsx +202 -0
  421. package/src/ChartV2/marks/dotGLInteractive.tsx +546 -0
  422. package/src/ChartV2/marks/errorBar.tsx +89 -0
  423. package/src/ChartV2/marks/heatmapGL.tsx +299 -0
  424. package/src/ChartV2/marks/index.ts +14 -0
  425. package/src/ChartV2/marks/line.tsx +94 -0
  426. package/src/ChartV2/marks/referenceLine.tsx +224 -0
  427. package/src/ChartV2/marks/streamGL.tsx +251 -0
  428. package/src/ChartV2/tooltip.ts +70 -0
  429. package/src/ChartV2/types.ts +129 -0
  430. package/src/ChatReasoning/ChatReasoning.doc.mjs +16 -0
  431. package/src/ChatReasoning/ChatReasoning.test.tsx +56 -0
  432. package/src/ChatReasoning/ChatReasoning.tsx +322 -0
  433. package/src/CircularProgress/CircularProgress.doc.mjs +174 -0
  434. package/src/CircularProgress/CircularProgress.test.tsx +157 -0
  435. package/src/CircularProgress/CircularProgress.tsx +373 -0
  436. package/src/CircularProgress/index.ts +15 -0
  437. package/src/CodeBlock/index.ts +10 -0
  438. package/src/CodeEditor/CodeEditor.doc.mjs +16 -0
  439. package/src/CodeEditor/CodeEditor.tsx +466 -0
  440. package/src/CodeEditor/index.ts +8 -0
  441. package/src/Radial/RadialArea.tsx +103 -0
  442. package/src/Radial/RadialAxis.tsx +60 -0
  443. package/src/Radial/RadialChart.doc.mjs +16 -0
  444. package/src/Radial/RadialChart.tsx +219 -0
  445. package/src/Radial/RadialContext.ts +22 -0
  446. package/src/Radial/RadialGrid.tsx +81 -0
  447. package/src/Radial/RadialSlice.tsx +130 -0
  448. package/src/Radial/RadialTooltip.tsx +347 -0
  449. package/src/Radial/index.ts +14 -0
  450. package/src/Radial/types.ts +46 -0
  451. package/src/SVGIcon/SVGIcon.doc.mjs +16 -0
  452. package/src/SVGIcon/SVGIcon.tsx +406 -0
  453. package/src/SVGIcon/icons.ts +283 -0
  454. package/src/SVGIcon/index.ts +73 -0
  455. package/src/SVGIcon/pathTransforms.ts +612 -0
  456. package/src/SVGIcon/tokens.stylex.ts +53 -0
  457. package/src/SVGIcon/variations.stylex.ts +122 -0
  458. package/src/SVGIcon/xif-examples.ts +191 -0
  459. package/src/SVGIcon/xif-types.ts +181 -0
  460. package/src/Sankey/SankeyChart.doc.mjs +16 -0
  461. package/src/Sankey/SankeyChart.tsx +220 -0
  462. package/src/Sankey/SankeyContext.ts +23 -0
  463. package/src/Sankey/SankeyGrid.tsx +69 -0
  464. package/src/Sankey/SankeyLabel.tsx +234 -0
  465. package/src/Sankey/SankeyLink.tsx +167 -0
  466. package/src/Sankey/SankeyNode.tsx +66 -0
  467. package/src/Sankey/index.ts +22 -0
  468. package/src/Sankey/layout.ts +219 -0
  469. package/src/Sankey/types.ts +93 -0
  470. package/src/Schedule/CalendarEvent.ts +74 -0
  471. package/src/Schedule/DayView.tsx +112 -0
  472. package/src/Schedule/ListView.tsx +236 -0
  473. package/src/Schedule/MonthlyView.tsx +401 -0
  474. package/src/Schedule/Schedule.doc.mjs +16 -0
  475. package/src/Schedule/Schedule.test.tsx +405 -0
  476. package/src/Schedule/Schedule.tsx +307 -0
  477. package/src/Schedule/TimeGridView.tsx +589 -0
  478. package/src/Schedule/WeeklyView.tsx +130 -0
  479. package/src/Schedule/context.tsx +49 -0
  480. package/src/Schedule/dateMath.ts +112 -0
  481. package/src/Schedule/index.ts +61 -0
  482. package/src/Schedule/plugins/PaginationPlugin.tsx +98 -0
  483. package/src/Schedule/plugins/ViewSelectorPlugin.tsx +128 -0
  484. package/src/Schedule/plugins/index.tsx +20 -0
  485. package/src/Schedule/shared.tsx +1304 -0
  486. package/src/Schedule/types.ts +86 -0
  487. package/src/Schedule/useCurrentTime.ts +50 -0
  488. package/src/Schedule/zonedDateTime.ts +71 -0
  489. package/src/Stepper/Step.doc.mjs +17 -0
  490. package/src/Stepper/Step.tsx +756 -0
  491. package/src/Stepper/StepStatus.ts +26 -0
  492. package/src/Stepper/Stepper.doc.mjs +265 -0
  493. package/src/Stepper/Stepper.test.tsx +281 -0
  494. package/src/Stepper/Stepper.tsx +157 -0
  495. package/src/Stepper/StepperContext.ts +43 -0
  496. package/src/Stepper/index.ts +14 -0
  497. package/src/ThreeD/3DBar.doc.mjs +16 -0
  498. package/src/ThreeD/3DChart.doc.mjs +16 -0
  499. package/src/ThreeD/3DScatter.doc.mjs +16 -0
  500. package/src/ThreeD/3DScatterGL.doc.mjs +16 -0
  501. package/src/ThreeD/3DSurface.doc.mjs +16 -0
  502. package/src/ThreeD/ThreeDAxis.tsx +86 -0
  503. package/src/ThreeD/ThreeDBar.tsx +130 -0
  504. package/src/ThreeD/ThreeDChart.tsx +262 -0
  505. package/src/ThreeD/ThreeDContext.ts +22 -0
  506. package/src/ThreeD/ThreeDGrid.tsx +68 -0
  507. package/src/ThreeD/ThreeDScatter.tsx +63 -0
  508. package/src/ThreeD/ThreeDScatterGL.tsx +270 -0
  509. package/src/ThreeD/ThreeDSurface.tsx +142 -0
  510. package/src/ThreeD/index.ts +11 -0
  511. package/src/ThreeD/projection.test.ts +132 -0
  512. package/src/ThreeD/types.ts +62 -0
  513. package/src/index.ts +250 -0
@@ -0,0 +1,1304 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ 'use client';
4
+
5
+ /**
6
+ * @file shared.tsx
7
+ * @input Schedule events, dates, timezone IDs, and display metadata
8
+ * @output Shared rendering primitives, formatters, and styles for schedule views
9
+ * @position Internal view utility module; consumed by Monthly, Weekly, Day, and List views
10
+ */
11
+
12
+ import {type ReactNode} from 'react';
13
+ import * as stylex from '@stylexjs/stylex';
14
+ import {
15
+ borderVars,
16
+ colorVars,
17
+ fontWeightVars,
18
+ radiusVars,
19
+ spacingVars,
20
+ typographyVars,
21
+ typeScaleVars,
22
+ } from '@astryxdesign/core/theme/tokens.stylex';
23
+ import {Spinner} from '@astryxdesign/core/Spinner';
24
+ import {HStack} from '@astryxdesign/core/Stack';
25
+ import {Heading, Text} from '@astryxdesign/core/Text';
26
+ import {
27
+ plainDateFromInstant,
28
+ plainDateIsAfter,
29
+ plainDateIsBefore,
30
+ plainDateToInstant,
31
+ type PlainDate,
32
+ } from '@astryxdesign/core/utils';
33
+ import {isDayEvent} from './dateMath';
34
+ import {useScheduleContext} from './context';
35
+ import type {
36
+ CalendarEvent,
37
+ CalendarInstantEvent,
38
+ Instant,
39
+ ScheduleCategory,
40
+ ScheduleHeaderContent,
41
+ ScheduleEventColor,
42
+ } from './types';
43
+
44
+ const DEFAULT_EVENT_CATEGORY: ScheduleCategory = {
45
+ label: 'Event',
46
+ color: 'blue',
47
+ };
48
+
49
+ export function ScheduleFrame({
50
+ title,
51
+ titleLabel,
52
+ isLoading,
53
+ children,
54
+ }: {
55
+ title: ReactNode;
56
+ titleLabel: string;
57
+ isLoading: boolean;
58
+ children: ReactNode;
59
+ }) {
60
+ const {plugins} = useScheduleContext();
61
+ const initialHeader: ScheduleHeaderContent = {
62
+ startContent: null,
63
+ centerContent: (
64
+ <span {...stylex.props(styles.headerTitleContent)}>
65
+ <Heading level={2}>{title}</Heading>
66
+ <span
67
+ {...stylex.props(
68
+ styles.loadingSpinner,
69
+ !isLoading && styles.loadingSpinnerHidden,
70
+ )}>
71
+ <Spinner size="md" aria-label="Loading events" />
72
+ </span>
73
+ </span>
74
+ ),
75
+ endContent: null,
76
+ };
77
+ const header = plugins.reduce(
78
+ (content, plugin) =>
79
+ plugin.renderHeader?.(
80
+ content.startContent,
81
+ content.centerContent,
82
+ content.endContent,
83
+ ) ?? content,
84
+ initialHeader,
85
+ );
86
+
87
+ return (
88
+ <section {...stylex.props(styles.frame)} aria-label={titleLabel}>
89
+ <div {...stylex.props(styles.header)}>
90
+ <HStack gap={8} align="center" xstyle={styles.headerControls}>
91
+ {header.startContent}
92
+ </HStack>
93
+ <HStack gap={8} align="center" xstyle={styles.headerTitle}>
94
+ {header.centerContent}
95
+ </HStack>
96
+ <HStack
97
+ gap={8}
98
+ align="center"
99
+ justify="end"
100
+ xstyle={styles.headerStatus}>
101
+ {header.endContent}
102
+ </HStack>
103
+ </div>
104
+ {children}
105
+ </section>
106
+ );
107
+ }
108
+
109
+ export function ScheduleMonthTitle({
110
+ date,
111
+ timezoneID,
112
+ }: {
113
+ date: PlainDate;
114
+ timezoneID: string;
115
+ }) {
116
+ const month = new Intl.DateTimeFormat(undefined, {
117
+ month: 'long',
118
+ timeZone: timezoneID,
119
+ }).format(new Date(Date.UTC(date.year, date.month - 1, date.day, 12)));
120
+ return (
121
+ <>
122
+ <span {...stylex.props(styles.titleEmphasis)}>{month}</span> {date.year}
123
+ </>
124
+ );
125
+ }
126
+
127
+ export function ScheduleRangeMonthTitle({
128
+ start,
129
+ end,
130
+ timezoneID,
131
+ }: {
132
+ start: PlainDate;
133
+ end: PlainDate;
134
+ timezoneID: string;
135
+ }) {
136
+ if (start.year === end.year && start.month === end.month) {
137
+ return <ScheduleMonthTitle date={start} timezoneID={timezoneID} />;
138
+ }
139
+
140
+ const startMonth = formatWithPlainDate(start, timezoneID, {month: 'long'});
141
+ const endMonth = formatWithPlainDate(end, timezoneID, {month: 'long'});
142
+ return start.year === end.year ? (
143
+ <>
144
+ <span {...stylex.props(styles.titleEmphasis)}>{startMonth}</span> -{' '}
145
+ <span {...stylex.props(styles.titleEmphasis)}>{endMonth}</span> {end.year}
146
+ </>
147
+ ) : (
148
+ <>
149
+ <span {...stylex.props(styles.titleEmphasis)}>{startMonth}</span>{' '}
150
+ {start.year} -{' '}
151
+ <span {...stylex.props(styles.titleEmphasis)}>{endMonth}</span> {end.year}
152
+ </>
153
+ );
154
+ }
155
+
156
+ export function EventPill({
157
+ event,
158
+ day,
159
+ timezoneID,
160
+ isPast = false,
161
+ }: {
162
+ event: CalendarEvent;
163
+ day?: PlainDate;
164
+ timezoneID?: string;
165
+ isPast?: boolean;
166
+ }) {
167
+ const {categories} = useScheduleContext();
168
+ const category = getEventCategory(event, categories);
169
+ const timeLabel =
170
+ day != null && timezoneID != null && !isDayEvent(event)
171
+ ? formatEventTime(event, day, timezoneID)
172
+ : null;
173
+ return (
174
+ <span
175
+ {...stylex.props(
176
+ styles.eventPill,
177
+ isPast
178
+ ? eventPastSurfaceColorStyle(category.color)
179
+ : eventSurfaceColorStyle(category.color),
180
+ )}>
181
+ {timeLabel != null && (
182
+ <Text type="supporting" color="inherit" xstyle={styles.eventTime}>
183
+ {timeLabel}
184
+ </Text>
185
+ )}
186
+ <Text
187
+ type="supporting"
188
+ color="inherit"
189
+ weight="bold"
190
+ xstyle={styles.eventTitle}>
191
+ {event.title}
192
+ </Text>
193
+ </span>
194
+ );
195
+ }
196
+
197
+ export function MonthEventPill({
198
+ event,
199
+ timezoneID,
200
+ isPast = false,
201
+ }: {
202
+ event: CalendarEvent;
203
+ timezoneID: string;
204
+ isPast?: boolean;
205
+ }) {
206
+ const {categories} = useScheduleContext();
207
+ const category = getEventCategory(event, categories);
208
+ const timeLabel = isDayEvent(event)
209
+ ? null
210
+ : formatEventStartTime(event, timezoneID);
211
+ return (
212
+ <span
213
+ {...stylex.props(
214
+ styles.eventPill,
215
+ isPast
216
+ ? eventPastSurfaceColorStyle(category.color)
217
+ : eventSurfaceColorStyle(category.color),
218
+ )}>
219
+ {timeLabel != null && (
220
+ <Text type="supporting" color="inherit" xstyle={styles.eventTime}>
221
+ {timeLabel}
222
+ </Text>
223
+ )}
224
+ <Text
225
+ type="supporting"
226
+ color="inherit"
227
+ weight="bold"
228
+ xstyle={styles.eventTitle}>
229
+ {event.title}
230
+ </Text>
231
+ </span>
232
+ );
233
+ }
234
+
235
+ export function ListEventRow({
236
+ event,
237
+ timezoneID,
238
+ isPast = false,
239
+ }: {
240
+ event: CalendarEvent;
241
+ timezoneID: string;
242
+ isPast?: boolean;
243
+ }) {
244
+ const {categories} = useScheduleContext();
245
+ const category = getEventCategory(event, categories);
246
+ return (
247
+ <div {...stylex.props(styles.listEventRow, isPast && styles.listEventPast)}>
248
+ <span
249
+ aria-hidden
250
+ {...stylex.props(
251
+ styles.listEventDot,
252
+ eventDotColorStyle(category.color),
253
+ )}
254
+ />
255
+ <span {...stylex.props(styles.listEventTime)}>
256
+ {isDayEvent(event)
257
+ ? 'All day'
258
+ : formatEventTimeRange(event, timezoneID)}
259
+ </span>
260
+ <span {...stylex.props(styles.listEventTitle)}>{event.title}</span>
261
+ </div>
262
+ );
263
+ }
264
+
265
+ export function getEventCategory(
266
+ event: CalendarEvent,
267
+ categories: ReadonlyArray<ScheduleCategory>,
268
+ ): ScheduleCategory {
269
+ return (
270
+ categories.find(category => category.label === event.category) ??
271
+ (event.category != null
272
+ ? {label: event.category, color: DEFAULT_EVENT_CATEGORY.color}
273
+ : DEFAULT_EVENT_CATEGORY)
274
+ );
275
+ }
276
+
277
+ export function eventColorStyle(color: ScheduleEventColor | undefined) {
278
+ switch (color) {
279
+ case 'cyan':
280
+ return styles.eventCyan;
281
+ case 'gray':
282
+ return styles.eventGray;
283
+ case 'green':
284
+ return styles.eventGreen;
285
+ case 'orange':
286
+ return styles.eventOrange;
287
+ case 'pink':
288
+ return styles.eventPink;
289
+ case 'purple':
290
+ return styles.eventPurple;
291
+ case 'red':
292
+ return styles.eventRed;
293
+ case 'teal':
294
+ return styles.eventTeal;
295
+ case 'yellow':
296
+ return styles.eventYellow;
297
+ case 'blue':
298
+ default:
299
+ return styles.eventBlue;
300
+ }
301
+ }
302
+
303
+ export function eventDotColorStyle(color: ScheduleEventColor | undefined) {
304
+ switch (color) {
305
+ case 'cyan':
306
+ return styles.eventDotCyan;
307
+ case 'gray':
308
+ return styles.eventDotGray;
309
+ case 'green':
310
+ return styles.eventDotGreen;
311
+ case 'orange':
312
+ return styles.eventDotOrange;
313
+ case 'pink':
314
+ return styles.eventDotPink;
315
+ case 'purple':
316
+ return styles.eventDotPurple;
317
+ case 'red':
318
+ return styles.eventDotRed;
319
+ case 'teal':
320
+ return styles.eventDotTeal;
321
+ case 'yellow':
322
+ return styles.eventDotYellow;
323
+ case 'blue':
324
+ default:
325
+ return styles.eventDotBlue;
326
+ }
327
+ }
328
+
329
+ export function eventSurfaceColorStyle(
330
+ color: ScheduleEventColor | undefined,
331
+ ) {
332
+ switch (color) {
333
+ case 'cyan':
334
+ return styles.eventSurfaceCyan;
335
+ case 'gray':
336
+ return styles.eventSurfaceGray;
337
+ case 'green':
338
+ return styles.eventSurfaceGreen;
339
+ case 'orange':
340
+ return styles.eventSurfaceOrange;
341
+ case 'pink':
342
+ return styles.eventSurfacePink;
343
+ case 'purple':
344
+ return styles.eventSurfacePurple;
345
+ case 'red':
346
+ return styles.eventSurfaceRed;
347
+ case 'teal':
348
+ return styles.eventSurfaceTeal;
349
+ case 'yellow':
350
+ return styles.eventSurfaceYellow;
351
+ case 'blue':
352
+ default:
353
+ return styles.eventSurfaceBlue;
354
+ }
355
+ }
356
+
357
+ export function eventPastSurfaceColorStyle(
358
+ color: ScheduleEventColor | undefined,
359
+ ) {
360
+ switch (color) {
361
+ case 'cyan':
362
+ return styles.eventPastSurfaceCyan;
363
+ case 'gray':
364
+ return styles.eventPastSurfaceGray;
365
+ case 'green':
366
+ return styles.eventPastSurfaceGreen;
367
+ case 'orange':
368
+ return styles.eventPastSurfaceOrange;
369
+ case 'pink':
370
+ return styles.eventPastSurfacePink;
371
+ case 'purple':
372
+ return styles.eventPastSurfacePurple;
373
+ case 'red':
374
+ return styles.eventPastSurfaceRed;
375
+ case 'teal':
376
+ return styles.eventPastSurfaceTeal;
377
+ case 'yellow':
378
+ return styles.eventPastSurfaceYellow;
379
+ case 'blue':
380
+ default:
381
+ return styles.eventPastSurfaceBlue;
382
+ }
383
+ }
384
+
385
+ export function formatWithPlainDate(
386
+ date: PlainDate,
387
+ timezoneID: string,
388
+ options: Intl.DateTimeFormatOptions,
389
+ ): string {
390
+ return new Intl.DateTimeFormat(undefined, {
391
+ ...options,
392
+ timeZone: timezoneID,
393
+ }).format(new Date(plainDateToInstant(date, timezoneID, 12)));
394
+ }
395
+
396
+ export function formatMonthTitle(date: PlainDate, timezoneID: string): string {
397
+ return formatWithPlainDate(date, timezoneID, {
398
+ month: 'long',
399
+ year: 'numeric',
400
+ });
401
+ }
402
+
403
+ export function formatWeekTitle(
404
+ start: PlainDate,
405
+ end: PlainDate,
406
+ timezoneID: string,
407
+ ): string {
408
+ if (start.year === end.year && start.month === end.month) {
409
+ return formatMonthTitle(start, timezoneID);
410
+ }
411
+ const startMonth = formatWithPlainDate(start, timezoneID, {month: 'long'});
412
+ const endMonth = formatWithPlainDate(end, timezoneID, {month: 'long'});
413
+ return start.year === end.year
414
+ ? `${startMonth} - ${endMonth} ${end.year}`
415
+ : `${startMonth} ${start.year} - ${endMonth} ${end.year}`;
416
+ }
417
+
418
+ export function formatRangeTitle(
419
+ start: PlainDate,
420
+ end: PlainDate,
421
+ timezoneID: string,
422
+ ): string {
423
+ return `${formatShortDate(start, timezoneID)} - ${formatShortDate(
424
+ end,
425
+ timezoneID,
426
+ )}`;
427
+ }
428
+
429
+ export function formatFullDate(date: PlainDate, timezoneID: string): string {
430
+ return formatWithPlainDate(date, timezoneID, {
431
+ weekday: 'long',
432
+ month: 'long',
433
+ day: 'numeric',
434
+ year: 'numeric',
435
+ });
436
+ }
437
+
438
+ export function formatShortDate(date: PlainDate, timezoneID: string): string {
439
+ return formatWithPlainDate(date, timezoneID, {
440
+ month: 'short',
441
+ day: 'numeric',
442
+ });
443
+ }
444
+
445
+ export function formatWeekday(
446
+ date: PlainDate,
447
+ timezoneID: string,
448
+ weekday: 'short' | 'long',
449
+ ): string {
450
+ return formatWithPlainDate(date, timezoneID, {weekday});
451
+ }
452
+
453
+ export function formatDayNumber(date: PlainDate, timezoneID: string): string {
454
+ return formatWithPlainDate(date, timezoneID, {day: 'numeric'});
455
+ }
456
+
457
+ export function formatHour(hour: number): string {
458
+ return new Intl.DateTimeFormat(undefined, {
459
+ hour: 'numeric',
460
+ timeZone: 'UTC',
461
+ }).format(new Date(Date.UTC(2026, 0, 1, hour)));
462
+ }
463
+
464
+ export function formatTimezoneAbbreviation(
465
+ date: PlainDate,
466
+ timezoneID: string,
467
+ ): string {
468
+ const part = new Intl.DateTimeFormat(undefined, {
469
+ timeZone: timezoneID,
470
+ timeZoneName: 'short',
471
+ })
472
+ .formatToParts(new Date(plainDateToInstant(date, timezoneID, 12)))
473
+ .find(({type}) => type === 'timeZoneName');
474
+ return part?.value ?? timezoneID;
475
+ }
476
+
477
+ export function formatEventTime(
478
+ event: CalendarInstantEvent,
479
+ day: PlainDate,
480
+ timezoneID: string,
481
+ ): string {
482
+ const formatter = new Intl.DateTimeFormat(undefined, {
483
+ hour: 'numeric',
484
+ minute: '2-digit',
485
+ timeZone: timezoneID,
486
+ });
487
+ return `${formatter.format(new Date(event.start))} - ${formatter.format(
488
+ new Date(event.end),
489
+ )}`;
490
+ }
491
+
492
+ export function formatEventTimeRange(
493
+ event: CalendarInstantEvent,
494
+ timezoneID: string,
495
+ ): string {
496
+ const formatter = new Intl.DateTimeFormat(undefined, {
497
+ hour: 'numeric',
498
+ minute: '2-digit',
499
+ timeZone: timezoneID,
500
+ });
501
+ return `${formatter.format(new Date(event.start))} - ${formatter.format(
502
+ new Date(event.end),
503
+ )}`;
504
+ }
505
+
506
+ export function formatEventStartTime(
507
+ event: CalendarInstantEvent,
508
+ timezoneID: string,
509
+ ): string {
510
+ return new Intl.DateTimeFormat(undefined, {
511
+ hour: 'numeric',
512
+ minute: '2-digit',
513
+ timeZone: timezoneID,
514
+ }).format(new Date(event.start));
515
+ }
516
+
517
+ export function formatEventAccessibilityLabel(
518
+ event: CalendarEvent,
519
+ day: PlainDate,
520
+ timezoneID: string,
521
+ categories: ReadonlyArray<ScheduleCategory>,
522
+ ): string {
523
+ const category = getEventCategory(event, categories);
524
+ const timeLabel = isDayEvent(event)
525
+ ? 'all day'
526
+ : formatEventTime(event, day, timezoneID);
527
+ return `${event.title}, ${category.label}, ${timeLabel}`;
528
+ }
529
+
530
+ export function getMinutesSinceStartOfDay(
531
+ instant: number,
532
+ timezoneID: string,
533
+ ): number {
534
+ const parts = new Intl.DateTimeFormat('en-US', {
535
+ timeZone: timezoneID,
536
+ hour: '2-digit',
537
+ minute: '2-digit',
538
+ hourCycle: 'h23',
539
+ }).formatToParts(new Date(instant));
540
+ const lookup = Object.fromEntries(
541
+ parts
542
+ .filter(part => part.type !== 'literal')
543
+ .map(part => [part.type, Number(part.value)]),
544
+ );
545
+ return lookup.hour * 60 + lookup.minute;
546
+ }
547
+
548
+ export function clamp(value: number, min: number, max: number): number {
549
+ return Math.min(max, Math.max(min, value));
550
+ }
551
+
552
+ export function eventSpansPastDay(
553
+ event: CalendarInstantEvent,
554
+ day: PlainDate,
555
+ timezoneID: string,
556
+ ): boolean {
557
+ return plainDateIsAfter(
558
+ plainDateFromInstant(Math.max(event.end - 1, event.start), timezoneID),
559
+ day,
560
+ );
561
+ }
562
+
563
+ export function isEventInPast(
564
+ event: CalendarEvent,
565
+ currentTime: Instant,
566
+ timezoneID: string,
567
+ ): boolean {
568
+ if (isDayEvent(event)) {
569
+ return plainDateIsBefore(
570
+ event.end,
571
+ plainDateFromInstant(currentTime, timezoneID),
572
+ );
573
+ }
574
+ return event.end <= currentTime;
575
+ }
576
+
577
+ const baseText = {
578
+ fontFamily: typographyVars['--font-family-body'],
579
+ color: colorVars['--color-text-primary'],
580
+ };
581
+
582
+ export const styles = stylex.create({
583
+ root: {
584
+ display: 'flex',
585
+ flexDirection: 'column',
586
+ minWidth: 0,
587
+ minHeight: 0,
588
+ },
589
+ frame: {
590
+ flex: 1,
591
+ display: 'flex',
592
+ flexDirection: 'column',
593
+ minWidth: 0,
594
+ minHeight: 0,
595
+ borderWidth: borderVars['--border-width'],
596
+ borderStyle: 'solid',
597
+ borderColor: colorVars['--color-border'],
598
+ borderRadius: radiusVars['--radius-container'],
599
+ backgroundColor: colorVars['--color-background-card'],
600
+ overflow: 'hidden',
601
+ },
602
+ header: {
603
+ display: 'grid',
604
+ gridTemplateColumns: 'minmax(0, 1fr) auto minmax(0, 1fr)',
605
+ alignItems: 'center',
606
+ gap: spacingVars['--spacing-3'],
607
+ paddingBlock: spacingVars['--spacing-3'],
608
+ paddingInline: spacingVars['--spacing-4'],
609
+ borderBottomWidth: borderVars['--border-width'],
610
+ borderBottomStyle: 'solid',
611
+ borderBottomColor: colorVars['--color-border'],
612
+ },
613
+ headerControls: {
614
+ justifySelf: 'start',
615
+ },
616
+ headerTitle: {
617
+ justifySelf: 'center',
618
+ textAlign: 'center',
619
+ minWidth: 0,
620
+ },
621
+ headerTitleContent: {
622
+ display: 'inline-flex',
623
+ alignItems: 'center',
624
+ gap: spacingVars['--spacing-2'],
625
+ },
626
+ loadingSpinner: {
627
+ display: 'inline-flex',
628
+ },
629
+ loadingSpinnerHidden: {
630
+ visibility: 'hidden',
631
+ },
632
+ headerStatus: {
633
+ justifySelf: 'end',
634
+ minWidth: 0,
635
+ },
636
+ titleEmphasis: {
637
+ fontWeight: fontWeightVars['--font-weight-bold'],
638
+ },
639
+ visuallyHidden: {
640
+ position: 'absolute',
641
+ width: '1px',
642
+ height: '1px',
643
+ padding: 0,
644
+ margin: '-1px',
645
+ overflow: 'hidden',
646
+ clip: 'rect(0 0 0 0)',
647
+ whiteSpace: 'nowrap',
648
+ borderWidth: 0,
649
+ },
650
+ weekHeader: {
651
+ display: 'grid',
652
+ gridTemplateColumns: 'repeat(7, minmax(0, 1fr))',
653
+ borderBottomWidth: borderVars['--border-width'],
654
+ borderBottomStyle: 'solid',
655
+ borderBottomColor: colorVars['--color-border'],
656
+ },
657
+ weekdayLabel: {
658
+ paddingBlock: spacingVars['--spacing-2'],
659
+ paddingInline: spacingVars['--spacing-3'],
660
+ textAlign: 'center',
661
+ },
662
+ weekdayHeading: {
663
+ textAlign: 'center',
664
+ },
665
+ monthGrid: {
666
+ overflowX: 'auto',
667
+ },
668
+ monthGridSurface: {
669
+ position: 'relative',
670
+ width: '100%',
671
+ minWidth: '784px',
672
+ },
673
+ monthCellGrid: {
674
+ display: 'grid',
675
+ gridTemplateColumns: 'repeat(7, minmax(0, 1fr))',
676
+ gridAutoRows: '128px',
677
+ },
678
+ monthGridRow: {
679
+ display: 'contents',
680
+ },
681
+ monthEventOverlay: {
682
+ position: 'absolute',
683
+ inset: 0,
684
+ display: 'grid',
685
+ gridTemplateColumns: 'repeat(7, minmax(0, 1fr))',
686
+ gridAutoRows: '128px',
687
+ pointerEvents: 'none',
688
+ },
689
+ monthCell: {
690
+ display: 'flex',
691
+ flexDirection: 'column',
692
+ gap: spacingVars['--spacing-1'],
693
+ minWidth: 0,
694
+ padding: 0,
695
+ borderInlineEndWidth: borderVars['--border-width'],
696
+ borderInlineEndStyle: 'solid',
697
+ borderInlineEndColor: colorVars['--color-border'],
698
+ borderBlockEndWidth: borderVars['--border-width'],
699
+ borderBlockEndStyle: 'solid',
700
+ borderBlockEndColor: colorVars['--color-border'],
701
+ backgroundColor: colorVars['--color-background-card'],
702
+ },
703
+ monthCellLastColumn: {
704
+ borderInlineEndWidth: 0,
705
+ },
706
+ monthCellLastRow: {
707
+ borderBlockEndWidth: 0,
708
+ },
709
+ monthCellOutside: {
710
+ backgroundColor: colorVars['--color-background-muted'],
711
+ },
712
+ monthDayNumber: {
713
+ alignSelf: 'flex-start',
714
+ display: 'inline-flex',
715
+ alignItems: 'center',
716
+ justifyContent: 'flex-start',
717
+ width: '24px',
718
+ height: '24px',
719
+ margin: spacingVars['--spacing-0-5'],
720
+ paddingInlineStart: spacingVars['--spacing-1'],
721
+ paddingInlineEnd: 0,
722
+ borderRadius: radiusVars['--radius-full'],
723
+ color: colorVars['--color-text-secondary'],
724
+ },
725
+ currentDayPill: {
726
+ color: colorVars['--color-on-accent'],
727
+ backgroundColor: colorVars['--color-accent'],
728
+ },
729
+ monthEventStack: {
730
+ display: 'flex',
731
+ flexDirection: 'column',
732
+ gap: spacingVars['--spacing-0-5'],
733
+ minWidth: 0,
734
+ },
735
+ monthEventSpan: (
736
+ week: number,
737
+ columnStart: number,
738
+ columnEnd: number,
739
+ level: number,
740
+ ) => ({
741
+ gridRow: `${week + 1}`,
742
+ gridColumn: `${columnStart + 1} / ${columnEnd + 2}`,
743
+ alignSelf: 'start',
744
+ minWidth: 0,
745
+ marginInlineStart: spacingVars['--spacing-0-5'],
746
+ marginInlineEnd: `calc(${spacingVars['--spacing-0-5']} + ${borderVars['--border-width']})`,
747
+ marginBlockStart: `${30 + level * 29}px`,
748
+ pointerEvents: 'auto',
749
+ zIndex: 1,
750
+ }),
751
+ eventPill: {
752
+ ...baseText,
753
+ display: 'flex',
754
+ alignItems: 'center',
755
+ gap: spacingVars['--spacing-1'],
756
+ minWidth: 0,
757
+ borderWidth: borderVars['--border-width'],
758
+ borderStyle: 'solid',
759
+ borderRadius: radiusVars['--radius-inner'],
760
+ paddingBlock: spacingVars['--spacing-0-5'],
761
+ paddingInline: spacingVars['--spacing-1-5'],
762
+ fontSize: typeScaleVars['--text-supporting-size'],
763
+ lineHeight: typeScaleVars['--text-supporting-leading'],
764
+ fontWeight: fontWeightVars['--font-weight-medium'],
765
+ },
766
+ eventTitle: {
767
+ overflow: 'hidden',
768
+ textOverflow: 'ellipsis',
769
+ whiteSpace: 'nowrap',
770
+ minWidth: 0,
771
+ },
772
+ eventTime: {
773
+ overflow: 'hidden',
774
+ textOverflow: 'ellipsis',
775
+ whiteSpace: 'nowrap',
776
+ flexShrink: 0,
777
+ opacity: 0.8,
778
+ },
779
+ moreEvents: {
780
+ ...baseText,
781
+ color: colorVars['--color-text-secondary'],
782
+ fontSize: typeScaleVars['--text-supporting-size'],
783
+ lineHeight: typeScaleVars['--text-supporting-leading'],
784
+ },
785
+ timeGrid: {
786
+ flex: 1,
787
+ display: 'grid',
788
+ gridTemplateColumns: '60px minmax(0, 1fr)',
789
+ gridTemplateRows: '56px auto 1fr',
790
+ height: '640px',
791
+ minHeight: 0,
792
+ overflow: 'hidden',
793
+ },
794
+ timeGridCorner: {
795
+ gridColumn: 1,
796
+ gridRow: 1,
797
+ borderInlineEndWidth: borderVars['--border-width'],
798
+ borderInlineEndStyle: 'solid',
799
+ borderInlineEndColor: colorVars['--color-border'],
800
+ borderBottomWidth: borderVars['--border-width'],
801
+ borderBottomStyle: 'solid',
802
+ borderBottomColor: colorVars['--color-border'],
803
+ },
804
+ timeGridHeader: {
805
+ gridColumn: 2,
806
+ gridRow: 1,
807
+ display: 'grid',
808
+ gridAutoFlow: 'column',
809
+ gridAutoColumns: 'minmax(140px, 1fr)',
810
+ borderBottomWidth: borderVars['--border-width'],
811
+ borderBottomStyle: 'solid',
812
+ borderBottomColor: colorVars['--color-border'],
813
+ },
814
+ timeGridHeaderCell: {
815
+ display: 'flex',
816
+ flexDirection: 'column',
817
+ alignItems: 'center',
818
+ justifyContent: 'center',
819
+ gap: spacingVars['--spacing-0-5'],
820
+ borderInlineEndWidth: borderVars['--border-width'],
821
+ borderInlineEndStyle: 'solid',
822
+ borderInlineEndColor: colorVars['--color-border'],
823
+ },
824
+ timeGridHeaderCellLast: {
825
+ borderInlineEndWidth: 0,
826
+ },
827
+ timeGridHeaderHeading: {
828
+ textAlign: 'center',
829
+ },
830
+ timeGridHeaderHeadingContent: {
831
+ display: 'inline-flex',
832
+ alignItems: 'center',
833
+ justifyContent: 'center',
834
+ gap: spacingVars['--spacing-1'],
835
+ },
836
+ timeGridDayNumber: {
837
+ display: 'inline-flex',
838
+ alignItems: 'center',
839
+ justifyContent: 'center',
840
+ borderRadius: radiusVars['--radius-full'],
841
+ },
842
+ timeGridCurrentDayPill: {
843
+ minWidth: '30px',
844
+ height: '30px',
845
+ lineHeight: '30px',
846
+ color: colorVars['--color-on-accent'],
847
+ backgroundColor: colorVars['--color-accent'],
848
+ },
849
+ allDayLabel: {
850
+ gridColumn: 1,
851
+ gridRow: 2,
852
+ paddingBlock: spacingVars['--spacing-1'],
853
+ paddingInline: spacingVars['--spacing-2'],
854
+ display: 'flex',
855
+ alignItems: 'center',
856
+ justifyContent: 'flex-end',
857
+ borderInlineEndWidth: borderVars['--border-width'],
858
+ borderInlineEndStyle: 'solid',
859
+ borderInlineEndColor: colorVars['--color-border'],
860
+ borderBottomWidth: borderVars['--border-width'],
861
+ borderBottomStyle: 'solid',
862
+ borderBottomColor: colorVars['--color-border'],
863
+ },
864
+ allDayRow: {
865
+ gridColumn: 2,
866
+ gridRow: 2,
867
+ overflowX: 'auto',
868
+ minHeight: 0,
869
+ borderBottomWidth: borderVars['--border-width'],
870
+ borderBottomStyle: 'solid',
871
+ borderBottomColor: colorVars['--color-border'],
872
+ },
873
+ allDayRowSurface: (columnCount: number, levelCount: number) => ({
874
+ position: 'relative',
875
+ width: '100%',
876
+ minWidth: `${Math.max(1, columnCount) * 140}px`,
877
+ minHeight: levelCount > 0 ? `${3 + levelCount * 27}px` : '26px',
878
+ }),
879
+ allDayCellGrid: (columnCount: number) => ({
880
+ position: 'absolute',
881
+ inset: 0,
882
+ display: 'grid',
883
+ gridTemplateColumns: `repeat(${Math.max(1, columnCount)}, minmax(0, 1fr))`,
884
+ }),
885
+ allDayEventOverlay: (columnCount: number) => ({
886
+ position: 'absolute',
887
+ inset: 0,
888
+ display: 'grid',
889
+ gridTemplateColumns: `repeat(${Math.max(1, columnCount)}, minmax(0, 1fr))`,
890
+ pointerEvents: 'none',
891
+ }),
892
+ allDayCell: {
893
+ minWidth: 0,
894
+ borderInlineEndWidth: borderVars['--border-width'],
895
+ borderInlineEndStyle: 'solid',
896
+ borderInlineEndColor: colorVars['--color-border'],
897
+ },
898
+ allDayCellLast: {
899
+ borderInlineEndWidth: 0,
900
+ },
901
+ allDayEventSpan: (columnStart: number, columnEnd: number, level: number) => ({
902
+ gridColumn: `${columnStart + 1} / ${columnEnd + 2}`,
903
+ alignSelf: 'start',
904
+ minWidth: 0,
905
+ marginInlineStart: spacingVars['--spacing-0-5'],
906
+ marginInlineEnd: `calc(${spacingVars['--spacing-0-5']} + ${borderVars['--border-width']})`,
907
+ marginBlockStart: `${2 + level * 27}px`,
908
+ pointerEvents: 'auto',
909
+ }),
910
+ timeGridBody: {
911
+ gridColumn: '1 / -1',
912
+ gridRow: 3,
913
+ display: 'grid',
914
+ gridTemplateColumns: '60px minmax(0, 1fr)',
915
+ overflow: 'auto',
916
+ minHeight: 0,
917
+ },
918
+ timeLabels: {
919
+ gridColumn: 1,
920
+ position: 'relative',
921
+ borderInlineEndWidth: borderVars['--border-width'],
922
+ borderInlineEndStyle: 'solid',
923
+ borderInlineEndColor: colorVars['--color-border'],
924
+ },
925
+ timeLabel: {
926
+ ...baseText,
927
+ position: 'absolute',
928
+ insetInline: 0,
929
+ transform: 'translateY(-50%)',
930
+ paddingInlineStart: spacingVars['--spacing-1'],
931
+ paddingInlineEnd: spacingVars['--spacing-1'],
932
+ color: colorVars['--color-text-secondary'],
933
+ fontSize: typeScaleVars['--text-supporting-size'],
934
+ lineHeight: typeScaleVars['--text-supporting-leading'],
935
+ textAlign: 'end',
936
+ },
937
+ timeLabelPosition: (index: number, hourHeight: number) => ({
938
+ top: `${index * hourHeight - 1}px`,
939
+ }),
940
+ timeColumns: {
941
+ gridColumn: 2,
942
+ display: 'grid',
943
+ gridAutoFlow: 'column',
944
+ gridAutoColumns: 'minmax(140px, 1fr)',
945
+ minWidth: 0,
946
+ },
947
+ timeColumn: {
948
+ position: 'relative',
949
+ display: 'grid',
950
+ minWidth: 0,
951
+ borderInlineEndWidth: borderVars['--border-width'],
952
+ borderInlineEndStyle: 'solid',
953
+ borderInlineEndColor: colorVars['--color-border'],
954
+ },
955
+ timeColumnRows: (hourHeight: number) => ({
956
+ gridAutoRows: `${hourHeight}px`,
957
+ }),
958
+ timeColumnLast: {
959
+ borderInlineEndWidth: 0,
960
+ },
961
+ hourSlot: {
962
+ borderBottomWidth: borderVars['--border-width'],
963
+ borderBottomStyle: 'solid',
964
+ borderBottomColor: colorVars['--color-border'],
965
+ },
966
+ hourSlotLast: {
967
+ borderBottomWidth: 0,
968
+ },
969
+ timedEvent: {
970
+ ...baseText,
971
+ position: 'absolute',
972
+ display: 'flex',
973
+ flexDirection: 'column',
974
+ gap: 0,
975
+ minHeight: '24px',
976
+ minWidth: 0,
977
+ overflow: 'hidden',
978
+ borderWidth: borderVars['--border-width'],
979
+ borderStyle: 'solid',
980
+ borderRadius: radiusVars['--radius-inner'],
981
+ paddingBlockStart: spacingVars['--spacing-0-5'],
982
+ paddingBlockEnd: spacingVars['--spacing-1'],
983
+ paddingInline: spacingVars['--spacing-1'],
984
+ fontSize: typeScaleVars['--text-supporting-size'],
985
+ lineHeight: typeScaleVars['--text-supporting-leading'],
986
+ fontWeight: fontWeightVars['--font-weight-medium'],
987
+ },
988
+ timedEventPosition: (top: number, height: number, level: number) => ({
989
+ top: `calc(${top}% + 2px)`,
990
+ height: `calc(${height}% - 5px)`,
991
+ insetInlineStart:
992
+ level === 0
993
+ ? spacingVars['--spacing-0-5']
994
+ : `calc(${spacingVars['--spacing-0-5']} + ${level * 8}%)`,
995
+ insetInlineEnd: spacingVars['--spacing-0-5'],
996
+ zIndex: level + 1,
997
+ }),
998
+ currentTimeLine: (top: number) => ({
999
+ position: 'absolute',
1000
+ insetInline: 0,
1001
+ top: `calc(${top}% + 2px)`,
1002
+ borderTopWidth: '2px',
1003
+ borderTopStyle: 'solid',
1004
+ borderTopColor: colorVars['--color-border-orange'],
1005
+ zIndex: 20,
1006
+ pointerEvents: 'none',
1007
+ '::before': {
1008
+ content: '""',
1009
+ position: 'absolute',
1010
+ insetInlineStart: '-6px',
1011
+ top: '-6px',
1012
+ width: '10px',
1013
+ height: '10px',
1014
+ borderRadius: radiusVars['--radius-full'],
1015
+ backgroundColor: colorVars['--color-border-orange'],
1016
+ },
1017
+ }),
1018
+ list: {
1019
+ display: 'flex',
1020
+ flexDirection: 'column',
1021
+ },
1022
+ listDay: {
1023
+ display: 'grid',
1024
+ gridTemplateColumns: '88px minmax(0, 1fr)',
1025
+ alignItems: 'start',
1026
+ columnGap: spacingVars['--spacing-3'],
1027
+ paddingBlock: spacingVars['--spacing-3'],
1028
+ paddingInline: spacingVars['--spacing-3'],
1029
+ borderBottomWidth: borderVars['--border-width'],
1030
+ borderBottomStyle: 'solid',
1031
+ borderBottomColor: colorVars['--color-border'],
1032
+ },
1033
+ listDayLast: {
1034
+ borderBottomWidth: 0,
1035
+ },
1036
+ listDayHeading: {
1037
+ gridColumn: '1',
1038
+ display: 'inline-flex',
1039
+ alignItems: 'center',
1040
+ justifyContent: 'flex-start',
1041
+ columnGap: spacingVars['--spacing-2'],
1042
+ marginBlockStart: `calc(${spacingVars['--spacing-1']} * -1)`,
1043
+ marginInlineStart: `calc(${spacingVars['--spacing-1']} * -1)`,
1044
+ },
1045
+ listDayNumber: {
1046
+ display: 'inline-flex',
1047
+ alignItems: 'center',
1048
+ justifyContent: 'flex-end',
1049
+ width: '30px',
1050
+ height: '30px',
1051
+ borderRadius: radiusVars['--radius-full'],
1052
+ },
1053
+ listDayNumberText: {
1054
+ fontWeight: fontWeightVars['--font-weight-bold'],
1055
+ },
1056
+ listDayNumberCurrent: {
1057
+ justifyContent: 'center',
1058
+ color: colorVars['--color-on-accent'],
1059
+ backgroundColor: colorVars['--color-accent'],
1060
+ },
1061
+ listEvents: {
1062
+ gridColumn: 2,
1063
+ display: 'flex',
1064
+ flexDirection: 'column',
1065
+ gap: spacingVars['--spacing-2'],
1066
+ minWidth: 0,
1067
+ },
1068
+ listNowRow: {
1069
+ position: 'relative',
1070
+ height: '10px',
1071
+ marginBlock: spacingVars['--spacing-0-5'],
1072
+ '::before': {
1073
+ content: '""',
1074
+ position: 'absolute',
1075
+ insetInline: 0,
1076
+ top: '4px',
1077
+ borderTopWidth: '2px',
1078
+ borderTopStyle: 'solid',
1079
+ borderTopColor: colorVars['--color-border-orange'],
1080
+ },
1081
+ '::after': {
1082
+ content: '""',
1083
+ position: 'absolute',
1084
+ insetInlineStart: '-1px',
1085
+ top: 0,
1086
+ width: '10px',
1087
+ height: '10px',
1088
+ borderRadius: radiusVars['--radius-full'],
1089
+ backgroundColor: colorVars['--color-border-orange'],
1090
+ },
1091
+ },
1092
+ listEventRow: {
1093
+ display: 'grid',
1094
+ gridTemplateColumns: '12px 144px minmax(0, 1fr)',
1095
+ alignItems: 'center',
1096
+ gap: spacingVars['--spacing-2'],
1097
+ minWidth: 0,
1098
+ },
1099
+ listEventDot: {
1100
+ width: '10px',
1101
+ height: '10px',
1102
+ borderRadius: radiusVars['--radius-full'],
1103
+ },
1104
+ listEventTime: {
1105
+ ...baseText,
1106
+ color: colorVars['--color-text-secondary'],
1107
+ fontSize: typeScaleVars['--text-supporting-size'],
1108
+ lineHeight: typeScaleVars['--text-supporting-leading'],
1109
+ whiteSpace: 'nowrap',
1110
+ },
1111
+ listEventTitle: {
1112
+ ...baseText,
1113
+ minWidth: 0,
1114
+ overflow: 'hidden',
1115
+ textOverflow: 'ellipsis',
1116
+ whiteSpace: 'nowrap',
1117
+ fontSize: typeScaleVars['--text-body-size'],
1118
+ lineHeight: typeScaleVars['--text-body-leading'],
1119
+ fontWeight: fontWeightVars['--font-weight-medium'],
1120
+ },
1121
+ listEventPast: {
1122
+ opacity: 0.5,
1123
+ },
1124
+ eventBlue: {
1125
+ color: colorVars['--color-text-blue'],
1126
+ backgroundColor: colorVars['--color-background-blue'],
1127
+ borderColor: colorVars['--color-border-blue'],
1128
+ },
1129
+ eventDotBlue: {
1130
+ backgroundColor: colorVars['--color-border-blue'],
1131
+ },
1132
+ eventSurfaceBlue: {
1133
+ color: colorVars['--color-text-blue'],
1134
+ borderColor: colorVars['--color-border-blue'],
1135
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-blue']} 20%, ${colorVars['--color-background-card']})`,
1136
+ },
1137
+ eventPastSurfaceBlue: {
1138
+ color: `color-mix(in srgb, ${colorVars['--color-text-blue']} 52%, ${colorVars['--color-text-secondary']})`,
1139
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-blue']} 48%, ${colorVars['--color-border']})`,
1140
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-blue']} 10%, ${colorVars['--color-background-card']})`,
1141
+ },
1142
+ eventCyan: {
1143
+ color: colorVars['--color-text-cyan'],
1144
+ backgroundColor: colorVars['--color-background-cyan'],
1145
+ borderColor: colorVars['--color-border-cyan'],
1146
+ },
1147
+ eventDotCyan: {
1148
+ backgroundColor: colorVars['--color-border-cyan'],
1149
+ },
1150
+ eventSurfaceCyan: {
1151
+ color: colorVars['--color-text-cyan'],
1152
+ borderColor: colorVars['--color-border-cyan'],
1153
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-cyan']} 20%, ${colorVars['--color-background-card']})`,
1154
+ },
1155
+ eventPastSurfaceCyan: {
1156
+ color: `color-mix(in srgb, ${colorVars['--color-text-cyan']} 52%, ${colorVars['--color-text-secondary']})`,
1157
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-cyan']} 48%, ${colorVars['--color-border']})`,
1158
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-cyan']} 10%, ${colorVars['--color-background-card']})`,
1159
+ },
1160
+ eventGray: {
1161
+ color: colorVars['--color-text-gray'],
1162
+ backgroundColor: colorVars['--color-background-gray'],
1163
+ borderColor: colorVars['--color-border-gray'],
1164
+ },
1165
+ eventDotGray: {
1166
+ backgroundColor: colorVars['--color-text-secondary'],
1167
+ },
1168
+ eventSurfaceGray: {
1169
+ color: colorVars['--color-text-gray'],
1170
+ borderColor: colorVars['--color-border-gray'],
1171
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-gray']} 20%, ${colorVars['--color-background-card']})`,
1172
+ },
1173
+ eventPastSurfaceGray: {
1174
+ color: colorVars['--color-text-secondary'],
1175
+ borderColor: colorVars['--color-border'],
1176
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-gray']} 10%, ${colorVars['--color-background-card']})`,
1177
+ },
1178
+ eventGreen: {
1179
+ color: colorVars['--color-text-green'],
1180
+ backgroundColor: colorVars['--color-background-green'],
1181
+ borderColor: colorVars['--color-border-green'],
1182
+ },
1183
+ eventDotGreen: {
1184
+ backgroundColor: colorVars['--color-border-green'],
1185
+ },
1186
+ eventSurfaceGreen: {
1187
+ color: colorVars['--color-text-green'],
1188
+ borderColor: colorVars['--color-border-green'],
1189
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-green']} 20%, ${colorVars['--color-background-card']})`,
1190
+ },
1191
+ eventPastSurfaceGreen: {
1192
+ color: `color-mix(in srgb, ${colorVars['--color-text-green']} 52%, ${colorVars['--color-text-secondary']})`,
1193
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-green']} 48%, ${colorVars['--color-border']})`,
1194
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-green']} 10%, ${colorVars['--color-background-card']})`,
1195
+ },
1196
+ eventOrange: {
1197
+ color: colorVars['--color-text-orange'],
1198
+ backgroundColor: colorVars['--color-background-orange'],
1199
+ borderColor: colorVars['--color-border-orange'],
1200
+ },
1201
+ eventDotOrange: {
1202
+ backgroundColor: colorVars['--color-border-orange'],
1203
+ },
1204
+ eventSurfaceOrange: {
1205
+ color: colorVars['--color-text-orange'],
1206
+ borderColor: colorVars['--color-border-orange'],
1207
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-orange']} 20%, ${colorVars['--color-background-card']})`,
1208
+ },
1209
+ eventPastSurfaceOrange: {
1210
+ color: `color-mix(in srgb, ${colorVars['--color-text-orange']} 52%, ${colorVars['--color-text-secondary']})`,
1211
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-orange']} 48%, ${colorVars['--color-border']})`,
1212
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-orange']} 10%, ${colorVars['--color-background-card']})`,
1213
+ },
1214
+ eventPink: {
1215
+ color: colorVars['--color-text-pink'],
1216
+ backgroundColor: colorVars['--color-background-pink'],
1217
+ borderColor: colorVars['--color-border-pink'],
1218
+ },
1219
+ eventDotPink: {
1220
+ backgroundColor: colorVars['--color-border-pink'],
1221
+ },
1222
+ eventSurfacePink: {
1223
+ color: colorVars['--color-text-pink'],
1224
+ borderColor: colorVars['--color-border-pink'],
1225
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-pink']} 20%, ${colorVars['--color-background-card']})`,
1226
+ },
1227
+ eventPastSurfacePink: {
1228
+ color: `color-mix(in srgb, ${colorVars['--color-text-pink']} 52%, ${colorVars['--color-text-secondary']})`,
1229
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-pink']} 48%, ${colorVars['--color-border']})`,
1230
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-pink']} 10%, ${colorVars['--color-background-card']})`,
1231
+ },
1232
+ eventPurple: {
1233
+ color: colorVars['--color-text-purple'],
1234
+ backgroundColor: colorVars['--color-background-purple'],
1235
+ borderColor: colorVars['--color-border-purple'],
1236
+ },
1237
+ eventDotPurple: {
1238
+ backgroundColor: colorVars['--color-border-purple'],
1239
+ },
1240
+ eventSurfacePurple: {
1241
+ color: colorVars['--color-text-purple'],
1242
+ borderColor: colorVars['--color-border-purple'],
1243
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-purple']} 20%, ${colorVars['--color-background-card']})`,
1244
+ },
1245
+ eventPastSurfacePurple: {
1246
+ color: `color-mix(in srgb, ${colorVars['--color-text-purple']} 52%, ${colorVars['--color-text-secondary']})`,
1247
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-purple']} 48%, ${colorVars['--color-border']})`,
1248
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-purple']} 10%, ${colorVars['--color-background-card']})`,
1249
+ },
1250
+ eventRed: {
1251
+ color: colorVars['--color-text-red'],
1252
+ backgroundColor: colorVars['--color-background-red'],
1253
+ borderColor: colorVars['--color-border-red'],
1254
+ },
1255
+ eventDotRed: {
1256
+ backgroundColor: colorVars['--color-border-red'],
1257
+ },
1258
+ eventSurfaceRed: {
1259
+ color: colorVars['--color-text-red'],
1260
+ borderColor: colorVars['--color-border-red'],
1261
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-red']} 20%, ${colorVars['--color-background-card']})`,
1262
+ },
1263
+ eventPastSurfaceRed: {
1264
+ color: `color-mix(in srgb, ${colorVars['--color-text-red']} 52%, ${colorVars['--color-text-secondary']})`,
1265
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-red']} 48%, ${colorVars['--color-border']})`,
1266
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-red']} 10%, ${colorVars['--color-background-card']})`,
1267
+ },
1268
+ eventTeal: {
1269
+ color: colorVars['--color-text-teal'],
1270
+ backgroundColor: colorVars['--color-background-teal'],
1271
+ borderColor: colorVars['--color-border-teal'],
1272
+ },
1273
+ eventDotTeal: {
1274
+ backgroundColor: colorVars['--color-border-teal'],
1275
+ },
1276
+ eventSurfaceTeal: {
1277
+ color: colorVars['--color-text-teal'],
1278
+ borderColor: colorVars['--color-border-teal'],
1279
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-teal']} 20%, ${colorVars['--color-background-card']})`,
1280
+ },
1281
+ eventPastSurfaceTeal: {
1282
+ color: `color-mix(in srgb, ${colorVars['--color-text-teal']} 52%, ${colorVars['--color-text-secondary']})`,
1283
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-teal']} 48%, ${colorVars['--color-border']})`,
1284
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-teal']} 10%, ${colorVars['--color-background-card']})`,
1285
+ },
1286
+ eventYellow: {
1287
+ color: colorVars['--color-text-yellow'],
1288
+ backgroundColor: colorVars['--color-background-yellow'],
1289
+ borderColor: colorVars['--color-border-yellow'],
1290
+ },
1291
+ eventDotYellow: {
1292
+ backgroundColor: colorVars['--color-border-yellow'],
1293
+ },
1294
+ eventSurfaceYellow: {
1295
+ color: colorVars['--color-text-yellow'],
1296
+ borderColor: colorVars['--color-border-yellow'],
1297
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-yellow']} 20%, ${colorVars['--color-background-card']})`,
1298
+ },
1299
+ eventPastSurfaceYellow: {
1300
+ color: `color-mix(in srgb, ${colorVars['--color-text-yellow']} 52%, ${colorVars['--color-text-secondary']})`,
1301
+ borderColor: `color-mix(in srgb, ${colorVars['--color-border-yellow']} 48%, ${colorVars['--color-border']})`,
1302
+ backgroundColor: `color-mix(in srgb, ${colorVars['--color-border-yellow']} 10%, ${colorVars['--color-background-card']})`,
1303
+ },
1304
+ });