@sectile/vue 0.6.0 → 0.8.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 (325) hide show
  1. package/README.md +4 -2
  2. package/dist/accordion.d.ts +0 -1
  3. package/dist/alert-dialog.d.ts +0 -2
  4. package/dist/alert-dialog.js.map +1 -1
  5. package/dist/calendar.d.ts +14 -268
  6. package/dist/calendar.js +15 -15
  7. package/dist/calendar.js.map +1 -1
  8. package/dist/carousel.d.ts +22 -1
  9. package/dist/carousel.js +7 -1
  10. package/dist/carousel.js.map +1 -1
  11. package/dist/cascade-list.d.ts +339 -0
  12. package/dist/cascade-list.js +240 -0
  13. package/dist/cascade-list.js.map +1 -0
  14. package/dist/cascade-select.d.ts +11 -42
  15. package/dist/cascade-select.js +19 -27
  16. package/dist/cascade-select.js.map +1 -1
  17. package/dist/checkbox-group.d.ts +9 -1
  18. package/dist/checkbox-group.js +57 -13
  19. package/dist/checkbox-group.js.map +1 -1
  20. package/dist/checkbox.d.ts +0 -1
  21. package/dist/checkbox.js +15 -8
  22. package/dist/checkbox.js.map +1 -1
  23. package/dist/color-picker.d.ts +0 -1
  24. package/dist/combobox.d.ts +0 -1
  25. package/dist/combobox.js +46 -6
  26. package/dist/combobox.js.map +1 -1
  27. package/dist/data-grid.d.ts +214 -0
  28. package/dist/data-grid.js +107 -0
  29. package/dist/data-grid.js.map +1 -0
  30. package/dist/data-table.d.ts +232 -0
  31. package/dist/data-table.js +116 -0
  32. package/dist/data-table.js.map +1 -0
  33. package/dist/data-tree-grid.d.ts +225 -0
  34. package/dist/data-tree-grid.js +98 -0
  35. package/dist/data-tree-grid.js.map +1 -0
  36. package/dist/date-field.d.ts +2 -3
  37. package/dist/date-field.js +1 -1
  38. package/dist/date-field.js.map +1 -1
  39. package/dist/date-picker.d.ts +35 -427
  40. package/dist/date-picker.js +15 -13
  41. package/dist/date-picker.js.map +1 -1
  42. package/dist/date-range-field.d.ts +2 -3
  43. package/dist/date-range-field.js +24 -6
  44. package/dist/date-range-field.js.map +1 -1
  45. package/dist/date-range-picker.d.ts +35 -427
  46. package/dist/date-range-picker.js +15 -13
  47. package/dist/date-range-picker.js.map +1 -1
  48. package/dist/date-time-field.d.ts +2 -3
  49. package/dist/date-time-field.js +1 -1
  50. package/dist/date-time-field.js.map +1 -1
  51. package/dist/date-time-picker.d.ts +36 -428
  52. package/dist/date-time-picker.js +15 -13
  53. package/dist/date-time-picker.js.map +1 -1
  54. package/dist/date-time-range-picker.d.ts +36 -428
  55. package/dist/date-time-range-picker.js +15 -13
  56. package/dist/date-time-range-picker.js.map +1 -1
  57. package/dist/dialog.d.ts +0 -2
  58. package/dist/dialog.js.map +1 -1
  59. package/dist/disclosure.d.ts +0 -1
  60. package/dist/drawer.d.ts +1 -2
  61. package/dist/editable.d.ts +0 -1
  62. package/dist/editable.js +25 -6
  63. package/dist/editable.js.map +1 -1
  64. package/dist/feed.d.ts +0 -1
  65. package/dist/form.d.ts +88 -115
  66. package/dist/form.js +461 -233
  67. package/dist/form.js.map +1 -1
  68. package/dist/grid.d.ts +0 -1
  69. package/dist/grid.js +51 -6
  70. package/dist/grid.js.map +1 -1
  71. package/dist/host-provider.d.ts +0 -13
  72. package/dist/host-provider.js +0 -16
  73. package/dist/host-provider.js.map +1 -1
  74. package/dist/index.d.ts +14 -39
  75. package/dist/index.js +6 -19
  76. package/dist/index.js.map +1 -1
  77. package/dist/internal/cascade-choice.d.ts +204 -0
  78. package/dist/internal/cascade-choice.js +161 -0
  79. package/dist/internal/cascade-choice.js.map +1 -0
  80. package/dist/internal/collection.d.ts +3 -8
  81. package/dist/internal/collection.js +14 -20
  82. package/dist/internal/collection.js.map +1 -1
  83. package/dist/internal/controlled-state.d.ts +0 -1
  84. package/dist/internal/date-picker.d.ts +91 -141
  85. package/dist/internal/date-picker.js +146 -52
  86. package/dist/internal/date-picker.js.map +1 -1
  87. package/dist/internal/decimal-input.d.ts +1 -0
  88. package/dist/internal/decimal-input.js +24 -0
  89. package/dist/internal/decimal-input.js.map +1 -0
  90. package/dist/internal/form-control-inventory.d.ts +4 -1
  91. package/dist/internal/form-control-inventory.js +1 -0
  92. package/dist/internal/form-control-inventory.js.map +1 -1
  93. package/dist/internal/form-control.d.ts +100 -2
  94. package/dist/internal/form-control.js +103 -1
  95. package/dist/internal/form-control.js.map +1 -1
  96. package/dist/internal/native-field.d.ts +7 -8
  97. package/dist/internal/native-field.js +11 -2
  98. package/dist/internal/native-field.js.map +1 -1
  99. package/dist/internal/native-input.d.ts +0 -1
  100. package/dist/internal/part-contract.d.ts +0 -1
  101. package/dist/internal/popup.d.ts +5 -27
  102. package/dist/internal/popup.js +14 -20
  103. package/dist/internal/popup.js.map +1 -1
  104. package/dist/internal/presence.d.ts +0 -1
  105. package/dist/internal/scheduled-task.d.ts +5 -0
  106. package/dist/internal/scheduled-task.js +28 -0
  107. package/dist/internal/scheduled-task.js.map +1 -0
  108. package/dist/internal/tabs-context.d.ts +2 -3
  109. package/dist/internal/tabular-components.d.ts +27 -0
  110. package/dist/internal/tabular-components.js +26 -0
  111. package/dist/internal/tabular-components.js.map +1 -0
  112. package/dist/internal/tabular-parts.d.ts +57 -0
  113. package/dist/internal/tabular-parts.js +239 -0
  114. package/dist/internal/tabular-parts.js.map +1 -0
  115. package/dist/internal/tabular-profile.d.ts +75 -0
  116. package/dist/internal/tabular-profile.js +209 -0
  117. package/dist/internal/tabular-profile.js.map +1 -0
  118. package/dist/internal/virtual-collection-model.d.ts +42 -0
  119. package/dist/internal/virtual-collection-model.js +241 -0
  120. package/dist/internal/virtual-collection-model.js.map +1 -0
  121. package/dist/internal/virtual-collection.d.ts +38 -0
  122. package/dist/internal/virtual-collection.js +87 -0
  123. package/dist/internal/virtual-collection.js.map +1 -0
  124. package/dist/{virtual.d.ts → internal/virtual-core.d.ts} +14 -9
  125. package/dist/{virtual.js → internal/virtual-core.js} +18 -13
  126. package/dist/internal/virtual-core.js.map +1 -0
  127. package/dist/internal/virtual-list.d.ts +214 -0
  128. package/dist/internal/virtual-list.js +401 -0
  129. package/dist/internal/virtual-list.js.map +1 -0
  130. package/dist/listbox.d.ts +0 -1
  131. package/dist/listbox.js +52 -6
  132. package/dist/listbox.js.map +1 -1
  133. package/dist/menu-button.d.ts +0 -1
  134. package/dist/menu.d.ts +262 -317
  135. package/dist/menu.js +29 -23
  136. package/dist/menu.js.map +1 -1
  137. package/dist/menubar.d.ts +0 -1
  138. package/dist/meter-group.d.ts +369 -0
  139. package/dist/meter-group.js +271 -0
  140. package/dist/meter-group.js.map +1 -0
  141. package/dist/meter.d.ts +191 -0
  142. package/dist/meter.js +133 -0
  143. package/dist/meter.js.map +1 -0
  144. package/dist/month-picker.d.ts +29 -259
  145. package/dist/month-picker.js +8 -6
  146. package/dist/month-picker.js.map +1 -1
  147. package/dist/month-range-picker.d.ts +29 -259
  148. package/dist/month-range-picker.js +8 -6
  149. package/dist/month-range-picker.js.map +1 -1
  150. package/dist/multi-thumb-slider.d.ts +0 -1
  151. package/dist/navigation-menu.d.ts +0 -1
  152. package/dist/number-field.d.ts +2 -2
  153. package/dist/number-field.js +1 -1
  154. package/dist/number-field.js.map +1 -1
  155. package/dist/pagination.d.ts +23 -2
  156. package/dist/pagination.js +6 -1
  157. package/dist/pagination.js.map +1 -1
  158. package/dist/pin-input.d.ts +0 -1
  159. package/dist/pin-input.js +1 -1
  160. package/dist/pin-input.js.map +1 -1
  161. package/dist/popover.d.ts +0 -2
  162. package/dist/popover.js.map +1 -1
  163. package/dist/primitive.d.ts +0 -1
  164. package/dist/primitive.js +8 -4
  165. package/dist/primitive.js.map +1 -1
  166. package/dist/progress.d.ts +148 -0
  167. package/dist/progress.js +110 -0
  168. package/dist/progress.js.map +1 -0
  169. package/dist/quantity-field.d.ts +0 -1
  170. package/dist/radio-group.d.ts +0 -1
  171. package/dist/radio-group.js +1 -1
  172. package/dist/radio-group.js.map +1 -1
  173. package/dist/range-calendar.d.ts +14 -298
  174. package/dist/range-calendar.js +7 -7
  175. package/dist/range-calendar.js.map +1 -1
  176. package/dist/rating.d.ts +0 -1
  177. package/dist/rating.js +10 -1
  178. package/dist/rating.js.map +1 -1
  179. package/dist/reorder.d.ts +1 -2
  180. package/dist/select.d.ts +24 -50
  181. package/dist/select.js +11 -13
  182. package/dist/select.js.map +1 -1
  183. package/dist/slider.d.ts +0 -1
  184. package/dist/spin-button.d.ts +9 -7
  185. package/dist/spin-button.js +17 -4
  186. package/dist/spin-button.js.map +1 -1
  187. package/dist/stepper.d.ts +0 -1
  188. package/dist/stepper.js +19 -2
  189. package/dist/stepper.js.map +1 -1
  190. package/dist/switch.d.ts +0 -1
  191. package/dist/tabs.d.ts +0 -1
  192. package/dist/tabs.js +4 -22
  193. package/dist/tabs.js.map +1 -1
  194. package/dist/tags-input.d.ts +0 -1
  195. package/dist/tags-input.js +18 -5
  196. package/dist/tags-input.js.map +1 -1
  197. package/dist/temporal-provider.d.ts +21 -0
  198. package/dist/temporal-provider.js +30 -0
  199. package/dist/temporal-provider.js.map +1 -0
  200. package/dist/text.d.ts +0 -1
  201. package/dist/text.js +18 -4
  202. package/dist/text.js.map +1 -1
  203. package/dist/time-field.d.ts +2 -3
  204. package/dist/time-field.js +1 -1
  205. package/dist/time-field.js.map +1 -1
  206. package/dist/time-range-field.d.ts +2 -2
  207. package/dist/time-range-field.js +6 -4
  208. package/dist/time-range-field.js.map +1 -1
  209. package/dist/timer.d.ts +0 -1
  210. package/dist/toast.d.ts +11 -2
  211. package/dist/toast.js +22 -9
  212. package/dist/toast.js.map +1 -1
  213. package/dist/toggle-button.d.ts +0 -1
  214. package/dist/toggle-group.d.ts +0 -1
  215. package/dist/toggle-group.js +1 -1
  216. package/dist/toggle-group.js.map +1 -1
  217. package/dist/toolbar.d.ts +0 -1
  218. package/dist/tooltip.d.ts +1 -3
  219. package/dist/tooltip.js.map +1 -1
  220. package/dist/tree-grid.d.ts +0 -1
  221. package/dist/tree-grid.js +62 -8
  222. package/dist/tree-grid.js.map +1 -1
  223. package/dist/tree-view.d.ts +0 -1
  224. package/dist/tree-view.js +51 -10
  225. package/dist/tree-view.js.map +1 -1
  226. package/dist/virtual-core.d.ts +1 -0
  227. package/dist/virtual-core.js +2 -0
  228. package/dist/virtual-core.js.map +1 -0
  229. package/dist/virtual-grid.d.ts +188 -0
  230. package/dist/virtual-grid.js +306 -0
  231. package/dist/virtual-grid.js.map +1 -0
  232. package/dist/virtual-list.d.ts +1 -0
  233. package/dist/virtual-list.js +2 -0
  234. package/dist/virtual-list.js.map +1 -0
  235. package/dist/virtual-masonry.d.ts +198 -0
  236. package/dist/virtual-masonry.js +221 -0
  237. package/dist/virtual-masonry.js.map +1 -0
  238. package/dist/virtual-spatial.d.ts +157 -0
  239. package/dist/virtual-spatial.js +159 -0
  240. package/dist/virtual-spatial.js.map +1 -0
  241. package/dist/window-splitter.d.ts +0 -1
  242. package/dist/year-picker.d.ts +29 -259
  243. package/dist/year-picker.js +8 -6
  244. package/dist/year-picker.js.map +1 -1
  245. package/dist/year-range-picker.d.ts +29 -259
  246. package/dist/year-range-picker.js +8 -6
  247. package/dist/year-range-picker.js.map +1 -1
  248. package/package.json +174 -87
  249. package/dist/accordion.d.ts.map +0 -1
  250. package/dist/alert-dialog.d.ts.map +0 -1
  251. package/dist/calendar.d.ts.map +0 -1
  252. package/dist/carousel.d.ts.map +0 -1
  253. package/dist/cascade-select.d.ts.map +0 -1
  254. package/dist/checkbox-group.d.ts.map +0 -1
  255. package/dist/checkbox.d.ts.map +0 -1
  256. package/dist/color-picker.d.ts.map +0 -1
  257. package/dist/combobox.d.ts.map +0 -1
  258. package/dist/date-field.d.ts.map +0 -1
  259. package/dist/date-picker.d.ts.map +0 -1
  260. package/dist/date-range-field.d.ts.map +0 -1
  261. package/dist/date-range-picker.d.ts.map +0 -1
  262. package/dist/date-time-field.d.ts.map +0 -1
  263. package/dist/date-time-picker.d.ts.map +0 -1
  264. package/dist/date-time-range-picker.d.ts.map +0 -1
  265. package/dist/dialog.d.ts.map +0 -1
  266. package/dist/disclosure.d.ts.map +0 -1
  267. package/dist/drawer.d.ts.map +0 -1
  268. package/dist/editable.d.ts.map +0 -1
  269. package/dist/feed.d.ts.map +0 -1
  270. package/dist/form.d.ts.map +0 -1
  271. package/dist/grid.d.ts.map +0 -1
  272. package/dist/host-provider.d.ts.map +0 -1
  273. package/dist/index.d.ts.map +0 -1
  274. package/dist/internal/collection.d.ts.map +0 -1
  275. package/dist/internal/controlled-state.d.ts.map +0 -1
  276. package/dist/internal/date-picker.d.ts.map +0 -1
  277. package/dist/internal/form-control-inventory.d.ts.map +0 -1
  278. package/dist/internal/form-control.d.ts.map +0 -1
  279. package/dist/internal/native-field.d.ts.map +0 -1
  280. package/dist/internal/native-input.d.ts.map +0 -1
  281. package/dist/internal/part-contract.d.ts.map +0 -1
  282. package/dist/internal/popup.d.ts.map +0 -1
  283. package/dist/internal/presence.d.ts.map +0 -1
  284. package/dist/internal/tabs-context.d.ts.map +0 -1
  285. package/dist/listbox.d.ts.map +0 -1
  286. package/dist/menu-button.d.ts.map +0 -1
  287. package/dist/menu.d.ts.map +0 -1
  288. package/dist/menubar.d.ts.map +0 -1
  289. package/dist/month-picker.d.ts.map +0 -1
  290. package/dist/month-range-picker.d.ts.map +0 -1
  291. package/dist/multi-thumb-slider.d.ts.map +0 -1
  292. package/dist/navigation-menu.d.ts.map +0 -1
  293. package/dist/number-field.d.ts.map +0 -1
  294. package/dist/pagination.d.ts.map +0 -1
  295. package/dist/pin-input.d.ts.map +0 -1
  296. package/dist/popover.d.ts.map +0 -1
  297. package/dist/primitive.d.ts.map +0 -1
  298. package/dist/quantity-field.d.ts.map +0 -1
  299. package/dist/radio-group.d.ts.map +0 -1
  300. package/dist/range-calendar.d.ts.map +0 -1
  301. package/dist/rating.d.ts.map +0 -1
  302. package/dist/reorder.d.ts.map +0 -1
  303. package/dist/select.d.ts.map +0 -1
  304. package/dist/slider.d.ts.map +0 -1
  305. package/dist/spin-button.d.ts.map +0 -1
  306. package/dist/stepper.d.ts.map +0 -1
  307. package/dist/switch.d.ts.map +0 -1
  308. package/dist/tabs.d.ts.map +0 -1
  309. package/dist/tags-input.d.ts.map +0 -1
  310. package/dist/text.d.ts.map +0 -1
  311. package/dist/time-field.d.ts.map +0 -1
  312. package/dist/time-range-field.d.ts.map +0 -1
  313. package/dist/timer.d.ts.map +0 -1
  314. package/dist/toast.d.ts.map +0 -1
  315. package/dist/toggle-button.d.ts.map +0 -1
  316. package/dist/toggle-group.d.ts.map +0 -1
  317. package/dist/toolbar.d.ts.map +0 -1
  318. package/dist/tooltip.d.ts.map +0 -1
  319. package/dist/tree-grid.d.ts.map +0 -1
  320. package/dist/tree-view.d.ts.map +0 -1
  321. package/dist/virtual.d.ts.map +0 -1
  322. package/dist/virtual.js.map +0 -1
  323. package/dist/window-splitter.d.ts.map +0 -1
  324. package/dist/year-picker.d.ts.map +0 -1
  325. package/dist/year-range-picker.d.ts.map +0 -1
