@k2b/ui 0.50.0 → 0.51.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 (294) hide show
  1. package/dist/base.css +32 -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/command-dock.js +47 -0
  10. package/dist/browser/actions/command-dock.js.map +1 -0
  11. package/dist/browser/actions/command-items.js +84 -0
  12. package/dist/browser/actions/command-items.js.map +1 -0
  13. package/dist/browser/actions/command-messages.js +42 -0
  14. package/dist/browser/actions/command-messages.js.map +1 -0
  15. package/dist/browser/actions/index.js +1 -0
  16. package/dist/browser/actions/index.js.map +1 -1
  17. package/dist/browser/charts/core/area.js +3 -5
  18. package/dist/browser/charts/core/area.js.map +1 -1
  19. package/dist/browser/charts/core/calendar.js +1 -1
  20. package/dist/browser/charts/core/calendar.js.map +1 -1
  21. package/dist/browser/charts/core/chart-messages.js +17 -0
  22. package/dist/browser/charts/core/chart-messages.js.map +1 -0
  23. package/dist/browser/charts/core/hbar-layout.js +118 -0
  24. package/dist/browser/charts/core/hbar-layout.js.map +1 -0
  25. package/dist/browser/charts/core/hbar.js +39 -0
  26. package/dist/browser/charts/core/hbar.js.map +1 -0
  27. package/dist/browser/charts/core/index.js +7 -2
  28. package/dist/browser/charts/core/index.js.map +1 -1
  29. package/dist/browser/charts/core/map.js +116 -0
  30. package/dist/browser/charts/core/map.js.map +1 -0
  31. package/dist/browser/charts/core/registry.js +22 -15
  32. package/dist/browser/charts/core/registry.js.map +1 -1
  33. package/dist/browser/charts/core/render-size.js +13 -0
  34. package/dist/browser/charts/core/render-size.js.map +1 -0
  35. package/dist/browser/charts/core/render.js +20 -10
  36. package/dist/browser/charts/core/render.js.map +1 -1
  37. package/dist/browser/charts/core/snapshot.js +3 -3
  38. package/dist/browser/charts/core/snapshot.js.map +1 -1
  39. package/dist/browser/charts/core/svg-renderers.js +2406 -0
  40. package/dist/browser/charts/core/svg-renderers.js.map +1 -0
  41. package/dist/browser/charts/core/svg.js +4 -2525
  42. package/dist/browser/charts/core/svg.js.map +1 -1
  43. package/dist/browser/charts/core/types.js +0 -2
  44. package/dist/browser/charts/core/types.js.map +1 -1
  45. package/dist/browser/charts/core/waterfall.js +162 -0
  46. package/dist/browser/charts/core/waterfall.js.map +1 -0
  47. package/dist/browser/charts/description.js +2 -0
  48. package/dist/browser/charts/description.js.map +1 -0
  49. package/dist/browser/charts.js.map +1 -1
  50. package/dist/browser/content/Chart.js +14 -628
  51. package/dist/browser/content/Chart.js.map +1 -1
  52. package/dist/browser/content/ChartRoot.js +632 -0
  53. package/dist/browser/content/ChartRoot.js.map +1 -0
  54. package/dist/browser/content/ChartSparkline.js +24 -0
  55. package/dist/browser/content/ChartSparkline.js.map +1 -0
  56. package/dist/browser/content/FileView.js +111 -61
  57. package/dist/browser/content/FileView.js.map +1 -1
  58. package/dist/browser/content/Lightbox.js +8 -8
  59. package/dist/browser/content/Lightbox.js.map +1 -1
  60. package/dist/browser/content/MapView.js +30 -28
  61. package/dist/browser/content/MapView.js.map +1 -1
  62. package/dist/browser/content/PdfPreview.js +84 -52
  63. package/dist/browser/content/PdfPreview.js.map +1 -1
  64. package/dist/browser/content/PdfViewer.js +588 -0
  65. package/dist/browser/content/PdfViewer.js.map +1 -0
  66. package/dist/browser/content/chart-bar.js +246 -16
  67. package/dist/browser/content/chart-bar.js.map +1 -1
  68. package/dist/browser/content/chart-inspection-core.js +22 -21
  69. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  70. package/dist/browser/content/chart-line-gaps.js +1 -1
  71. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  72. package/dist/browser/content/chart-message-catalog.js +10 -0
  73. package/dist/browser/content/chart-message-catalog.js.map +1 -1
  74. package/dist/browser/content/chart-state-timeline.js +1 -1
  75. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  76. package/dist/browser/content/chart-svg.js +2 -1
  77. package/dist/browser/content/chart-svg.js.map +1 -1
  78. package/dist/browser/content/index.js +1 -0
  79. package/dist/browser/content/index.js.map +1 -1
  80. package/dist/browser/content/pdf-document.js +29 -0
  81. package/dist/browser/content/pdf-document.js.map +1 -0
  82. package/dist/browser/content/pdf-limits.js +31 -0
  83. package/dist/browser/content/pdf-limits.js.map +1 -0
  84. package/dist/browser/content/pdf-messages.js +34 -2
  85. package/dist/browser/content/pdf-messages.js.map +1 -1
  86. package/dist/browser/content/pdf-viewer-engine.js +57 -0
  87. package/dist/browser/content/pdf-viewer-worker.js +28 -0
  88. package/dist/browser/inputs/ChoiceInputs.js +94 -51
  89. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  90. package/dist/browser/inputs/ChoiceSlider.js +75 -58
  91. package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
  92. package/dist/browser/inputs/DatePicker.js +113 -98
  93. package/dist/browser/inputs/DatePicker.js.map +1 -1
  94. package/dist/browser/inputs/PeriodPicker.js +874 -0
  95. package/dist/browser/inputs/PeriodPicker.js.map +1 -0
  96. package/dist/browser/inputs/index.js +4 -1
  97. package/dist/browser/inputs/index.js.map +1 -1
  98. package/dist/browser/inputs/input-messages.js +8 -2
  99. package/dist/browser/inputs/input-messages.js.map +1 -1
  100. package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
  101. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  102. package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
  103. package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
  104. package/dist/browser/inputs/period-picker-messages.js +71 -0
  105. package/dist/browser/inputs/period-picker-messages.js.map +1 -0
  106. package/dist/browser/inputs/period.js +263 -0
  107. package/dist/browser/inputs/period.js.map +1 -0
  108. package/dist/browser/layout/DetailPanel.js +147 -120
  109. package/dist/browser/layout/DetailPanel.js.map +1 -1
  110. package/dist/browser/layout/Discussion.js +101 -108
  111. package/dist/browser/layout/Discussion.js.map +1 -1
  112. package/dist/browser/layout/index.js.map +1 -1
  113. package/dist/browser/surfaces/DescriptionList.js +5 -2
  114. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  115. package/dist/browser/surfaces/StatCell.js +19 -14
  116. package/dist/browser/surfaces/StatCell.js.map +1 -1
  117. package/dist/browser/surfaces/delta-badge.js +16 -2
  118. package/dist/browser/surfaces/delta-badge.js.map +1 -1
  119. package/dist/browser/widgets/DashboardFrame.js +310 -0
  120. package/dist/browser/widgets/DashboardFrame.js.map +1 -0
  121. package/dist/browser/widgets/index.js +1 -0
  122. package/dist/browser/widgets/index.js.map +1 -1
  123. package/dist/licenses/pdfjs-dist.txt +177 -0
  124. package/dist/ssr/actions/Button.js.map +1 -1
  125. package/dist/ssr/actions/CommandList.js +638 -0
  126. package/dist/ssr/actions/CommandList.js.map +1 -0
  127. package/dist/ssr/actions/CommandMenu.js +197 -0
  128. package/dist/ssr/actions/CommandMenu.js.map +1 -0
  129. package/dist/ssr/actions/Dropdown.js +43 -10
  130. package/dist/ssr/actions/Dropdown.js.map +1 -1
  131. package/dist/ssr/actions/command-dock.js +47 -0
  132. package/dist/ssr/actions/command-dock.js.map +1 -0
  133. package/dist/ssr/actions/command-items.js +84 -0
  134. package/dist/ssr/actions/command-items.js.map +1 -0
  135. package/dist/ssr/actions/command-messages.js +42 -0
  136. package/dist/ssr/actions/command-messages.js.map +1 -0
  137. package/dist/ssr/actions/index.js +1 -0
  138. package/dist/ssr/actions/index.js.map +1 -1
  139. package/dist/ssr/charts/core/area.js +3 -5
  140. package/dist/ssr/charts/core/area.js.map +1 -1
  141. package/dist/ssr/charts/core/calendar.js +1 -1
  142. package/dist/ssr/charts/core/calendar.js.map +1 -1
  143. package/dist/ssr/charts/core/chart-messages.js +17 -0
  144. package/dist/ssr/charts/core/chart-messages.js.map +1 -0
  145. package/dist/ssr/charts/core/hbar-layout.js +118 -0
  146. package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
  147. package/dist/ssr/charts/core/hbar.js +39 -0
  148. package/dist/ssr/charts/core/hbar.js.map +1 -0
  149. package/dist/ssr/charts/core/index.js +7 -2
  150. package/dist/ssr/charts/core/index.js.map +1 -1
  151. package/dist/ssr/charts/core/map.js +116 -0
  152. package/dist/ssr/charts/core/map.js.map +1 -0
  153. package/dist/ssr/charts/core/registry.js +22 -15
  154. package/dist/ssr/charts/core/registry.js.map +1 -1
  155. package/dist/ssr/charts/core/render-size.js +13 -0
  156. package/dist/ssr/charts/core/render-size.js.map +1 -0
  157. package/dist/ssr/charts/core/render.js +20 -10
  158. package/dist/ssr/charts/core/render.js.map +1 -1
  159. package/dist/ssr/charts/core/snapshot.js +3 -3
  160. package/dist/ssr/charts/core/snapshot.js.map +1 -1
  161. package/dist/ssr/charts/core/svg-renderers.js +2406 -0
  162. package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
  163. package/dist/ssr/charts/core/svg.js +4 -2525
  164. package/dist/ssr/charts/core/svg.js.map +1 -1
  165. package/dist/ssr/charts/core/types.js +0 -2
  166. package/dist/ssr/charts/core/types.js.map +1 -1
  167. package/dist/ssr/charts/core/waterfall.js +162 -0
  168. package/dist/ssr/charts/core/waterfall.js.map +1 -0
  169. package/dist/ssr/charts/description.js +2 -0
  170. package/dist/ssr/charts/description.js.map +1 -0
  171. package/dist/ssr/charts.js.map +1 -1
  172. package/dist/ssr/content/Chart.js +14 -471
  173. package/dist/ssr/content/Chart.js.map +1 -1
  174. package/dist/ssr/content/ChartRoot.js +475 -0
  175. package/dist/ssr/content/ChartRoot.js.map +1 -0
  176. package/dist/ssr/content/ChartSparkline.js +24 -0
  177. package/dist/ssr/content/ChartSparkline.js.map +1 -0
  178. package/dist/ssr/content/FileView.js +56 -7
  179. package/dist/ssr/content/FileView.js.map +1 -1
  180. package/dist/ssr/content/Lightbox.js +8 -8
  181. package/dist/ssr/content/Lightbox.js.map +1 -1
  182. package/dist/ssr/content/MapView.js +9 -9
  183. package/dist/ssr/content/MapView.js.map +1 -1
  184. package/dist/ssr/content/PdfPreview.js +49 -20
  185. package/dist/ssr/content/PdfPreview.js.map +1 -1
  186. package/dist/ssr/content/PdfViewer.js +484 -0
  187. package/dist/ssr/content/PdfViewer.js.map +1 -0
  188. package/dist/ssr/content/chart-bar.js +246 -16
  189. package/dist/ssr/content/chart-bar.js.map +1 -1
  190. package/dist/ssr/content/chart-inspection-core.js +22 -21
  191. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  192. package/dist/ssr/content/chart-line-gaps.js +1 -1
  193. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  194. package/dist/ssr/content/chart-message-catalog.js +10 -0
  195. package/dist/ssr/content/chart-message-catalog.js.map +1 -1
  196. package/dist/ssr/content/chart-state-timeline.js +1 -1
  197. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  198. package/dist/ssr/content/chart-svg.js +2 -1
  199. package/dist/ssr/content/chart-svg.js.map +1 -1
  200. package/dist/ssr/content/index.js +1 -0
  201. package/dist/ssr/content/index.js.map +1 -1
  202. package/dist/ssr/content/pdf-document.js +29 -0
  203. package/dist/ssr/content/pdf-document.js.map +1 -0
  204. package/dist/ssr/content/pdf-limits.js +31 -0
  205. package/dist/ssr/content/pdf-limits.js.map +1 -0
  206. package/dist/ssr/content/pdf-messages.js +34 -2
  207. package/dist/ssr/content/pdf-messages.js.map +1 -1
  208. package/dist/ssr/inputs/ChoiceInputs.js +49 -12
  209. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  210. package/dist/ssr/inputs/ChoiceSlider.js +17 -12
  211. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
  212. package/dist/ssr/inputs/DatePicker.js +14 -9
  213. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  214. package/dist/ssr/inputs/PeriodPicker.js +598 -0
  215. package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
  216. package/dist/ssr/inputs/index.js +4 -1
  217. package/dist/ssr/inputs/index.js.map +1 -1
  218. package/dist/ssr/inputs/input-messages.js +8 -2
  219. package/dist/ssr/inputs/input-messages.js.map +1 -1
  220. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  221. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  222. package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
  223. package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
  224. package/dist/ssr/inputs/period-picker-messages.js +71 -0
  225. package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
  226. package/dist/ssr/inputs/period.js +263 -0
  227. package/dist/ssr/inputs/period.js.map +1 -0
  228. package/dist/ssr/layout/DetailPanel.js +27 -4
  229. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  230. package/dist/ssr/layout/Discussion.js +16 -2
  231. package/dist/ssr/layout/Discussion.js.map +1 -1
  232. package/dist/ssr/layout/index.js.map +1 -1
  233. package/dist/ssr/surfaces/DescriptionList.js +1 -1
  234. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  235. package/dist/ssr/surfaces/StatCell.js +4 -5
  236. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  237. package/dist/ssr/surfaces/delta-badge.js +16 -2
  238. package/dist/ssr/surfaces/delta-badge.js.map +1 -1
  239. package/dist/ssr/widgets/DashboardFrame.js +200 -0
  240. package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
  241. package/dist/ssr/widgets/index.js +1 -0
  242. package/dist/ssr/widgets/index.js.map +1 -1
  243. package/dist/styles.css +1 -1
  244. package/dist/types/actions/Button.d.ts +1 -1
  245. package/dist/types/actions/CommandList.d.ts +120 -0
  246. package/dist/types/actions/CommandMenu.d.ts +39 -0
  247. package/dist/types/actions/Dropdown.d.ts +17 -0
  248. package/dist/types/actions/command-dock.d.ts +8 -0
  249. package/dist/types/actions/command-items.d.ts +134 -0
  250. package/dist/types/actions/command-messages.d.ts +19 -0
  251. package/dist/types/actions/index.d.ts +3 -0
  252. package/dist/types/charts/core/calendar.d.ts +1 -1
  253. package/dist/types/charts/core/chart-messages.d.ts +5 -0
  254. package/dist/types/charts/core/hbar-layout.d.ts +74 -0
  255. package/dist/types/charts/core/hbar.d.ts +13 -0
  256. package/dist/types/charts/core/index.d.ts +7 -2
  257. package/dist/types/charts/core/map.d.ts +3 -0
  258. package/dist/types/charts/core/registry.d.ts +17 -11
  259. package/dist/types/charts/core/render-size.d.ts +7 -0
  260. package/dist/types/charts/core/render.d.ts +1 -4
  261. package/dist/types/charts/core/snapshot.d.ts +2 -2
  262. package/dist/types/charts/core/svg-renderers.d.ts +722 -0
  263. package/dist/types/charts/core/svg.d.ts +4 -698
  264. package/dist/types/charts/core/types.d.ts +1 -12
  265. package/dist/types/charts/core/waterfall.d.ts +68 -0
  266. package/dist/types/charts/description.d.ts +226 -0
  267. package/dist/types/charts.d.ts +1 -0
  268. package/dist/types/content/Chart.d.ts +3 -91
  269. package/dist/types/content/ChartRoot.d.ts +92 -0
  270. package/dist/types/content/ChartSparkline.d.ts +5 -0
  271. package/dist/types/content/PdfViewer.d.ts +32 -0
  272. package/dist/types/content/chart-bar.d.ts +95 -2
  273. package/dist/types/content/index.d.ts +2 -0
  274. package/dist/types/content/pdf-document.d.ts +5 -0
  275. package/dist/types/content/pdf-engine.d.ts +9 -0
  276. package/dist/types/content/pdf-limits.d.ts +43 -0
  277. package/dist/types/content/pdf-messages.d.ts +16 -0
  278. package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
  279. package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
  280. package/dist/types/inputs/DatePicker.d.ts +22 -0
  281. package/dist/types/inputs/PeriodPicker.d.ts +24 -0
  282. package/dist/types/inputs/index.d.ts +8 -2
  283. package/dist/types/inputs/input-messages.d.ts +3 -0
  284. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
  285. package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
  286. package/dist/types/inputs/period-picker-messages.d.ts +34 -0
  287. package/dist/types/inputs/period.d.ts +134 -0
  288. package/dist/types/layout/DetailPanel.d.ts +12 -0
  289. package/dist/types/layout/index.d.ts +1 -1
  290. package/dist/types/surfaces/DescriptionList.d.ts +5 -0
  291. package/dist/types/surfaces/StatCell.d.ts +6 -1
  292. package/dist/types/widgets/DashboardFrame.d.ts +58 -0
  293. package/dist/types/widgets/index.d.ts +1 -0
  294. package/package.json +2 -1
@@ -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