bits-ui 1.7.0 → 2.1.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 (289) hide show
  1. package/dist/bits/accordion/accordion.svelte.d.ts +56 -53
  2. package/dist/bits/accordion/accordion.svelte.js +78 -89
  3. package/dist/bits/accordion/components/accordion-content.svelte +5 -3
  4. package/dist/bits/accordion/components/accordion-header.svelte +4 -2
  5. package/dist/bits/accordion/components/accordion-item.svelte +6 -3
  6. package/dist/bits/accordion/components/accordion-trigger.svelte +4 -2
  7. package/dist/bits/accordion/components/accordion.svelte +4 -2
  8. package/dist/bits/alert-dialog/components/alert-dialog-action.svelte +4 -2
  9. package/dist/bits/alert-dialog/components/alert-dialog-cancel.svelte +4 -2
  10. package/dist/bits/alert-dialog/components/alert-dialog-content.svelte +8 -3
  11. package/dist/bits/aspect-ratio/aspect-ratio.svelte.js +2 -2
  12. package/dist/bits/aspect-ratio/components/aspect-ratio.svelte +4 -2
  13. package/dist/bits/avatar/avatar.svelte.js +4 -4
  14. package/dist/bits/avatar/components/avatar-fallback.svelte +4 -2
  15. package/dist/bits/avatar/components/avatar-image.svelte +4 -2
  16. package/dist/bits/avatar/components/avatar.svelte +4 -2
  17. package/dist/bits/button/components/button.svelte +1 -1
  18. package/dist/bits/calendar/calendar.svelte.d.ts +1 -9
  19. package/dist/bits/calendar/calendar.svelte.js +47 -38
  20. package/dist/bits/calendar/components/calendar-cell.svelte +4 -2
  21. package/dist/bits/calendar/components/calendar-day.svelte +4 -2
  22. package/dist/bits/calendar/components/calendar-grid-body.svelte +4 -2
  23. package/dist/bits/calendar/components/calendar-grid-head.svelte +4 -2
  24. package/dist/bits/calendar/components/calendar-grid-row.svelte +4 -2
  25. package/dist/bits/calendar/components/calendar-grid.svelte +4 -2
  26. package/dist/bits/calendar/components/calendar-head-cell.svelte +4 -2
  27. package/dist/bits/calendar/components/calendar-header.svelte +4 -2
  28. package/dist/bits/calendar/components/calendar-heading.svelte +4 -2
  29. package/dist/bits/calendar/components/calendar-next-button.svelte +4 -2
  30. package/dist/bits/calendar/components/calendar-prev-button.svelte +4 -2
  31. package/dist/bits/checkbox/checkbox.svelte.js +4 -14
  32. package/dist/bits/checkbox/components/checkbox-group-label.svelte +4 -2
  33. package/dist/bits/checkbox/components/checkbox-group.svelte +4 -2
  34. package/dist/bits/checkbox/components/checkbox.svelte +4 -2
  35. package/dist/bits/collapsible/collapsible.svelte.js +4 -10
  36. package/dist/bits/collapsible/components/collapsible-content.svelte +5 -3
  37. package/dist/bits/collapsible/components/collapsible-trigger.svelte +4 -2
  38. package/dist/bits/collapsible/components/collapsible.svelte +4 -2
  39. package/dist/bits/combobox/components/combobox-input.svelte +1 -1
  40. package/dist/bits/combobox/components/combobox.svelte +1 -1
  41. package/dist/bits/command/command.svelte.js +13 -45
  42. package/dist/bits/command/components/_command-label.svelte +6 -7
  43. package/dist/bits/command/components/_command-label.svelte.d.ts +1 -1
  44. package/dist/bits/command/components/command-empty.svelte +4 -2
  45. package/dist/bits/command/components/command-group-heading.svelte +4 -2
  46. package/dist/bits/command/components/command-group-items.svelte +4 -2
  47. package/dist/bits/command/components/command-group.svelte +4 -2
  48. package/dist/bits/command/components/command-input.svelte +4 -2
  49. package/dist/bits/command/components/command-item.svelte +4 -2
  50. package/dist/bits/command/components/command-link-item.svelte +4 -2
  51. package/dist/bits/command/components/command-list.svelte +4 -2
  52. package/dist/bits/command/components/command-loading.svelte +4 -2
  53. package/dist/bits/command/components/command-separator.svelte +4 -2
  54. package/dist/bits/command/components/command-viewport.svelte +4 -2
  55. package/dist/bits/command/components/command.svelte +4 -2
  56. package/dist/bits/context-menu/components/context-menu-content-static.svelte +2 -3
  57. package/dist/bits/context-menu/components/context-menu-content.svelte +2 -3
  58. package/dist/bits/context-menu/components/context-menu-trigger.svelte +1 -1
  59. package/dist/bits/date-field/components/date-field-input.svelte +4 -2
  60. package/dist/bits/date-field/components/date-field-label.svelte +4 -2
  61. package/dist/bits/date-field/components/date-field-segment.svelte +4 -2
  62. package/dist/bits/date-field/date-field.svelte.d.ts +4 -4
  63. package/dist/bits/date-field/date-field.svelte.js +15 -33
  64. package/dist/bits/date-picker/components/date-picker-calendar.svelte +4 -2
  65. package/dist/bits/date-range-field/components/date-range-field-input.svelte +4 -2
  66. package/dist/bits/date-range-field/components/date-range-field-label.svelte +4 -2
  67. package/dist/bits/date-range-field/components/date-range-field.svelte +4 -2
  68. package/dist/bits/date-range-field/date-range-field.svelte.js +3 -13
  69. package/dist/bits/date-range-picker/components/date-range-picker-calendar.svelte +4 -2
  70. package/dist/bits/dialog/components/dialog-close.svelte +4 -2
  71. package/dist/bits/dialog/components/dialog-content.svelte +8 -2
  72. package/dist/bits/dialog/components/dialog-description.svelte +4 -2
  73. package/dist/bits/dialog/components/dialog-overlay.svelte +8 -3
  74. package/dist/bits/dialog/components/dialog-title.svelte +4 -2
  75. package/dist/bits/dialog/components/dialog-trigger.svelte +4 -2
  76. package/dist/bits/dialog/dialog.svelte.d.ts +1 -1
  77. package/dist/bits/dialog/dialog.svelte.js +19 -47
  78. package/dist/bits/dropdown-menu/components/dropdown-menu-content-static.svelte +6 -5
  79. package/dist/bits/dropdown-menu/components/dropdown-menu-content.svelte +6 -5
  80. package/dist/bits/index.d.ts +2 -0
  81. package/dist/bits/index.js +2 -0
  82. package/dist/bits/label/components/label.svelte +4 -2
  83. package/dist/bits/label/label.svelte.js +2 -2
  84. package/dist/bits/link-preview/components/link-preview-content-static.svelte +6 -2
  85. package/dist/bits/link-preview/components/link-preview-content.svelte +6 -2
  86. package/dist/bits/link-preview/components/link-preview-trigger.svelte +5 -3
  87. package/dist/bits/link-preview/link-preview.svelte.js +3 -14
  88. package/dist/bits/menu/components/menu-checkbox-group.svelte +4 -2
  89. package/dist/bits/menu/components/menu-checkbox-item.svelte +6 -4
  90. package/dist/bits/menu/components/menu-content-static.svelte +6 -5
  91. package/dist/bits/menu/components/menu-content.svelte +6 -5
  92. package/dist/bits/menu/components/menu-group-heading.svelte +4 -2
  93. package/dist/bits/menu/components/menu-group.svelte +4 -2
  94. package/dist/bits/menu/components/menu-item.svelte +4 -2
  95. package/dist/bits/menu/components/menu-radio-group.svelte +4 -2
  96. package/dist/bits/menu/components/menu-radio-item.svelte +4 -2
  97. package/dist/bits/menu/components/menu-separator.svelte +4 -2
  98. package/dist/bits/menu/components/menu-sub-content-static.svelte +6 -5
  99. package/dist/bits/menu/components/menu-sub-content.svelte +6 -5
  100. package/dist/bits/menu/components/menu-sub-trigger.svelte +6 -3
  101. package/dist/bits/menu/components/menu-trigger.svelte +5 -3
  102. package/dist/bits/menu/menu.svelte.d.ts +7 -20
  103. package/dist/bits/menu/menu.svelte.js +26 -54
  104. package/dist/bits/menubar/components/menubar-content-static.svelte +4 -2
  105. package/dist/bits/menubar/components/menubar-content.svelte +4 -2
  106. package/dist/bits/menubar/components/menubar-menu.svelte +4 -2
  107. package/dist/bits/menubar/components/menubar-trigger.svelte +14 -6
  108. package/dist/bits/menubar/components/menubar.svelte +4 -2
  109. package/dist/bits/menubar/menubar.svelte.d.ts +24 -20
  110. package/dist/bits/menubar/menubar.svelte.js +40 -56
  111. package/dist/bits/meter/components/meter.svelte +4 -2
  112. package/dist/bits/meter/meter.svelte.js +2 -2
  113. package/dist/bits/navigation-menu/components/navigation-menu-content-impl.svelte +5 -2
  114. package/dist/bits/navigation-menu/components/navigation-menu-content.svelte +8 -3
  115. package/dist/bits/navigation-menu/components/navigation-menu-indicator-impl.svelte +4 -2
  116. package/dist/bits/navigation-menu/components/navigation-menu-indicator.svelte +6 -4
  117. package/dist/bits/navigation-menu/components/navigation-menu-item.svelte +8 -3
  118. package/dist/bits/navigation-menu/components/navigation-menu-link.svelte +4 -2
  119. package/dist/bits/navigation-menu/components/navigation-menu-list.svelte +4 -2
  120. package/dist/bits/navigation-menu/components/navigation-menu-sub.svelte +4 -2
  121. package/dist/bits/navigation-menu/components/navigation-menu-trigger.svelte +4 -2
  122. package/dist/bits/navigation-menu/components/navigation-menu-viewport.svelte +7 -3
  123. package/dist/bits/navigation-menu/components/navigation-menu.svelte +4 -2
  124. package/dist/bits/navigation-menu/navigation-menu.svelte.d.ts +29 -17
  125. package/dist/bits/navigation-menu/navigation-menu.svelte.js +107 -74
  126. package/dist/bits/navigation-menu/types.d.ts +14 -7
  127. package/dist/bits/pagination/components/pagination-next-button.svelte +4 -2
  128. package/dist/bits/pagination/components/pagination-page.svelte +4 -2
  129. package/dist/bits/pagination/components/pagination-prev-button.svelte +4 -2
  130. package/dist/bits/pagination/components/pagination.svelte +4 -2
  131. package/dist/bits/pagination/pagination.svelte.js +4 -4
  132. package/dist/bits/pin-input/components/pin-input-cell.svelte +4 -2
  133. package/dist/bits/pin-input/components/pin-input.svelte +5 -3
  134. package/dist/bits/pin-input/pin-input.svelte.js +4 -10
  135. package/dist/bits/popover/components/popover-close.svelte +4 -2
  136. package/dist/bits/popover/components/popover-content-static.svelte +6 -2
  137. package/dist/bits/popover/components/popover-content.svelte +6 -2
  138. package/dist/bits/popover/components/popover-trigger.svelte +5 -3
  139. package/dist/bits/popover/popover.svelte.js +4 -18
  140. package/dist/bits/progress/components/progress.svelte +4 -2
  141. package/dist/bits/progress/progress.svelte.js +2 -2
  142. package/dist/bits/radio-group/components/radio-group-item.svelte +4 -2
  143. package/dist/bits/radio-group/components/radio-group.svelte +4 -2
  144. package/dist/bits/radio-group/radio-group.svelte.js +4 -7
  145. package/dist/bits/range-calendar/components/range-calendar-cell.svelte +4 -2
  146. package/dist/bits/range-calendar/components/range-calendar-day.svelte +4 -2
  147. package/dist/bits/range-calendar/components/range-calendar.svelte +4 -2
  148. package/dist/bits/range-calendar/range-calendar.svelte.js +4 -4
  149. package/dist/bits/scroll-area/components/scroll-area-corner.svelte +8 -2
  150. package/dist/bits/scroll-area/components/scroll-area-scrollbar-auto.svelte +4 -1
  151. package/dist/bits/scroll-area/components/scroll-area-scrollbar-hover.svelte +1 -1
  152. package/dist/bits/scroll-area/components/scroll-area-scrollbar-scroll.svelte +5 -1
  153. package/dist/bits/scroll-area/components/scroll-area-scrollbar.svelte +4 -2
  154. package/dist/bits/scroll-area/components/scroll-area-thumb.svelte +8 -3
  155. package/dist/bits/scroll-area/components/scroll-area-viewport.svelte +4 -2
  156. package/dist/bits/scroll-area/components/scroll-area.svelte +4 -2
  157. package/dist/bits/scroll-area/scroll-area.svelte.js +13 -47
  158. package/dist/bits/select/components/select-content-static.svelte +6 -2
  159. package/dist/bits/select/components/select-content.svelte +6 -2
  160. package/dist/bits/select/components/select-group-heading.svelte +3 -2
  161. package/dist/bits/select/components/select-group.svelte +4 -2
  162. package/dist/bits/select/components/select-item.svelte +4 -2
  163. package/dist/bits/select/components/select-scroll-down-button.svelte +4 -2
  164. package/dist/bits/select/components/select-scroll-up-button.svelte +4 -2
  165. package/dist/bits/select/components/select-trigger.svelte +5 -3
  166. package/dist/bits/select/components/select-viewport.svelte +4 -2
  167. package/dist/bits/select/components/select.svelte +1 -1
  168. package/dist/bits/select/select.svelte.d.ts +0 -18
  169. package/dist/bits/select/select.svelte.js +10 -43
  170. package/dist/bits/separator/components/separator.svelte +4 -2
  171. package/dist/bits/separator/separator.svelte.js +2 -2
  172. package/dist/bits/slider/components/slider-range.svelte +4 -2
  173. package/dist/bits/slider/components/slider-thumb-label.svelte +50 -0
  174. package/dist/bits/slider/components/slider-thumb-label.svelte.d.ts +4 -0
  175. package/dist/bits/slider/components/slider-thumb.svelte +4 -2
  176. package/dist/bits/slider/components/slider-tick-label.svelte +50 -0
  177. package/dist/bits/slider/components/slider-tick-label.svelte.d.ts +4 -0
  178. package/dist/bits/slider/components/slider-tick.svelte +4 -2
  179. package/dist/bits/slider/components/slider.svelte +26 -5
  180. package/dist/bits/slider/exports.d.ts +3 -1
  181. package/dist/bits/slider/exports.js +2 -0
  182. package/dist/bits/slider/helpers.d.ts +14 -0
  183. package/dist/bits/slider/helpers.js +122 -0
  184. package/dist/bits/slider/slider.svelte.d.ts +93 -6
  185. package/dist/bits/slider/slider.svelte.js +198 -101
  186. package/dist/bits/slider/types.d.ts +111 -11
  187. package/dist/bits/switch/components/switch-thumb.svelte +4 -2
  188. package/dist/bits/switch/components/switch.svelte +4 -2
  189. package/dist/bits/switch/switch.svelte.js +3 -3
  190. package/dist/bits/tabs/components/tabs-content.svelte +4 -2
  191. package/dist/bits/tabs/components/tabs-list.svelte +4 -2
  192. package/dist/bits/tabs/components/tabs-trigger.svelte +4 -2
  193. package/dist/bits/tabs/components/tabs.svelte +4 -2
  194. package/dist/bits/tabs/tabs.svelte.js +6 -6
  195. package/dist/bits/time-field/components/time-field-hidden-input.svelte +10 -0
  196. package/dist/bits/{date-field/components/date-field-error.svelte.d.ts → time-field/components/time-field-hidden-input.svelte.d.ts} +6 -14
  197. package/dist/bits/time-field/components/time-field-input.svelte +39 -0
  198. package/dist/bits/time-field/components/time-field-input.svelte.d.ts +4 -0
  199. package/dist/bits/time-field/components/time-field-label.svelte +34 -0
  200. package/dist/bits/time-field/components/time-field-label.svelte.d.ts +4 -0
  201. package/dist/bits/time-field/components/time-field-segment.svelte +37 -0
  202. package/dist/bits/time-field/components/time-field-segment.svelte.d.ts +4 -0
  203. package/dist/bits/time-field/components/time-field.svelte +94 -0
  204. package/dist/bits/time-field/components/time-field.svelte.d.ts +20 -0
  205. package/dist/bits/time-field/exports.d.ts +5 -0
  206. package/dist/bits/time-field/exports.js +4 -0
  207. package/dist/bits/time-field/index.d.ts +1 -0
  208. package/dist/bits/time-field/index.js +1 -0
  209. package/dist/bits/time-field/time-field.svelte.d.ts +415 -0
  210. package/dist/bits/time-field/time-field.svelte.js +971 -0
  211. package/dist/bits/time-field/types.d.ts +137 -0
  212. package/dist/bits/time-field/types.js +1 -0
  213. package/dist/bits/time-range-field/components/time-range-field-input.svelte +43 -0
  214. package/dist/bits/time-range-field/components/time-range-field-input.svelte.d.ts +4 -0
  215. package/dist/bits/time-range-field/components/time-range-field-label.svelte +34 -0
  216. package/dist/bits/time-range-field/components/time-range-field-label.svelte.d.ts +4 -0
  217. package/dist/bits/time-range-field/components/time-range-field.svelte +144 -0
  218. package/dist/bits/time-range-field/components/time-range-field.svelte.d.ts +20 -0
  219. package/dist/bits/time-range-field/exports.d.ts +5 -0
  220. package/dist/bits/time-range-field/exports.js +4 -0
  221. package/dist/bits/time-range-field/index.d.ts +1 -0
  222. package/dist/bits/time-range-field/index.js +1 -0
  223. package/dist/bits/time-range-field/time-range-field.svelte.d.ts +90 -0
  224. package/dist/bits/time-range-field/time-range-field.svelte.js +210 -0
  225. package/dist/bits/time-range-field/types.d.ts +150 -0
  226. package/dist/bits/time-range-field/types.js +1 -0
  227. package/dist/bits/toggle/components/toggle.svelte +4 -2
  228. package/dist/bits/toggle/toggle.svelte.js +2 -2
  229. package/dist/bits/toggle-group/components/toggle-group-item.svelte +4 -2
  230. package/dist/bits/toggle-group/components/toggle-group.svelte +4 -2
  231. package/dist/bits/toggle-group/toggle-group.svelte.js +4 -4
  232. package/dist/bits/toolbar/components/toolbar-button.svelte +4 -2
  233. package/dist/bits/toolbar/components/toolbar-group-item.svelte +4 -2
  234. package/dist/bits/toolbar/components/toolbar-group.svelte +4 -2
  235. package/dist/bits/toolbar/components/toolbar-link.svelte +4 -2
  236. package/dist/bits/toolbar/components/toolbar.svelte +4 -2
  237. package/dist/bits/toolbar/toolbar.svelte.js +7 -7
  238. package/dist/bits/tooltip/components/tooltip-content-static.svelte +6 -2
  239. package/dist/bits/tooltip/components/tooltip-content.svelte +6 -2
  240. package/dist/bits/tooltip/components/tooltip-trigger.svelte +5 -3
  241. package/dist/bits/tooltip/tooltip.svelte.js +3 -14
  242. package/dist/bits/utilities/dismissible-layer/dismissible-layer.svelte +2 -0
  243. package/dist/bits/utilities/dismissible-layer/types.d.ts +2 -0
  244. package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.d.ts +3 -3
  245. package/dist/bits/utilities/dismissible-layer/use-dismissable-layer.svelte.js +16 -25
  246. package/dist/bits/utilities/floating-layer/components/floating-layer-anchor.svelte +2 -1
  247. package/dist/bits/utilities/floating-layer/types.d.ts +1 -0
  248. package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.d.ts +3 -2
  249. package/dist/bits/utilities/floating-layer/use-floating-layer.svelte.js +5 -26
  250. package/dist/bits/utilities/focus-scope/focus-scope.svelte +2 -0
  251. package/dist/bits/utilities/focus-scope/types.d.ts +2 -0
  252. package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.d.ts +2 -1
  253. package/dist/bits/utilities/focus-scope/use-focus-scope.svelte.js +2 -8
  254. package/dist/bits/utilities/popper-layer/popper-layer-inner.svelte +4 -0
  255. package/dist/bits/utilities/popper-layer/popper-layer.svelte +3 -1
  256. package/dist/bits/utilities/presence-layer/presence-layer.svelte +2 -2
  257. package/dist/bits/utilities/presence-layer/types.d.ts +2 -1
  258. package/dist/bits/utilities/presence-layer/use-presence.svelte.d.ts +1 -1
  259. package/dist/bits/utilities/presence-layer/use-presence.svelte.js +19 -36
  260. package/dist/bits/utilities/text-selection-layer/text-selection-layer.svelte +2 -0
  261. package/dist/bits/utilities/text-selection-layer/types.d.ts +2 -0
  262. package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.d.ts +3 -1
  263. package/dist/bits/utilities/text-selection-layer/use-text-selection-layer.svelte.js +2 -8
  264. package/dist/index.d.ts +1 -1
  265. package/dist/index.js +1 -1
  266. package/dist/internal/create-id.d.ts +8 -0
  267. package/dist/internal/create-id.js +5 -0
  268. package/dist/internal/date-time/field/helpers.d.ts +1 -0
  269. package/dist/internal/date-time/field/helpers.js +8 -2
  270. package/dist/internal/date-time/field/parts.d.ts +3 -1
  271. package/dist/internal/date-time/field/parts.js +10 -2
  272. package/dist/internal/date-time/field/segments.d.ts +9 -0
  273. package/dist/internal/date-time/field/segments.js +65 -0
  274. package/dist/internal/date-time/field/time-helpers.d.ts +77 -0
  275. package/dist/internal/date-time/field/time-helpers.js +301 -0
  276. package/dist/internal/date-time/field/types.d.ts +2 -2
  277. package/dist/internal/date-time/formatter.d.ts +11 -1
  278. package/dist/internal/date-time/formatter.js +56 -0
  279. package/dist/internal/date-time/utils.d.ts +7 -2
  280. package/dist/internal/date-time/utils.js +15 -1
  281. package/dist/internal/dom-context.svelte.d.ts +9 -0
  282. package/dist/internal/dom-context.svelte.js +26 -0
  283. package/dist/internal/use-roving-focus.svelte.d.ts +3 -3
  284. package/dist/internal/use-roving-focus.svelte.js +10 -11
  285. package/dist/shared/date/types.d.ts +27 -4
  286. package/dist/shared/index.d.ts +9 -2
  287. package/dist/types.d.ts +2 -0
  288. package/package.json +18 -16
  289. package/dist/bits/date-field/components/date-field-error.svelte +0 -0