@@ -1,17 +1,23 @@
1
- import { type PropType, type SlotsType, type VNodeChild } from 'vue';
2
- import { type CalendarMonthValue, type CalendarViewMode } from '@sectile/dom/date-picker';
3
- import { type DateRange, type DateValue } from '@sectile/dom/date-field';
4
- import { type DateTimeRange, type DateTimeValue } from '@sectile/dom/date-time-field';
1
+ import { type AllowedComponentProps, type Component, type ComponentCustomProps, type PropType, type SlotsType, type VNodeChild, type VNodeProps } from 'vue';
2
+ import { type CalendarPolicies } from '@sectile/dom/temporal/calendar';
3
+ import { type DatePickerOptions, type PickerPositionOptions, type CalendarMonthValue, type CalendarViewMode } from '@sectile/dom/temporal/date-picker';
4
+ import { type DateRangePickerOptions } from '@sectile/dom/temporal/date-range-picker';
5
+ import { type DateTimePickerOptions } from '@sectile/dom/temporal/date-time-picker';
6
+ import { type DateTimeRangePickerOptions } from '@sectile/dom/temporal/date-time-range-picker';
7
+ import { type DateRange, type DateValue } from '@sectile/dom/temporal/date-field';
8
+ import { type DateTimeRange, type DateTimeValue } from '@sectile/dom/temporal/date-time-field';
5
9
  import { type PrimitiveAs } from '../primitive.js';
