@k2b/ui 0.28.0 → 0.30.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 (278) hide show
  1. package/README.md +1 -1
  2. package/dist/base.css +2 -2
  3. package/dist/browser/actions/ContextMenu.js +5 -0
  4. package/dist/browser/actions/ContextMenu.js.map +1 -1
  5. package/dist/browser/actions/DragAndDrop.js +89 -0
  6. package/dist/browser/actions/DragAndDrop.js.map +1 -0
  7. package/dist/browser/actions/Dropdown.js +6 -3
  8. package/dist/browser/actions/Dropdown.js.map +1 -1
  9. package/dist/browser/actions/FilterChip.js +137 -7
  10. package/dist/browser/actions/FilterChip.js.map +1 -1
  11. package/dist/browser/actions/GestureMenu.js +26 -3
  12. package/dist/browser/actions/GestureMenu.js.map +1 -1
  13. package/dist/browser/actions/SegmentedControl.js +5 -9
  14. package/dist/browser/actions/SegmentedControl.js.map +1 -1
  15. package/dist/browser/actions/SpotlightSearch.js +6 -3
  16. package/dist/browser/actions/SpotlightSearch.js.map +1 -1
  17. package/dist/browser/actions/Tabs.js +5 -2
  18. package/dist/browser/actions/Tabs.js.map +1 -1
  19. package/dist/browser/actions/ViewTabs.js +294 -0
  20. package/dist/browser/actions/ViewTabs.js.map +1 -0
  21. package/dist/browser/actions/drag-and-drop-messages.js +75 -0
  22. package/dist/browser/actions/drag-and-drop-messages.js.map +1 -0
  23. package/dist/browser/actions/drag-and-drop.js +692 -0
  24. package/dist/browser/actions/drag-and-drop.js.map +1 -0
  25. package/dist/browser/actions/filter-messages.js +6 -2
  26. package/dist/browser/actions/filter-messages.js.map +1 -1
  27. package/dist/browser/actions/index.js +3 -1
  28. package/dist/browser/actions/index.js.map +1 -1
  29. package/dist/browser/chat/ChatComposer.js +1229 -605
  30. package/dist/browser/chat/ChatComposer.js.map +1 -1
  31. package/dist/browser/chat/ChatDecision.js +814 -0
  32. package/dist/browser/chat/ChatDecision.js.map +1 -0
  33. package/dist/browser/chat/ChatPrimitives.js +292 -153
  34. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  35. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  36. package/dist/browser/chat/chat-messages.js +14 -0
  37. package/dist/browser/chat/chat-messages.js.map +1 -1
  38. package/dist/browser/chat/command-search.js +35 -17
  39. package/dist/browser/chat/command-search.js.map +1 -1
  40. package/dist/browser/chat/index.js +10 -3
  41. package/dist/browser/chat/index.js.map +1 -1
  42. package/dist/browser/chat/types.js.map +1 -1
  43. package/dist/browser/content/Calendar.js +146 -119
  44. package/dist/browser/content/Calendar.js.map +1 -1
  45. package/dist/browser/content/CalendarWeekView.js +291 -266
  46. package/dist/browser/content/CalendarWeekView.js.map +1 -1
  47. package/dist/browser/content/Chart.js +54 -71
  48. package/dist/browser/content/Chart.js.map +1 -1
  49. package/dist/browser/content/DataTable.js +224 -155
  50. package/dist/browser/content/DataTable.js.map +1 -1
  51. package/dist/browser/content/FileBrowser.js +2 -2
  52. package/dist/browser/content/FileBrowser.js.map +1 -1
  53. package/dist/browser/content/FileTree.js +42 -36
  54. package/dist/browser/content/FileTree.js.map +1 -1
  55. package/dist/browser/content/FileTypeIcon.js +72 -0
  56. package/dist/browser/content/FileTypeIcon.js.map +1 -0
  57. package/dist/browser/content/FileView.js +2 -2
  58. package/dist/browser/content/FileView.js.map +1 -1
  59. package/dist/browser/content/ReferenceChip.js +162 -0
  60. package/dist/browser/content/ReferenceChip.js.map +1 -0
  61. package/dist/browser/content/calendar-pointer.js +9 -0
  62. package/dist/browser/content/calendar-pointer.js.map +1 -1
  63. package/dist/browser/content/calendar-time-view.js +6 -3
  64. package/dist/browser/content/calendar-time-view.js.map +1 -1
  65. package/dist/browser/content/data-table-messages.js +4 -2
  66. package/dist/browser/content/data-table-messages.js.map +1 -1
  67. package/dist/browser/content/index.js +2 -0
  68. package/dist/browser/content/index.js.map +1 -1
  69. package/dist/browser/feedback/MovedHint.js +197 -0
  70. package/dist/browser/feedback/MovedHint.js.map +1 -0
  71. package/dist/browser/feedback/dialog-core.js +66 -9
  72. package/dist/browser/feedback/dialog-core.js.map +1 -1
  73. package/dist/browser/feedback/index.js +1 -0
  74. package/dist/browser/feedback/index.js.map +1 -1
  75. package/dist/browser/feedback/prompts.js +6 -1
  76. package/dist/browser/feedback/prompts.js.map +1 -1
  77. package/dist/browser/inputs/DatePicker.js +337 -212
  78. package/dist/browser/inputs/DatePicker.js.map +1 -1
  79. package/dist/browser/inputs/date-picker.js +59 -5
  80. package/dist/browser/inputs/date-picker.js.map +1 -1
  81. package/dist/browser/intl/messages.js +12 -0
  82. package/dist/browser/intl/messages.js.map +1 -1
  83. package/dist/browser/intl/weekend.js +39 -0
  84. package/dist/browser/intl/weekend.js.map +1 -0
  85. package/dist/browser/layout/AppOverview.js +1 -2
  86. package/dist/browser/layout/AppOverview.js.map +1 -1
  87. package/dist/browser/layout/AppWorkspace.js +947 -531
  88. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  89. package/dist/browser/layout/PageTitle.js +3 -2
  90. package/dist/browser/layout/PageTitle.js.map +1 -1
  91. package/dist/browser/layout/PanelDialog.js +88 -86
  92. package/dist/browser/layout/PanelDialog.js.map +1 -1
  93. package/dist/browser/layout/ResizeSeparator.js +81 -0
  94. package/dist/browser/layout/ResizeSeparator.js.map +1 -0
  95. package/dist/browser/layout/SettingsModal.js +2 -2
  96. package/dist/browser/layout/SettingsModal.js.map +1 -1
  97. package/dist/browser/layout/SidebarSwitcher.js +19 -11
  98. package/dist/browser/layout/SidebarSwitcher.js.map +1 -1
  99. package/dist/browser/layout/TabBar.js +16 -13
  100. package/dist/browser/layout/TabBar.js.map +1 -1
  101. package/dist/browser/layout/app-host-width.js +44 -0
  102. package/dist/browser/layout/app-host-width.js.map +1 -0
  103. package/dist/browser/layout/app-workspace-controller.js +337 -44
  104. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  105. package/dist/browser/layout/index.js +4 -1
  106. package/dist/browser/layout/index.js.map +1 -1
  107. package/dist/browser/layout/resize-separator.js +90 -0
  108. package/dist/browser/layout/resize-separator.js.map +1 -0
  109. package/dist/browser/layout/workspace-messages.js +12 -2
  110. package/dist/browser/layout/workspace-messages.js.map +1 -1
  111. package/dist/browser/surfaces/LinkCard.js +1 -1
  112. package/dist/browser/surfaces/LinkCard.js.map +1 -1
  113. package/dist/browser/surfaces/Placeholder.js +45 -11
  114. package/dist/browser/surfaces/Placeholder.js.map +1 -1
  115. package/dist/browser/surfaces/StatCell.js +23 -0
  116. package/dist/browser/surfaces/StatCell.js.map +1 -1
  117. package/dist/browser/widgets/Widget.js +1 -1
  118. package/dist/browser/widgets/Widget.js.map +1 -1
  119. package/dist/ssr/actions/ContextMenu.js +5 -0
  120. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  121. package/dist/ssr/actions/DragAndDrop.js +63 -0
  122. package/dist/ssr/actions/DragAndDrop.js.map +1 -0
  123. package/dist/ssr/actions/Dropdown.js +5 -2
  124. package/dist/ssr/actions/Dropdown.js.map +1 -1
  125. package/dist/ssr/actions/FilterChip.js +59 -7
  126. package/dist/ssr/actions/FilterChip.js.map +1 -1
  127. package/dist/ssr/actions/GestureMenu.js +26 -3
  128. package/dist/ssr/actions/GestureMenu.js.map +1 -1
  129. package/dist/ssr/actions/SegmentedControl.js +1 -2
  130. package/dist/ssr/actions/SegmentedControl.js.map +1 -1
  131. package/dist/ssr/actions/SpotlightSearch.js +2 -2
  132. package/dist/ssr/actions/SpotlightSearch.js.map +1 -1
  133. package/dist/ssr/actions/Tabs.js +2 -2
  134. package/dist/ssr/actions/Tabs.js.map +1 -1
  135. package/dist/ssr/actions/ViewTabs.js +211 -0
  136. package/dist/ssr/actions/ViewTabs.js.map +1 -0
  137. package/dist/ssr/actions/drag-and-drop-messages.js +75 -0
  138. package/dist/ssr/actions/drag-and-drop-messages.js.map +1 -0
  139. package/dist/ssr/actions/drag-and-drop.js +692 -0
  140. package/dist/ssr/actions/drag-and-drop.js.map +1 -0
  141. package/dist/ssr/actions/filter-messages.js +6 -2
  142. package/dist/ssr/actions/filter-messages.js.map +1 -1
  143. package/dist/ssr/actions/index.js +3 -1
  144. package/dist/ssr/actions/index.js.map +1 -1
  145. package/dist/ssr/chat/ChatComposer.js +668 -136
  146. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  147. package/dist/ssr/chat/ChatDecision.js +479 -0
  148. package/dist/ssr/chat/ChatDecision.js.map +1 -0
  149. package/dist/ssr/chat/ChatPrimitives.js +95 -24
  150. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  151. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  152. package/dist/ssr/chat/chat-messages.js +14 -0
  153. package/dist/ssr/chat/chat-messages.js.map +1 -1
  154. package/dist/ssr/chat/command-search.js +35 -17
  155. package/dist/ssr/chat/command-search.js.map +1 -1
  156. package/dist/ssr/chat/index.js +10 -3
  157. package/dist/ssr/chat/index.js.map +1 -1
  158. package/dist/ssr/chat/types.js.map +1 -1
  159. package/dist/ssr/content/Calendar.js +112 -103
  160. package/dist/ssr/content/Calendar.js.map +1 -1
  161. package/dist/ssr/content/CalendarWeekView.js +42 -28
  162. package/dist/ssr/content/CalendarWeekView.js.map +1 -1
  163. package/dist/ssr/content/Chart.js +19 -23
  164. package/dist/ssr/content/Chart.js.map +1 -1
  165. package/dist/ssr/content/DataTable.js +78 -31
  166. package/dist/ssr/content/DataTable.js.map +1 -1
  167. package/dist/ssr/content/FileBrowser.js +2 -2
  168. package/dist/ssr/content/FileBrowser.js.map +1 -1
  169. package/dist/ssr/content/FileTree.js +21 -14
  170. package/dist/ssr/content/FileTree.js.map +1 -1
  171. package/dist/ssr/content/FileTypeIcon.js +50 -0
  172. package/dist/ssr/content/FileTypeIcon.js.map +1 -0
  173. package/dist/ssr/content/FileView.js +2 -2
  174. package/dist/ssr/content/FileView.js.map +1 -1
  175. package/dist/ssr/content/ReferenceChip.js +121 -0
  176. package/dist/ssr/content/ReferenceChip.js.map +1 -0
  177. package/dist/ssr/content/calendar-pointer.js +9 -0
  178. package/dist/ssr/content/calendar-pointer.js.map +1 -1
  179. package/dist/ssr/content/calendar-time-view.js +6 -3
  180. package/dist/ssr/content/calendar-time-view.js.map +1 -1
  181. package/dist/ssr/content/data-table-messages.js +4 -2
  182. package/dist/ssr/content/data-table-messages.js.map +1 -1
  183. package/dist/ssr/content/index.js +2 -0
  184. package/dist/ssr/content/index.js.map +1 -1
  185. package/dist/ssr/feedback/MovedHint.js +166 -0
  186. package/dist/ssr/feedback/MovedHint.js.map +1 -0
  187. package/dist/ssr/feedback/dialog-core.js +66 -9
  188. package/dist/ssr/feedback/dialog-core.js.map +1 -1
  189. package/dist/ssr/feedback/index.js +1 -0
  190. package/dist/ssr/feedback/index.js.map +1 -1
  191. package/dist/ssr/feedback/prompts.js +6 -1
  192. package/dist/ssr/feedback/prompts.js.map +1 -1
  193. package/dist/ssr/inputs/DatePicker.js +138 -69
  194. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  195. package/dist/ssr/inputs/date-picker.js +59 -5
  196. package/dist/ssr/inputs/date-picker.js.map +1 -1
  197. package/dist/ssr/intl/messages.js +12 -0
  198. package/dist/ssr/intl/messages.js.map +1 -1
  199. package/dist/ssr/intl/weekend.js +39 -0
  200. package/dist/ssr/intl/weekend.js.map +1 -0
  201. package/dist/ssr/layout/AppOverview.js +1 -2
  202. package/dist/ssr/layout/AppOverview.js.map +1 -1
  203. package/dist/ssr/layout/AppWorkspace.js +457 -116
  204. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  205. package/dist/ssr/layout/PageTitle.js +3 -2
  206. package/dist/ssr/layout/PageTitle.js.map +1 -1
  207. package/dist/ssr/layout/PanelDialog.js +7 -6
  208. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  209. package/dist/ssr/layout/ResizeSeparator.js +45 -0
  210. package/dist/ssr/layout/ResizeSeparator.js.map +1 -0
  211. package/dist/ssr/layout/SettingsModal.js +2 -2
  212. package/dist/ssr/layout/SettingsModal.js.map +1 -1
  213. package/dist/ssr/layout/SidebarSwitcher.js +19 -11
  214. package/dist/ssr/layout/SidebarSwitcher.js.map +1 -1
  215. package/dist/ssr/layout/TabBar.js +2 -2
  216. package/dist/ssr/layout/TabBar.js.map +1 -1
  217. package/dist/ssr/layout/app-host-width.js +44 -0
  218. package/dist/ssr/layout/app-host-width.js.map +1 -0
  219. package/dist/ssr/layout/app-workspace-controller.js +337 -44
  220. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  221. package/dist/ssr/layout/index.js +4 -1
  222. package/dist/ssr/layout/index.js.map +1 -1
  223. package/dist/ssr/layout/resize-separator.js +90 -0
  224. package/dist/ssr/layout/resize-separator.js.map +1 -0
  225. package/dist/ssr/layout/workspace-messages.js +12 -2
  226. package/dist/ssr/layout/workspace-messages.js.map +1 -1
  227. package/dist/ssr/surfaces/LinkCard.js +1 -1
  228. package/dist/ssr/surfaces/LinkCard.js.map +1 -1
  229. package/dist/ssr/surfaces/Placeholder.js +25 -6
  230. package/dist/ssr/surfaces/Placeholder.js.map +1 -1
  231. package/dist/ssr/surfaces/StatCell.js +23 -0
  232. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  233. package/dist/ssr/widgets/Widget.js +1 -1
  234. package/dist/ssr/widgets/Widget.js.map +1 -1
  235. package/dist/styles.css +1 -1
  236. package/dist/types/actions/ContextMenu.d.ts +1 -0
  237. package/dist/types/actions/DragAndDrop.d.ts +29 -0
  238. package/dist/types/actions/Dropdown.d.ts +4 -0
  239. package/dist/types/actions/FilterChip.d.ts +22 -0
  240. package/dist/types/actions/ViewTabs.d.ts +30 -0
  241. package/dist/types/actions/drag-and-drop-messages.d.ts +35 -0
  242. package/dist/types/actions/drag-and-drop.d.ts +36 -0
  243. package/dist/types/actions/filter-messages.d.ts +2 -0
  244. package/dist/types/actions/index.d.ts +6 -2
  245. package/dist/types/chat/ChatComposer.d.ts +71 -1
  246. package/dist/types/chat/ChatDecision.d.ts +149 -0
  247. package/dist/types/chat/ChatPrimitives.d.ts +14 -1
  248. package/dist/types/chat/ChatTimeline.d.ts +2 -1
  249. package/dist/types/chat/chat-messages.d.ts +7 -0
  250. package/dist/types/chat/command-search.d.ts +5 -0
  251. package/dist/types/chat/index.d.ts +28 -5
  252. package/dist/types/chat/types.d.ts +54 -1
  253. package/dist/types/content/Chart.d.ts +9 -3
  254. package/dist/types/content/DataTable.d.ts +3 -0
  255. package/dist/types/content/FileTypeIcon.d.ts +27 -0
  256. package/dist/types/content/ReferenceChip.d.ts +49 -0
  257. package/dist/types/content/calendar-pointer.d.ts +6 -0
  258. package/dist/types/content/data-table-messages.d.ts +1 -0
  259. package/dist/types/content/index.d.ts +3 -0
  260. package/dist/types/feedback/MovedHint.d.ts +25 -0
  261. package/dist/types/feedback/dialog-core.d.ts +5 -2
  262. package/dist/types/feedback/index.d.ts +2 -0
  263. package/dist/types/feedback/prompts.d.ts +2 -0
  264. package/dist/types/inputs/DatePicker.d.ts +7 -0
  265. package/dist/types/inputs/date-picker.d.ts +25 -1
  266. package/dist/types/intl/messages.d.ts +6 -0
  267. package/dist/types/intl/weekend.d.ts +12 -0
  268. package/dist/types/layout/AppWorkspace.d.ts +48 -10
  269. package/dist/types/layout/ResizeSeparator.d.ts +9 -0
  270. package/dist/types/layout/TabBar.d.ts +7 -0
  271. package/dist/types/layout/app-host-width.d.ts +6 -0
  272. package/dist/types/layout/app-workspace-controller.d.ts +2 -0
  273. package/dist/types/layout/index.d.ts +5 -2
  274. package/dist/types/layout/resize-separator.d.ts +18 -0
  275. package/dist/types/layout/workspace-messages.d.ts +5 -0
  276. package/dist/types/surfaces/Placeholder.d.ts +2 -1
  277. package/dist/types/surfaces/StatCell.d.ts +6 -0
  278. package/package.json +5 -5