@@ -0,0 +1,137 @@
1
+ import type { Time } from "@internationalized/date";
2
+ import type { EditableSegmentPart, WithChildren } from "../../shared/index.js";
3
+ import type { OnChangeFn, WithChild, Without } from "../../internal/types.js";
4
+ import type { BitsPrimitiveDivAttributes, BitsPrimitiveSpanAttributes } from "../../shared/attributes.js";
5
+ import type { TimeGranularity, TimeOnInvalid, TimeSegmentPart, TimeValidator, TimeValue } from "../../shared/date/types.js";
6
+ export type TimeFieldRootPropsWithoutHTML<T extends TimeValue = Time> = WithChildren<{
7
+ /**
8
+ * The value of the time field.
9
+ *
10
+ * @bindable
11
+ */
12
+ value?: T;
13
+ /**
14
+ * A callback that is called when the time field value changes.
15
+ *
16
+ */
17
+ onValueChange?: OnChangeFn<T | undefined>;
18
+ /**
19
+ * The placeholder value of the time field. This determines the format
20
+ * and what time the field starts at when it is empty.
21
+ *
22
+ * @bindable
23
+ */
24
+ placeholder?: TimeValue;
25
+ /**
26
+ * A callback that is called when the time field's placeholder value changes.
27
+ */
28
+ onPlaceholderChange?: OnChangeFn<TimeValue | undefined>;
29
+ /**
30
+ * A function that returns a string or array of strings as validation errors if the time is
31
+ * invalid, or nothing if the time is valid
32
+ */
33
+ validate?: TimeValidator<T>;
34
+ /**
35
+ * A callback fired when the time field's value is invalid. Use this to display an error
36
+ * message to the user.
37
+ */
38
+ onInvalid?: TimeOnInvalid;
39
+ /**
40
+ * The minimum acceptable time. When provided, the time field
41
+ * will be marked as invalid if the user enters a time before this time.
42
+ */
43
+ minValue?: TimeValue;
44
+ /**
45
+ * The maximum acceptable time. When provided, the time field
46
+ * will be marked as invalid if the user enters a time after this time.
47
+ */
48
+ maxValue?: TimeValue;
49
+ /**
50
+ * If true, the time field will be disabled and users will not be able
51
+ * to interact with it. This also disables the hidden input element if
52
+ * the time field is used in a form.
53
+ *
54
+ * @defaultValue false
55
+ */
56
+ disabled?: boolean;
57
+ /**
58
+ * If true, the time field will be readonly, and users will not be able to
59
+ * edit the values of any of the individual segments.
60
+ *
61
+ * @defaultValue false
62
+ */
63
+ readonly?: boolean;
64
+ /**
65
+ * An array of segment names that should be readonly. If provided, only the
66
+ * segments not in this array will be editable.
67
+ */
68
+ readonlySegments?: EditableSegmentPart[];
69
+ /**
70
+ * The format to use for displaying the time in the input.
71
+ * If using a 12 hour clock, ensure you also include the `dayPeriod`
72
+ * segment in your input to ensure the user can select AM/PM.
73
+ *
74
+ * @defaultValue the locale's default time format
75
+ */
76
+ hourCycle?: 12 | 24;
77
+ /**
78
+ * The locale to use for formatting the time field.
79
+ *
80
+ * @defaultValue 'en'
81
+ */
82
+ locale?: string;
83
+ /**
84
+ * The granularity of the time field. This determines which
85
+ * segments will be includes in the segments array used to
86
+ * build the time field.
87
+ *
88
+ * Granularity is only used for visual purposes, and does not impact
89
+ * the value of the time field. You can have the same value synced
90
+ * between multiple time fields with different granularities and they
91
+ * will all contain the same value.
92
+ *
93
+ * @default 'minute'
94
+ */
95
+ granularity?: TimeGranularity;
96
+ /**
97
+ * Whether or not to hide the timeZoneName segment from the time field.
98
+ *
99
+ * @default false;
100
+ */
101
+ hideTimeZone?: boolean;
102
+ /**
103
+ * Whether or not the hidden input of the time field requires a value
104
+ * to be submitted.
105
+ *
106
+ * @defaultValue false
107
+ */
108
+ required?: boolean;
109
+ /**
110
+ * The `id` of the element which contains the error messages for the time field when the
111
+ * time is invalid.
112
+ */
113
+ errorMessageId?: string;
114
+ }>;
115
+ export type TimeFieldRootProps<T extends TimeValue = Time> = TimeFieldRootPropsWithoutHTML<T>;
116
+ export type TimeFieldInputSnippetProps = {
117
+ segments: Array<{
118
+ part: TimeSegmentPart;
119
+ value: string;
120
+ }>;
121
+ };
122
+ export type TimeFieldInputPropsWithoutHTML = WithChild<{
123
+ /**
124
+ * The name to use for the hidden input element of the time field,
125
+ * which is used to submit the ISO string value of the time field
126
+ * to a server. If not provided, the hidden input element will not
127
+ * be rendered.
128
+ */
129
+ name?: string;
130
+ }, TimeFieldInputSnippetProps>;
131
+ export type TimeFieldInputProps = TimeFieldInputPropsWithoutHTML & Without<BitsPrimitiveDivAttributes, TimeFieldInputPropsWithoutHTML>;
132
+ export type TimeFieldSegmentPropsWithoutHTML = WithChild<{
133
+ part: TimeSegmentPart;
134
+ }>;
135
+ export type TimeFieldSegmentProps = TimeFieldSegmentPropsWithoutHTML & Without<BitsPrimitiveSpanAttributes, TimeFieldSegmentPropsWithoutHTML>;
136
+ export type TimeFieldLabelPropsWithoutHTML = WithChild;
137
+ export type TimeFieldLabelProps = TimeFieldLabelPropsWithoutHTML & Without<BitsPrimitiveDivAttributes, TimeFieldLabelPropsWithoutHTML>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ <script lang="ts">
2
+ import { box, mergeProps } from "svelte-toolbelt";
3
+ import type { TimeRangeFieldInputProps } from "../types.js";
4
+ import { useTimeRangeFieldInput } from "../time-range-field.svelte.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
+ import TimeFieldHiddenInput from "../../time-field/components/time-field-hidden-input.svelte";
7
+
8
+ const uid = $props.id();
9
+
10
+ let {
11
+ id = createId(uid),
12
+ ref = $bindable(null),
13
+ name = "",
14
+ child,
15
+ children,
16
+ type,
17
+ ...restProps
18
+ }: TimeRangeFieldInputProps = $props();
19
+
20
+ const inputState = useTimeRangeFieldInput(
21
+ {
22
+ id: box.with(() => id),
23
+ ref: box.with(
24
+ () => ref,
25
+ (v) => (ref = v)
26
+ ),
27
+ name: box.with(() => name),
28
+ },
29
+ type
30
+ );
31
+
32
+ const mergedProps = $derived(mergeProps(restProps, inputState.props, { role: "presentation" }));
33
+ </script>
34
+
35
+ {#if child}
36
+ {@render child({ props: mergedProps, segments: inputState.root.segmentContents })}
37
+ {:else}
38
+ <div {...mergedProps}>
39
+ {@render children?.({ segments: inputState.root.segmentContents })}
40
+ </div>
41
+ {/if}
42
+
43
+ <TimeFieldHiddenInput />
@@ -0,0 +1,4 @@
1
+ import type { TimeRangeFieldInputProps } from "../types.js";
2
+ declare const TimeRangeFieldInput: import("svelte").Component<TimeRangeFieldInputProps, {}, "ref">;
3
+ type TimeRangeFieldInput = ReturnType<typeof TimeRangeFieldInput>;
4
+ export default TimeRangeFieldInput;
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ import { box, mergeProps } from "svelte-toolbelt";
3
+ import { useTimeRangeFieldLabel } from "../time-range-field.svelte.js";
4
+ import type { TimeRangeFieldLabelProps } from "../types.js";
5
+ import { createId } from "../../../internal/create-id.js";
6
+
7
+ const uid = $props.id();
8
+
9
+ let {
10
+ id = createId(uid),
11
+ ref = $bindable(null),
12
+ children,
13
+ child,
14
+ ...restProps
15
+ }: TimeRangeFieldLabelProps = $props();
16
+
17
+ const labelState = useTimeRangeFieldLabel({
18
+ id: box.with(() => id),
19
+ ref: box.with(
20
+ () => ref,
21
+ (v) => (ref = v)
22
+ ),
23
+ });
24
+
25
+ const mergedProps = $derived(mergeProps(restProps, labelState.props));
26
+ </script>
27
+
28
+ {#if child}
29
+ {@render child({ props: mergedProps })}
30
+ {:else}
31
+ <span {...mergedProps}>
32
+ {@render children?.()}
33
+ </span>
34
+ {/if}
@@ -0,0 +1,4 @@
1
+ import type { TimeRangeFieldLabelProps } from "../types.js";
2
+ declare const TimeRangeFieldLabel: import("svelte").Component<TimeRangeFieldLabelProps, {}, "ref">;
3
+ type TimeRangeFieldLabel = ReturnType<typeof TimeRangeFieldLabel>;
4
+ export default TimeRangeFieldLabel;
@@ -0,0 +1,144 @@
1
+ <script lang="ts" module>
2
+ import type { TimeRange, TimeValue } from "../../../shared/date/types.js";
3
+ import type { Time } from "@internationalized/date";
4
+
5
+ type T = unknown;
6
+ </script>
7
+
8
+ <script lang="ts" generics="T extends TimeValue = Time">
9
+ import { box, mergeProps } from "svelte-toolbelt";
10
+ import { useTimeRangeFieldRoot } from "../time-range-field.svelte.js";
11
+ import type { TimeRangeFieldRootProps } from "../types.js";
12
+ import { createId } from "../../../internal/create-id.js";
13
+ import { noop } from "../../../internal/noop.js";
14
+ import { getDefaultTime } from "../../../internal/date-time/utils.js";
15
+ import { watch } from "runed";
16
+
17
+ const uid = $props.id();
18
+
19
+ let {
20
+ id = createId(uid),
21
+ ref = $bindable(null),
22
+ value = $bindable(),
23
+ onValueChange = noop,
24
+ placeholder = $bindable(),
25
+ onPlaceholderChange = noop,
26
+ disabled = false,
27
+ readonly = false,
28
+ required = false,
29
+ hourCycle,
30
+ granularity,
31
+ locale = "en-US",
32
+ hideTimeZone = false,
33
+ validate = noop,
34
+ onInvalid = noop,
35
+ maxValue,
36
+ minValue,
37
+ readonlySegments = [],
38
+ children,
39
+ child,
40
+ onStartValueChange = noop,
41
+ onEndValueChange = noop,
42
+ errorMessageId,
43
+ ...restProps
44
+ }: TimeRangeFieldRootProps<T> = $props();
45
+
46
+ let startValue = $state<T | undefined>(value?.start);
47
+ let endValue = $state<T | undefined>(value?.end);
48
+
49
+ function handleDefaultPlaceholder() {
50
+ if (placeholder !== undefined) return;
51
+ const defaultPlaceholder = getDefaultTime({ granularity, defaultValue: value?.start });
52
+ placeholder = defaultPlaceholder;
53
+ }
54
+
55
+ // SSR
56
+ handleDefaultPlaceholder();
57
+
58
+ watch.pre(
59
+ () => placeholder,
60
+ () => {
61
+ handleDefaultPlaceholder();
62
+ }
63
+ );
64
+
65
+ function handleDefaultValue() {
66
+ if (value !== undefined) return;
67
+ const defaultValue = { start: undefined, end: undefined };
68
+ value = defaultValue;
69
+ }
70
+
71
+ // SSR
72
+ handleDefaultValue();
73
+
74
+ /**
75
+ * Covers an edge case where when a spread props object is reassigned,
76
+ * the props are reset to their default values, which would make value
77
+ * undefined which causes errors to be thrown.
78
+ */
79
+ watch.pre(
80
+ () => value,
81
+ () => {
82
+ handleDefaultValue();
83
+ }
84
+ );
85
+
86
+ const rootState = useTimeRangeFieldRoot({
87
+ id: box.with(() => id),
88
+ ref: box.with(
89
+ () => ref,
90
+ (v) => (ref = v)
91
+ ),
92
+ disabled: box.with(() => disabled),
93
+ readonly: box.with(() => readonly),
94
+ required: box.with(() => required),
95
+ hourCycle: box.with(() => hourCycle),
96
+ granularity: box.with(() => granularity),
97
+ locale: box.with(() => locale),
98
+ hideTimeZone: box.with(() => hideTimeZone),
99
+ validate: box.with(() => validate),
100
+ maxValue: box.with(() => maxValue),
101
+ minValue: box.with(() => minValue),
102
+ placeholder: box.with(
103
+ () => placeholder as TimeValue,
104
+ (v) => {
105
+ placeholder = v;
106
+ onPlaceholderChange(v);
107
+ }
108
+ ),
109
+ readonlySegments: box.with(() => readonlySegments),
110
+ value: box.with(
111
+ () => value as TimeRange<T>,
112
+ (v) => {
113
+ value = v;
114
+ onValueChange(v);
115
+ }
116
+ ),
117
+ startValue: box.with(
118
+ () => startValue,
119
+ (v) => {
120
+ startValue = v;
121
+ onStartValueChange(v);
122
+ }
123
+ ),
124
+ endValue: box.with(
125
+ () => endValue,
126
+ (v) => {
127
+ endValue = v;
128
+ onEndValueChange(v);
129
+ }
130
+ ),
131
+ onInvalid: box.with(() => onInvalid),
132
+ errorMessageId: box.with(() => errorMessageId),
133
+ });
134
+
135
+ const mergedProps = $derived(mergeProps(restProps, rootState.props));
136
+ </script>
137
+
138
+ {#if child}
139
+ {@render child({ props: mergedProps })}
140
+ {:else}
141
+ <div {...mergedProps}>
142
+ {@render children?.()}
143
+ </div>
144
+ {/if}
@@ -0,0 +1,20 @@
1
+ import type { TimeValue } from "../../../shared/date/types.js";
2
+ import type { Time } from "@internationalized/date";
3
+ import type { TimeRangeFieldRootProps } from "../types.js";
4
+ declare class __sveltets_Render<T extends TimeValue = Time> {
5
+ props(): TimeRangeFieldRootProps<T>;
6
+ events(): {};
7
+ slots(): {};
8
+ bindings(): "value" | "placeholder" | "ref";
9
+ exports(): {};
10
+ }
11
+ interface $$IsomorphicComponent {
12
+ new <T extends TimeValue = Time>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
13
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
14
+ } & ReturnType<__sveltets_Render<T>['exports']>;
15
+ <T extends TimeValue = Time>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
16
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
17
+ }
18
+ declare const TimeRangeField: $$IsomorphicComponent;
19
+ type TimeRangeField<T extends TimeValue = Time> = InstanceType<typeof TimeRangeField<T>>;
20
+ export default TimeRangeField;
@@ -0,0 +1,5 @@
1
+ export { default as Root } from "./components/time-range-field.svelte";
2
+ export { default as Input } from "./components/time-range-field-input.svelte";
3
+ export { default as Label } from "./components/time-range-field-label.svelte";
4
+ export { default as Segment } from "../time-field/components/time-field-segment.svelte";
5
+ export type { TimeRangeFieldRootProps as RootProps, TimeRangeFieldLabelProps as LabelProps, TimeRangeFieldInputProps as InputProps, TimeRangeFieldSegmentProps as SegmentProps, } from "./types.js";
@@ -0,0 +1,4 @@
1
+ export { default as Root } from "./components/time-range-field.svelte";
2
+ export { default as Input } from "./components/time-range-field-input.svelte";
3
+ export { default as Label } from "./components/time-range-field-label.svelte";
4
+ export { default as Segment } from "../time-field/components/time-field-segment.svelte";
@@ -0,0 +1 @@
1
+ export * as TimeRangeField from "./exports.js";
@@ -0,0 +1 @@
1
+ export * as TimeRangeField from "./exports.js";
@@ -0,0 +1,90 @@
1
+ import type { Time } from "@internationalized/date";
2
+ import { Context } from "runed";
3
+ import type { TimeFieldRootState } from "../time-field/time-field.svelte.js";
4
+ import { TimeFieldInputState } from "../time-field/time-field.svelte.js";
5
+ import type { ReadableBoxedValues, WritableBoxedValues } from "../../internal/box.svelte.js";
6
+ import type { TimeSegmentPart } from "../../shared/index.js";
7
+ import type { WithRefProps } from "../../internal/types.js";
8
+ import type { TimeGranularity, TimeOnInvalid, TimeRange, TimeRangeValidator, TimeValue } from "../../shared/date/types.js";
9
+ import { type TimeFormatter } from "../../internal/date-time/formatter.js";
10
+ export declare const TIME_RANGE_FIELD_ROOT_ATTR = "data-time-range-field-root";
11
+ type TimeRangeFieldRootStateProps<T extends TimeValue = Time> = WithRefProps<WritableBoxedValues<{
12
+ value: TimeRange<T>;
13
+ placeholder: TimeValue;
14
+ startValue: T | undefined;
15
+ endValue: T | undefined;
16
+ }> & ReadableBoxedValues<{
17
+ readonlySegments: TimeSegmentPart[];
18
+ validate: TimeRangeValidator<T> | undefined;
19
+ onInvalid: TimeOnInvalid | undefined;
20
+ minValue: TimeValue | undefined;
21
+ maxValue: TimeValue | undefined;
22
+ disabled: boolean;
23
+ readonly: boolean;
24
+ granularity: TimeGranularity | undefined;
25
+ hourCycle: 12 | 24 | undefined;
26
+ locale: string;
27
+ hideTimeZone: boolean;
28
+ required: boolean;
29
+ errorMessageId: string | undefined;
30
+ }>>;
31
+ export declare class TimeRangeFieldRootState<T extends TimeValue = Time> {
32
+ #private;
33
+ readonly opts: TimeRangeFieldRootStateProps<T>;
34
+ startFieldState: TimeFieldRootState | undefined;
35
+ endFieldState: TimeFieldRootState | undefined;
36
+ descriptionId: string;
37
+ formatter: TimeFormatter;
38
+ fieldNode: HTMLElement | null;
39
+ labelNode: HTMLElement | null;
40
+ descriptionNode: HTMLElement | null;
41
+ startValueComplete: boolean;
42
+ endValueComplete: boolean;
43
+ rangeComplete: boolean;
44
+ startValueTime: Time | undefined;
45
+ endValueTime: Time | undefined;
46
+ minValueTime: Time | undefined;
47
+ maxValueTime: Time | undefined;
48
+ constructor(opts: TimeRangeFieldRootStateProps<T>);
49
+ validationStatus: false | {
50
+ readonly reason: "custom";
51
+ readonly message: string | string[];
52
+ } | {
53
+ readonly reason: "min";
54
+ readonly message?: undefined;
55
+ } | {
56
+ readonly reason: "max";
57
+ readonly message?: undefined;
58
+ };
59
+ isInvalid: boolean;
60
+ props: {
61
+ readonly id: string;
62
+ readonly role: "group";
63
+ readonly "data-time-range-field-root": "";
64
+ readonly "data-invalid": "" | undefined;
65
+ };
66
+ }
67
+ type TimeRangeFieldLabelStateProps = WithRefProps;
68
+ declare class TimeRangeFieldLabelState {
69
+ #private;
70
+ readonly opts: TimeRangeFieldLabelStateProps;
71
+ readonly root: TimeRangeFieldRootState;
72
+ constructor(opts: TimeRangeFieldLabelStateProps, root: TimeRangeFieldRootState);
73
+ props: {
74
+ readonly id: string;
75
+ readonly "data-invalid": "" | undefined;
76
+ readonly "data-disabled": "" | undefined;
77
+ readonly "data-time-range-field-label": "";
78
+ readonly onclick: () => void;
79
+ };
80
+ }
81
+ type TimeRangeFieldInputStateProps<T extends TimeValue = Time> = WritableBoxedValues<{
82
+ value: T | undefined;
83
+ }> & ReadableBoxedValues<{
84
+ name: string;
85
+ }> & WithRefProps;
86
+ export declare const TimeRangeFieldRootContext: Context<TimeRangeFieldRootState<Time>>;
87
+ export declare function useTimeRangeFieldRoot<T extends TimeValue = Time>(props: TimeRangeFieldRootStateProps<T>): TimeRangeFieldRootState<Time>;
88
+ export declare function useTimeRangeFieldLabel(props: TimeRangeFieldLabelStateProps): TimeRangeFieldLabelState;
89
+ export declare function useTimeRangeFieldInput(props: Omit<TimeRangeFieldInputStateProps, "value">, type: "start" | "end"): TimeFieldInputState;
90
+ export {};