@react-x11/components 0.1.0 → 0.2.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 (788) hide show
  1. package/README.md +979 -21
  2. package/dist/ansi/cast.d.ts +48 -0
  3. package/dist/ansi/cast.d.ts.map +1 -0
  4. package/dist/ansi/cast.js +135 -0
  5. package/dist/ansi/cast.js.map +1 -0
  6. package/dist/ansi/index.d.ts +10 -0
  7. package/dist/ansi/index.d.ts.map +1 -0
  8. package/dist/ansi/index.js +27 -0
  9. package/dist/ansi/index.js.map +1 -0
  10. package/dist/ansi/palette.d.ts +79 -0
  11. package/dist/ansi/palette.d.ts.map +1 -0
  12. package/dist/ansi/palette.js +155 -0
  13. package/dist/ansi/palette.js.map +1 -0
  14. package/dist/ansi/parse.d.ts +114 -0
  15. package/dist/ansi/parse.d.ts.map +1 -0
  16. package/dist/ansi/parse.js +687 -0
  17. package/dist/ansi/parse.js.map +1 -0
  18. package/dist/ansi/sgr.d.ts +87 -0
  19. package/dist/ansi/sgr.d.ts.map +1 -0
  20. package/dist/ansi/sgr.js +302 -0
  21. package/dist/ansi/sgr.js.map +1 -0
  22. package/dist/ansi/utf8.d.ts +15 -0
  23. package/dist/ansi/utf8.d.ts.map +1 -0
  24. package/dist/ansi/utf8.js +82 -0
  25. package/dist/ansi/utf8.js.map +1 -0
  26. package/dist/calendar/Calendar.d.ts +136 -0
  27. package/dist/calendar/Calendar.d.ts.map +1 -0
  28. package/dist/calendar/Calendar.js +460 -0
  29. package/dist/calendar/Calendar.js.map +1 -0
  30. package/dist/calendar/DatePicker.d.ts +52 -0
  31. package/dist/calendar/DatePicker.d.ts.map +1 -0
  32. package/dist/calendar/DatePicker.js +257 -0
  33. package/dist/calendar/DatePicker.js.map +1 -0
  34. package/dist/calendar/dates.d.ts +90 -0
  35. package/dist/calendar/dates.d.ts.map +1 -0
  36. package/dist/calendar/dates.js +236 -0
  37. package/dist/calendar/dates.js.map +1 -0
  38. package/dist/calendar/index.d.ts +8 -0
  39. package/dist/calendar/index.d.ts.map +1 -0
  40. package/dist/calendar/index.js +15 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/charts/components.d.ts +141 -0
  43. package/dist/charts/components.d.ts.map +1 -0
  44. package/dist/charts/components.js +580 -0
  45. package/dist/charts/components.js.map +1 -0
  46. package/dist/charts/data.d.ts +198 -0
  47. package/dist/charts/data.d.ts.map +1 -0
  48. package/dist/charts/data.js +616 -0
  49. package/dist/charts/data.js.map +1 -0
  50. package/dist/charts/hx.d.ts +21 -0
  51. package/dist/charts/hx.d.ts.map +1 -0
  52. package/dist/charts/hx.js +15 -0
  53. package/dist/charts/hx.js.map +1 -0
  54. package/dist/charts/index.d.ts +27 -0
  55. package/dist/charts/index.d.ts.map +1 -0
  56. package/dist/charts/index.js +38 -0
  57. package/dist/charts/index.js.map +1 -0
  58. package/dist/charts/node.d.ts +96 -0
  59. package/dist/charts/node.d.ts.map +1 -0
  60. package/dist/charts/node.js +720 -0
  61. package/dist/charts/node.js.map +1 -0
  62. package/dist/charts/render.d.ts +153 -0
  63. package/dist/charts/render.d.ts.map +1 -0
  64. package/dist/charts/render.js +762 -0
  65. package/dist/charts/render.js.map +1 -0
  66. package/dist/charts/scale.d.ts +42 -0
  67. package/dist/charts/scale.d.ts.map +1 -0
  68. package/dist/charts/scale.js +173 -0
  69. package/dist/charts/scale.js.map +1 -0
  70. package/dist/charts/spec.d.ts +91 -0
  71. package/dist/charts/spec.d.ts.map +1 -0
  72. package/dist/charts/spec.js +33 -0
  73. package/dist/charts/spec.js.map +1 -0
  74. package/dist/charts/timers.d.ts +6 -0
  75. package/dist/charts/timers.d.ts.map +1 -0
  76. package/dist/charts/timers.js +14 -0
  77. package/dist/charts/timers.js.map +1 -0
  78. package/dist/code/hx.d.ts +24 -0
  79. package/dist/code/hx.d.ts.map +1 -0
  80. package/dist/code/hx.js +25 -0
  81. package/dist/code/hx.js.map +1 -0
  82. package/dist/code/index.d.ts +45 -0
  83. package/dist/code/index.d.ts.map +1 -0
  84. package/dist/code/index.js +93 -0
  85. package/dist/code/index.js.map +1 -0
  86. package/dist/code-editor/completion.d.ts +26 -0
  87. package/dist/code-editor/completion.d.ts.map +1 -0
  88. package/dist/code-editor/completion.js +129 -0
  89. package/dist/code-editor/completion.js.map +1 -0
  90. package/dist/code-editor/doc.d.ts +35 -0
  91. package/dist/code-editor/doc.d.ts.map +1 -0
  92. package/dist/code-editor/doc.js +162 -0
  93. package/dist/code-editor/doc.js.map +1 -0
  94. package/dist/code-editor/hx.d.ts +13 -0
  95. package/dist/code-editor/hx.d.ts.map +1 -0
  96. package/dist/code-editor/hx.js +10 -0
  97. package/dist/code-editor/hx.js.map +1 -0
  98. package/dist/code-editor/index.d.ts +88 -0
  99. package/dist/code-editor/index.d.ts.map +1 -0
  100. package/dist/code-editor/index.js +401 -0
  101. package/dist/code-editor/index.js.map +1 -0
  102. package/dist/code-editor/node.d.ts +343 -0
  103. package/dist/code-editor/node.d.ts.map +1 -0
  104. package/dist/code-editor/node.js +1521 -0
  105. package/dist/code-editor/node.js.map +1 -0
  106. package/dist/code-language/hljs.d.ts +47 -0
  107. package/dist/code-language/hljs.d.ts.map +1 -0
  108. package/dist/code-language/hljs.js +211 -0
  109. package/dist/code-language/hljs.js.map +1 -0
  110. package/dist/code-language/index.d.ts +22 -0
  111. package/dist/code-language/index.d.ts.map +1 -0
  112. package/dist/code-language/index.js +20 -0
  113. package/dist/code-language/index.js.map +1 -0
  114. package/dist/code-language/languages/glsl.d.ts +4 -0
  115. package/dist/code-language/languages/glsl.d.ts.map +1 -0
  116. package/dist/code-language/languages/glsl.js +99 -0
  117. package/dist/code-language/languages/glsl.js.map +1 -0
  118. package/dist/code-language/languages/javascript.d.ts +10 -0
  119. package/dist/code-language/languages/javascript.d.ts.map +1 -0
  120. package/dist/code-language/languages/javascript.js +360 -0
  121. package/dist/code-language/languages/javascript.js.map +1 -0
  122. package/dist/code-language/languages/json.d.ts +4 -0
  123. package/dist/code-language/languages/json.d.ts.map +1 -0
  124. package/dist/code-language/languages/json.js +68 -0
  125. package/dist/code-language/languages/json.js.map +1 -0
  126. package/dist/code-language/languages/shell.d.ts +4 -0
  127. package/dist/code-language/languages/shell.d.ts.map +1 -0
  128. package/dist/code-language/languages/shell.js +189 -0
  129. package/dist/code-language/languages/shell.js.map +1 -0
  130. package/dist/code-language/languages/sql.d.ts +11 -0
  131. package/dist/code-language/languages/sql.d.ts.map +1 -0
  132. package/dist/code-language/languages/sql.js +133 -0
  133. package/dist/code-language/languages/sql.js.map +1 -0
  134. package/dist/code-language/lezer.d.ts +24 -0
  135. package/dist/code-language/lezer.d.ts.map +1 -0
  136. package/dist/code-language/lezer.js +148 -0
  137. package/dist/code-language/lezer.js.map +1 -0
  138. package/dist/code-language/registry.d.ts +19 -0
  139. package/dist/code-language/registry.d.ts.map +1 -0
  140. package/dist/code-language/registry.js +56 -0
  141. package/dist/code-language/registry.js.map +1 -0
  142. package/dist/code-language/runs.d.ts +35 -0
  143. package/dist/code-language/runs.d.ts.map +1 -0
  144. package/dist/code-language/runs.js +88 -0
  145. package/dist/code-language/runs.js.map +1 -0
  146. package/dist/code-language/stream.d.ts +70 -0
  147. package/dist/code-language/stream.d.ts.map +1 -0
  148. package/dist/code-language/stream.js +243 -0
  149. package/dist/code-language/stream.js.map +1 -0
  150. package/dist/code-language/textmate.d.ts +27 -0
  151. package/dist/code-language/textmate.d.ts.map +1 -0
  152. package/dist/code-language/textmate.js +86 -0
  153. package/dist/code-language/textmate.js.map +1 -0
  154. package/dist/code-language/theme.d.ts +26 -0
  155. package/dist/code-language/theme.d.ts.map +1 -0
  156. package/dist/code-language/theme.js +108 -0
  157. package/dist/code-language/theme.js.map +1 -0
  158. package/dist/code-language/timers.d.ts +7 -0
  159. package/dist/code-language/timers.d.ts.map +1 -0
  160. package/dist/code-language/timers.js +22 -0
  161. package/dist/code-language/timers.js.map +1 -0
  162. package/dist/code-language/types.d.ts +173 -0
  163. package/dist/code-language/types.d.ts.map +1 -0
  164. package/dist/code-language/types.js +41 -0
  165. package/dist/code-language/types.js.map +1 -0
  166. package/dist/codeblock/index.d.ts +69 -0
  167. package/dist/codeblock/index.d.ts.map +1 -0
  168. package/dist/codeblock/index.js +85 -0
  169. package/dist/codeblock/index.js.map +1 -0
  170. package/dist/color-picker/ColorField.d.ts +39 -0
  171. package/dist/color-picker/ColorField.d.ts.map +1 -0
  172. package/dist/color-picker/ColorField.js +239 -0
  173. package/dist/color-picker/ColorField.js.map +1 -0
  174. package/dist/color-picker/ColorPicker.d.ts +109 -0
  175. package/dist/color-picker/ColorPicker.d.ts.map +1 -0
  176. package/dist/color-picker/ColorPicker.js +757 -0
  177. package/dist/color-picker/ColorPicker.js.map +1 -0
  178. package/dist/color-picker/color.d.ts +105 -0
  179. package/dist/color-picker/color.d.ts.map +1 -0
  180. package/dist/color-picker/color.js +313 -0
  181. package/dist/color-picker/color.js.map +1 -0
  182. package/dist/color-picker/index.d.ts +8 -0
  183. package/dist/color-picker/index.d.ts.map +1 -0
  184. package/dist/color-picker/index.js +19 -0
  185. package/dist/color-picker/index.js.map +1 -0
  186. package/dist/desktop-calendar/eds.d.ts +102 -0
  187. package/dist/desktop-calendar/eds.d.ts.map +1 -0
  188. package/dist/desktop-calendar/eds.js +356 -0
  189. package/dist/desktop-calendar/eds.js.map +1 -0
  190. package/dist/desktop-calendar/ical.d.ts +63 -0
  191. package/dist/desktop-calendar/ical.d.ts.map +1 -0
  192. package/dist/desktop-calendar/ical.js +57 -0
  193. package/dist/desktop-calendar/ical.js.map +1 -0
  194. package/dist/desktop-calendar/index.d.ts +72 -0
  195. package/dist/desktop-calendar/index.d.ts.map +1 -0
  196. package/dist/desktop-calendar/index.js +213 -0
  197. package/dist/desktop-calendar/index.js.map +1 -0
  198. package/dist/embed/client.d.ts +121 -0
  199. package/dist/embed/client.d.ts.map +1 -0
  200. package/dist/embed/client.js +203 -0
  201. package/dist/embed/client.js.map +1 -0
  202. package/dist/embed/host.d.ts +96 -0
  203. package/dist/embed/host.d.ts.map +1 -0
  204. package/dist/embed/host.js +266 -0
  205. package/dist/embed/host.js.map +1 -0
  206. package/dist/embed/index.d.ts +5 -0
  207. package/dist/embed/index.d.ts.map +1 -0
  208. package/dist/embed/index.js +13 -0
  209. package/dist/embed/index.js.map +1 -0
  210. package/dist/embed/timers.d.ts +6 -0
  211. package/dist/embed/timers.d.ts.map +1 -0
  212. package/dist/embed/timers.js +16 -0
  213. package/dist/embed/timers.js.map +1 -0
  214. package/dist/flow/draw.d.ts +45 -0
  215. package/dist/flow/draw.d.ts.map +1 -0
  216. package/dist/flow/draw.js +295 -0
  217. package/dist/flow/draw.js.map +1 -0
  218. package/dist/flow/index.d.ts +64 -0
  219. package/dist/flow/index.d.ts.map +1 -0
  220. package/dist/flow/index.js +306 -0
  221. package/dist/flow/index.js.map +1 -0
  222. package/dist/flow/model.d.ts +158 -0
  223. package/dist/flow/model.d.ts.map +1 -0
  224. package/dist/flow/model.js +566 -0
  225. package/dist/flow/model.js.map +1 -0
  226. package/dist/flow/node.d.ts +429 -0
  227. package/dist/flow/node.d.ts.map +1 -0
  228. package/dist/flow/node.js +3025 -0
  229. package/dist/flow/node.js.map +1 -0
  230. package/dist/flow/paths.d.ts +43 -0
  231. package/dist/flow/paths.d.ts.map +1 -0
  232. package/dist/flow/paths.js +327 -0
  233. package/dist/flow/paths.js.map +1 -0
  234. package/dist/flow/types.d.ts +561 -0
  235. package/dist/flow/types.d.ts.map +1 -0
  236. package/dist/flow/types.js +2 -0
  237. package/dist/flow/types.js.map +1 -0
  238. package/dist/formula/hx.d.ts +24 -0
  239. package/dist/formula/hx.d.ts.map +1 -0
  240. package/dist/formula/hx.js +25 -0
  241. package/dist/formula/hx.js.map +1 -0
  242. package/dist/formula/index.d.ts +74 -0
  243. package/dist/formula/index.d.ts.map +1 -0
  244. package/dist/formula/index.js +155 -0
  245. package/dist/formula/index.js.map +1 -0
  246. package/dist/formula/katex.d.ts +78 -0
  247. package/dist/formula/katex.d.ts.map +1 -0
  248. package/dist/formula/katex.js +130 -0
  249. package/dist/formula/katex.js.map +1 -0
  250. package/dist/formula/layout.d.ts +103 -0
  251. package/dist/formula/layout.d.ts.map +1 -0
  252. package/dist/formula/layout.js +716 -0
  253. package/dist/formula/layout.js.map +1 -0
  254. package/dist/formula/node.d.ts +50 -0
  255. package/dist/formula/node.d.ts.map +1 -0
  256. package/dist/formula/node.js +351 -0
  257. package/dist/formula/node.js.map +1 -0
  258. package/dist/html/controls.d.ts +48 -0
  259. package/dist/html/controls.d.ts.map +1 -0
  260. package/dist/html/controls.js +195 -0
  261. package/dist/html/controls.js.map +1 -0
  262. package/dist/html/css/cascade.d.ts +51 -0
  263. package/dist/html/css/cascade.d.ts.map +1 -0
  264. package/dist/html/css/cascade.js +552 -0
  265. package/dist/html/css/cascade.js.map +1 -0
  266. package/dist/html/css/parse.d.ts +74 -0
  267. package/dist/html/css/parse.d.ts.map +1 -0
  268. package/dist/html/css/parse.js +464 -0
  269. package/dist/html/css/parse.js.map +1 -0
  270. package/dist/html/css/style.d.ts +142 -0
  271. package/dist/html/css/style.d.ts.map +1 -0
  272. package/dist/html/css/style.js +1145 -0
  273. package/dist/html/css/style.js.map +1 -0
  274. package/dist/html/css/ua.d.ts +5 -0
  275. package/dist/html/css/ua.d.ts.map +1 -0
  276. package/dist/html/css/ua.js +171 -0
  277. package/dist/html/css/ua.js.map +1 -0
  278. package/dist/html/css/values.d.ts +78 -0
  279. package/dist/html/css/values.d.ts.map +1 -0
  280. package/dist/html/css/values.js +330 -0
  281. package/dist/html/css/values.js.map +1 -0
  282. package/dist/html/dom.d.ts +112 -0
  283. package/dist/html/dom.d.ts.map +1 -0
  284. package/dist/html/dom.js +374 -0
  285. package/dist/html/dom.js.map +1 -0
  286. package/dist/html/hx.d.ts +24 -0
  287. package/dist/html/hx.d.ts.map +1 -0
  288. package/dist/html/hx.js +29 -0
  289. package/dist/html/hx.js.map +1 -0
  290. package/dist/html/index.d.ts +137 -0
  291. package/dist/html/index.d.ts.map +1 -0
  292. package/dist/html/index.js +339 -0
  293. package/dist/html/index.js.map +1 -0
  294. package/dist/html/layout/block.d.ts +58 -0
  295. package/dist/html/layout/block.d.ts.map +1 -0
  296. package/dist/html/layout/block.js +724 -0
  297. package/dist/html/layout/block.js.map +1 -0
  298. package/dist/html/layout/boxes.d.ts +261 -0
  299. package/dist/html/layout/boxes.d.ts.map +1 -0
  300. package/dist/html/layout/boxes.js +725 -0
  301. package/dist/html/layout/boxes.js.map +1 -0
  302. package/dist/html/layout/flex.d.ts +16 -0
  303. package/dist/html/layout/flex.d.ts.map +1 -0
  304. package/dist/html/layout/flex.js +242 -0
  305. package/dist/html/layout/flex.js.map +1 -0
  306. package/dist/html/layout/floats.d.ts +50 -0
  307. package/dist/html/layout/floats.d.ts.map +1 -0
  308. package/dist/html/layout/floats.js +110 -0
  309. package/dist/html/layout/floats.js.map +1 -0
  310. package/dist/html/layout/inline.d.ts +44 -0
  311. package/dist/html/layout/inline.d.ts.map +1 -0
  312. package/dist/html/layout/inline.js +700 -0
  313. package/dist/html/layout/inline.js.map +1 -0
  314. package/dist/html/layout/table.d.ts +5 -0
  315. package/dist/html/layout/table.d.ts.map +1 -0
  316. package/dist/html/layout/table.js +340 -0
  317. package/dist/html/layout/table.js.map +1 -0
  318. package/dist/html/node.d.ts +149 -0
  319. package/dist/html/node.d.ts.map +1 -0
  320. package/dist/html/node.js +861 -0
  321. package/dist/html/node.js.map +1 -0
  322. package/dist/html/paint.d.ts +48 -0
  323. package/dist/html/paint.d.ts.map +1 -0
  324. package/dist/html/paint.js +495 -0
  325. package/dist/html/paint.js.map +1 -0
  326. package/dist/html/resources.d.ts +48 -0
  327. package/dist/html/resources.d.ts.map +1 -0
  328. package/dist/html/resources.js +156 -0
  329. package/dist/html/resources.js.map +1 -0
  330. package/dist/index.d.ts +48 -0
  331. package/dist/index.d.ts.map +1 -0
  332. package/dist/index.js +92 -0
  333. package/dist/index.js.map +1 -0
  334. package/dist/internal/heights.d.ts +88 -0
  335. package/dist/internal/heights.d.ts.map +1 -0
  336. package/dist/internal/heights.js +203 -0
  337. package/dist/internal/heights.js.map +1 -0
  338. package/dist/internal/hx.d.ts +24 -0
  339. package/dist/internal/hx.d.ts.map +1 -0
  340. package/dist/internal/hx.js +27 -0
  341. package/dist/internal/hx.js.map +1 -0
  342. package/dist/internal/scroll.d.ts +62 -0
  343. package/dist/internal/scroll.d.ts.map +1 -0
  344. package/dist/internal/scroll.js +224 -0
  345. package/dist/internal/scroll.js.map +1 -0
  346. package/dist/internal/text.d.ts +6 -0
  347. package/dist/internal/text.d.ts.map +1 -0
  348. package/dist/internal/text.js +44 -0
  349. package/dist/internal/text.js.map +1 -0
  350. package/dist/internal/timers.d.ts +8 -0
  351. package/dist/internal/timers.d.ts.map +1 -0
  352. package/dist/internal/timers.js +22 -0
  353. package/dist/internal/timers.js.map +1 -0
  354. package/dist/internal/widget.d.ts +40 -0
  355. package/dist/internal/widget.d.ts.map +1 -0
  356. package/dist/internal/widget.js +44 -0
  357. package/dist/internal/widget.js.map +1 -0
  358. package/dist/markdown/ast.d.ts +126 -0
  359. package/dist/markdown/ast.d.ts.map +1 -0
  360. package/dist/markdown/ast.js +8 -0
  361. package/dist/markdown/ast.js.map +1 -0
  362. package/dist/markdown/hx.d.ts +24 -0
  363. package/dist/markdown/hx.d.ts.map +1 -0
  364. package/dist/markdown/hx.js +25 -0
  365. package/dist/markdown/hx.js.map +1 -0
  366. package/dist/markdown/index.d.ts +90 -0
  367. package/dist/markdown/index.d.ts.map +1 -0
  368. package/dist/markdown/index.js +413 -0
  369. package/dist/markdown/index.js.map +1 -0
  370. package/dist/markdown/parse.d.ts +8 -0
  371. package/dist/markdown/parse.d.ts.map +1 -0
  372. package/dist/markdown/parse.js +911 -0
  373. package/dist/markdown/parse.js.map +1 -0
  374. package/dist/markdown/spans.d.ts +20 -0
  375. package/dist/markdown/spans.d.ts.map +1 -0
  376. package/dist/markdown/spans.js +96 -0
  377. package/dist/markdown/spans.js.map +1 -0
  378. package/dist/media-player/backends.d.ts +64 -0
  379. package/dist/media-player/backends.d.ts.map +1 -0
  380. package/dist/media-player/backends.js +110 -0
  381. package/dist/media-player/backends.js.map +1 -0
  382. package/dist/media-player/control.d.ts +40 -0
  383. package/dist/media-player/control.d.ts.map +1 -0
  384. package/dist/media-player/control.js +44 -0
  385. package/dist/media-player/control.js.map +1 -0
  386. package/dist/media-player/hx.d.ts +24 -0
  387. package/dist/media-player/hx.d.ts.map +1 -0
  388. package/dist/media-player/hx.js +25 -0
  389. package/dist/media-player/hx.js.map +1 -0
  390. package/dist/media-player/index.d.ts +107 -0
  391. package/dist/media-player/index.d.ts.map +1 -0
  392. package/dist/media-player/index.js +219 -0
  393. package/dist/media-player/index.js.map +1 -0
  394. package/dist/media-player/mpv.d.ts +4 -0
  395. package/dist/media-player/mpv.d.ts.map +1 -0
  396. package/dist/media-player/mpv.js +120 -0
  397. package/dist/media-player/mpv.js.map +1 -0
  398. package/dist/media-player/vlc.d.ts +8 -0
  399. package/dist/media-player/vlc.d.ts.map +1 -0
  400. package/dist/media-player/vlc.js +83 -0
  401. package/dist/media-player/vlc.js.map +1 -0
  402. package/dist/richtext/index.d.ts +19 -0
  403. package/dist/richtext/index.d.ts.map +1 -0
  404. package/dist/richtext/index.js +4 -0
  405. package/dist/richtext/index.js.map +1 -0
  406. package/dist/richtext/links.d.ts +12 -0
  407. package/dist/richtext/links.d.ts.map +1 -0
  408. package/dist/richtext/links.js +64 -0
  409. package/dist/richtext/links.js.map +1 -0
  410. package/dist/richtext/menu.d.ts +11 -0
  411. package/dist/richtext/menu.d.ts.map +1 -0
  412. package/dist/richtext/menu.js +43 -0
  413. package/dist/richtext/menu.js.map +1 -0
  414. package/dist/richtext/node.d.ts +151 -0
  415. package/dist/richtext/node.d.ts.map +1 -0
  416. package/dist/richtext/node.js +255 -0
  417. package/dist/richtext/node.js.map +1 -0
  418. package/dist/richtext/runs.d.ts +92 -0
  419. package/dist/richtext/runs.d.ts.map +1 -0
  420. package/dist/richtext/runs.js +158 -0
  421. package/dist/richtext/runs.js.map +1 -0
  422. package/dist/table/hx.d.ts +24 -0
  423. package/dist/table/hx.d.ts.map +1 -0
  424. package/dist/table/hx.js +25 -0
  425. package/dist/table/hx.js.map +1 -0
  426. package/dist/table/index.d.ts +169 -0
  427. package/dist/table/index.d.ts.map +1 -0
  428. package/dist/table/index.js +890 -0
  429. package/dist/table/index.js.map +1 -0
  430. package/dist/table/rows.d.ts +136 -0
  431. package/dist/table/rows.d.ts.map +1 -0
  432. package/dist/table/rows.js +146 -0
  433. package/dist/table/rows.js.map +1 -0
  434. package/dist/terminal/backends.d.ts +105 -0
  435. package/dist/terminal/backends.d.ts.map +1 -0
  436. package/dist/terminal/backends.js +185 -0
  437. package/dist/terminal/backends.js.map +1 -0
  438. package/dist/terminal/hx.d.ts +24 -0
  439. package/dist/terminal/hx.d.ts.map +1 -0
  440. package/dist/terminal/hx.js +25 -0
  441. package/dist/terminal/hx.js.map +1 -0
  442. package/dist/terminal/index.d.ts +160 -0
  443. package/dist/terminal/index.d.ts.map +1 -0
  444. package/dist/terminal/index.js +344 -0
  445. package/dist/terminal/index.js.map +1 -0
  446. package/dist/terminal/title.d.ts +24 -0
  447. package/dist/terminal/title.d.ts.map +1 -0
  448. package/dist/terminal/title.js +129 -0
  449. package/dist/terminal/title.js.map +1 -0
  450. package/dist/terminal/vt/colors.d.ts +63 -0
  451. package/dist/terminal/vt/colors.d.ts.map +1 -0
  452. package/dist/terminal/vt/colors.js +203 -0
  453. package/dist/terminal/vt/colors.js.map +1 -0
  454. package/dist/terminal/vt/diff.d.ts +117 -0
  455. package/dist/terminal/vt/diff.d.ts.map +1 -0
  456. package/dist/terminal/vt/diff.js +358 -0
  457. package/dist/terminal/vt/diff.js.map +1 -0
  458. package/dist/terminal/vt/fonts.d.ts +92 -0
  459. package/dist/terminal/vt/fonts.d.ts.map +1 -0
  460. package/dist/terminal/vt/fonts.js +178 -0
  461. package/dist/terminal/vt/fonts.js.map +1 -0
  462. package/dist/terminal/vt/index.d.ts +78 -0
  463. package/dist/terminal/vt/index.d.ts.map +1 -0
  464. package/dist/terminal/vt/index.js +312 -0
  465. package/dist/terminal/vt/index.js.map +1 -0
  466. package/dist/terminal/vt/keys.d.ts +74 -0
  467. package/dist/terminal/vt/keys.d.ts.map +1 -0
  468. package/dist/terminal/vt/keys.js +309 -0
  469. package/dist/terminal/vt/keys.js.map +1 -0
  470. package/dist/terminal/vt/mouse.d.ts +44 -0
  471. package/dist/terminal/vt/mouse.d.ts.map +1 -0
  472. package/dist/terminal/vt/mouse.js +106 -0
  473. package/dist/terminal/vt/mouse.js.map +1 -0
  474. package/dist/terminal/vt/node.d.ts +246 -0
  475. package/dist/terminal/vt/node.d.ts.map +1 -0
  476. package/dist/terminal/vt/node.js +1068 -0
  477. package/dist/terminal/vt/node.js.map +1 -0
  478. package/dist/terminal/vt/pty.d.ts +81 -0
  479. package/dist/terminal/vt/pty.d.ts.map +1 -0
  480. package/dist/terminal/vt/pty.js +201 -0
  481. package/dist/terminal/vt/pty.js.map +1 -0
  482. package/dist/terminal/vt/renderer.d.ts +179 -0
  483. package/dist/terminal/vt/renderer.d.ts.map +1 -0
  484. package/dist/terminal/vt/renderer.js +357 -0
  485. package/dist/terminal/vt/renderer.js.map +1 -0
  486. package/dist/terminal/vt/timers.d.ts +6 -0
  487. package/dist/terminal/vt/timers.d.ts.map +1 -0
  488. package/dist/terminal/vt/timers.js +16 -0
  489. package/dist/terminal/vt/timers.js.map +1 -0
  490. package/dist/terminal/vt/xterm.d.ts +142 -0
  491. package/dist/terminal/vt/xterm.d.ts.map +1 -0
  492. package/dist/terminal/vt/xterm.js +32 -0
  493. package/dist/terminal/vt/xterm.js.map +1 -0
  494. package/dist/terminal-output/hx.d.ts +24 -0
  495. package/dist/terminal-output/hx.d.ts.map +1 -0
  496. package/dist/terminal-output/hx.js +25 -0
  497. package/dist/terminal-output/hx.js.map +1 -0
  498. package/dist/terminal-output/index.d.ts +92 -0
  499. package/dist/terminal-output/index.d.ts.map +1 -0
  500. package/dist/terminal-output/index.js +179 -0
  501. package/dist/terminal-output/index.js.map +1 -0
  502. package/dist/terminal-output/runs.d.ts +27 -0
  503. package/dist/terminal-output/runs.d.ts.map +1 -0
  504. package/dist/terminal-output/runs.js +66 -0
  505. package/dist/terminal-output/runs.js.map +1 -0
  506. package/dist/three/canvas.d.ts +46 -0
  507. package/dist/three/canvas.d.ts.map +1 -0
  508. package/dist/three/canvas.js +305 -0
  509. package/dist/three/canvas.js.map +1 -0
  510. package/dist/three/events.d.ts +64 -0
  511. package/dist/three/events.d.ts.map +1 -0
  512. package/dist/three/events.js +146 -0
  513. package/dist/three/events.js.map +1 -0
  514. package/dist/three/geometries.d.ts +89 -0
  515. package/dist/three/geometries.d.ts.map +1 -0
  516. package/dist/three/geometries.js +345 -0
  517. package/dist/three/geometries.js.map +1 -0
  518. package/dist/three/globals.d.ts +7 -0
  519. package/dist/three/globals.d.ts.map +1 -0
  520. package/dist/three/globals.js +20 -0
  521. package/dist/three/globals.js.map +1 -0
  522. package/dist/three/hx.d.ts +9 -0
  523. package/dist/three/hx.d.ts.map +1 -0
  524. package/dist/three/hx.js +10 -0
  525. package/dist/three/hx.js.map +1 -0
  526. package/dist/three/index.d.ts +22 -0
  527. package/dist/three/index.d.ts.map +1 -0
  528. package/dist/three/index.js +24 -0
  529. package/dist/three/index.js.map +1 -0
  530. package/dist/three/jsx-dev-runtime.d.ts +19 -0
  531. package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
  532. package/dist/three/jsx-dev-runtime.js +2 -0
  533. package/dist/three/jsx-dev-runtime.js.map +1 -0
  534. package/dist/three/jsx-runtime.d.ts +19 -0
  535. package/dist/three/jsx-runtime.d.ts.map +1 -0
  536. package/dist/three/jsx-runtime.js +2 -0
  537. package/dist/three/jsx-runtime.js.map +1 -0
  538. package/dist/three/jsx.d.ts +198 -0
  539. package/dist/three/jsx.d.ts.map +1 -0
  540. package/dist/three/jsx.js +2 -0
  541. package/dist/three/jsx.js.map +1 -0
  542. package/dist/three/materials.d.ts +125 -0
  543. package/dist/three/materials.d.ts.map +1 -0
  544. package/dist/three/materials.js +229 -0
  545. package/dist/three/materials.js.map +1 -0
  546. package/dist/three/math.d.ts +146 -0
  547. package/dist/three/math.d.ts.map +1 -0
  548. package/dist/three/math.js +464 -0
  549. package/dist/three/math.js.map +1 -0
  550. package/dist/three/objects.d.ts +185 -0
  551. package/dist/three/objects.d.ts.map +1 -0
  552. package/dist/three/objects.js +309 -0
  553. package/dist/three/objects.js.map +1 -0
  554. package/dist/three/passes.d.ts +54 -0
  555. package/dist/three/passes.d.ts.map +1 -0
  556. package/dist/three/passes.js +78 -0
  557. package/dist/three/passes.js.map +1 -0
  558. package/dist/three/postprocess.d.ts +85 -0
  559. package/dist/three/postprocess.d.ts.map +1 -0
  560. package/dist/three/postprocess.js +503 -0
  561. package/dist/three/postprocess.js.map +1 -0
  562. package/dist/three/raycast.d.ts +24 -0
  563. package/dist/three/raycast.d.ts.map +1 -0
  564. package/dist/three/raycast.js +138 -0
  565. package/dist/three/raycast.js.map +1 -0
  566. package/dist/three/reconciler.d.ts +48 -0
  567. package/dist/three/reconciler.d.ts.map +1 -0
  568. package/dist/three/reconciler.js +416 -0
  569. package/dist/three/reconciler.js.map +1 -0
  570. package/dist/three/renderer-direct.d.ts +102 -0
  571. package/dist/three/renderer-direct.d.ts.map +1 -0
  572. package/dist/three/renderer-direct.js +782 -0
  573. package/dist/three/renderer-direct.js.map +1 -0
  574. package/dist/three/renderer-indirect.d.ts +68 -0
  575. package/dist/three/renderer-indirect.d.ts.map +1 -0
  576. package/dist/three/renderer-indirect.js +438 -0
  577. package/dist/three/renderer-indirect.js.map +1 -0
  578. package/dist/three/store.d.ts +81 -0
  579. package/dist/three/store.d.ts.map +1 -0
  580. package/dist/three/store.js +110 -0
  581. package/dist/three/store.js.map +1 -0
  582. package/dist/timeline/hx.d.ts +18 -0
  583. package/dist/timeline/hx.d.ts.map +1 -0
  584. package/dist/timeline/hx.js +10 -0
  585. package/dist/timeline/hx.js.map +1 -0
  586. package/dist/timeline/index.d.ts +152 -0
  587. package/dist/timeline/index.d.ts.map +1 -0
  588. package/dist/timeline/index.js +383 -0
  589. package/dist/timeline/index.js.map +1 -0
  590. package/dist/tray-host/hx.d.ts +24 -0
  591. package/dist/tray-host/hx.d.ts.map +1 -0
  592. package/dist/tray-host/hx.js +25 -0
  593. package/dist/tray-host/hx.js.map +1 -0
  594. package/dist/tray-host/index.d.ts +110 -0
  595. package/dist/tray-host/index.d.ts.map +1 -0
  596. package/dist/tray-host/index.js +191 -0
  597. package/dist/tray-host/index.js.map +1 -0
  598. package/dist/tray-host/manager.d.ts +137 -0
  599. package/dist/tray-host/manager.d.ts.map +1 -0
  600. package/dist/tray-host/manager.js +462 -0
  601. package/dist/tray-host/manager.js.map +1 -0
  602. package/dist/tray-host/notify.d.ts +22 -0
  603. package/dist/tray-host/notify.d.ts.map +1 -0
  604. package/dist/tray-host/notify.js +74 -0
  605. package/dist/tray-host/notify.js.map +1 -0
  606. package/dist/tray-host/protocol.d.ts +106 -0
  607. package/dist/tray-host/protocol.d.ts.map +1 -0
  608. package/dist/tray-host/protocol.js +191 -0
  609. package/dist/tray-host/protocol.js.map +1 -0
  610. package/dist/tree/hx.d.ts +24 -0
  611. package/dist/tree/hx.d.ts.map +1 -0
  612. package/dist/tree/hx.js +25 -0
  613. package/dist/tree/hx.js.map +1 -0
  614. package/dist/tree/index.d.ts +221 -0
  615. package/dist/tree/index.d.ts.map +1 -0
  616. package/dist/tree/index.js +751 -0
  617. package/dist/tree/index.js.map +1 -0
  618. package/dist/tree/internal.d.ts +18 -0
  619. package/dist/tree/internal.d.ts.map +1 -0
  620. package/dist/tree/internal.js +66 -0
  621. package/dist/tree/internal.js.map +1 -0
  622. package/dist/tree/rows.d.ts +177 -0
  623. package/dist/tree/rows.d.ts.map +1 -0
  624. package/dist/tree/rows.js +179 -0
  625. package/dist/tree/rows.js.map +1 -0
  626. package/package.json +166 -12
  627. package/src/ansi/cast.ts +159 -0
  628. package/src/ansi/index.ts +53 -0
  629. package/src/ansi/palette.ts +226 -0
  630. package/src/ansi/parse.ts +780 -0
  631. package/src/ansi/sgr.ts +380 -0
  632. package/src/ansi/utf8.ts +84 -0
  633. package/src/calendar/Calendar.ts +744 -0
  634. package/src/calendar/DatePicker.ts +368 -0
  635. package/src/calendar/dates.ts +307 -0
  636. package/src/calendar/index.ts +51 -0
  637. package/src/charts/components.ts +864 -0
  638. package/src/charts/data.ts +776 -0
  639. package/src/charts/hx.ts +39 -0
  640. package/src/charts/index.ts +99 -0
  641. package/src/charts/node.ts +932 -0
  642. package/src/charts/render.ts +982 -0
  643. package/src/charts/scale.ts +214 -0
  644. package/src/charts/spec.ts +122 -0
  645. package/src/charts/timers.ts +24 -0
  646. package/src/code/hx.ts +51 -0
  647. package/src/code/index.ts +174 -0
  648. package/src/code-editor/completion.ts +161 -0
  649. package/src/code-editor/doc.ts +198 -0
  650. package/src/code-editor/hx.ts +26 -0
  651. package/src/code-editor/index.ts +615 -0
  652. package/src/code-editor/node.ts +1926 -0
  653. package/src/code-language/hljs.ts +302 -0
  654. package/src/code-language/index.ts +51 -0
  655. package/src/code-language/languages/glsl.ts +120 -0
  656. package/src/code-language/languages/javascript.ts +419 -0
  657. package/src/code-language/languages/json.ts +72 -0
  658. package/src/code-language/languages/shell.ts +221 -0
  659. package/src/code-language/languages/sql.ts +165 -0
  660. package/src/code-language/lezer.ts +190 -0
  661. package/src/code-language/registry.ts +66 -0
  662. package/src/code-language/runs.ts +128 -0
  663. package/src/code-language/stream.ts +306 -0
  664. package/src/code-language/textmate.ts +134 -0
  665. package/src/code-language/theme.ts +124 -0
  666. package/src/code-language/timers.ts +36 -0
  667. package/src/code-language/types.ts +252 -0
  668. package/src/codeblock/index.ts +146 -0
  669. package/src/color-picker/ColorField.ts +333 -0
  670. package/src/color-picker/ColorPicker.ts +1069 -0
  671. package/src/color-picker/color.ts +399 -0
  672. package/src/color-picker/index.ts +50 -0
  673. package/src/desktop-calendar/eds.ts +484 -0
  674. package/src/desktop-calendar/ical.ts +119 -0
  675. package/src/desktop-calendar/index.ts +287 -0
  676. package/src/embed/client.ts +311 -0
  677. package/src/embed/host.ts +432 -0
  678. package/src/embed/index.ts +33 -0
  679. package/src/embed/timers.ts +32 -0
  680. package/src/flow/draw.ts +418 -0
  681. package/src/flow/index.ts +473 -0
  682. package/src/flow/model.ts +687 -0
  683. package/src/flow/node.ts +3694 -0
  684. package/src/flow/paths.ts +403 -0
  685. package/src/flow/types.ts +634 -0
  686. package/src/formula/hx.ts +51 -0
  687. package/src/formula/index.ts +243 -0
  688. package/src/formula/katex.ts +209 -0
  689. package/src/formula/layout.ts +876 -0
  690. package/src/formula/node.ts +467 -0
  691. package/src/html/controls.ts +244 -0
  692. package/src/html/css/cascade.ts +606 -0
  693. package/src/html/css/parse.ts +500 -0
  694. package/src/html/css/style.ts +1371 -0
  695. package/src/html/css/ua.ts +174 -0
  696. package/src/html/css/values.ts +358 -0
  697. package/src/html/dom.ts +410 -0
  698. package/src/html/hx.ts +55 -0
  699. package/src/html/index.ts +545 -0
  700. package/src/html/layout/block.ts +876 -0
  701. package/src/html/layout/boxes.ts +981 -0
  702. package/src/html/layout/flex.ts +297 -0
  703. package/src/html/layout/floats.ts +125 -0
  704. package/src/html/layout/inline.ts +870 -0
  705. package/src/html/layout/table.ts +380 -0
  706. package/src/html/node.ts +967 -0
  707. package/src/html/paint.ts +605 -0
  708. package/src/html/resources.ts +214 -0
  709. package/src/index.ts +638 -0
  710. package/src/internal/heights.ts +222 -0
  711. package/src/internal/hx.ts +53 -0
  712. package/src/internal/scroll.ts +288 -0
  713. package/src/internal/text.ts +44 -0
  714. package/src/internal/timers.ts +44 -0
  715. package/src/internal/widget.ts +92 -0
  716. package/src/markdown/ast.ts +163 -0
  717. package/src/markdown/hx.ts +51 -0
  718. package/src/markdown/index.ts +686 -0
  719. package/src/markdown/parse.ts +1037 -0
  720. package/src/markdown/spans.ts +143 -0
  721. package/src/media-player/backends.ts +155 -0
  722. package/src/media-player/control.ts +70 -0
  723. package/src/media-player/hx.ts +51 -0
  724. package/src/media-player/index.ts +378 -0
  725. package/src/media-player/mpv.ts +146 -0
  726. package/src/media-player/vlc.ts +97 -0
  727. package/src/richtext/index.ts +42 -0
  728. package/src/richtext/links.ts +78 -0
  729. package/src/richtext/menu.ts +49 -0
  730. package/src/richtext/node.ts +406 -0
  731. package/src/richtext/runs.ts +253 -0
  732. package/src/table/hx.ts +51 -0
  733. package/src/table/index.ts +1270 -0
  734. package/src/table/rows.ts +275 -0
  735. package/src/terminal/backends.ts +242 -0
  736. package/src/terminal/hx.ts +51 -0
  737. package/src/terminal/index.ts +574 -0
  738. package/src/terminal/title.ts +172 -0
  739. package/src/terminal/vt/colors.ts +247 -0
  740. package/src/terminal/vt/diff.ts +467 -0
  741. package/src/terminal/vt/fonts.ts +233 -0
  742. package/src/terminal/vt/index.ts +443 -0
  743. package/src/terminal/vt/keys.ts +369 -0
  744. package/src/terminal/vt/mouse.ts +144 -0
  745. package/src/terminal/vt/node.ts +1242 -0
  746. package/src/terminal/vt/pty.ts +334 -0
  747. package/src/terminal/vt/renderer.ts +555 -0
  748. package/src/terminal/vt/timers.ts +31 -0
  749. package/src/terminal/vt/xterm.ts +193 -0
  750. package/src/terminal-output/hx.ts +51 -0
  751. package/src/terminal-output/index.ts +340 -0
  752. package/src/terminal-output/runs.ts +79 -0
  753. package/src/three/canvas.ts +451 -0
  754. package/src/three/events.ts +197 -0
  755. package/src/three/geometries.ts +429 -0
  756. package/src/three/globals.ts +34 -0
  757. package/src/three/hx.ts +22 -0
  758. package/src/three/index.ts +98 -0
  759. package/src/three/jsx-dev-runtime.ts +27 -0
  760. package/src/three/jsx-runtime.ts +38 -0
  761. package/src/three/jsx.ts +275 -0
  762. package/src/three/materials.ts +270 -0
  763. package/src/three/math.ts +585 -0
  764. package/src/three/objects.ts +397 -0
  765. package/src/three/passes.ts +90 -0
  766. package/src/three/postprocess.ts +677 -0
  767. package/src/three/raycast.ts +189 -0
  768. package/src/three/react-reconciler.d.ts +50 -0
  769. package/src/three/reconciler.ts +624 -0
  770. package/src/three/renderer-direct.ts +1055 -0
  771. package/src/three/renderer-indirect.ts +570 -0
  772. package/src/three/store.ts +207 -0
  773. package/src/timeline/hx.ts +31 -0
  774. package/src/timeline/index.ts +603 -0
  775. package/src/tray-host/hx.ts +51 -0
  776. package/src/tray-host/index.ts +331 -0
  777. package/src/tray-host/manager.ts +639 -0
  778. package/src/tray-host/notify.ts +102 -0
  779. package/src/tray-host/protocol.ts +235 -0
  780. package/src/tree/hx.ts +51 -0
  781. package/src/tree/index.ts +1127 -0
  782. package/src/tree/internal.ts +87 -0
  783. package/src/tree/rows.ts +334 -0
  784. package/src/index.d.ts +0 -2
  785. package/src/index.js +0 -9
  786. package/src/sparkline/index.d.ts +0 -29
  787. package/src/sparkline/index.js +0 -50
  788. package/src/sparkline/node.js +0 -72