@@ -1,3 +1,4 @@
1
+ import { ssrStyleProperty as _$ssrStyleProperty } from "solid-js/web";
1
2
  import { ssrElement as _$ssrElement } from "solid-js/web";
2
3
  import { mergeProps as _$mergeProps } from "solid-js/web";
3
4
  import { createComponent as _$createComponent } from "solid-js/web";
@@ -15,28 +16,35 @@ var _tmpl$ = ["<i class=\"", "\" aria-hidden=\"true\"></i>"],
15
16
  _tmpl$8 = ["<div class=\"k2b-date-picker\"", ">", "", "<div id=\"", "\" class=\"k2b-date-popover\" popover=\"auto\" role=\"dialog\"", ">", "", "</div></div>"],
16
17
  _tmpl$9 = ["<aside class=\"k2b-date-presets\"", ">", "</aside>"],
17
18
  _tmpl$0 = ["<button type=\"button\">", "</button>"],
18
- _tmpl$1 = ["<div class=\"k2b-date-weekdays\" aria-hidden=\"true\">", "</div>"],
19
- _tmpl$10 = ["<div class=\"k2b-date-grid\" role=\"grid\">", "</div>"],
19
+ _tmpl$1 = ["<div class=\"k2b-date-weekdays\" aria-hidden=\"true\">", "", "</div>"],
20
+ _tmpl$10 = ["<div class=\"k2b-date-grid\" role=\"grid\">", "", "</div>"],
20
21
  _tmpl$11 = ["<section class=\"k2b-date-calendar\"", "><header class=\"k2b-date-calendar__header\"><button type=\"button\" class=\"k2b-date-calendar__nav\"", "><i class=\"ti ti-chevron-left\" aria-hidden=\"true\"></i></button><button type=\"button\" class=\"k2b-date-calendar__title\">", "</button><button type=\"button\" class=\"k2b-date-calendar__nav\"", "><i class=\"ti ti-chevron-right\" aria-hidden=\"true\"></i></button></header>", "</section>"],