6
10
  export type PickerKind = 'calendar' | 'date' | 'date-range' | 'date-time' | 'date-time-range';
7
11
  export type PickerValue = DateValue | DateRange | DateTimeValue | DateTimeRange | null;
12
+ export type PickerValueFor<Kind extends PickerKind> = Kind extends 'calendar' | 'date' ? DateValue | null : Kind extends 'date-range' ? DateRange | null : Kind extends 'date-time' ? DateTimeValue | null : DateTimeRange | null;
13
+ export type PickerPoliciesFor<Kind extends PickerKind> = Kind extends 'calendar' ? CalendarPolicies : Kind extends 'date' ? NonNullable<DatePickerOptions['policies']> : Kind extends 'date-range' ? NonNullable<DateRangePickerOptions['policies']> : Kind extends 'date-time' ? NonNullable<DateTimePickerOptions['policies']> : NonNullable<DateTimeRangePickerOptions['policies']>;
8
14
  export type PickerInputPart = 'input' | 'start-input' | 'end-input' | 'date-time-input' | 'date-input' | 'time-input' | 'start-date-time-input' | 'end-date-time-input' | 'start-date-input' | 'end-date-input' | 'start-time-input' | 'end-time-input';
9
15
  export type PickerNavigationUnit = 'week' | 'month' | 'year';