@@ -0,0 +1,52 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { Style } from 'react-x11/style';
3
+ import type { CalendarProps } from './Calendar.js';
4
+ type PickerOwnProps = {
5
+ /** What the trigger shows. Defaults to the locale's medium date, and
6
+ * `Intl`'s own range format when there are two of them. */
7
+ format?: (value: unknown) => string | null;
8
+ /** Shown when nothing is picked yet. */
9
+ placeholder?: string;
10
+ disabled?: boolean;
11
+ style?: Style | Style[];
12
+ };
13
+ /**
14
+ * `Omit` over a union collapses it into one member, which would cost the
15
+ * picker the thing that makes it pleasant to use: `mode` discriminating
16
+ * single from range, and with it the type of the `onChange` parameter. So the
17
+ * omit is distributed across the union instead, and `<DatePicker mode="range"
18
+ * onChange={(ev) => …}>` still knows `ev.value` is a `DateRange`.
19
+ */
20
+ type DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;
21
+ export type DatePickerProps = DistributiveOmit<CalendarProps, 'focusable' | 'focusVisible' | 'ref' | 'style'> & PickerOwnProps;
22
+ /**
23
+ * <DatePicker value onChange …boxProps> — a `<Calendar>` on a `<popup>`, hung
24
+ * off a field that shows the current date.
25
+ *
26
+ * <DatePicker value={day} onChange={(ev) => setDay(ev.value)} />
27
+ * <DatePicker mode="range" value={span} onChange={…} max="2026-12-31" />
28
+ *
29
+ * Every calendar prop passes straight through — `mode`, `min`/`max`,
30
+ * `isDateBlocked`, `spanBlocked`, `dayContent`, `locale`, `weekStartsOn` — and
31
+ * the value has the same shape here as there: a `'YYYY-MM-DD'` day, or
32
+ * `{ start, end }` in range mode.
33
+ *
34
+ * The calendar opens on the **press**, not the release, for the reason
35
+ * `Select`'s menu does: a control whose whole purpose is to be looked at has
36
+ * nothing to gain from waiting out the length of the click. It closes when the
37
+ * value is complete — the day in single mode, the second end of a range — on
38
+ * Escape, on a second press of the trigger, and when the window loses focus.
39
+ *
40
+ * The popup is override-redirect and never takes focus, so the **trigger keeps
41
+ * the keyboard** and hands the calendar its keys: Down/Up/Enter/Space open it,
42
+ * and once it is open everything the grid understands (arrows, Home/End,
43
+ * PageUp/PageDown, Enter, Space) goes there. Escape and Tab stay here, which
44
+ * is why `handleKey` reports whether it took the key.
45
+ *
46
+ * `format(value)` is the seam for the label: the default is the locale's
47
+ * medium date, and `Intl`'s own range format when there are two of them, which
48
+ * collapses the parts the ends share ("7 – 12 Aug 2026").
49
+ */
50
+ export declare function DatePicker(props: DatePickerProps): ReactElement;
51
+ export {};
52
+ //# sourceMappingURL=DatePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../src/calendar/DatePicker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AAc9D,OAAO,KAAK,EAEV,aAAa,EAGd,MAAM,eAAe,CAAC;AA0EvB,KAAK,cAAc,GAAG;IACpB;gEAC4D;IAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;IAC3C,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,KAAK,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,OAAO,GAC/D,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACV,KAAK,CAAC;AAEV,MAAM,MAAM,eAAe,GAAG,gBAAgB,CAC5C,aAAa,EACb,WAAW,GAAG,cAAc,GAAG,KAAK,GAAG,OAAO,CAC/C,GACC,cAAc,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CAsN/D"}
@@ -0,0 +1,257 @@
1
+ // <DatePicker> — a <Calendar> on a <popup>, hung off a field that shows the
2
+ // current date. Ported from react-x11's `src/components/DatePicker.js`.
3
+ import React, { useRef, useState } from 'react';
4
+ import { createStyles } from 'react-x11/style';
5
+ import { useAnchor, useAnchorTracking, useTheme } from 'react-x11';
6
+ import { XK_DOWN, XK_ESCAPE, XK_RETURN, XK_UP } from 'react-x11/keysyms';
7
+ import { hx } from '../internal/hx.js';
8
+ import { useDismissOnWindowBlur } from '../internal/widget.js';
9
+ import { CALENDAR_HEIGHT, CALENDAR_WIDTH, Calendar } from './Calendar.js';
10
+ import { formatDay, formatDayRange, toDay } from './dates.js';
11
+ // A hairline round the sheet, as the menus and `Select` use: this border is
12
+ // where the popup meets the desktop, not a control's outline, so a theme that
13
+ // draws 2px borders on its buttons does not get a 2px frame here.
14
+ const SHEET_BORDER = 1;
15
+ const s = createStyles({
16
+ trigger: {
17
+ flexDirection: 'row',
18
+ alignItems: 'center',
19
+ gap: 8,
20
+ padding: 8,
21
+ paddingLeft: 10,
22
+ paddingRight: 10,
23
+ cursor: 'pointer',
24
+ },
25
+ label: { flexGrow: 1 },
26
+ icon: { width: 14, height: 14, flexShrink: 0 },
27
+ sheet: { flexGrow: 1, flexShrink: 1, borderWidth: SHEET_BORDER },
28
+ });
29
+ /** A wall calendar, 14×14: the page, its two hangers and the ruled week. */
30
+ function CalendarGlyph({ color }) {
31
+ return hx('canvas', {
32
+ style: s.icon,
33
+ onDraw: (ctx, { width, height }) => {
34
+ ctx.strokeStyle = color;
35
+ ctx.lineWidth = 1;
36
+ ctx.strokeRect(0.5, 2.5, width - 1, height - 3);
37
+ ctx.beginPath();
38
+ ctx.moveTo(0.5, 6.5);
39
+ ctx.lineTo(width - 0.5, 6.5);
40
+ ctx.moveTo(4.5, 0.5);
41
+ ctx.lineTo(4.5, 3.5);
42
+ ctx.moveTo(width - 4.5, 0.5);
43
+ ctx.lineTo(width - 4.5, 3.5);
44
+ ctx.stroke();
45
+ },
46
+ });
47
+ }
48
+ /** What the trigger says, when the app has not said it itself. */
49
+ function defaultFormat(mode, value, locale) {
50
+ if (mode === 'range') {
51
+ const range = (value ?? {});
52
+ const start = toDay(range.start);
53
+ const end = toDay(range.end);
54
+ if (!start)
55
+ return null;
56
+ if (!end)
57
+ return `${formatDay(start, locale)} → …`;
58
+ return formatDayRange(start, end, locale);
59
+ }
60
+ const day = toDay(value);
61
+ return day ? formatDay(day, locale) : null;
62
+ }
63
+ /**
64
+ * <DatePicker value onChange …boxProps> — a `<Calendar>` on a `<popup>`, hung
65
+ * off a field that shows the current date.
66
+ *
67
+ * <DatePicker value={day} onChange={(ev) => setDay(ev.value)} />
68
+ * <DatePicker mode="range" value={span} onChange={…} max="2026-12-31" />
69
+ *
70
+ * Every calendar prop passes straight through — `mode`, `min`/`max`,
71
+ * `isDateBlocked`, `spanBlocked`, `dayContent`, `locale`, `weekStartsOn` — and
72
+ * the value has the same shape here as there: a `'YYYY-MM-DD'` day, or
73
+ * `{ start, end }` in range mode.
74
+ *
75
+ * The calendar opens on the **press**, not the release, for the reason
76
+ * `Select`'s menu does: a control whose whole purpose is to be looked at has
77
+ * nothing to gain from waiting out the length of the click. It closes when the
78
+ * value is complete — the day in single mode, the second end of a range — on
79
+ * Escape, on a second press of the trigger, and when the window loses focus.
80
+ *
81
+ * The popup is override-redirect and never takes focus, so the **trigger keeps
82
+ * the keyboard** and hands the calendar its keys: Down/Up/Enter/Space open it,
83
+ * and once it is open everything the grid understands (arrows, Home/End,
84
+ * PageUp/PageDown, Enter, Space) goes there. Escape and Tab stay here, which
85
+ * is why `handleKey` reports whether it took the key.
86
+ *
87
+ * `format(value)` is the seam for the label: the default is the locale's
88
+ * medium date, and `Intl`'s own range format when there are two of them, which
89
+ * collapses the parts the ends share ("7 – 12 Aug 2026").
90
+ */
91
+ export function DatePicker(props) {
92
+ const { mode = 'single', value, defaultValue, onChange, name, month, defaultMonth, onMonthChange, min, max, isDateBlocked, spanBlocked, dayContent, locale, weekStartsOn, format, placeholder, disabled = false, style, ...boxProps } = props;
93
+ const theme = useTheme();
94
+ const [open, setOpen] = useState(false);
95
+ // `AnchorRect` rather than `Rect`: `useAnchorTracking` reports the side the
96
+ // sheet actually landed on (react-x11#280), and its `setRect` is typed to
97
+ // hand that back. Nothing here reads `placement` — the sheet has no arrow
98
+ // to aim — but the state has to be able to hold it.
99
+ const [anchor, setAnchor] = useState(null);
100
+ const [focused, setFocused] = useState(false);
101
+ const [ownValue, setOwnValue] = useState(defaultValue ?? null);
102
+ const triggerRef = useRef(null);
103
+ const calendarRef = useRef(null);
104
+ const measureAnchor = useAnchor(triggerRef);
105
+ const current = value === undefined ? ownValue : value;
106
+ const width = CALENDAR_WIDTH + SHEET_BORDER * 2;
107
+ const height = CALENDAR_HEIGHT + SHEET_BORDER * 2;
108
+ const anchorOptions = () => ({
109
+ placement: 'bottom',
110
+ width,
111
+ height,
112
+ });
113
+ const close = () => setOpen(false);
114
+ const openCalendar = () => {
115
+ const rect = measureAnchor(anchorOptions());
116
+ if (!rect)
117
+ return;
118
+ setAnchor(rect);
119
+ setOpen(true);
120
+ };
121
+ const toggle = () => (open ? close() : openCalendar());
122
+ // the same two the other popups take: keep the sheet under the trigger while
123
+ // anything moves it, and shut it when the window itself loses focus (the
124
+ // trigger keeps its focus, so its own onBlur never hears about that)
125
+ useAnchorTracking(triggerRef, open, anchorOptions, setAnchor, close);
126
+ useDismissOnWindowBlur(triggerRef, open, close);
127
+ const handleChange = (ev) => {
128
+ if (value === undefined)
129
+ setOwnValue(ev.value);
130
+ onChange?.(ev);
131
+ // a half-picked range is the one selection that is not finished, and the
132
+ // calendar has to stay up for the other end of it
133
+ if (mode !== 'range' || ev.value?.end)
134
+ close();
135
+ };
136
+ const onKeyDown = (ev) => {
137
+ if (ev.keysym === XK_ESCAPE) {
138
+ if (open)
139
+ close();
140
+ return;
141
+ }
142
+ if (open && calendarRef.current?.handleKey(ev))
143
+ return;
144
+ if (ev.keysym === XK_DOWN ||
145
+ ev.keysym === XK_UP ||
146
+ ev.keysym === XK_RETURN ||
147
+ ev.codepoint === 32) {
148
+ if (!open)
149
+ openCalendar();
150
+ }
151
+ };
152
+ const label = format ? format(current) : defaultFormat(mode, current, locale);
153
+ const empty = label == null || label === '';
154
+ const text = empty
155
+ ? (placeholder ?? (mode === 'range' ? 'Pick dates…' : 'Pick a date…'))
156
+ : label;
157
+ return hx('box', {
158
+ theme,
159
+ role: 'combobox',
160
+ 'aria-expanded': Boolean(open),
161
+ 'aria-haspopup': 'dialog',
162
+ disabled: disabled || undefined,
163
+ ref: triggerRef,
164
+ focusable: !disabled,
165
+ onMouseDown: disabled ? undefined : toggle,
166
+ onFocus: () => setFocused(true),
167
+ onBlur: () => {
168
+ setFocused(false);
169
+ close();
170
+ },
171
+ onKeyDown: disabled ? undefined : onKeyDown,
172
+ ...boxProps,
173
+ style: [
174
+ s.trigger,
175
+ {
176
+ cursor: disabled ? 'default' : 'pointer',
177
+ borderWidth: theme.borderWidth,
178
+ borderRadius: theme.radius,
179
+ borderColor: focused || open ? theme.borderFocus : theme.border,
180
+ backgroundColor: disabled ? theme.surfaceHover : theme.background,
181
+ },
182
+ // hover and press say "this opens", so they belong to the trigger
183
+ // while it is shut and are simply not declared once the calendar is
184
+ // down — a state block always outranks the base style, so the only
185
+ // way for the open look to win is for nothing to be competing
186
+ !disabled &&
187
+ !open && {
188
+ ':hover': { backgroundColor: theme.surfaceHover },
189
+ ':active': { backgroundColor: theme.surfaceActive },
190
+ },
191
+ style,
192
+ ],
193
+ }, hx('text', {
194
+ style: [
195
+ s.label,
196
+ { color: disabled || empty ? theme.textMuted : theme.text },
197
+ ],
198
+ }, text), React.createElement(CalendarGlyph, {
199
+ color: disabled ? theme.border : theme.textMuted,
200
+ }), open &&
201
+ anchor &&
202
+ hx('popup', {
203
+ theme,
204
+ x: anchor.x,
205
+ y: anchor.y,
206
+ width,
207
+ height,
208
+ grab: true,
209
+ onDismiss: close,
210
+ // ARGB where the display has it, so the corners the sheet gives up
211
+ // are the desktop rather than a colour. The window paints nothing
212
+ // itself when it can be seen through — the box below is the whole
213
+ // of the sheet, and a square fill under it would put the corners
214
+ // straight back.
215
+ transparent: true,
216
+ style: {
217
+ backgroundColor: theme.background,
218
+ '@supports transparency': { backgroundColor: 'transparent' },
219
+ },
220
+ }, hx('box', {
221
+ style: [
222
+ s.sheet,
223
+ {
224
+ borderColor: theme.border,
225
+ backgroundColor: theme.background,
226
+ '@supports transparency': { borderRadius: theme.radiusPopup },
227
+ },
228
+ ],
229
+ }, React.createElement(Calendar, {
230
+ ref: calendarRef,
231
+ mode,
232
+ value: current,
233
+ onChange: handleChange,
234
+ name,
235
+ month,
236
+ defaultMonth,
237
+ onMonthChange,
238
+ min,
239
+ max,
240
+ isDateBlocked,
241
+ spanBlocked,
242
+ dayContent,
243
+ locale,
244
+ weekStartsOn,
245
+ // The trigger owns the keyboard: the popup is override-redirect
246
+ // and never takes focus, so a focusable grid inside it would take
247
+ // focus on the press instead — blurring the trigger, whose onBlur
248
+ // closes the sheet, unmounting the day under the pointer before
249
+ // the release could turn into a click.
250
+ focusable: false,
251
+ // …and because it does not hold the focus, it would not draw the
252
+ // day cursor either, leaving the arrow keys moving something
253
+ // invisible.
254
+ focusVisible: true,
255
+ }))));
256
+ }
257
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../src/calendar/DatePicker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /** A calendar day, `'YYYY-MM-DD'`. */
2
+ export type CalendarDay = string;
3
+ /** A calendar month, `'YYYY-MM'`. */
4
+ export type CalendarMonth = string;
5
+ /** What every day-shaped prop accepts. */
6
+ export type DayInput = CalendarDay | Date | null | undefined;
7
+ /** The parts of a day, so a caller does not have to parse the string. */
8
+ export interface DayParts {
9
+ year: number;
10
+ /** 1-based, unlike `Date`'s. */
11
+ month: number;
12
+ day: number;
13
+ /** `0`-`6` from Sunday, as `Date#getDay()` counts. */
14
+ weekday: number;
15
+ date: Date;
16
+ }
17
+ /**
18
+ * A day key from a `'YYYY-MM-DD'` string, a `Date`, or `null`/`undefined`
19
+ * (which is "no day", and comes back as `null`).
20
+ *
21
+ * Throws on anything else, and on a string that is not a real date —
22
+ * `'2026-02-30'` is a typo, not a day, and silently sliding it to March 2nd
23
+ * the way `new Date()` does is how a booking ends up a day out. The message
24
+ * names what arrived, because the value in a props object is usually miles
25
+ * from the line that built it.
26
+ */
27
+ export declare function toDay(value: DayInput): CalendarDay | null;
28
+ /** `'YYYY-MM'` from the same set of inputs, for the *visible month* props. */
29
+ export declare function toMonth(value: DayInput): CalendarMonth | null;
30
+ /** Today, on this machine, in local time — which is the day the user's wall
31
+ * calendar is showing. */
32
+ export declare function today(): CalendarDay;
33
+ /** The day as a UTC-midnight `Date`, for `Intl` and for arithmetic. */
34
+ export declare function dayDate(day: CalendarDay): Date;
35
+ /**
36
+ * `{ year, month, day, weekday, date }` — the parts a caller needs to decide
37
+ * something about a day without parsing the string itself. `weekday` is
38
+ * `0`-`6` from Sunday, as `Date#getDay()` counts, so blocking weekends is
39
+ * `weekday === 0 || weekday === 6`. `month` is 1-based, unlike `Date`'s.
40
+ */
41
+ export declare function dayParts(day: CalendarDay): DayParts;
42
+ export declare function addDays(day: CalendarDay, n: number): CalendarDay;
43
+ /** `'2026-08'` — the month a day is in. */
44
+ export declare function monthOf(day: CalendarDay): CalendarMonth;
45
+ /** The first day of a `'YYYY-MM'`. */
46
+ export declare function firstOfMonth(month: CalendarMonth): CalendarDay;
47
+ /**
48
+ * `n` months on from a `'YYYY-MM'`. Months, unlike days, are not all the same
49
+ * length, so this deliberately works on the month key and never on a day: the
50
+ * "same date next month" question (Jan 31 → Feb 31?) has no good answer and
51
+ * nothing here asks it.
52
+ */
53
+ export declare function addMonths(month: CalendarMonth, n: number): CalendarMonth;
54
+ /** `day` held inside `[min, max]`; either bound may be null. */
55
+ export declare function clampDay(day: CalendarDay, min: CalendarDay | null, max: CalendarDay | null): CalendarDay;
56
+ /**
57
+ * The grid a month is drawn on: **six weeks of seven days**, always, starting
58
+ * on `weekStartsOn` and running through whatever days of the neighbouring
59
+ * months it takes to fill the corners.
60
+ *
61
+ * Six rows even when five would do (and a 28-day February starting on the
62
+ * first day of the week needs only four) because the alternative is a picker
63
+ * whose popup changes height as you page through it, moving the very buttons
64
+ * the pointer is aiming at.
65
+ */
66
+ export declare function monthGrid(month: CalendarMonth, weekStartsOn?: number): CalendarDay[][];
67
+ /**
68
+ * Which day the week starts on for a locale: `0` Sunday … `6` Saturday.
69
+ *
70
+ * The runtime knows this — CLDR carries it — but only through
71
+ * `Intl.Locale#getWeekInfo`, which is recent enough that a small-ICU build or
72
+ * an older V8 has neither it nor the `weekInfo` property it was proposed as.
73
+ * So it is feature-detected, and what is left when it is missing is **Monday**:
74
+ * ISO 8601's answer, and the one most of the world uses.
75
+ */
76
+ export declare function localeWeekStart(locale?: string): number;
77
+ /** `['Mon', 'Tue', …]` in the locale, rotated to start on `weekStartsOn`. */
78
+ export declare function weekdayLabels(locale?: string, weekStartsOn?: number): string[];
79
+ /** `'August 2026'` in the locale. */
80
+ export declare function formatMonth(month: CalendarMonth, locale?: string): string;
81
+ /** `'7 Aug 2026'` in the locale — what a picker's trigger shows. */
82
+ export declare function formatDay(day: CalendarDay, locale?: string, options?: Intl.DateTimeFormatOptions): string;
83
+ /**
84
+ * `'7 – 12 Aug 2026'`: the locale's own way of writing a span, which collapses
85
+ * the parts the two ends share. `formatRange` is ES2021 and universal in the
86
+ * Node versions this package supports, but a small-ICU build can still throw,
87
+ * so a plain "a – b" is kept behind it.
88
+ */
89
+ export declare function formatDayRange(start: CalendarDay, end: CalendarDay, locale?: string, options?: Intl.DateTimeFormatOptions): string;
90
+ //# sourceMappingURL=dates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.d.ts","sourceRoot":"","sources":["../../src/calendar/dates.ts"],"names":[],"mappings":"AA8BA,sCAAsC;AACtC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,qCAAqC;AACrC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,0CAA0C;AAC1C,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAE7D,yEAAyE;AACzE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;CACZ;AAaD;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CAsCzD;AAED,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI,CAK7D;AAED;2BAC2B;AAC3B,wBAAgB,KAAK,IAAI,WAAW,CAGnC;AAED,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAG9C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ,CASnD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,CAIhE;AAED,2CAA2C;AAC3C,wBAAgB,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAEvD;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,CAIxE;AAED,gEAAgE;AAChE,wBAAgB,QAAQ,CACtB,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,WAAW,GAAG,IAAI,EACvB,GAAG,EAAE,WAAW,GAAG,IAAI,GACtB,WAAW,CAIb;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,aAAa,EACpB,YAAY,SAAI,GACf,WAAW,EAAE,EAAE,CAWjB;AAqBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,MAAM,EAAE,CAMzE;AAED,qCAAqC;AACrC,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CACvB,GAAG,EAAE,WAAW,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,GACnC,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,WAAW,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,GACnC,MAAM,CAOR"}
@@ -0,0 +1,236 @@
1
+ // Calendar days, and the arithmetic the date widgets do on them.
2
+ //
3
+ // Vendored from react-x11's `src/components/dates.js` when `<Calendar>` moved
4
+ // out here. It is pure — no renderer, no ntk, no React — which is what made
5
+ // the move cheap, and core is expected to drop its copy. Divergence is fine
6
+ // and expected; this is the owner now.
7
+ //
8
+ // **A day here is a string, `'2026-08-07'`, not a `Date`.** A date picker
9
+ // selects a square on a wall calendar, and that is not an instant: it has no
10
+ // time, no zone, and no duration that survives a DST boundary. A `Date` is an
11
+ // instant, so every comparison the widgets need — is this the selected day, is
12
+ // it inside the range, is it blocked — would be a comparison of two timestamps
13
+ // that are only equal if both were built the same way. `new Date(2026, 7, 7)`
14
+ // and `new Date('2026-08-07')` are eleven hours apart in Sydney and neither is
15
+ // wrong.
16
+ //
17
+ // A string has none of that: `a === b` is "the same day", `a < b` is "earlier"
18
+ // (fixed-width fields, so lexical order *is* chronological order), it is a
19
+ // `Map`/`Set` key without a codec, and it is what a calendar API hands back
20
+ // over the wire in the first place — which is exactly the shape the desktop
21
+ // event overlay in `../desktop-calendar/` produces.
22
+ //
23
+ // `Date` is still accepted everywhere a day is taken: `toDay()` converts one
24
+ // using its **local** calendar day, because that is the day the user was
25
+ // looking at when they built it.
26
+ //
27
+ // The arithmetic runs in UTC (`Date.UTC`, `getUTC*`) so that "add a day" is
28
+ // always 86400 seconds and never 23 or 25 — the local-time trap that puts a
29
+ // month grid an hour out on the last Sunday in October.
30
+ const DAY_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
31
+ const MONTH_RE = /^(\d{4})-(\d{2})$/;
32
+ function pad(n, width) {
33
+ return String(n).padStart(width, '0');
34
+ }
35
+ function key(year, month, day) {
36
+ return `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}`;
37
+ }
38
+ /**
39
+ * A day key from a `'YYYY-MM-DD'` string, a `Date`, or `null`/`undefined`
40
+ * (which is "no day", and comes back as `null`).
41
+ *
42
+ * Throws on anything else, and on a string that is not a real date —
43
+ * `'2026-02-30'` is a typo, not a day, and silently sliding it to March 2nd
44
+ * the way `new Date()` does is how a booking ends up a day out. The message
45
+ * names what arrived, because the value in a props object is usually miles
46
+ * from the line that built it.
47
+ */
48
+ export function toDay(value) {
49
+ if (value == null)
50
+ return null;
51
+ if (value instanceof Date) {
52
+ if (Number.isNaN(value.getTime())) {
53
+ throw new TypeError('@react-x11/components: an Invalid Date was passed where a calendar day was expected.');
54
+ }
55
+ // its *local* calendar day: `new Date(2026, 7, 7)` is local midnight, and
56
+ // the day the developer wrote down is the one they meant
57
+ return key(value.getFullYear(), value.getMonth() + 1, value.getDate());
58
+ }
59
+ if (typeof value === 'string') {
60
+ const m = DAY_RE.exec(value);
61
+ if (!m) {
62
+ throw new TypeError(`@react-x11/components: expected a calendar day as 'YYYY-MM-DD' or a Date, got ${JSON.stringify(value)}.`);
63
+ }
64
+ const [, y, mo, d] = m;
65
+ // through a real Date and back: the fields on their own are well-formed
66
+ // for '2026-02-30' too, and only the calendar knows February ends earlier
67
+ const date = new Date(Date.UTC(Number(y), Number(mo) - 1, Number(d)));
68
+ const round = key(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate());
69
+ if (round !== value) {
70
+ throw new TypeError(`@react-x11/components: ${JSON.stringify(value)} is not a real calendar date.`);
71
+ }
72
+ return value;
73
+ }
74
+ throw new TypeError(`@react-x11/components: expected a calendar day as 'YYYY-MM-DD' or a Date, got ${typeof value}.`);
75
+ }
76
+ /** `'YYYY-MM'` from the same set of inputs, for the *visible month* props. */
77
+ export function toMonth(value) {
78
+ if (value == null)
79
+ return null;
80
+ if (typeof value === 'string' && MONTH_RE.test(value))
81
+ return value;
82
+ const day = toDay(value);
83
+ return day == null ? null : monthOf(day);
84
+ }
85
+ /** Today, on this machine, in local time — which is the day the user's wall
86
+ * calendar is showing. */
87
+ export function today() {
88
+ const now = new Date();
89
+ return key(now.getFullYear(), now.getMonth() + 1, now.getDate());
90
+ }
91
+ /** The day as a UTC-midnight `Date`, for `Intl` and for arithmetic. */
92
+ export function dayDate(day) {
93
+ const [y, m, d] = day.split('-').map(Number);
94
+ return new Date(Date.UTC(y, m - 1, d));
95
+ }
96
+ /**
97
+ * `{ year, month, day, weekday, date }` — the parts a caller needs to decide
98
+ * something about a day without parsing the string itself. `weekday` is
99
+ * `0`-`6` from Sunday, as `Date#getDay()` counts, so blocking weekends is
100
+ * `weekday === 0 || weekday === 6`. `month` is 1-based, unlike `Date`'s.
101
+ */
102
+ export function dayParts(day) {
103
+ const date = dayDate(day);
104
+ return {
105
+ year: date.getUTCFullYear(),
106
+ month: date.getUTCMonth() + 1,
107
+ day: date.getUTCDate(),
108
+ weekday: date.getUTCDay(),
109
+ date,
110
+ };
111
+ }
112
+ export function addDays(day, n) {
113
+ const date = dayDate(day);
114
+ date.setUTCDate(date.getUTCDate() + n);
115
+ return key(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate());
116
+ }
117
+ /** `'2026-08'` — the month a day is in. */
118
+ export function monthOf(day) {
119
+ return day.slice(0, 7);
120
+ }
121
+ /** The first day of a `'YYYY-MM'`. */
122
+ export function firstOfMonth(month) {
123
+ return `${month}-01`;
124
+ }
125
+ /**
126
+ * `n` months on from a `'YYYY-MM'`. Months, unlike days, are not all the same
127
+ * length, so this deliberately works on the month key and never on a day: the
128
+ * "same date next month" question (Jan 31 → Feb 31?) has no good answer and
129
+ * nothing here asks it.
130
+ */
131
+ export function addMonths(month, n) {
132
+ const [y, m] = month.split('-').map(Number);
133
+ const total = y * 12 + (m - 1) + n;
134
+ return `${pad(Math.floor(total / 12), 4)}-${pad((total % 12) + 1, 2)}`;
135
+ }
136
+ /** `day` held inside `[min, max]`; either bound may be null. */
137
+ export function clampDay(day, min, max) {
138
+ if (min && day < min)
139
+ return min;
140
+ if (max && day > max)
141
+ return max;
142
+ return day;
143
+ }
144
+ /**
145
+ * The grid a month is drawn on: **six weeks of seven days**, always, starting
146
+ * on `weekStartsOn` and running through whatever days of the neighbouring
147
+ * months it takes to fill the corners.
148
+ *
149
+ * Six rows even when five would do (and a 28-day February starting on the
150
+ * first day of the week needs only four) because the alternative is a picker
151
+ * whose popup changes height as you page through it, moving the very buttons
152
+ * the pointer is aiming at.
153
+ */
154
+ export function monthGrid(month, weekStartsOn = 1) {
155
+ const first = firstOfMonth(month);
156
+ const lead = (dayParts(first).weekday - weekStartsOn + 7) % 7;
157
+ const start = addDays(first, -lead);
158
+ const weeks = [];
159
+ for (let w = 0; w < 6; w++) {
160
+ const days = [];
161
+ for (let d = 0; d < 7; d++)
162
+ days.push(addDays(start, w * 7 + d));
163
+ weeks.push(days);
164
+ }
165
+ return weeks;
166
+ }
167
+ // Intl formatters are expensive to build and every cell in the grid wants the
168
+ // same three, so they are made once per (locale, shape) and kept.
169
+ const formatters = new Map();
170
+ function formatter(locale, options) {
171
+ const id = `${locale ?? ''}|${JSON.stringify(options)}`;
172
+ let f = formatters.get(id);
173
+ if (!f) {
174
+ // everything here is a UTC-midnight Date, so the formatter has to read it
175
+ // in UTC or a negative offset prints the day before
176
+ f = new Intl.DateTimeFormat(locale, { ...options, timeZone: 'UTC' });
177
+ formatters.set(id, f);
178
+ }
179
+ return f;
180
+ }
181
+ /**
182
+ * Which day the week starts on for a locale: `0` Sunday … `6` Saturday.
183
+ *
184
+ * The runtime knows this — CLDR carries it — but only through
185
+ * `Intl.Locale#getWeekInfo`, which is recent enough that a small-ICU build or
186
+ * an older V8 has neither it nor the `weekInfo` property it was proposed as.
187
+ * So it is feature-detected, and what is left when it is missing is **Monday**:
188
+ * ISO 8601's answer, and the one most of the world uses.
189
+ */
190
+ export function localeWeekStart(locale) {
191
+ try {
192
+ const info = new Intl.Locale(locale ?? 'und');
193
+ // `getWeekInfo()` is the standardised spelling; `weekInfo` is what the
194
+ // proposal shipped as and what older V8 still has.
195
+ const withWeek = info;
196
+ const week = withWeek.getWeekInfo?.() ?? withWeek.weekInfo;
197
+ // CLDR counts 1 Monday … 7 Sunday; JS counts 0 Sunday … 6 Saturday
198
+ if (week?.firstDay)
199
+ return week.firstDay % 7;
200
+ }
201
+ catch {
202
+ // an invalid locale tag: the caller's formatters will complain about it
203
+ // more usefully than a week-start fallback could
204
+ }
205
+ return 1;
206
+ }
207
+ /** `['Mon', 'Tue', …]` in the locale, rotated to start on `weekStartsOn`. */
208
+ export function weekdayLabels(locale, weekStartsOn = 1) {
209
+ const f = formatter(locale, { weekday: 'short' });
210
+ // 2026-08-02 is a Sunday, so `+ weekday` lands on the day we want a name for
211
+ return Array.from({ length: 7 }, (_, i) => f.format(dayDate(addDays('2026-08-02', (weekStartsOn + i) % 7))));
212
+ }
213
+ /** `'August 2026'` in the locale. */
214
+ export function formatMonth(month, locale) {
215
+ return formatter(locale, { month: 'long', year: 'numeric' }).format(dayDate(firstOfMonth(month)));
216
+ }
217
+ /** `'7 Aug 2026'` in the locale — what a picker's trigger shows. */
218
+ export function formatDay(day, locale, options) {
219
+ return formatter(locale, options ?? { dateStyle: 'medium' }).format(dayDate(day));
220
+ }
221
+ /**
222
+ * `'7 – 12 Aug 2026'`: the locale's own way of writing a span, which collapses
223
+ * the parts the two ends share. `formatRange` is ES2021 and universal in the
224
+ * Node versions this package supports, but a small-ICU build can still throw,
225
+ * so a plain "a – b" is kept behind it.
226
+ */
227
+ export function formatDayRange(start, end, locale, options) {
228
+ const f = formatter(locale, options ?? { dateStyle: 'medium' });
229
+ try {
230
+ return f.formatRange(dayDate(start), dayDate(end));
231
+ }
232
+ catch {
233
+ return `${f.format(dayDate(start))} – ${f.format(dayDate(end))}`;
234
+ }
235
+ }
236
+ //# sourceMappingURL=dates.js.map