21
22
  _tmpl$12 = ["<div class=\"k2b-date-months\" role=\"group\" aria-label=\"", "\">", "</div>"],
22
23
  _tmpl$13 = ["<button type=\"button\"", ">", "</button>"],
23
- _tmpl$14 = ["<span>", "</span>"],
24
- _tmpl$15 = ["<div class=\"k2b-date-week\" role=\"row\">", "</div>"],
25
- _tmpl$16 = ["<button type=\"button\" role=\"gridcell\"", ">", "</button>"],
26
- _tmpl$17 = ["<label class=\"k2b-date-time\">", "<span class=\"k2b-date-time__control\"><input type=\"text\" inputmode=\"numeric\"", " placeholder=\"09:00\"", "><i class=\"ti ti-clock\" aria-hidden=\"true\"></i></span></label>"],
27
- _tmpl$18 = ["<div class=\"k2b-date-popover__body\">", "", "</div>"],
28
- _tmpl$19 = ["<div class=\"k2b-date-actions\">", "<button type=\"button\" class=\"k2b-date-apply\"", ">", "</button></div>"],
29
- _tmpl$20 = ["<span class=\"k2b-date-range-value\"><span>", "</span><i class=\"ti ti-arrow-narrow-right\" aria-hidden=\"true\"></i><span>", "</span></span>"],
30
- _tmpl$21 = ["<span class=\"k2b-date-duration\"><i class=\"ti ti-hourglass-low\" aria-hidden=\"true\"></i>", "</span>"],
31
- _tmpl$22 = ["<div class=\"k2b-date-range-times\">", "", "</div>"],
32
- _tmpl$23 = ["<div class=\"k2b-date-durations\" role=\"group\"", ">", "</div>"];
24
+ _tmpl$14 = ["<span class=\"k2b-date-weekend\" style=\"", "\"></span>"],
25
+ _tmpl$15 = ["<span", ">", "</span>"],
26
+ _tmpl$16 = ["<span class=\"k2b-date-weekend\" aria-hidden=\"true\" style=\"", "\"></span>"],
27
+ _tmpl$17 = ["<div class=\"k2b-date-week\" role=\"row\">", "</div>"],
28
+ _tmpl$18 = ["<button type=\"button\" role=\"gridcell\"", ">", "</button>"],
29
+ _tmpl$19 = ["<span>", "</span>"],
30
+ _tmpl$20 = ["<label class=\"k2b-date-time\">", "<span class=\"k2b-date-time__control\"><input type=\"text\" inputmode=\"numeric\"", " placeholder=\"09:00\"", "><i class=\"ti ti-clock\" aria-hidden=\"true\"></i></span></label>"],
31
+ _tmpl$21 = ["<div class=\"k2b-date-popover__body\">", "", "</div>"],
32
+ _tmpl$22 = ["<button type=\"button\" class=\"k2b-date-optional-time__remove\"", "><i class=\"ti ti-x\" aria-hidden=\"true\"></i></button>"],
33
+ _tmpl$23 = ["<div class=\"k2b-date-optional-time\"", ">", "</div>"],
34
+ _tmpl$24 = ["<div class=\"k2b-date-actions\">", "<button type=\"button\" class=\"k2b-date-apply\"", ">", "</button></div>"],
35
+ _tmpl$25 = ["<button type=\"button\" class=\"k2b-date-optional-time__add\"><i class=\"ti ti-clock-plus\" aria-hidden=\"true\"></i>", "</button>"],
36
+ _tmpl$26 = ["<span class=\"k2b-date-range-value\"><span>", "</span><i class=\"ti ti-arrow-narrow-right\" aria-hidden=\"true\"></i><span>", "</span></span>"],
37
+ _tmpl$27 = ["<span class=\"k2b-date-duration\"><i class=\"ti ti-hourglass-low\" aria-hidden=\"true\"></i>", "</span>"],
38
+ _tmpl$28 = ["<div class=\"k2b-date-range-times\">", "", "</div>"],
39
+ _tmpl$29 = ["<div class=\"k2b-date-durations\" role=\"group\"", ">", "</div>"];
33
40
  import { dates } from "@k2b/stdlib";