10
16
  export interface PickerYearValue {
11
17
  readonly year: number;
12
18
  }
13
- export interface PickerRootSlotProps {
14
- readonly value: PickerValue;
19
+ export interface PickerRootSlotProps<Value extends PickerValue = PickerValue> {
20
+ readonly value: Value;
15
21
  readonly highlightedValue: DateValue;
16
22
  readonly open: boolean;
17
23
  readonly dates: readonly (readonly DateValue[])[];
@@ -52,6 +58,23 @@ export interface PickerPartProps {
52
58
  readonly as?: PrimitiveAs;
53
59
  readonly asChild?: boolean;
54
60
  }
61
+ export interface PickerPortalProps {
62
+ readonly to?: string | HTMLElement;
63
+ readonly disabled?: boolean;
64
+ readonly defer?: boolean;
65
+ }
66
+ export interface PickerPositionProps {
67
+ readonly position?: boolean;
68
+ readonly side?: PickerPositionOptions['side'];
69
+ readonly align?: PickerPositionOptions['align'];
70
+ readonly sideOffset?: number;
71
+ readonly collisionPadding?: PickerPositionOptions['collisionPadding'];
72
+ readonly collisionBoundary?: PickerPositionOptions['collisionBoundary'];
73
+ readonly avoidCollisions?: boolean;
74
+ readonly hideWhenDetached?: boolean;
75
+ readonly strategy?: PickerPositionOptions['strategy'];
76
+ readonly tracking?: PickerPositionOptions['tracking'];
77
+ }
55
78
  export interface PickerRootConfig {
56
79
  readonly scope?: string;
57
80
  readonly granularity?: 'day' | 'month' | 'year';
@@ -60,9 +83,9 @@ export interface PickerRootConfig {
60
83
  readonly yearPageSize?: number;
61
84
  readonly inline?: boolean;
62
85
  }
63
- export interface PickerRootRuntimeProps {
64
- readonly modelValue?: PickerValue;
65
- readonly defaultValue?: PickerValue;
86
+ export interface PickerRootRuntimeProps<Value extends PickerValue = PickerValue, Policies = Readonly<Record<string, unknown>>> extends PickerPositionProps {
87
+ readonly modelValue?: Value;
88
+ readonly defaultValue?: Value;
66
89
  readonly open?: boolean;
67
90
  readonly defaultOpen?: boolean;
68
91
  readonly highlightedValue?: DateValue;
@@ -73,63 +96,35 @@ export interface PickerRootRuntimeProps {
73
96
  readonly?: boolean;
74
97
  readonly required?: boolean;
75
98
  readonly label?: string;
76
- readonly policies?: Readonly<Record<string, unknown>>;
99
+ readonly policies?: Policies;
77
100
  readonly as?: PrimitiveAs;
78
101
  readonly asChild?: boolean;
79
102
  }
80
- export declare function createPickerRoot(kind: PickerKind, name: string, config?: PickerRootConfig): import("vue").DefineComponent<import("vue").ExtractPropTypes<{
81
- modelValue: {
82
- type: PropType<PickerValue>;
83
- default: undefined;
84
- };
85
- defaultValue: {
86
- type: PropType<PickerValue>;
87
- default: null;
88
- };
89
- open: {
90
- type: BooleanConstructor;
91
- default: undefined;
92
- };
93
- defaultOpen: {
94
- type: BooleanConstructor;
95
- default: boolean;
96
- };
97
- highlightedValue: {
98
- type: PropType<DateValue>;
99
- default: undefined;
100
- };
101
- defaultHighlightedValue: {
102
- type: PropType<DateValue>;
103
- default: undefined;
104
- };
105
- referenceDate: {
106
- type: PropType<DateValue>;
107
- default: undefined;
108
- };
109
- defaultView: {
110
- type: PropType<CalendarViewMode>;
111
- default: CalendarViewMode;
112
- };
113
- disabled: {
114
- type: BooleanConstructor;
115
- default: boolean;
116
- };
117
- readonly: {
118
- type: BooleanConstructor;
119
- default: boolean;
103
+ export type PickerRootPublicProps<Kind extends PickerKind> = PickerRootRuntimeProps<PickerValueFor<Kind>, PickerPoliciesFor<Kind>> & VNodeProps & AllowedComponentProps & ComponentCustomProps & {
104
+ readonly 'onUpdate:modelValue'?: (value: PickerValueFor<Kind>) => unknown;
105
+ readonly 'onUpdate:open'?: (value: boolean) => unknown;
106
+ readonly 'onUpdate:highlightedValue'?: (value: DateValue) => unknown;
107
+ };
108
+ export interface PickerRootComponent<Kind extends PickerKind> {
109
+ new (props: PickerRootPublicProps<Kind>): {
110
+ $props: PickerRootPublicProps<Kind>;
111
+ $slots: {
112
+ default?: (props: PickerRootSlotProps<PickerValueFor<Kind>>) => VNodeChild;
113
+ };
120
114
  };
121
- required: {
122
- type: BooleanConstructor;
123
- default: boolean;
124
- };
125
- label: {
126
- type: StringConstructor;
127
- default: undefined;
128
- };
129
- policies: {
130
- type: PropType<Readonly<Record<string, unknown>>>;
131
- default: undefined;
115
+ }
116
+ export type PickerRootPartPublicProps = PickerPartProps & VNodeProps & AllowedComponentProps & ComponentCustomProps;
117
+ export interface PickerRootPartComponent<Kind extends PickerKind> {
118
+ new (props: PickerRootPartPublicProps): {
119
+ $props: PickerRootPartPublicProps;
120
+ $slots: {
121
+ default?: (props: PickerRootSlotProps<PickerValueFor<Kind>>) => VNodeChild;
122
+ };
132
123
  };
124
+ }
125
+ export declare function specializePickerRootPart<Kind extends PickerKind>(_kind: Kind, component: Component): PickerRootPartComponent<Kind>;
126
+ export declare function createPickerRoot<Kind extends PickerKind>(kind: Kind, name: string, config?: PickerRootConfig): PickerRootComponent<Kind>;
127
+ export declare const PickerTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
133
128
  as: {
134
129
  type: PropType<PrimitiveAs>;
135
130
  default: string;
@@ -138,63 +133,7 @@ export declare function createPickerRoot(kind: PickerKind, name: string, config?
138
133
  type: BooleanConstructor;
139
134
  default: boolean;
140
135
  };
141
- }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
142
- 'update:modelValue': (_value: PickerValue) => boolean;
143
- 'update:open': (_value: boolean) => boolean;
144
- 'update:highlightedValue': (_value: DateValue) => boolean;
145
- }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
146
- modelValue: {
147
- type: PropType<PickerValue>;
148
- default: undefined;
149
- };
150
- defaultValue: {
151
- type: PropType<PickerValue>;
152
- default: null;
153
- };
154
- open: {
155
- type: BooleanConstructor;
156
- default: undefined;
157
- };
158
- defaultOpen: {
159
- type: BooleanConstructor;
160
- default: boolean;
161
- };
162
- highlightedValue: {
163
- type: PropType<DateValue>;
164
- default: undefined;
165
- };
166
- defaultHighlightedValue: {
167
- type: PropType<DateValue>;
168
- default: undefined;
169
- };
170
- referenceDate: {
171
- type: PropType<DateValue>;
172
- default: undefined;
173
- };
174
- defaultView: {
175
- type: PropType<CalendarViewMode>;
176
- default: CalendarViewMode;
177
- };
178
- disabled: {
179
- type: BooleanConstructor;
180
- default: boolean;
181
- };
182
- readonly: {
183
- type: BooleanConstructor;
184
- default: boolean;
185
- };
186
- required: {
187
- type: BooleanConstructor;
188
- default: boolean;
189
- };
190
- label: {
191
- type: StringConstructor;
192
- default: undefined;
193
- };
194
- policies: {
195
- type: PropType<Readonly<Record<string, unknown>>>;
196
- default: undefined;
197
- };
136
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
198
137
  as: {
199
138
  type: PropType<PrimitiveAs>;
200
139
  default: string;
@@ -203,30 +142,13 @@ export declare function createPickerRoot(kind: PickerKind, name: string, config?
203
142
  type: BooleanConstructor;
204
143
  default: boolean;
205
144
  };
206
- }>> & Readonly<{
207
- "onUpdate:highlightedValue"?: (_value: DateValue) => any;
208
- "onUpdate:modelValue"?: (_value: PickerValue) => any;
209
- "onUpdate:open"?: (_value: boolean) => any;
210
- }>, {
211
- modelValue: PickerValue;
212
- defaultValue: PickerValue;
213
- open: boolean;
214
- defaultOpen: boolean;
215
- highlightedValue: DateValue;
216
- defaultHighlightedValue: DateValue;
217
- referenceDate: DateValue;
218
- defaultView: CalendarViewMode;
219
- disabled: boolean;
220
- readonly: boolean;
221
- required: boolean;
222
- label: string;
223
- policies: Readonly<Record<string, unknown>>;
145
+ }>> & Readonly<{}>, {
224
146
  as: PrimitiveAs;
225
147
  asChild: boolean;
226
148
  }, SlotsType<{
227
149
  default: (props: PickerRootSlotProps) => VNodeChild;
228
150
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
229
- export declare const PickerTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
151
+ export declare const PickerAnchor: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
230
152
  as: {
231
153
  type: PropType<PrimitiveAs>;
232
154
  default: string;
@@ -247,9 +169,7 @@ export declare const PickerTrigger: import("vue").DefineComponent<import("vue").
247
169
  }>> & Readonly<{}>, {
248
170
  as: PrimitiveAs;
249
171
  asChild: boolean;
250
- }, SlotsType<{
251
- default: (props: PickerRootSlotProps) => VNodeChild;
252
- }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
172
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
253
173
  export declare const PickerContent: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
254
174
  as: {
255
175
  type: PropType<PrimitiveAs>;
@@ -274,6 +194,37 @@ export declare const PickerContent: import("vue").DefineComponent<import("vue").
274
194
  }, SlotsType<{
275
195
  default: (props: PickerRootSlotProps) => VNodeChild;
276
196
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
197
+ export declare const PickerPortal: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
198
+ to: {
199
+ type: PropType<string | HTMLElement>;
200
+ default: undefined;
201
+ };
202
+ disabled: {
203
+ type: BooleanConstructor;
204
+ default: boolean;
205
+ };
206
+ defer: {
207
+ type: BooleanConstructor;
208
+ default: boolean;
209
+ };
210
+ }>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
211
+ to: {
212
+ type: PropType<string | HTMLElement>;
213
+ default: undefined;
214
+ };
215
+ disabled: {
216
+ type: BooleanConstructor;
217
+ default: boolean;
218
+ };
219
+ defer: {
220
+ type: BooleanConstructor;
221
+ default: boolean;
222
+ };
223
+ }>> & Readonly<{}>, {
224
+ to: string | HTMLElement;
225
+ disabled: boolean;
226
+ defer: boolean;
227
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
277
228
  export declare const PickerGrid: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
278
229
  as: {
279
230
  type: PropType<PrimitiveAs>;
@@ -546,4 +497,3 @@ export declare function createPickerViewTrigger(view: CalendarViewMode, name: st
546
497
  }, SlotsType<{
547
498
  default: (props: PickerRootSlotProps) => VNodeChild;
548
499
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
549
- //# sourceMappingURL=date-picker.d.ts.map
@@ -1,17 +1,22 @@
1
- import { Fragment, computed, defineComponent, h, inject, mergeProps, onBeforeUnmount, onMounted, nextTick, provide, shallowRef, watch, } from 'vue';
2
- import { createCalendar } from '@sectile/dom/calendar';
3
- import { createDatePicker, createCalendarMonth, createCalendarYear, isCalendarValueAvailable } from '@sectile/dom/date-picker';
4
- import { createDateRangePicker } from '@sectile/dom/date-range-picker';
5
- import { createDateTimePicker } from '@sectile/dom/date-time-picker';
6
- import { createDateTimeRangePicker } from '@sectile/dom/date-time-range-picker';
7
- import { formatDateValue, parseDateValue } from '@sectile/dom/date-field';
8
- import { formatDateTimeValue } from '@sectile/dom/date-time-field';
9
- import { formatTimeValue } from '@sectile/dom/time-field';
1
+ import { Fragment, Teleport, computed, defineComponent, h, inject, mergeProps, onBeforeUnmount, onMounted, nextTick, provide, shallowRef, watch, } from 'vue';
2
+ import { createCalendar } from '@sectile/dom/temporal/calendar';
3
+ import { createDatePicker, createCalendarMonth, createCalendarYear, isCalendarValueAvailable } from '@sectile/dom/temporal/date-picker';
4
+ import { createDateRangePicker } from '@sectile/dom/temporal/date-range-picker';
5
+ import { createDateTimePicker } from '@sectile/dom/temporal/date-time-picker';
6
+ import { createDateTimeRangePicker } from '@sectile/dom/temporal/date-time-range-picker';
7
+ import { formatDateValue, parseDateValue } from '@sectile/dom/temporal/date-field';
8
+ import { formatDateTimeValue } from '@sectile/dom/temporal/date-time-field';
9
+ import { formatTimeValue } from '@sectile/dom/temporal/time-field';
10
10
  import { hiddenInputSubmissionCapabilities, useCompositeFormControl, } from './form-control.js';
11
11
  import { Primitive } from '../primitive.js';
12
12
  import { useControlledStateInvariant } from './controlled-state.js';
13
- import { useHostReferenceDate } from '../host-provider.js';
13
+ import { useHostPortalTarget } from '../host-provider.js';
14
+ import { useTemporalReferenceDate } from '../temporal-provider.js';
15
+ export function specializePickerRootPart(_kind, component) {
16
+ return component;
17
+ }
14
18
  const key = Symbol('SectileDatePickerRoot');
19
+ const noPendingPickerValue = Symbol('no-pending-picker-value');
15
20
  const partProps = { as: { type: [String, Object, Function], default: 'div' }, asChild: { type: Boolean, default: false } };
16
21
  export function createPickerRoot(kind, name, config = {}) {
17
22
  const scope = config.scope ?? kind;
@@ -20,7 +25,7 @@ export function createPickerRoot(kind, name, config = {}) {
20
25
  const defaultOpen = config.defaultOpen ?? false;
21
26
  const yearPageSize = config.yearPageSize ?? 12;
22
27
  const inline = config.inline ?? false;
23
- return defineComponent({
28
+ const component = defineComponent({
24
29
  name, inheritAttrs: false,
25
30
  props: {
26
31
  modelValue: { type: Object, default: undefined }, defaultValue: { type: Object, default: null },
@@ -30,36 +35,50 @@ export function createPickerRoot(kind, name, config = {}) {
30
35
  defaultView: { type: String, default: defaultView },
31
36
  disabled: { type: Boolean, default: false }, readonly: { type: Boolean, default: false }, required: { type: Boolean, default: false },
32
37
  label: { type: String, default: undefined }, policies: { type: Object, default: undefined },
38
+ position: { type: Boolean, default: true },
39
+ side: { type: String, default: 'bottom' },
40
+ align: { type: String, default: 'center' },
41
+ sideOffset: { type: Number, default: 8 },
42
+ collisionPadding: { type: [Number, Object], default: 8 },
43
+ collisionBoundary: { type: [String, Object], default: undefined },
44
+ avoidCollisions: { type: Boolean, default: true }, hideWhenDetached: { type: Boolean, default: true },
45
+ strategy: { type: String, default: 'absolute' },
46
+ tracking: { type: String, default: 'events' },
33
47
  as: { type: [String, Object, Function], default: 'div' }, asChild: { type: Boolean, default: false },
34
48
  },
35
49
  emits: { 'update:modelValue': (_value) => true, 'update:open': (_value) => true, 'update:highlightedValue': (_value) => true },
36
50
  slots: Object,
37
51
  setup(props, { emit, slots }) {
52
+ const runtimeProps = props;
38
53
  const elements = new Map();
39
54
  const connection = shallowRef();
40
- const hostReferenceDate = useHostReferenceDate();
41
- const referenceDate = computed(() => props.referenceDate ?? hostReferenceDate.value);
55
+ const hostReferenceDate = useTemporalReferenceDate();
56
+ const referenceDate = computed(() => runtimeProps.referenceDate ?? hostReferenceDate.value);
42
57
  const inlineTrigger = typeof document === 'undefined' || !inline || kind === 'calendar' ? undefined : document.createElement('button');
43
- const localValue = shallowRef(props.modelValue !== undefined ? props.modelValue : props.defaultValue);
44
- const localOpen = shallowRef(props.open ?? props.defaultOpen);
45
- const localHighlight = shallowRef(props.highlightedValue ?? props.defaultHighlightedValue ?? dateOf(localValue.value) ?? referenceDate.value);
58
+ const localValue = shallowRef(runtimeProps.modelValue !== undefined ? runtimeProps.modelValue : runtimeProps.defaultValue);
59
+ const localOpen = shallowRef(runtimeProps.open ?? runtimeProps.defaultOpen);
60
+ const localHighlight = shallowRef(runtimeProps.highlightedValue ?? runtimeProps.defaultHighlightedValue ?? dateOf(localValue.value) ?? referenceDate.value);
46
61
  const yearPageStart = shallowRef(localHighlight.value.year - Math.floor(yearPageSize / 2));
47
62
  const dates = shallowRef(monthFor(localHighlight.value));
48
63
  const months = shallowRef(yearFor(localHighlight.value.year));
49
64
  const years = shallowRef(yearsFrom(yearPageStart.value, yearPageSize));
50
65
  const localView = shallowRef(Object.freeze({ year: localHighlight.value.year, month: localHighlight.value.month }));
51
- const localViewMode = shallowRef(props.defaultView);
66
+ const localViewMode = shallowRef(runtimeProps.defaultView);
52
67
  const controlled = {
53
- value: useControlledStateInvariant(`${kind}PickerRoot`, 'modelValue', () => props.modelValue),
54
- open: useControlledStateInvariant(`${kind}PickerRoot`, 'open', () => props.open),
55
- highlighted: useControlledStateInvariant(`${kind}PickerRoot`, 'highlightedValue', () => props.highlightedValue),
68
+ value: useControlledStateInvariant(`${kind}PickerRoot`, 'modelValue', () => runtimeProps.modelValue),
69
+ open: useControlledStateInvariant(`${kind}PickerRoot`, 'open', () => runtimeProps.open),
70
+ highlighted: useControlledStateInvariant(`${kind}PickerRoot`, 'highlightedValue', () => runtimeProps.highlightedValue),
56
71
  };
72
+ const pendingValue = shallowRef(noPendingPickerValue);
57
73
  const state = computed(() => {
58
- const highlighted = props.highlightedValue ?? localHighlight.value;
74
+ const highlighted = runtimeProps.highlightedValue ?? localHighlight.value;
75
+ const value = controlled.value && pendingValue.value !== noPendingPickerValue
76
+ ? pendingValue.value
77
+ : runtimeProps.modelValue !== undefined ? runtimeProps.modelValue : localValue.value;
59
78
  return Object.freeze({
60
- value: props.modelValue !== undefined ? props.modelValue : localValue.value,
61
- highlightedValue: highlighted, open: props.open ?? localOpen.value, dates: dates.value, months: months.value, years: years.value,
62
- view: localView.value, viewMode: localViewMode.value, disabled: props.disabled, readonly: props.readonly,
79
+ value,
80
+ highlightedValue: highlighted, open: runtimeProps.open ?? localOpen.value, dates: dates.value, months: months.value, years: years.value,
81
+ view: localView.value, viewMode: localViewMode.value, disabled: runtimeProps.disabled, readonly: runtimeProps.readonly,
63
82
  });
64
83
  });
65
84
  useCompositeFormControl({
@@ -68,7 +87,7 @@ export function createPickerRoot(kind, name, config = {}) {
68
87
  submissions: () => pickerFormSubmissions(elements, kind),
69
88
  });
70
89
  const periodAvailable = (value) => {
71
- const policies = props.policies;
90
+ const policies = runtimeProps.policies;
72
91
  if ('month' in value)
73
92
  return monthAvailable(value, policies);
74
93
  return Array.from({ length: 12 }, (_entry, index) => index + 1)
@@ -113,19 +132,35 @@ export function createPickerRoot(kind, name, config = {}) {
113
132
  if (content === undefined || grid === undefined || (kind !== 'calendar' && trigger === undefined))
114
133
  return;
115
134
  const base = {
116
- root: content, grid, disabled: props.disabled, readOnly: props.readonly, required: props.required,
135
+ root: content, grid, disabled: runtimeProps.disabled, readOnly: runtimeProps.readonly, required: runtimeProps.required,
117
136
  referenceDate: referenceDate.value,
118
- ...(props.label === undefined ? {} : { label: props.label }), ...(props.policies === undefined ? {} : { policies: props.policies }),
119
- ...(controlled.value ? { value: props.modelValue } : { defaultValue: localValue.value }),
120
- ...(controlled.highlighted ? { highlightedValue: props.highlightedValue } : { defaultHighlightedValue: localHighlight.value }),
121
- onValueChange: (value) => { localValue.value = value; emit('update:modelValue', value); },
137
+ ...(runtimeProps.label === undefined ? {} : { label: runtimeProps.label }), ...(runtimeProps.policies === undefined ? {} : { policies: runtimeProps.policies }),
138
+ ...(controlled.value ? { value: runtimeProps.modelValue } : { defaultValue: localValue.value }),
139
+ ...(controlled.highlighted ? { highlightedValue: runtimeProps.highlightedValue } : { defaultHighlightedValue: localHighlight.value }),
140
+ onValueChange: (value) => {
141
+ localValue.value = value;
142
+ if (controlled.value)
143
+ pendingValue.value = value;
144
+ emit('update:modelValue', value);
145
+ },
122
146
  onHighlightedValueChange: (value) => { localHighlight.value = value; emit('update:highlightedValue', value); },
123
147
  onUpdate: refresh,
124
148
  };
125
149
  if (kind !== 'calendar') {
126
150
  base['trigger'] = trigger;
151
+ const anchor = elements.get('anchor');
152
+ if (anchor !== undefined)
153
+ base['anchor'] = anchor;
154
+ Object.assign(base, {
155
+ position: runtimeProps.position, side: runtimeProps.side, align: runtimeProps.align, sideOffset: runtimeProps.sideOffset,
156
+ collisionPadding: runtimeProps.collisionPadding, avoidCollisions: runtimeProps.avoidCollisions,
157
+ hideWhenDetached: runtimeProps.hideWhenDetached, strategy: runtimeProps.strategy,
158
+ tracking: runtimeProps.tracking,
159
+ });
160
+ if (runtimeProps.collisionBoundary !== undefined)
161
+ base['collisionBoundary'] = runtimeProps.collisionBoundary;
127
162
  if (controlled.open)
128
- base['open'] = props.open;
163
+ base['open'] = runtimeProps.open;
129
164
  else
130
165
  base['defaultOpen'] = localOpen.value;
131
166
  base['onOpenChange'] = (value) => { localOpen.value = value; emit('update:open', value); };
@@ -142,11 +177,23 @@ export function createPickerRoot(kind, name, config = {}) {
142
177
  : kind === 'date-range' ? createDateRangePicker(base)
143
178
  : kind === 'date-time' ? createDateTimePicker(base) : createDateTimeRangePicker(base);
144
179
  connection.value = created;
145
- if (props.defaultView !== 'month')
146
- connection.value.handleEvent({ type: 'set-view-mode', value: props.defaultView });
180
+ if (runtimeProps.defaultView !== 'month')
181
+ connection.value.handleEvent({ type: 'set-view-mode', value: runtimeProps.defaultView });
147
182
  refreshCells();
148
183
  refresh();
149
184
  };
185
+ let mounted = false;
186
+ let connectQueued = false;
187
+ const scheduleConnect = () => {
188
+ if (!mounted || connectQueued)
189
+ return;
190
+ connectQueued = true;
191
+ void nextTick(() => {
192
+ connectQueued = false;
193
+ if (mounted)
194
+ connect();
195
+ });
196
+ };
150
197
  const moveBy = (unit, delta) => {
151
198
  const direction = delta < 0 ? -1 : 1;
152
199
  for (let index = 0; index < Math.abs(delta); index += 1) {
@@ -166,10 +213,16 @@ export function createPickerRoot(kind, name, config = {}) {
166
213
  };
167
214
  provide(key, {
168
215
  kind, scope, granularity, inline, state, periodAvailable,
169
- register: (part, element) => { if (element === undefined)
170
- elements.delete(part);
171
- else
172
- elements.set(part, element); },
216
+ position: computed(() => runtimeProps.position), strategy: computed(() => runtimeProps.strategy),
217
+ register: (part, element) => {
218
+ if (elements.get(part) === element || (element === undefined && !elements.has(part)))
219
+ return;
220
+ if (element === undefined)
221
+ elements.delete(part);
222
+ else
223
+ elements.set(part, element);
224
+ scheduleConnect();
225
+ },
173
226
  registerCell: (element, value) => connection.value?.setCellAttributes(element, value),
174
227
  move: (unit, direction) => {
175
228
  const repetitions = granularity === 'year' && unit === 'year' ? yearPageSize : 1;
@@ -223,22 +276,37 @@ export function createPickerRoot(kind, name, config = {}) {
223
276
  selectMonth,
224
277
  selectYear,
225
278
  });
226
- onMounted(connect);
227
- onBeforeUnmount(() => connection.value?.disconnect());
228
- watch([() => props.disabled, () => props.readonly, () => props.required, () => props.label, () => props.policies], connect);
279
+ onMounted(() => {
280
+ mounted = true;
281
+ connect();
282
+ });
283
+ onBeforeUnmount(() => {
284
+ mounted = false;
285
+ connectQueued = false;
286
+ connection.value?.disconnect();
287
+ connection.value = undefined;
288
+ });
289
+ watch([
290
+ () => runtimeProps.disabled, () => runtimeProps.readonly, () => runtimeProps.required, () => runtimeProps.label, () => runtimeProps.policies,
291
+ () => runtimeProps.position, () => runtimeProps.side, () => runtimeProps.align, () => runtimeProps.sideOffset,
292
+ () => runtimeProps.collisionPadding, () => runtimeProps.collisionBoundary, () => runtimeProps.avoidCollisions,
293
+ () => runtimeProps.hideWhenDetached, () => runtimeProps.strategy, () => runtimeProps.tracking,
294
+ ], connect);
229
295
  watch(referenceDate, (value) => {
230
- if (props.highlightedValue === undefined
231
- && props.defaultHighlightedValue === undefined
232
- && dateOf(props.modelValue ?? props.defaultValue) === null)
296
+ if (runtimeProps.highlightedValue === undefined
297
+ && runtimeProps.defaultHighlightedValue === undefined
298
+ && dateOf(runtimeProps.modelValue ?? runtimeProps.defaultValue) === null)
233
299
  localHighlight.value = value;
234
300
  connect();
235
301
  });
236
- watch([() => props.modelValue, () => props.open, () => props.highlightedValue], () => {
302
+ watch([() => runtimeProps.modelValue, () => runtimeProps.open, () => runtimeProps.highlightedValue], (values, previousValues) => {
237
303
  if (connection.value === undefined)
238
304
  return;
305
+ if (values[0] !== previousValues[0])
306
+ pendingValue.value = noPendingPickerValue;
239
307
  const result = connection.value.syncControlledValues({
240
- ...(controlled.value ? { value: props.modelValue } : {}), ...(kind !== 'calendar' && controlled.open ? { open: props.open } : {}),
241
- ...(controlled.highlighted ? { highlightedValue: props.highlightedValue } : {}),
308
+ ...(controlled.value ? { value: runtimeProps.modelValue } : {}), ...(kind !== 'calendar' && controlled.open ? { open: runtimeProps.open } : {}),
309
+ ...(controlled.highlighted ? { highlightedValue: runtimeProps.highlightedValue } : {}),
242
310
  });
243
311
  if (!result.ok)
244
312
  throw new TypeError(result.error?.message ?? 'Could not synchronize picker values.');
@@ -249,8 +317,9 @@ export function createPickerRoot(kind, name, config = {}) {
249
317
  };
250
318
  },
251
319
  });
320
+ return component;
252
321
  }
253
- export const PickerTrigger = defineComponent({
322
+ export const PickerTrigger = /* @__PURE__ */ defineComponent({
254
323
  name: 'SectilePickerTrigger', inheritAttrs: false,
255
324
  props: { as: { type: [String, Object, Function], default: 'button' }, asChild: { type: Boolean, default: false } },
256
325
  slots: Object,
@@ -263,7 +332,17 @@ export const PickerTrigger = defineComponent({
263
332
  }), { default: () => slots['default']?.(root.state.value) });
264
333
  },
265
334
  });
266
- export const PickerContent = defineComponent({
335
+ export const PickerAnchor = /* @__PURE__ */ defineComponent({
336
+ name: 'SectilePickerAnchor', inheritAttrs: false, props: partProps,
337
+ setup(props, { attrs, slots }) {
338
+ const root = useRoot('PickerAnchor');
339
+ return () => h(Primitive, mergeProps(attrs, {
340
+ as: props.as, asChild: props.asChild, elementRef: (node) => root.register('anchor', node instanceof HTMLElement ? node : undefined),
341
+ 'data-scope': root.scope, 'data-part': 'anchor',
342
+ }), slots);
343
+ },
344
+ });
345
+ export const PickerContent = /* @__PURE__ */ defineComponent({
267
346
  name: 'SectilePickerContent', inheritAttrs: false, props: partProps,
268
347
  slots: Object,
269
348
  setup(props, { attrs, slots }) {
@@ -271,10 +350,25 @@ export const PickerContent = defineComponent({
271
350
  return () => h(Primitive, mergeProps(attrs, {
272
351
  as: props.as, asChild: props.asChild, elementRef: (node) => root.register('content', node instanceof HTMLElement ? node : undefined),
273
352
  role: root.inline ? 'group' : 'dialog', 'aria-modal': root.inline ? undefined : 'false', hidden: root.inline ? false : !root.state.value.open, 'data-scope': root.scope, 'data-part': 'content', 'data-state': root.state.value.open ? 'open' : 'closed',
353
+ style: !root.inline && root.position.value ? { position: root.strategy.value } : undefined,
274
354
  }), { default: () => slots['default']?.(root.state.value) });
275
355
  },
276
356
  });
277
- export const PickerGrid = defineComponent({
357
+ export const PickerPortal = /* @__PURE__ */ defineComponent({
358
+ name: 'SectilePickerPortal', inheritAttrs: false,
359
+ props: {
360
+ to: { type: [String, Object], default: undefined },
361
+ disabled: { type: Boolean, default: false }, defer: { type: Boolean, default: false },
362
+ },
363
+ setup(props, { slots }) {
364
+ useRoot('PickerPortal');
365
+ const portalTarget = useHostPortalTarget();
366
+ return () => h(Teleport, {
367
+ to: props.to ?? portalTarget.value ?? 'body', disabled: props.disabled, defer: props.defer,
368
+ }, slots['default']?.());
369
+ },
370
+ });
371
+ export const PickerGrid = /* @__PURE__ */ defineComponent({
278
372
  name: 'SectilePickerGrid', inheritAttrs: false, props: partProps,
279
373
  slots: Object,
280
374
  setup(props, { attrs, slots }) {
@@ -285,7 +379,7 @@ export const PickerGrid = defineComponent({
285
379
  }), { default: () => slots['default']?.(root.state.value) });
286
380
  },
287
381
  });
288
- export const PickerCell = defineComponent({
382
+ export const PickerCell = /* @__PURE__ */ defineComponent({
289
383
  name: 'SectilePickerCell', inheritAttrs: false,
290
384
  props: { value: { type: Object, required: true }, as: { type: [String, Object, Function], default: 'button' }, asChild: { type: Boolean, default: false } },
291
385
  slots: Object,
@@ -365,8 +459,8 @@ export function createPickerYearCell(part = 'year-cell', name = 'SectilePickerYe
365
459
  },
366
460
  });
367
461
  }
368
- export const PickerMonthCell = createPickerMonthCell();
369
- export const PickerYearCell = createPickerYearCell();
462
+ export const PickerMonthCell = /* @__PURE__ */ createPickerMonthCell();
463
+ export const PickerYearCell = /* @__PURE__ */ createPickerYearCell();
370
464
  export function createPickerInput(part, name, type = 'text') {
371
465
  return defineComponent({
372
466
  name, inheritAttrs: false,