@k2b/ui 0.50.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/dist/base.css +35 -1
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/CommandList.js +861 -0
  4. package/dist/browser/actions/CommandList.js.map +1 -0
  5. package/dist/browser/actions/CommandMenu.js +237 -0
  6. package/dist/browser/actions/CommandMenu.js.map +1 -0
  7. package/dist/browser/actions/Dropdown.js +43 -10
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/Toolbar.js +8 -2
  10. package/dist/browser/actions/Toolbar.js.map +1 -1
  11. package/dist/browser/actions/command-dock.js +47 -0
  12. package/dist/browser/actions/command-dock.js.map +1 -0
  13. package/dist/browser/actions/command-items.js +84 -0
  14. package/dist/browser/actions/command-items.js.map +1 -0
  15. package/dist/browser/actions/command-messages.js +42 -0
  16. package/dist/browser/actions/command-messages.js.map +1 -0
  17. package/dist/browser/actions/index.js +1 -0
  18. package/dist/browser/actions/index.js.map +1 -1
  19. package/dist/browser/charts/core/area.js +3 -5
  20. package/dist/browser/charts/core/area.js.map +1 -1
  21. package/dist/browser/charts/core/bar-labels.js +5 -0
  22. package/dist/browser/charts/core/bar-labels.js.map +1 -0
  23. package/dist/browser/charts/core/bubble.js +166 -0
  24. package/dist/browser/charts/core/bubble.js.map +1 -0
  25. package/dist/browser/charts/core/calendar.js +1 -1
  26. package/dist/browser/charts/core/calendar.js.map +1 -1
  27. package/dist/browser/charts/core/chart-messages.js +17 -0
  28. package/dist/browser/charts/core/chart-messages.js.map +1 -0
  29. package/dist/browser/charts/core/default-styles.js +83 -0
  30. package/dist/browser/charts/core/default-styles.js.map +1 -0
  31. package/dist/browser/charts/core/funnel-layout.js +79 -0
  32. package/dist/browser/charts/core/funnel-layout.js.map +1 -0
  33. package/dist/browser/charts/core/funnel.js +27 -0
  34. package/dist/browser/charts/core/funnel.js.map +1 -0
  35. package/dist/browser/charts/core/hbar-layout.js +118 -0
  36. package/dist/browser/charts/core/hbar-layout.js.map +1 -0
  37. package/dist/browser/charts/core/hbar.js +39 -0
  38. package/dist/browser/charts/core/hbar.js.map +1 -0
  39. package/dist/browser/charts/core/index.js +12 -2
  40. package/dist/browser/charts/core/index.js.map +1 -1
  41. package/dist/browser/charts/core/map.js +116 -0
  42. package/dist/browser/charts/core/map.js.map +1 -0
  43. package/dist/browser/charts/core/pareto.js +120 -0
  44. package/dist/browser/charts/core/pareto.js.map +1 -0
  45. package/dist/browser/charts/core/radar.js +101 -0
  46. package/dist/browser/charts/core/radar.js.map +1 -0
  47. package/dist/browser/charts/core/registry.js +33 -16
  48. package/dist/browser/charts/core/registry.js.map +1 -1
  49. package/dist/browser/charts/core/render-size.js +15 -0
  50. package/dist/browser/charts/core/render-size.js.map +1 -0
  51. package/dist/browser/charts/core/render.js +39 -10
  52. package/dist/browser/charts/core/render.js.map +1 -1
  53. package/dist/browser/charts/core/snapshot.js +4 -4
  54. package/dist/browser/charts/core/snapshot.js.map +1 -1
  55. package/dist/browser/charts/core/svg-barGauge.js +67 -0
  56. package/dist/browser/charts/core/svg-barGauge.js.map +1 -0
  57. package/dist/browser/charts/core/svg-boxplot.js +127 -0
  58. package/dist/browser/charts/core/svg-boxplot.js.map +1 -0
  59. package/dist/browser/charts/core/svg-common.js +1065 -0
  60. package/dist/browser/charts/core/svg-common.js.map +1 -0
  61. package/dist/browser/charts/core/svg-gauge.js +185 -0
  62. package/dist/browser/charts/core/svg-gauge.js.map +1 -0
  63. package/dist/browser/charts/core/svg-heatmap.js +80 -0
  64. package/dist/browser/charts/core/svg-heatmap.js.map +1 -0
  65. package/dist/browser/charts/core/svg-histogram.js +73 -0
  66. package/dist/browser/charts/core/svg-histogram.js.map +1 -0
  67. package/dist/browser/charts/core/svg-renderers.js +638 -0
  68. package/dist/browser/charts/core/svg-renderers.js.map +1 -0
  69. package/dist/browser/charts/core/svg-scatter.js +114 -0
  70. package/dist/browser/charts/core/svg-scatter.js.map +1 -0
  71. package/dist/browser/charts/core/svg.js +4 -2525
  72. package/dist/browser/charts/core/svg.js.map +1 -1
  73. package/dist/browser/charts/core/treemap.js +138 -0
  74. package/dist/browser/charts/core/treemap.js.map +1 -0
  75. package/dist/browser/charts/core/types.js +0 -2
  76. package/dist/browser/charts/core/types.js.map +1 -1
  77. package/dist/browser/charts/core/waterfall.js +162 -0
  78. package/dist/browser/charts/core/waterfall.js.map +1 -0
  79. package/dist/browser/charts/description.js +2 -0
  80. package/dist/browser/charts/description.js.map +1 -0
  81. package/dist/browser/charts.js.map +1 -1
  82. package/dist/browser/content/Chart.js +14 -628
  83. package/dist/browser/content/Chart.js.map +1 -1
  84. package/dist/browser/content/ChartRoot.js +646 -0
  85. package/dist/browser/content/ChartRoot.js.map +1 -0
  86. package/dist/browser/content/ChartSnapshotView.js +4 -1
  87. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  88. package/dist/browser/content/ChartSparkline.js +24 -0
  89. package/dist/browser/content/ChartSparkline.js.map +1 -0
  90. package/dist/browser/content/DataTable.js +186 -193
  91. package/dist/browser/content/DataTable.js.map +1 -1
  92. package/dist/browser/content/FileView.js +111 -61
  93. package/dist/browser/content/FileView.js.map +1 -1
  94. package/dist/browser/content/Lightbox.js +62 -30
  95. package/dist/browser/content/Lightbox.js.map +1 -1
  96. package/dist/browser/content/MapView.js +30 -28
  97. package/dist/browser/content/MapView.js.map +1 -1
  98. package/dist/browser/content/PdfPreview.js +84 -52
  99. package/dist/browser/content/PdfPreview.js.map +1 -1
  100. package/dist/browser/content/PdfViewer.js +588 -0
  101. package/dist/browser/content/PdfViewer.js.map +1 -0
  102. package/dist/browser/content/ThumbnailStrip.js +174 -0
  103. package/dist/browser/content/ThumbnailStrip.js.map +1 -0
  104. package/dist/browser/content/chart-bar.js +344 -16
  105. package/dist/browser/content/chart-bar.js.map +1 -1
  106. package/dist/browser/content/chart-inspection-core.js +50 -29
  107. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  108. package/dist/browser/content/chart-line-gaps.js +1 -1
  109. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  110. package/dist/browser/content/chart-message-catalog.js +28 -0
  111. package/dist/browser/content/chart-message-catalog.js.map +1 -1
  112. package/dist/browser/content/chart-state-timeline.js +1 -1
  113. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  114. package/dist/browser/content/chart-svg.js +2 -1
  115. package/dist/browser/content/chart-svg.js.map +1 -1
  116. package/dist/browser/content/index.js +2 -0
  117. package/dist/browser/content/index.js.map +1 -1
  118. package/dist/browser/content/pdf-document.js +29 -0
  119. package/dist/browser/content/pdf-document.js.map +1 -0
  120. package/dist/browser/content/pdf-limits.js +31 -0
  121. package/dist/browser/content/pdf-limits.js.map +1 -0
  122. package/dist/browser/content/pdf-messages.js +34 -2
  123. package/dist/browser/content/pdf-messages.js.map +1 -1
  124. package/dist/browser/content/pdf-viewer-engine.js +57 -0
  125. package/dist/browser/content/pdf-viewer-worker.js +28 -0
  126. package/dist/browser/content/thumbnail-strip-messages.js +24 -0
  127. package/dist/browser/content/thumbnail-strip-messages.js.map +1 -0
  128. package/dist/browser/inputs/ChoiceInputs.js +150 -76
  129. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  130. package/dist/browser/inputs/ChoiceSlider.js +75 -58
  131. package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
  132. package/dist/browser/inputs/DatePicker.js +113 -98
  133. package/dist/browser/inputs/DatePicker.js.map +1 -1
  134. package/dist/browser/inputs/PeriodPicker.js +874 -0
  135. package/dist/browser/inputs/PeriodPicker.js.map +1 -0
  136. package/dist/browser/inputs/index.js +5 -1
  137. package/dist/browser/inputs/index.js.map +1 -1
  138. package/dist/browser/inputs/input-messages.js +8 -2
  139. package/dist/browser/inputs/input-messages.js.map +1 -1
  140. package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
  141. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  142. package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js +330 -0
  143. package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
  144. package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
  145. package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
  146. package/dist/browser/inputs/period-picker-messages.js +71 -0
  147. package/dist/browser/inputs/period-picker-messages.js.map +1 -0
  148. package/dist/browser/inputs/period.js +263 -0
  149. package/dist/browser/inputs/period.js.map +1 -0
  150. package/dist/browser/internal/field.js +96 -77
  151. package/dist/browser/internal/field.js.map +1 -1
  152. package/dist/browser/layout/AppWorkspace.js +7 -5
  153. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  154. package/dist/browser/layout/DetailPanel.js +147 -120
  155. package/dist/browser/layout/DetailPanel.js.map +1 -1
  156. package/dist/browser/layout/Discussion.js +101 -108
  157. package/dist/browser/layout/Discussion.js.map +1 -1
  158. package/dist/browser/layout/PanelDialog.js +92 -68
  159. package/dist/browser/layout/PanelDialog.js.map +1 -1
  160. package/dist/browser/layout/index.js.map +1 -1
  161. package/dist/browser/surfaces/DescriptionList.js +5 -2
  162. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  163. package/dist/browser/surfaces/StatCell.js +95 -78
  164. package/dist/browser/surfaces/StatCell.js.map +1 -1
  165. package/dist/browser/surfaces/delta-badge.js +16 -2
  166. package/dist/browser/surfaces/delta-badge.js.map +1 -1
  167. package/dist/browser/surfaces/stat-cell-messages.js +4 -2
  168. package/dist/browser/surfaces/stat-cell-messages.js.map +1 -1
  169. package/dist/browser/widgets/DashboardFrame.js +315 -0
  170. package/dist/browser/widgets/DashboardFrame.js.map +1 -0
  171. package/dist/browser/widgets/index.js +1 -0
  172. package/dist/browser/widgets/index.js.map +1 -1
  173. package/dist/licenses/pdfjs-dist.txt +177 -0
  174. package/dist/ssr/actions/Button.js.map +1 -1
  175. package/dist/ssr/actions/CommandList.js +638 -0
  176. package/dist/ssr/actions/CommandList.js.map +1 -0
  177. package/dist/ssr/actions/CommandMenu.js +197 -0
  178. package/dist/ssr/actions/CommandMenu.js.map +1 -0
  179. package/dist/ssr/actions/Dropdown.js +43 -10
  180. package/dist/ssr/actions/Dropdown.js.map +1 -1
  181. package/dist/ssr/actions/Toolbar.js +8 -2
  182. package/dist/ssr/actions/Toolbar.js.map +1 -1
  183. package/dist/ssr/actions/command-dock.js +47 -0
  184. package/dist/ssr/actions/command-dock.js.map +1 -0
  185. package/dist/ssr/actions/command-items.js +84 -0
  186. package/dist/ssr/actions/command-items.js.map +1 -0
  187. package/dist/ssr/actions/command-messages.js +42 -0
  188. package/dist/ssr/actions/command-messages.js.map +1 -0
  189. package/dist/ssr/actions/index.js +1 -0
  190. package/dist/ssr/actions/index.js.map +1 -1
  191. package/dist/ssr/charts/core/area.js +3 -5
  192. package/dist/ssr/charts/core/area.js.map +1 -1
  193. package/dist/ssr/charts/core/bar-labels.js +5 -0
  194. package/dist/ssr/charts/core/bar-labels.js.map +1 -0
  195. package/dist/ssr/charts/core/bubble.js +166 -0
  196. package/dist/ssr/charts/core/bubble.js.map +1 -0
  197. package/dist/ssr/charts/core/calendar.js +1 -1
  198. package/dist/ssr/charts/core/calendar.js.map +1 -1
  199. package/dist/ssr/charts/core/chart-messages.js +17 -0
  200. package/dist/ssr/charts/core/chart-messages.js.map +1 -0
  201. package/dist/ssr/charts/core/default-styles.js +83 -0
  202. package/dist/ssr/charts/core/default-styles.js.map +1 -0
  203. package/dist/ssr/charts/core/funnel-layout.js +79 -0
  204. package/dist/ssr/charts/core/funnel-layout.js.map +1 -0
  205. package/dist/ssr/charts/core/funnel.js +27 -0
  206. package/dist/ssr/charts/core/funnel.js.map +1 -0
  207. package/dist/ssr/charts/core/hbar-layout.js +118 -0
  208. package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
  209. package/dist/ssr/charts/core/hbar.js +39 -0
  210. package/dist/ssr/charts/core/hbar.js.map +1 -0
  211. package/dist/ssr/charts/core/index.js +12 -2
  212. package/dist/ssr/charts/core/index.js.map +1 -1
  213. package/dist/ssr/charts/core/map.js +116 -0
  214. package/dist/ssr/charts/core/map.js.map +1 -0
  215. package/dist/ssr/charts/core/pareto.js +120 -0
  216. package/dist/ssr/charts/core/pareto.js.map +1 -0
  217. package/dist/ssr/charts/core/radar.js +101 -0
  218. package/dist/ssr/charts/core/radar.js.map +1 -0
  219. package/dist/ssr/charts/core/registry.js +33 -16
  220. package/dist/ssr/charts/core/registry.js.map +1 -1
  221. package/dist/ssr/charts/core/render-size.js +15 -0
  222. package/dist/ssr/charts/core/render-size.js.map +1 -0
  223. package/dist/ssr/charts/core/render.js +39 -10
  224. package/dist/ssr/charts/core/render.js.map +1 -1
  225. package/dist/ssr/charts/core/snapshot.js +4 -4
  226. package/dist/ssr/charts/core/snapshot.js.map +1 -1
  227. package/dist/ssr/charts/core/svg-barGauge.js +67 -0
  228. package/dist/ssr/charts/core/svg-barGauge.js.map +1 -0
  229. package/dist/ssr/charts/core/svg-boxplot.js +127 -0
  230. package/dist/ssr/charts/core/svg-boxplot.js.map +1 -0
  231. package/dist/ssr/charts/core/svg-common.js +1065 -0
  232. package/dist/ssr/charts/core/svg-common.js.map +1 -0
  233. package/dist/ssr/charts/core/svg-gauge.js +185 -0
  234. package/dist/ssr/charts/core/svg-gauge.js.map +1 -0
  235. package/dist/ssr/charts/core/svg-heatmap.js +80 -0
  236. package/dist/ssr/charts/core/svg-heatmap.js.map +1 -0
  237. package/dist/ssr/charts/core/svg-histogram.js +73 -0
  238. package/dist/ssr/charts/core/svg-histogram.js.map +1 -0
  239. package/dist/ssr/charts/core/svg-renderers.js +638 -0
  240. package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
  241. package/dist/ssr/charts/core/svg-scatter.js +114 -0
  242. package/dist/ssr/charts/core/svg-scatter.js.map +1 -0
  243. package/dist/ssr/charts/core/svg.js +4 -2525
  244. package/dist/ssr/charts/core/svg.js.map +1 -1
  245. package/dist/ssr/charts/core/treemap.js +138 -0
  246. package/dist/ssr/charts/core/treemap.js.map +1 -0
  247. package/dist/ssr/charts/core/types.js +0 -2
  248. package/dist/ssr/charts/core/types.js.map +1 -1
  249. package/dist/ssr/charts/core/waterfall.js +162 -0
  250. package/dist/ssr/charts/core/waterfall.js.map +1 -0
  251. package/dist/ssr/charts/description.js +2 -0
  252. package/dist/ssr/charts/description.js.map +1 -0
  253. package/dist/ssr/charts.js.map +1 -1
  254. package/dist/ssr/content/Chart.js +14 -471
  255. package/dist/ssr/content/Chart.js.map +1 -1
  256. package/dist/ssr/content/ChartRoot.js +489 -0
  257. package/dist/ssr/content/ChartRoot.js.map +1 -0
  258. package/dist/ssr/content/ChartSnapshotView.js +1 -0
  259. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  260. package/dist/ssr/content/ChartSparkline.js +24 -0
  261. package/dist/ssr/content/ChartSparkline.js.map +1 -0
  262. package/dist/ssr/content/DataTable.js +12 -16
  263. package/dist/ssr/content/DataTable.js.map +1 -1
  264. package/dist/ssr/content/FileView.js +56 -7
  265. package/dist/ssr/content/FileView.js.map +1 -1
  266. package/dist/ssr/content/Lightbox.js +39 -10
  267. package/dist/ssr/content/Lightbox.js.map +1 -1
  268. package/dist/ssr/content/MapView.js +9 -9
  269. package/dist/ssr/content/MapView.js.map +1 -1
  270. package/dist/ssr/content/PdfPreview.js +49 -20
  271. package/dist/ssr/content/PdfPreview.js.map +1 -1
  272. package/dist/ssr/content/PdfViewer.js +484 -0
  273. package/dist/ssr/content/PdfViewer.js.map +1 -0
  274. package/dist/ssr/content/ThumbnailStrip.js +103 -0
  275. package/dist/ssr/content/ThumbnailStrip.js.map +1 -0
  276. package/dist/ssr/content/chart-bar.js +344 -16
  277. package/dist/ssr/content/chart-bar.js.map +1 -1
  278. package/dist/ssr/content/chart-inspection-core.js +50 -29
  279. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  280. package/dist/ssr/content/chart-line-gaps.js +1 -1
  281. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  282. package/dist/ssr/content/chart-message-catalog.js +28 -0
  283. package/dist/ssr/content/chart-message-catalog.js.map +1 -1
  284. package/dist/ssr/content/chart-state-timeline.js +1 -1
  285. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  286. package/dist/ssr/content/chart-svg.js +2 -1
  287. package/dist/ssr/content/chart-svg.js.map +1 -1
  288. package/dist/ssr/content/index.js +2 -0
  289. package/dist/ssr/content/index.js.map +1 -1
  290. package/dist/ssr/content/pdf-document.js +29 -0
  291. package/dist/ssr/content/pdf-document.js.map +1 -0
  292. package/dist/ssr/content/pdf-limits.js +31 -0
  293. package/dist/ssr/content/pdf-limits.js.map +1 -0
  294. package/dist/ssr/content/pdf-messages.js +34 -2
  295. package/dist/ssr/content/pdf-messages.js.map +1 -1
  296. package/dist/ssr/content/thumbnail-strip-messages.js +24 -0
  297. package/dist/ssr/content/thumbnail-strip-messages.js.map +1 -0
  298. package/dist/ssr/inputs/ChoiceInputs.js +69 -17
  299. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  300. package/dist/ssr/inputs/ChoiceSlider.js +17 -12
  301. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
  302. package/dist/ssr/inputs/DatePicker.js +14 -9
  303. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  304. package/dist/ssr/inputs/PeriodPicker.js +598 -0
  305. package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
  306. package/dist/ssr/inputs/index.js +5 -1
  307. package/dist/ssr/inputs/index.js.map +1 -1
  308. package/dist/ssr/inputs/input-messages.js +8 -2
  309. package/dist/ssr/inputs/input-messages.js.map +1 -1
  310. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  311. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  312. package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js +293 -0
  313. package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
  314. package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
  315. package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
  316. package/dist/ssr/inputs/period-picker-messages.js +71 -0
  317. package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
  318. package/dist/ssr/inputs/period.js +263 -0
  319. package/dist/ssr/inputs/period.js.map +1 -0
  320. package/dist/ssr/internal/field.js +36 -24
  321. package/dist/ssr/internal/field.js.map +1 -1
  322. package/dist/ssr/layout/AppWorkspace.js +5 -1
  323. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  324. package/dist/ssr/layout/DetailPanel.js +27 -4
  325. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  326. package/dist/ssr/layout/Discussion.js +16 -2
  327. package/dist/ssr/layout/Discussion.js.map +1 -1
  328. package/dist/ssr/layout/PanelDialog.js +40 -26
  329. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  330. package/dist/ssr/layout/index.js.map +1 -1
  331. package/dist/ssr/surfaces/DescriptionList.js +1 -1
  332. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  333. package/dist/ssr/surfaces/StatCell.js +31 -21
  334. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  335. package/dist/ssr/surfaces/delta-badge.js +16 -2
  336. package/dist/ssr/surfaces/delta-badge.js.map +1 -1
  337. package/dist/ssr/surfaces/stat-cell-messages.js +4 -2
  338. package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -1
  339. package/dist/ssr/widgets/DashboardFrame.js +195 -0
  340. package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
  341. package/dist/ssr/widgets/index.js +1 -0
  342. package/dist/ssr/widgets/index.js.map +1 -1
  343. package/dist/styles.css +1 -1
  344. package/dist/types/actions/Button.d.ts +1 -1
  345. package/dist/types/actions/CommandList.d.ts +120 -0
  346. package/dist/types/actions/CommandMenu.d.ts +39 -0
  347. package/dist/types/actions/Dropdown.d.ts +17 -0
  348. package/dist/types/actions/Toolbar.d.ts +2 -0
  349. package/dist/types/actions/command-dock.d.ts +8 -0
  350. package/dist/types/actions/command-items.d.ts +134 -0
  351. package/dist/types/actions/command-messages.d.ts +19 -0
  352. package/dist/types/actions/index.d.ts +3 -0
  353. package/dist/types/charts/core/bar-labels.d.ts +1 -0
  354. package/dist/types/charts/core/bubble.d.ts +66 -0
  355. package/dist/types/charts/core/calendar.d.ts +1 -1
  356. package/dist/types/charts/core/chart-messages.d.ts +5 -0
  357. package/dist/types/charts/core/default-styles.d.ts +1 -0
  358. package/dist/types/charts/core/funnel-layout.d.ts +43 -0
  359. package/dist/types/charts/core/funnel.d.ts +13 -0
  360. package/dist/types/charts/core/hbar-layout.d.ts +74 -0
  361. package/dist/types/charts/core/hbar.d.ts +13 -0
  362. package/dist/types/charts/core/index.d.ts +12 -2
  363. package/dist/types/charts/core/map.d.ts +3 -0
  364. package/dist/types/charts/core/pareto.d.ts +40 -0
  365. package/dist/types/charts/core/radar.d.ts +47 -0
  366. package/dist/types/charts/core/registry.d.ts +27 -11
  367. package/dist/types/charts/core/render-size.d.ts +7 -0
  368. package/dist/types/charts/core/render.d.ts +1 -4
  369. package/dist/types/charts/core/snapshot.d.ts +2 -2
  370. package/dist/types/charts/core/svg-barGauge.d.ts +3 -0
  371. package/dist/types/charts/core/svg-boxplot.d.ts +18 -0
  372. package/dist/types/charts/core/svg-common.d.ts +612 -0
  373. package/dist/types/charts/core/svg-gauge.d.ts +6 -0
  374. package/dist/types/charts/core/svg-heatmap.d.ts +6 -0
  375. package/dist/types/charts/core/svg-histogram.d.ts +16 -0
  376. package/dist/types/charts/core/svg-renderers.d.ts +118 -0
  377. package/dist/types/charts/core/svg-scatter.d.ts +23 -0
  378. package/dist/types/charts/core/svg.d.ts +4 -698
  379. package/dist/types/charts/core/treemap.d.ts +45 -0
  380. package/dist/types/charts/core/types.d.ts +1 -12
  381. package/dist/types/charts/core/waterfall.d.ts +68 -0
  382. package/dist/types/charts/description.d.ts +289 -0
  383. package/dist/types/charts.d.ts +1 -0
  384. package/dist/types/content/Chart.d.ts +3 -91
  385. package/dist/types/content/ChartRoot.d.ts +92 -0
  386. package/dist/types/content/ChartSparkline.d.ts +5 -0
  387. package/dist/types/content/Lightbox.d.ts +2 -0
  388. package/dist/types/content/PdfViewer.d.ts +32 -0
  389. package/dist/types/content/ThumbnailStrip.d.ts +29 -0
  390. package/dist/types/content/chart-bar.d.ts +131 -2
  391. package/dist/types/content/chart-inspection-core.d.ts +7 -0
  392. package/dist/types/content/chart-inspection.d.ts +1 -0
  393. package/dist/types/content/chart-message-catalog.d.ts +8 -0
  394. package/dist/types/content/index.d.ts +3 -0
  395. package/dist/types/content/pdf-document.d.ts +5 -0
  396. package/dist/types/content/pdf-engine.d.ts +9 -0
  397. package/dist/types/content/pdf-limits.d.ts +43 -0
  398. package/dist/types/content/pdf-messages.d.ts +16 -0
  399. package/dist/types/content/thumbnail-strip-messages.d.ts +10 -0
  400. package/dist/types/inputs/ChoiceInputs.d.ts +6 -0
  401. package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
  402. package/dist/types/inputs/DatePicker.d.ts +22 -0
  403. package/dist/types/inputs/PeriodPicker.d.ts +24 -0
  404. package/dist/types/inputs/index.d.ts +10 -2
  405. package/dist/types/inputs/input-messages.d.ts +3 -0
  406. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
  407. package/dist/types/inputs/markdown/MarkdownSelectionToolbar.d.ts +19 -0
  408. package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
  409. package/dist/types/inputs/period-picker-messages.d.ts +34 -0
  410. package/dist/types/inputs/period.d.ts +134 -0
  411. package/dist/types/internal/field.d.ts +2 -0
  412. package/dist/types/layout/DetailPanel.d.ts +12 -0
  413. package/dist/types/layout/PanelDialog.d.ts +5 -0
  414. package/dist/types/layout/index.d.ts +1 -1
  415. package/dist/types/surfaces/DescriptionList.d.ts +5 -0
  416. package/dist/types/surfaces/StatCell.d.ts +6 -1
  417. package/dist/types/surfaces/stat-cell-messages.d.ts +1 -0
  418. package/dist/types/widgets/DashboardFrame.d.ts +61 -0
  419. package/dist/types/widgets/index.d.ts +1 -0
  420. package/package.json +3 -2