34
41
  import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show } from "solid-js";
35
42
  import { createFieldMeta, Field, fieldControlAria, fieldDescribedBy } from "../internal/field";
36
43
  import { returnFocus, ringOnReturn } from "../internal/focus-return";
37
44
  import { useDateConfigLocale } from "../intl/locale";
38
45
  import { resolveUiMessages, useUiMessages } from "../intl/messages";
39
- import { dateKey, displayDate, filterTimeInput, formatDateOnlyRangeDuration, formatDateTimeValue, inRange, isCompleteTime, isRangeEdge, monthDate, monthNames, msUntilNextDay, normalizeTimeInput, orderedRange, parseDateValue, pickerContext, previewRange, resolveFocusDay, splitDateTime, toDateTimeValue, yearMonth } from "./date-picker";
46
+ import { isWeekendKey } from "../intl/weekend";
47
+ import { dateKey, displayDate, filterTimeInput, formatDateOnlyRangeDuration, formatDateTimeValue, inRange, isCompleteTime, isDateKey, isRangeEdge, monthDate, monthNames, msUntilNextDay, normalizeTimeInput, parseDateValue, pickerContext, pickRangeDay, previewRange, rangeAnchor, resolveFocusDay, splitDateTime, toDateTimeValue, weekendBands, yearMonth } from "./date-picker";
40
48
  import { commitFieldValue, resolveMaybeAccessor } from "./field-contract";
41
49
  const popoverIsOpen = popover => {
42
50
  if (!popover) return false;
@@ -277,6 +285,9 @@ function DatePickerPanel(props) {
277
285
  document.addEventListener("visibilitychange", refresh);
278
286
  onCleanup(() => document.removeEventListener("visibilitychange", refresh));
279
287
  });
288
+ // The weekend columns of the locale, read from the first week so they follow the grid's first day of the week.
289
+ const weekendColumns = createMemo(() => (dayRows()[0] ?? []).map(cell => isWeekendKey(cell.key, context().locale)));
290
+ const bands = createMemo(() => weekendBands(weekendColumns()));
280
291
  let calendar;
281
292
  // Days that belong to the visible month; the roving tabindex must land on one
282
293
  // of them or the grid becomes unreachable by keyboard after month navigation.
@@ -343,17 +354,27 @@ function DatePickerPanel(props) {
343
354
  },
344
355
  get children() {
345
356
  return [_$ssr(_tmpl$1, _$escape(_$createComponent(For, {
357
+ get each() {
358
+ return bands();
359
+ },
360
+ children: band => _$ssr(_tmpl$14, _$ssrStyleProperty("grid-column:", `${_$escape(band.start, true) + 1} / span ${_$escape(band.span, true)}`))
361
+ })), _$escape(_$createComponent(For, {
346
362
  get each() {
347
363
  return weekdays();
348
364
  },
349
- children: day => _$ssr(_tmpl$14, _$escape(day))
365
+ children: (day, index) => _$ssr(_tmpl$15, _$ssrAttribute("data-weekend", weekendColumns()[index()] ? "true" : _$escape(undefined, true), false), _$escape(day))
350
366
  }))), _$ssr(_tmpl$10, _$escape(_$createComponent(For, {
367
+ get each() {
368
+ return bands();
369
+ },
370
+ children: band => _$ssr(_tmpl$16, _$ssrStyleProperty("grid-column:", `${_$escape(band.start, true) + 1} / span ${_$escape(band.span, true)}`) + _$ssrStyleProperty(";grid-row:", `1 / span ${_$escape(dayRows().length, true)}`))
371
+ })), _$escape(_$createComponent(For, {
351
372
  get each() {
352
373
  return dayRows();
353
374
  },
354
- children: week => _$ssr(_tmpl$15, _$escape(_$createComponent(For, {
375
+ children: week => _$ssr(_tmpl$17, _$escape(_$createComponent(For, {
355
376
  each: week,
356
- children: cell => {
377
+ children: (cell, cellIndex) => {
357
378
  const selected = () => props.selected?.() === cell.key;
358
379
  const range = () => props.range?.() ?? {
359
380
  start: null,
@@ -362,7 +383,7 @@ function DatePickerPanel(props) {
362
383
  const active = () => selected() || isRangeEdge(cell.key, range());
363
384
  const focusable = () => cell.key === defaultFocus();
364
385
  const today = () => cell.key === todayKey();
365
- return _$ssr(_tmpl$16, _$ssrAttribute("data-date-day", _$escape(cell.key, true), false) + _$ssrAttribute("data-date-focus", focusable() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-outside", cell.outside ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-in-range", inRange(cell.key, range()) && !active() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-today", today() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-current", today() ? "date" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", today() ? _$escape(todayLabel(cell.label), true) : _$escape(cell.label, true), false) + _$ssrAttribute("aria-selected", _$escape(active(), true), false) + _$ssrAttribute("tabindex", focusable() ? 0 : -1, false), _$escape(cell.number));
386
+ return _$ssr(_tmpl$18, _$ssrAttribute("data-date-day", _$escape(cell.key, true), false) + _$ssrAttribute("data-date-focus", focusable() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-outside", cell.outside ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-weekend", weekendColumns()[cellIndex()] ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-in-range", inRange(cell.key, range()) && !active() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-today", today() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-current", today() ? "date" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", today() ? _$escape(todayLabel(cell.label), true) : _$escape(cell.label, true), false) + _$ssrAttribute("aria-selected", _$escape(active(), true), false) + _$ssrAttribute("tabindex", focusable() ? 0 : -1, false), _$escape(cell.number));
366
387
  }
367
388
  })))
368
389
  })))];
@@ -371,12 +392,12 @@ function DatePickerPanel(props) {
371
392
  }
372
393
  function TimeInput(props) {
373
394
  const messages = useUiMessages();
374
- return _$ssr(_tmpl$17, _$escape(_$createComponent(Show, {
395
+ return _$ssr(_tmpl$20, _$escape(_$createComponent(Show, {
375
396
  get when() {
376
397
  return props.label;
377
398
  },
378
399
  get children() {
379
- return _$ssr(_tmpl$14, _$escape(props.label));
400
+ return _$ssr(_tmpl$19, _$escape(props.label));
380
401
  }
381
402
  })), _$ssrAttribute("value", _$escape(props.time, true), false), _$ssrAttribute("aria-label", props.label ? _$escape(messages().timeLabel({
382
403
  label: props.label
@@ -399,7 +420,7 @@ export function DatePicker(props) {
399
420
  get wide() {
400
421
  return Boolean(props.presets?.length);
401
422
  },
402
- children: close => _$ssr(_tmpl$18, _$escape(_$createComponent(PresetRail, {
423
+ children: close => _$ssr(_tmpl$21, _$escape(_$createComponent(PresetRail, {
403
424
  get presets() {
404
425
  return props.presets;
405
426
  },
@@ -427,19 +448,38 @@ export function DateTimePicker(props) {
427
448
  const value = () => resolveMaybeAccessor(props.value);
428
449
  const dateConfig = useDateConfigLocale(() => props.dateConfig);
429
450
  const parts = () => splitDateTime(value(), dateConfig());
451
+ const defaultTime = () => props.defaultTime ?? "09:00";
452
+ // Without `optionalTime` every value has a time; with it a date key has none.
453
+ const valueHasTime = () => !props.optionalTime || Boolean(value()) && !isDateKey(value());
430
454
  const [visibleMonth, setVisibleMonth] = createSignal(parseDateValue(parts().date, dateConfig()));
431
455
  const [draftDate, setDraftDate] = createSignal(parts().date);
432
- const [draftTime, setDraftTime] = createSignal(parts().time || "09:00");
433
- const valueLabel = () => formatDateTimeValue(value(), dateConfig());
456
+ const [draftTime, setDraftTime] = createSignal(parts().time || defaultTime());
457
+ const [withTime, setWithTime] = createSignal(valueHasTime());
458
+ const valueLabel = () => valueHasTime() ? formatDateTimeValue(value(), dateConfig()) : displayDate(value(), dateConfig());
459
+ let addTimeButton;
460
+ let timeField;
434
461
  const syncDraft = () => {
435
462
  const next = parts();
436
463
  setDraftDate(next.date);
437
- setDraftTime(next.time || "09:00");
464
+ setDraftTime(next.time || defaultTime());
465
+ setWithTime(valueHasTime());
438
466
  setVisibleMonth(parseDateValue(next.date, dateConfig()));
439
467
  };
468
+ const canApply = () => Boolean(draftDate()) && (!withTime() || isCompleteTime(draftTime()));
469
+ const draftValue = () => withTime() ? toDateTimeValue(draftDate(), draftTime(), dateConfig()) : draftDate() || null;
470
+ const addTime = () => {
471
+ setWithTime(true);
472
+ queueMicrotask(() => timeField?.querySelector("input")?.focus());
473
+ };
474
+ const removeTime = () => {
475
+ setWithTime(false);
476
+ queueMicrotask(() => addTimeButton?.focus());
477
+ };
440
478
  return _$createComponent(PickerShell, {
441
479
  owner: props,
442
- icon: "ti ti-calendar-time",
480
+ get icon() {
481
+ return props.optionalTime && !valueHasTime() ? "ti ti-calendar" : "ti ti-calendar-time";
482
+ },
443
483
  valueLabel: valueLabel,
444
484
  get valueContent() {
445
485
  return props.renderValue ? () => props.renderValue(value()) : undefined;
@@ -452,32 +492,67 @@ export function DateTimePicker(props) {
452
492
  get wide() {
453
493
  return Boolean(props.presets?.length);
454
494
  },
455
- children: close => [_$ssr(_tmpl$18, _$escape(_$createComponent(PresetRail, {
456
- get presets() {
457
- return props.presets;
458
- },
459
- onSelect: value => {
495
+ children: close => {
496
+ const apply = () => {
497
+ if (!canApply()) return;
498
+ const next = draftValue();
460
499
  close();
461
- commitFieldValue(props, value);
462
- }
463
- })), _$escape(_$createComponent(DatePickerPanel, {
464
- visibleMonth: visibleMonth,
465
- setVisibleMonth: setVisibleMonth,
466
- selected: draftDate,
467
- focusDate: draftDate,
468
- onSelect: value => {
469
- setDraftDate(value);
470
- setVisibleMonth(parseDateValue(value, dateConfig()));
471
- },
472
- get dateConfig() {
473
- return dateConfig();
474
- }
475
- }))), _$ssr(_tmpl$19, _$escape(_$createComponent(TimeInput, {
476
- get time() {
477
- return draftTime();
478
- },
479
- onChange: setDraftTime
480
- })), _$ssrAttribute("disabled", !draftDate() || !isCompleteTime(draftTime()), true), _$escape(messages().apply))]
500
+ commitFieldValue(props, next);
501
+ };
502
+ return [_$ssr(_tmpl$21, _$escape(_$createComponent(PresetRail, {
503
+ get presets() {
504
+ return props.presets;
505
+ },
506
+ onSelect: value => {
507
+ close();
508
+ commitFieldValue(props, value);
509
+ }
510
+ })), _$escape(_$createComponent(DatePickerPanel, {
511
+ visibleMonth: visibleMonth,
512
+ setVisibleMonth: setVisibleMonth,
513
+ selected: draftDate,
514
+ focusDate: draftDate,
515
+ onSelect: value => {
516
+ setDraftDate(value);
517
+ setVisibleMonth(parseDateValue(value, dateConfig()));
518
+ // A date without a time is complete with the day, as in the date picker.
519
+ if (props.optionalTime && !withTime()) apply();
520
+ },
521
+ get dateConfig() {
522
+ return dateConfig();
523
+ }
524
+ }))), _$ssr(_tmpl$24, _$escape(_$createComponent(Show, {
525
+ get when() {
526
+ return props.optionalTime;
527
+ },
528
+ get fallback() {
529
+ return _$createComponent(TimeInput, {
530
+ get time() {
531
+ return draftTime();
532
+ },
533
+ onChange: setDraftTime
534
+ });
535
+ },
536
+ get children() {
537
+ return _$ssr(_tmpl$23, _$ssrAttribute("data-with-time", withTime() ? "true" : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
538
+ get when() {
539
+ return withTime();
540
+ },
541
+ get fallback() {
542
+ return _$ssr(_tmpl$25, _$escape(messages().addTime));
543
+ },
544
+ get children() {
545
+ return [_$createComponent(TimeInput, {
546
+ get time() {
547
+ return draftTime();
548
+ },
549
+ onChange: setDraftTime
550
+ }), _$ssr(_tmpl$22, _$ssrAttribute("aria-label", _$escape(messages().removeTime, true), false) + _$ssrAttribute("title", _$escape(messages().removeTime, true), false))];
551
+ }
552
+ })));
553
+ }
554
+ })), _$ssrAttribute("disabled", !canApply(), true), _$escape(messages().apply))];
555
+ }
481
556
  });
482
557
  }
483
558
  export function DateRangePicker(props) {
@@ -500,16 +575,19 @@ export function DateRangePicker(props) {
500
575
  start: parts().start.date || null,
501
576
  end: parts().end.date || null
502
577
  });
578
+ // The day of the last click that started a one-day range; the next click on another day extends from it.
579
+ const [anchor, setAnchor] = createSignal(null);
503
580
  const [previewDate, setPreviewDate] = createSignal(null);
504
581
  const [startTime, setStartTime] = createSignal(parts().start.time || "09:00");
505
582
  const [endTime, setEndTime] = createSignal(parts().end.time || "10:00");
506
- const displayRange = createMemo(() => previewRange(draftRange(), previewDate()));
583
+ const displayRange = createMemo(() => previewRange(draftRange(), anchor(), previewDate()));
507
584
  const syncDraft = () => {
508
585
  const next = parts();
509
586
  setDraftRange({
510
587
  start: next.start.date || null,
511
588
  end: next.end.date || null
512
589
  });
590
+ setAnchor(null);
513
591
  setPreviewDate(null);
514
592
  setStartTime(next.start.time || "09:00");
515
593
  setEndTime(next.end.time || "10:00");
@@ -522,18 +600,12 @@ export function DateRangePicker(props) {
522
600
  };
523
601
  const valueContent = () => {
524
602
  const format = withTime() ? formatDateTimeValue : displayDate;
525
- return _$ssr(_tmpl$20, value().start ? _$escape(format(value().start, dateConfig())) : _$escape(messages().start), value().end ? _$escape(format(value().end, dateConfig())) : "End");
603
+ return _$ssr(_tmpl$26, value().start ? _$escape(format(value().start, dateConfig())) : _$escape(messages().start), value().end ? _$escape(format(value().end, dateConfig())) : "End");
526
604
  };
527
605
  const selectDate = value => {
528
- const current = draftRange();
529
- if (!current.start || current.end) {
530
- setDraftRange({
531
- start: value,
532
- end: null
533
- });
534
- } else {
535
- setDraftRange(orderedRange(current.start, value));
536
- }
606
+ const next = pickRangeDay(draftRange(), anchor(), value);
607
+ setDraftRange(next.range);
608
+ setAnchor(next.anchor);
537
609
  setPreviewDate(null);
538
610
  };
539
611
  const applyDuration = minutes => {
@@ -598,14 +670,14 @@ export function DateRangePicker(props) {
598
670
  return durationLabel();
599
671
  },
600
672
  get children() {
601
- return _$ssr(_tmpl$21, _$escape(durationLabel()));
673
+ return _$ssr(_tmpl$27, _$escape(durationLabel()));
602
674
  }
603
675
  }),
604
676
  onOpen: syncDraft,
605
677
  get wide() {
606
678
  return Boolean(props.datePresets?.length || props.presets?.length);
607
679
  },
608
- children: close => [_$ssr(_tmpl$18, _$escape(_$createComponent(Show, {
680
+ children: close => [_$ssr(_tmpl$21, _$escape(_$createComponent(Show, {
609
681
  get when() {
610
682
  return props.datePresets?.length;
611
683
  },
@@ -643,10 +715,7 @@ export function DateRangePicker(props) {
643
715
  range: displayRange,
644
716
  focusDate: () => draftRange().start,
645
717
  onSelect: selectDate,
646
- onDayPreview: value => {
647
- const current = draftRange();
648
- setPreviewDate(current.start && !current.end ? value : null);
649
- },
718
+ onDayPreview: value => setPreviewDate(rangeAnchor(draftRange(), anchor()) ? value : null),
650
719
  get dateConfig() {
651
720
  return dateConfig();
652
721
  }
@@ -655,7 +724,7 @@ export function DateRangePicker(props) {
655
724
  return withTime();
656
725
  },
657
726
  get children() {
658
- return _$ssr(_tmpl$22, _$escape(_$createComponent(TimeInput, {
727
+ return _$ssr(_tmpl$28, _$escape(_$createComponent(TimeInput, {
659
728
  get label() {
660
729
  return messages().start;
661
730
  },
@@ -673,12 +742,12 @@ export function DateRangePicker(props) {
673
742
  onChange: setEndTime
674
743
  })));
675
744
  }
676
- }), _$ssr(_tmpl$19, _$escape(_$createComponent(Show, {
745
+ }), _$ssr(_tmpl$24, _$escape(_$createComponent(Show, {
677
746
  get when() {
678
747
  return _$memo(() => !!withTime())() && props.durationPresets?.length;
679
748
  },
680
749
  get children() {
681
- return _$ssr(_tmpl$23, _$ssrAttribute("aria-label", _$escape(messages().durationPresets, true), false), _$escape(_$createComponent(For, {
750
+ return _$ssr(_tmpl$29, _$ssrAttribute("aria-label", _$escape(messages().durationPresets, true), false), _$escape(_$createComponent(For, {
682
751
  get each() {
683
752
  return props.durationPresets;
684
753
  },