@@ -0,0 +1,598 @@
1
+ import { ssr as _$ssr } from "solid-js/web";
2
+ import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
3
+ import { escape as _$escape } from "solid-js/web";
4
+ import { createComponent as _$createComponent } from "solid-js/web";
5
+ import { memo as _$memo } from "solid-js/web";
6
+ var _tmpl$ = ["<button", " type=\"button\" class=\"k2b-period-picker__trigger\" aria-haspopup=\"dialog\"", "", "><i class=\"ti ti-calendar\" aria-hidden=\"true\"></i><span class=\"k2b-period-picker__value\"", "><span", ">", "</span>", "</span><i", " aria-hidden=\"true\"></i></button>"],
7
+ _tmpl$2 = ["<div", " class=\"k2b-period-picker__popover\" popover=\"auto\" role=\"dialog\"", ">", "</div>"],
8
+ _tmpl$3 = ["<span class=\"k2b-period-picker__detail\"> · ", "</span>"],
9
+ _tmpl$4 = ["<span aria-hidden=\"true\">", "</span>"],
10
+ _tmpl$5 = ["<button type=\"button\" role=\"option\" class=\"k2b-dropdown__item k2b-period-picker__option k2b-period-picker__custom\"", "><span class=\"k2b-dropdown__copy\"><span>", "</span></span><span class=\"k2b-period-picker__hint\">", "</span><i class=\"ti ti-chevron-right k2b-dropdown__check\" aria-hidden=\"true\"></i></button>"],
11
+ _tmpl$6 = ["<div class=\"k2b-period-picker__list\" role=\"listbox\"", ">", "", "</div>"],
12
+ _tmpl$7 = ["<div class=\"k2b-period-picker__panel\"", ">", "", "</div>"],
13
+ _tmpl$8 = ["<button type=\"button\" role=\"option\" class=\"k2b-dropdown__item k2b-period-picker__option\"", "><span class=\"k2b-dropdown__copy\"><span>", "</span></span><span class=\"k2b-period-picker__hint\">", "</span><i class=\"ti ti-check k2b-dropdown__check\" aria-hidden=\"true\"", "></i></button>"],
14
+ _tmpl$9 = ["<div class=\"k2b-field k2b-period-picker__field\"", "><label class=\"k2b-field__label\"", ">", "</label><div class=\"k2b-input-shell\"><input", " class=\"k2b-input\" type=\"text\" inputmode=\"numeric\" autocomplete=\"off\" spellcheck=\"false\"", "></div><p class=\"k2b-period-picker__error\" id=\"", "\">", "</p></div>"],
15
+ _tmpl$0 = ["<button type=\"button\" class=\"k2b-period-picker__back\"><i class=\"ti ti-chevron-left\" aria-hidden=\"true\"></i>", "</button>"],
16
+ _tmpl$1 = "<i class=\"ti ti-hourglass-low\" aria-hidden=\"true\"></i>",
17
+ _tmpl$10 = ["<div class=\"k2b-period-picker__editor\" role=\"group\"", ">", "<div class=\"k2b-period-picker__fields\">", "", "</div><div class=\"k2b-period-picker__months\">", "", "</div><div class=\"k2b-period-picker__actions\"><span class=\"k2b-date-duration\" aria-live=\"polite\">", "", "</span><button type=\"button\" class=\"k2b-date-apply\"", ">", "</button></div></div>"];
18
+ import { dates } from "@k2b/stdlib";
19
+ import { batch, createComputed, createEffect, createMemo, createSignal, For, on, onCleanup, Show } from "solid-js";
20
+ import { prefersMenuSheet } from "../actions/phone-sheet";
21
+ import { createFieldMeta, Field, fieldDescribedBy } from "../internal/field";
22
+ import { returnFocus, ringOnReturn } from "../internal/focus-return";
23
+ import { useDateConfigLocale } from "../intl/locale";
24
+ import { useUiMessages } from "../intl/messages";
25
+ import { DatePickerPanel } from "./DatePicker";
26
+ import { dateInputPattern, formatDateInput, parseDateInput } from "./date-input";
27
+ import { resolveDateInputMessages } from "./date-input-messages";
28
+ import { errorText } from "./date-input-status";
29
+ import { parseDateValue, pickRangeDay, previewRange, rangeAnchor } from "./date-picker";
30
+ import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
31
+ import { formatPeriodDays, formatPeriodRange, periodContext, periodDayCount, widePeriodRangeSample } from "./period";
32
+ import { builtInPresetLabel, usePeriodPickerMessages } from "./period-picker-messages";
33
+ /** Two months side by side need room for the list and both calendars. */
34
+ const TWO_MONTHS_QUERY = "(min-width: 56rem)";
35
+ const presetLabel = (preset, t) => preset.label ?? builtInPresetLabel(t, preset.key) ?? preset.key;
36
+
37
+ /** Places the popover under (or over) the trigger; it grows toward the side with room, right-aligned near the right edge. */
38
+ const placePeriodPopover = (trigger, popover) => {
39
+ const margin = 8;
40
+ const gap = 4;
41
+ const rect = trigger.getBoundingClientRect();
42
+ const box = popover.getBoundingClientRect();
43
+ const width = Math.min(box.width, window.innerWidth - margin * 2);
44
+ const fromLeft = rect.left;
45
+ const fromRight = rect.right - width;
46
+ const left = fromLeft + width <= window.innerWidth - margin ? fromLeft : Math.max(margin, fromRight);
47
+ const roomBelow = window.innerHeight - rect.bottom - gap - margin;
48
+ const roomAbove = rect.top - gap - margin;
49
+ const above = box.height > roomBelow && roomAbove > roomBelow;
50
+ const top = above ? Math.max(margin, rect.top - box.height - gap) : Math.min(rect.bottom + gap, window.innerHeight - box.height - margin);
51
+ popover.style.left = `${Math.max(margin, Math.min(left, window.innerWidth - width - margin))}px`;
52
+ popover.style.top = `${Math.max(margin, top)}px`;
53
+ };
54
+ const popoverIsOpen = popover => {
55
+ try {
56
+ return Boolean(popover?.matches(":popover-open"));
57
+ } catch {
58
+ return false;
59
+ }
60
+ };
61
+
62
+ /**
63
+ * PeriodPicker — one control for the period an evaluation or dashboard shows: presets such as "This month" plus a
64
+ * custom range, edited in the same popover (a bottom sheet on phones). The trigger shows the preset with its days or
65
+ * the custom days with their count, and keeps the width of its longest text so nothing beside it moves.
66
+ */
67
+ export function PeriodPicker(props) {
68
+ const t = usePeriodPickerMessages();
69
+ const meta = createFieldMeta(props.id);
70
+ const dateConfig = useDateConfigLocale(() => props.dateConfig);
71
+ const locale = () => dateConfig().locale ?? "en";
72
+ const value = () => resolveMaybeAccessor(props.value);
73
+ const custom = () => props.custom ?? true;
74
+ const disabled = createMemo(() => Boolean(props.disabled || props.loading));
75
+ // Read again on every opening, so a picker left open past midnight shows the new day's presets next time.
76
+ const [clockTick, setClockTick] = createSignal(0);
77
+ const context = createMemo(() => {
78
+ clockTick();
79
+ return periodContext({
80
+ now: props.now,
81
+ timeZone: dateConfig().timeZone,
82
+ weekStartsOn: dateConfig().weekStartsOn ?? dateConfig().firstDayOfWeek
83
+ });
84
+ });
85
+ const since = date => t().since({
86
+ date
87
+ });
88
+ const presetText = preset => ({
89
+ label: presetLabel(preset, t()),
90
+ detail: formatPeriodDays(preset.resolve(context()), context().today, locale(), since)
91
+ });
92
+ const rangeText = range => ({
93
+ label: formatPeriodRange(range, locale()),
94
+ detail: t().days({
95
+ count: periodDayCount(range)
96
+ })
97
+ });
98
+ const selectedPreset = () => {
99
+ const current = value();
100
+ return current && "preset" in current ? props.presets.find(preset => preset.key === current.preset) : undefined;
101
+ };
102
+ const current = createMemo(() => {
103
+ const selected = value();
104
+ if (!selected) return undefined;
105
+ if ("preset" in selected) {
106
+ const preset = selectedPreset();
107
+ return preset ? presetText(preset) : undefined;
108
+ }
109
+ return rangeText(selected);
110
+ });
111
+ const joined = text => text.detail ? `${text.label} · ${text.detail}` : text.label;
112
+ // Every text the trigger can show shares one grid cell, so it keeps the widest one's width.
113
+ const widths = createMemo(() => [...props.presets.map(preset => joined(presetText(preset))), ...(custom() ? [joined(rangeText(widePeriodRangeSample(context().today)))] : []), t().choosePeriod]);
114
+ const [open, setOpen] = createSignal(false);
115
+ const [view, setView] = createSignal("list");
116
+ const [sheetOpen, setSheetOpen] = createSignal(false);
117
+ let trigger;
118
+ let popover;
119
+ let openedByKeyboard = false;
120
+ const popoverId = `${meta.controlId}-period`;
121
+ const sheetId = `${meta.controlId}-sheet`;
122
+ const valueId = `${meta.controlId}-value`;
123
+
124
+ // A trigger disabled while a change saves would drop keyboard focus on the page; it comes back once enabled.
125
+ let refocus = false;
126
+ createComputed(on(disabled, isDisabled => {
127
+ if (isDisabled) refocus = trigger !== undefined && document.activeElement === trigger;
128
+ }, {
129
+ defer: true
130
+ }));
131
+ createEffect(on(disabled, isDisabled => {
132
+ if (isDisabled || !refocus) return;
133
+ refocus = false;
134
+ const active = document.activeElement;
135
+ if (trigger?.isConnected && (active === null || active === document.body)) trigger.focus();
136
+ }, {
137
+ defer: true
138
+ }));
139
+ const place = () => {
140
+ if (trigger && popover && open()) placePeriodPopover(trigger, popover);
141
+ };
142
+ createEffect(() => {
143
+ if (!open()) return;
144
+ view();
145
+ queueMicrotask(place);
146
+ window.addEventListener("resize", place);
147
+ window.addEventListener("scroll", place, true);
148
+ onCleanup(() => {
149
+ window.removeEventListener("resize", place);
150
+ window.removeEventListener("scroll", place, true);
151
+ });
152
+ });
153
+ const close = () => {
154
+ // Before hiding, so the popover does not return focus on its own.
155
+ if (popover?.contains(document.activeElement)) returnFocus(trigger, openedByKeyboard);
156
+ if (popoverIsOpen(popover)) popover?.hidePopover();
157
+ setOpen(false);
158
+ };
159
+ onCleanup(() => {
160
+ if (popoverIsOpen(popover)) popover?.hidePopover();
161
+ });
162
+ const pick = next => {
163
+ close();
164
+ if (sheetOpen()) return;
165
+ commitFieldValue(props, next);
166
+ };
167
+ const initialView = () => {
168
+ const selected = value();
169
+ return custom() && selected && !("preset" in selected) ? "custom" : "list";
170
+ };
171
+ const openSheet = async () => {
172
+ setSheetOpen(true);
173
+ const {
174
+ openDateSheet
175
+ } = await import("./date-sheet");
176
+ const result = await openDateSheet({
177
+ title: typeof props.label === "string" ? props.label : props["aria-label"] ?? t().period,
178
+ subtitle: current() ? joined(current()) : t().choosePeriod,
179
+ ariaLabel: typeof props.label === "string" ? props.label : props["aria-label"] ?? t().period,
180
+ id: sheetId,
181
+ locale: locale(),
182
+ content: closeSheet => _$createComponent(PeriodPanel, {
183
+ sheet: true,
184
+ get presets() {
185
+ return props.presets;
186
+ },
187
+ get custom() {
188
+ return custom();
189
+ },
190
+ value: value,
191
+ get initialView() {
192
+ return initialView();
193
+ },
194
+ context: context,
195
+ dateConfig: dateConfig,
196
+ presetText: presetText,
197
+ rangeText: rangeText,
198
+ get label() {
199
+ return props["aria-label"] ?? t().period;
200
+ },
201
+ onPick: closeSheet
202
+ })
203
+ });
204
+ setSheetOpen(false);
205
+ if (result) commitFieldValue(props, result);
206
+ trigger?.focus({
207
+ preventScroll: true
208
+ });
209
+ };
210
+ const show = () => {
211
+ if (disabled() || !popover) return;
212
+ setClockTick(tick => tick + 1);
213
+ openedByKeyboard = ringOnReturn(trigger);
214
+ if (prefersMenuSheet()) return void openSheet();
215
+ setView(initialView());
216
+ popover.showPopover();
217
+ setOpen(true);
218
+ queueMicrotask(() => {
219
+ place();
220
+ popover?.querySelector('[role="option"][tabindex="0"]')?.focus();
221
+ });
222
+ };
223
+ const name = () => props.label ? undefined : `${props["aria-label"] ?? t().period}: ${current() ? joined(current()) : t().choosePeriod}`;
224
+ return _$createComponent(Field, {
225
+ get ["class"]() {
226
+ return `k2b-period-picker ${props.class ?? ""}`;
227
+ },
228
+ get label() {
229
+ return props.label;
230
+ },
231
+ get description() {
232
+ return props.description;
233
+ },
234
+ get error() {
235
+ return props.error;
236
+ },
237
+ meta: meta,
238
+ get required() {
239
+ return props.required;
240
+ },
241
+ get disabled() {
242
+ return disabled();
243
+ },
244
+ get children() {
245
+ return [_$ssr(_tmpl$, _$ssrAttribute("id", _$escape(meta.controlId, true), false), _$ssrAttribute("aria-expanded", _$escape(open() || sheetOpen(), true), false) + _$ssrAttribute("aria-controls", sheetOpen() ? _$escape(sheetId, true) : _$escape(popoverId, true), false) + _$ssrAttribute("aria-label", _$escape(name(), true), false) + _$ssrAttribute("aria-labelledby", props.label ? `${_$escape(meta.labelId, true)} ${_$escape(valueId, true)}` : _$escape(undefined, true), false) + _$ssrAttribute("aria-describedby", _$escape(fieldDescribedBy(meta, props), true), false) + _$ssrAttribute("aria-invalid", resolveMaybeAccessor(props.error) ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-busy", props.loading ? "true" : _$escape(undefined, true), false), _$ssrAttribute("disabled", disabled(), true), _$ssrAttribute("data-placeholder", current() ? _$escape(undefined, true) : "true", false), _$ssrAttribute("id", _$escape(valueId, true), false), _$escape(_$createComponent(Show, {
246
+ get when() {
247
+ return current();
248
+ },
249
+ get fallback() {
250
+ return t().choosePeriod;
251
+ },
252
+ children: text => [text().label, _$createComponent(Show, {
253
+ get when() {
254
+ return text().detail;
255
+ },
256
+ get children() {
257
+ return _$ssr(_tmpl$3, _$escape(text().detail));
258
+ }
259
+ })]
260
+ })), _$escape(_$createComponent(For, {
261
+ get each() {
262
+ return widths();
263
+ },
264
+ children: text => _$ssr(_tmpl$4, _$escape(text))
265
+ })), _$ssrAttribute("class", props.loading ? "ti ti-loader-2 k2b-spin" : "ti ti-chevron-down", false)), _$ssr(_tmpl$2, _$ssrAttribute("id", _$escape(popoverId, true), false), _$ssrAttribute("aria-label", _$escape(props["aria-label"] ?? (typeof props.label === "string" ? props.label : t().period), true), false), _$escape(_$createComponent(Show, {
266
+ get when() {
267
+ return open();
268
+ },
269
+ get children() {
270
+ return _$createComponent(PeriodPanel, {
271
+ get presets() {
272
+ return props.presets;
273
+ },
274
+ get custom() {
275
+ return custom();
276
+ },
277
+ value: value,
278
+ get initialView() {
279
+ return view();
280
+ },
281
+ onViewChange: setView,
282
+ context: context,
283
+ dateConfig: dateConfig,
284
+ presetText: presetText,
285
+ rangeText: rangeText,
286
+ get label() {
287
+ return props["aria-label"] ?? t().period;
288
+ },
289
+ onPick: pick
290
+ });
291
+ }
292
+ })))];
293
+ }
294
+ });
295
+ }
296
+ function PeriodPanel(props) {
297
+ const t = usePeriodPickerMessages();
298
+ const [view, setViewSignal] = createSignal(props.initialView);
299
+ const setView = next => {
300
+ setViewSignal(next);
301
+ props.onViewChange?.(next);
302
+ };
303
+ const selected = () => props.value();
304
+ const explicit = () => {
305
+ const current = selected();
306
+ return current && !("preset" in current) ? current : undefined;
307
+ };
308
+ const isSelected = preset => {
309
+ const current = selected();
310
+ return Boolean(current && "preset" in current && current.preset === preset.key);
311
+ };
312
+ const optionCount = () => props.presets.length + (props.custom ? 1 : 0);
313
+ const initialActive = () => {
314
+ const index = props.presets.findIndex(isSelected);
315
+ if (index >= 0) return index;
316
+ return explicit() && props.custom ? props.presets.length : 0;
317
+ };
318
+ const [active, setActive] = createSignal(initialActive());
319
+ let list;
320
+ const focusOption = index => {
321
+ setActive(index);
322
+ queueMicrotask(() => list?.querySelector(`[data-option-index="${index}"]`)?.focus());
323
+ };
324
+ const onListKeyDown = event => {
325
+ const count = optionCount();
326
+ const moves = {
327
+ ArrowDown: (active() + 1) % count,
328
+ ArrowUp: (active() - 1 + count) % count,
329
+ Home: 0,
330
+ End: count - 1
331
+ };
332
+ const next = moves[event.key];
333
+ if (next === undefined) return;
334
+ event.preventDefault();
335
+ focusOption(next);
336
+ };
337
+ let panel;
338
+ const openCustom = () => {
339
+ setActive(props.presets.length);
340
+ setView("custom");
341
+ // In the sheet the list goes away with the focused option; focus continues on the calendar's day.
342
+ if (props.sheet) queueMicrotask(() => panel?.querySelector('[data-date-focus="true"]')?.focus());
343
+ };
344
+ return _$ssr(_tmpl$7, _$ssrAttribute("data-view", _$escape(view(), true), false) + _$ssrAttribute("data-sheet", props.sheet ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
345
+ get when() {
346
+ return !props.sheet || view() === "list";
347
+ },
348
+ get children() {
349
+ return _$ssr(_tmpl$6, _$ssrAttribute("aria-label", _$escape(props.label, true), false), _$escape(_$createComponent(For, {
350
+ get each() {
351
+ return props.presets;
352
+ },
353
+ children: (preset, index) => {
354
+ const text = () => props.presetText(preset);
355
+ return _$ssr(_tmpl$8, _$ssrAttribute("data-option-index", _$escape(index(), true), false) + _$ssrAttribute("aria-selected", isSelected(preset) && _$escape(view(), true) === "list", false) + _$ssrAttribute("tabindex", active() === index() ? 0 : -1, false), _$escape(text().label), _$escape(text().detail), _$ssrAttribute("data-hidden", isSelected(preset) && view() === "list" ? _$escape(undefined, true) : "true", false));
356
+ }
357
+ })), _$escape(_$createComponent(Show, {
358
+ get when() {
359
+ return props.custom;
360
+ },
361
+ get children() {
362
+ return _$ssr(_tmpl$5, _$ssrAttribute("data-option-index", _$escape(props.presets.length, true), false) + _$ssrAttribute("aria-selected", _$escape(view() === "custom" || Boolean(explicit()), true), false) + _$ssrAttribute("tabindex", active() === props.presets.length ? 0 : -1, false), _$escape(t().custom), explicit() ? _$escape(props.rangeText(explicit()).label) : "");
363
+ }
364
+ })));
365
+ }
366
+ })), _$escape(_$createComponent(Show, {
367
+ get when() {
368
+ return view() === "custom";
369
+ },
370
+ get children() {
371
+ return _$createComponent(RangeEditor, {
372
+ get initial() {
373
+ const current = explicit();
374
+ if (current) return current;
375
+ const preset = props.presets.find(isSelected);
376
+ const range = preset?.resolve(props.context());
377
+ return range?.start && range.end ? {
378
+ start: range.start,
379
+ end: range.end
380
+ } : null;
381
+ },
382
+ get today() {
383
+ return props.context().today;
384
+ },
385
+ get dateConfig() {
386
+ return props.dateConfig;
387
+ },
388
+ get rangeText() {
389
+ return props.rangeText;
390
+ },
391
+ get sheet() {
392
+ return props.sheet;
393
+ },
394
+ onBack: () => {
395
+ setView("list");
396
+ focusOption(props.presets.length);
397
+ },
398
+ onApply: range => props.onPick(range)
399
+ });
400
+ }
401
+ })));
402
+ }
403
+ function RangeEditor(props) {
404
+ const t = usePeriodPickerMessages();
405
+ const ui = useUiMessages();
406
+ const locale = () => props.dateConfig().locale ?? "en";
407
+ const inputT = () => resolveDateInputMessages(locale());
408
+ const config = () => ({
409
+ ...props.dateConfig(),
410
+ weekStartsOn: props.dateConfig().weekStartsOn ?? props.dateConfig().firstDayOfWeek ?? 1
411
+ });
412
+ const [draft, setDraft] = createSignal({
413
+ start: props.initial?.start ?? null,
414
+ end: props.initial?.end ?? null
415
+ });
416
+ const [anchor, setAnchor] = createSignal(null);
417
+ const [preview, setPreview] = createSignal(null);
418
+ const [startText, setStartText] = createSignal(props.initial ? formatDateInput(props.initial.start, locale()) : "");
419
+ const [endText, setEndText] = createSignal(props.initial ? formatDateInput(props.initial.end, locale()) : "");
420
+ const [startError, setStartError] = createSignal("");
421
+ const [endError, setEndError] = createSignal("");
422
+ // Follows the window: narrowing it below two months' room drops the second month, widening adds it.
423
+ const query = !props.sheet && typeof matchMedia === "function" ? matchMedia(TWO_MONTHS_QUERY) : undefined;
424
+ const [wide, setWide] = createSignal(Boolean(query?.matches));
425
+ if (query) {
426
+ const update = () => setWide(query.matches);
427
+ query.addEventListener("change", update);
428
+ onCleanup(() => query.removeEventListener("change", update));
429
+ }
430
+ const twoMonths = () => !props.sheet && wide();
431
+ // Months are anchored on their 1st: stepping from 31 March or 30 November never skips a month.
432
+ const monthOf = (key, offset = 0) => {
433
+ const year = Number(key.slice(0, 4));
434
+ const month = Number(key.slice(5, 7)) - 1 + offset;
435
+ return parseDateValue(`${year + Math.floor(month / 12)}-${String((month % 12 + 12) % 12 + 1).padStart(2, "0")}-01`, config());
436
+ };
437
+ const keyOf = date => dates.formatDateKey(date, config());
438
+ // The first visible month: the end's month, and the one before it when two months show.
439
+ const [first, setFirstMonth] = createSignal(monthOf(props.initial?.end ?? props.today, twoMonths() ? -1 : 0));
440
+ const setFirst = date => setFirstMonth(monthOf(keyOf(date)));
441
+ const second = createMemo(() => monthOf(keyOf(first()), 1));
442
+ const shown = createMemo(() => previewRange(draft(), anchor(), preview()));
443
+ let months;
444
+ const startId = createFieldMeta().controlId;
445
+ const endId = createFieldMeta().controlId;
446
+ const isShown = date => dates.isSameMonth(date, first(), config()) || twoMonths() && dates.isSameMonth(date, second(), config());
447
+ const fill = range => {
448
+ setStartText(range.start ? formatDateInput(range.start, locale()) : "");
449
+ setEndText(range.end ? formatDateInput(range.end, locale()) : "");
450
+ setStartError("");
451
+ setEndError("");
452
+ };
453
+ const pickDay = key => {
454
+ const next = pickRangeDay(draft(), anchor(), key);
455
+ batch(() => {
456
+ setDraft(next.range);
457
+ setAnchor(next.anchor);
458
+ setPreview(null);
459
+ fill(next.range);
460
+ });
461
+ };
462
+ /** Reads one typed half; returns the day, `null` for empty, or `undefined` after showing an error. */
463
+ const readText = (text, setError) => {
464
+ const result = parseDateInput(text, {
465
+ today: props.today,
466
+ locale: locale()
467
+ });
468
+ if (result.kind === "empty") return null;
469
+ if (result.kind === "error") {
470
+ setError(errorText(result.error, locale(), inputT(), props.today));
471
+ return undefined;
472
+ }
473
+ setError("");
474
+ return result.date;
475
+ };
476
+ const commitTyped = () => {
477
+ const start = readText(startText(), setStartError);
478
+ const end = readText(endText(), setEndError);
479
+ if (start === undefined || end === undefined) return undefined;
480
+ const range = {
481
+ start,
482
+ end
483
+ };
484
+ batch(() => {
485
+ setDraft(range);
486
+ setAnchor(null);
487
+ });
488
+ if (start && end && end < start) {
489
+ setEndError(inputT().endBeforeStart);
490
+ return undefined;
491
+ }
492
+ if (start && !end) setEndError(inputT().missingEnd);
493
+ if (end && !start) setStartError(inputT().missingStart);
494
+ const visible = end ?? start;
495
+ if (visible && !isShown(parseDateValue(visible, config()))) setFirstMonth(monthOf(visible, twoMonths() ? -1 : 0));
496
+ return start && end ? {
497
+ start,
498
+ end
499
+ } : undefined;
500
+ };
501
+ const complete = () => {
502
+ const range = draft();
503
+ return range.start && range.end && !startError() && !endError() ? {
504
+ start: range.start,
505
+ end: range.end
506
+ } : undefined;
507
+ };
508
+ const apply = () => {
509
+ const typed = commitTyped();
510
+ if (typed) props.onApply(typed);
511
+ };
512
+ const fieldKeyDown = event => {
513
+ if (event.key !== "Enter") return;
514
+ event.preventDefault();
515
+ apply();
516
+ };
517
+ const placeholder = () => dateInputPattern(locale(), {
518
+ day: inputT().dayLetters,
519
+ month: inputT().monthLetters,
520
+ year: inputT().yearLetters
521
+ });
522
+ const status = () => {
523
+ const range = shown();
524
+ return range.start && range.end ? props.rangeText({
525
+ start: range.start,
526
+ end: range.end
527
+ }).detail : "";
528
+ };
529
+ const field = fieldProps => _$ssr(_tmpl$9, _$ssrAttribute("data-invalid", fieldProps.error() ? "true" : _$escape(undefined, true), false), _$ssrAttribute("for", _$escape(fieldProps.id, true), false), _$escape(fieldProps.label), _$ssrAttribute("id", _$escape(fieldProps.id, true), false), _$ssrAttribute("placeholder", _$escape(placeholder(), true), false) + _$ssrAttribute("value", _$escape(fieldProps.text(), true), false) + _$ssrAttribute("aria-invalid", fieldProps.error() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-describedby", fieldProps.error() ? `${_$escape(fieldProps.id, true)}-error` : _$escape(undefined, true), false), `${_$escape(fieldProps.id, true)}-error`, _$escape(fieldProps.error()));
530
+ return _$ssr(_tmpl$10, _$ssrAttribute("aria-label", _$escape(t().custom, true), false), _$escape(_$createComponent(Show, {
531
+ get when() {
532
+ return props.sheet;
533
+ },
534
+ get children() {
535
+ return _$ssr(_tmpl$0, _$escape(t().backToPresets));
536
+ }
537
+ })), _$escape(field({
538
+ id: startId,
539
+ label: t().from,
540
+ text: startText,
541
+ setText: setStartText,
542
+ error: startError
543
+ })), _$escape(field({
544
+ id: endId,
545
+ label: t().to,
546
+ text: endText,
547
+ setText: setEndText,
548
+ error: endError
549
+ })), _$escape(_$createComponent(DatePickerPanel, {
550
+ visibleMonth: first,
551
+ setVisibleMonth: setFirst,
552
+ range: shown,
553
+ focusDate: () => draft().start,
554
+ onSelect: pickDay,
555
+ onDayPreview: key => setPreview(rangeAnchor(draft(), anchor()) ? key : null),
556
+ get dateConfig() {
557
+ return config();
558
+ },
559
+ get nav() {
560
+ return twoMonths() ? "previous" : "both";
561
+ },
562
+ get hideOutside() {
563
+ return twoMonths();
564
+ },
565
+ isShown: isShown,
566
+ focusRoot: () => months
567
+ })), _$escape(_$createComponent(Show, {
568
+ get when() {
569
+ return twoMonths();
570
+ },
571
+ get children() {
572
+ return _$createComponent(DatePickerPanel, {
573
+ visibleMonth: second,
574
+ setVisibleMonth: date => setFirstMonth(monthOf(keyOf(date), -1)),
575
+ range: shown,
576
+ focusDate: () => draft().end,
577
+ onSelect: pickDay,
578
+ onDayPreview: key => setPreview(rangeAnchor(draft(), anchor()) ? key : null),
579
+ get dateConfig() {
580
+ return config();
581
+ },
582
+ nav: "next",
583
+ hideOutside: true,
584
+ isShown: isShown,
585
+ focusRoot: () => months
586
+ });
587
+ }
588
+ })), _$escape(_$createComponent(Show, {
589
+ get when() {
590
+ return _$memo(() => !!shown().start)() && shown().end;
591
+ },
592
+ get children() {
593
+ return _$ssr(_tmpl$1);
594
+ }
595
+ })), _$escape(status()), _$ssrAttribute("disabled", !complete(), true), _$escape(ui().apply));
596
+ }
597
+ export default PeriodPicker;
598
+ //# sourceMappingURL=PeriodPicker.js.map